Hallo Leute,
ich bin grade dabei ein wenig mit Schieberegistern zu spielen. Nach erfolgreichen Tests mit einem Schieberegister wollte ich mich mal an eine Kaskade von 74HC595ern ranwagen. Ich habe also alles nach diesem Schaltplan aufgebaut und nach dem Text muss man die Schieberegister ansteuern, als wäre dort ein 16 Bit Schieberegister. Hinter den Schieberegistern ist jeweils eine 7-Segmentanzeige. Jetzt dachte ich ich könnte meinen bisherigen Code um eine for-Schleife erweitern, damit ich auf beiden 7-Segmentanzeigen erst einmal die gleiche Zahl bekomme, aber die zweite 7-Segmentanzeige zeigt erst einmal gar nichts an, die erste funktioniert ohne Probleme! Hier ist erst einmal mein Code, vllt. habe ich auch nur einen Denkfehler drin oO
Der Code sollte also einfach nur die gleiche Zahl auf beiden 7-Segmentanzeigen darstellen und das durch eine Kaskade von zwei 74HC595ern. Vielleicht könnt ihr mir ja helfen.
MfG Jawaiica
ich bin grade dabei ein wenig mit Schieberegistern zu spielen. Nach erfolgreichen Tests mit einem Schieberegister wollte ich mich mal an eine Kaskade von 74HC595ern ranwagen. Ich habe also alles nach diesem Schaltplan aufgebaut und nach dem Text muss man die Schieberegister ansteuern, als wäre dort ein 16 Bit Schieberegister. Hinter den Schieberegistern ist jeweils eine 7-Segmentanzeige. Jetzt dachte ich ich könnte meinen bisherigen Code um eine for-Schleife erweitern, damit ich auf beiden 7-Segmentanzeigen erst einmal die gleiche Zahl bekomme, aber die zweite 7-Segmentanzeige zeigt erst einmal gar nichts an, die erste funktioniert ohne Probleme! Hier ist erst einmal mein Code, vllt. habe ich auch nur einen Denkfehler drin oO
Code:
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/delay.h>
#define SIN PB0
#define SCK PB1
#define SCL PB2
#define RCK PB3
const uint8_t iNumbers[] PROGMEM = {0b01111110, 0b00001100, 0b10110110, 0b10011110, 0b11001100, 0b11011010, 0b11111010, 0b00001110, 0b11111110, 0b11011110,};
void Init595() {
DDRB = 0x0F;
PORTB |= (1<<SCL);
}
void WriteNumber(uint8_t Number, uint8_t Displays) {
uint8_t Value = pgm_read_byte(&iNumbers[Number]);
for(uint8_t Displaycounter = 0; Displaycounter < Displays; Displaycounter++) {
for(uint8_t Bitcounter = 8; Bitcounter > 0; Bitcounter--) {
uint8_t newValue = Value & (1<<Bitcounter);
if(newValue != 0) {
PORTB |= (1<<SIN);
} else {
PORTB &= ~(1<<SIN);
}
PORTB |= (1<<SCK);
PORTB &= ~(1<<SCK);
}
}
PORTB |= (1<<RCK);
PORTB &= ~(1<<RCK);
}
int main(void) {
Init595();
WriteNumber(5,2);
while(1) {
}
return 0;
}
Der Code sollte also einfach nur die gleiche Zahl auf beiden 7-Segmentanzeigen darstellen und das durch eine Kaskade von zwei 74HC595ern. Vielleicht könnt ihr mir ja helfen.
MfG Jawaiica