Hallo Leute,
ich bastle seit geraumer Zeit an meinem Arduino-Projekt herum und bin jetzt in einer Sackgasse gelandet in der ich nicht so richtig weiter komme. Deswegen brauche ich euren Rat.
Zum Projekt:
Ich möchte vier 7Seg-Anzeigen über vier ULN2803A und diese über vier 74HC595N ansteuert. (Schaltplan im Anhang)
Ich habe die halbe Schaltung (also nur 2x7Segment) auf einen Breadboard aufgebaut und mit diesem Code getestet.
int taktPin=8; //SH_CP
int speicherPin=9; //ST_CP
int datenPin=10; //DS
void setup(){
pinMode(taktPin, OUTPUT);
pinMode(speicherPin, OUTPUT);
pinMode(datenPin, OUTPUT);
}
void loop(){
for (int wert=0; wert<65536; wert++){
sendeBytes(wert);
}}
void sendeBytes(int wert){
digitalWrite(speicherPin, LOW);
shiftOut(datenPin, taktPin, MSBFIRST,wert >> 8);
shiftOut(datenPin, taktPin, MSBFIRST,wert & 255);
digitalWrite(speicherPin, HIGH);
delay(20);
}
Jedes Segment der 16 Segmente wurde angesteuert. Schaltung ist also korrekt!
Problem:
Ich möchte Zahlen und Buchstaben auf dem Display darstellen. Deswegen habe ich mir für den Anfang eine 8Bit Wahrheitstabelle erstellt um die passende Dezimal- und Binärzahl für die Zahl auf der 7Segment zu ermitteln.
Bsp: 0 auf ersten 7Seg = 00111111 in Binär = 63 Dezimal
Jetzt habe ich eine 3 auf die 1. 7Seg-Anzeige gebracht (quasi die 1er Stelle).
Das hat auch funktioniert.
Jetzt möchte ich gerne noch eine 1 auf die 2. 7Seg-Anz. (10er Stelle) bringen.
Das funktioniert nicht! Hier der Code:
int taktPin=8; //SH_CP
int speicherPin=9; //ST_CP
int datenPin=10; //DS
int zahlen[10]={63,6,91,79,102,109,125,7,127,111}; //Zahlen für 7Seg 0,1,2,3,4,5,6,7,8,9,
int buchstaben[5]={119,118,57,118,56}; //Buchstaben für 7Seg A,B,C,H,L
void setup(){
pinMode(taktPin, OUTPUT);
pinMode(speicherPin, OUTPUT);
pinMode(datenPin, OUTPUT);
}
void loop(){
digitalWrite(speicherPin, LOW);
shiftOut(datenPin, taktPin, MSBFIRST,zahlen[2]>>8);
shiftOut(datenPin, taktPin, MSBFIRST,zahlen[4]);
digitalWrite(speicherPin, HIGH);
delay(250);
}
Frage 1: Was mach ich falsch? Wo ist mein Denkfehler?
Frage 2: Muss ich mir eine 16Bit Wahrheitstabelle (später 32Bit) anlegen und mir den Wert heraussuchen der für 13 auf zwei 7Seg steht? Das wären dann aber 89 Zahlen (später 9989) die ich mir neu suchen müsste.
Frage 3: Kann ich nicht einfach, jedes Byte an die Stelle (1er, 10er, 100er, 1000er) senden wo es hin soll?
Bsp: Byte für 3 gehe zum 1.Register und Byte für 1 gehe zum 2.Register
Frage 4: Oder, kann mir nicht die Dezimale 6 und die Dezimale 79 zusammenrechnen sodass am Ende eine 13 auf der 7Seg steht?
Danke