Atmega328 und 4Digit 7 Segment Ghost blinkt!
Ich habe 4 7Seg-LEDs (CC) mit NPN-Transistoren an der Kathode jeder Ziffer angeschlossen. Ich verwende ein 74HC595-Schieberegister, das auf ziemlich übliche Weise in der Schaltung angeschlossen ist. Der Code, den ich ausführe, ist der grundlegende Scan-Code für das 7seg. Das Problem ist, dass ich die gescannten Zahlen auch auf anderen LED-Ziffern sehe. Anbei das Bild. Ich nenne sie "Geister". Die von mir verwendete Schaltung hat einen Atmega328 mit einem internen 8-MHz-Osc. Die Widerstände an den Segmenten sind 220 Ohm und 4 BC547 an den Kathoden der Ziffern mit 1 kOhm Widerständen an ihrer Basis.
unten ist der Code:
void loop () {
cathode_high (); // Leere den Bildschirm
break_number (number);
display_number ();
Verzögerung (1);
}}
void break_number (int num) {// trenne die eingegebene Nummer in 4 einzelne Ziffern
first_digit = num / 1000;
Ziffern [0] = first_digit;
int first_left = num - (first_digit * 1000);
second_digit = first_left / 100;
Ziffern [1] = second_digit;
int second_left = first_left - (second_digit * 100);
dritte_Ziffer = zweite_Links / 10;
Ziffern [2] = dritte Ziffer;
4th_digit = second_left - (Third_digit * 10);
Ziffern [3] = vierte Ziffer;
}}
void display_number () {// scannen
cathode_high ();
digitalWrite (Latch, LOW);
shiftOut (Daten, clk, LSBFIRST, Zahlen [Ziffern [Zählung]]);
digitalWrite (CAS [Anzahl], HOCH);
digitalWrite (Latch, HIGH);
count ++;
if (count == 4) {
count = 0;
}}
}}
void cathode_high () {// Alle 4 Ziffern ausschalten
digitalWrite (CA_1, LOW);
digitalWrite (CA_2, LOW);
digitalWrite (CA_3, LOW);
digitalWrite (CA_4, LOW);
}}
Jede Hilfe wäre sehr dankbar. Vielen Dank im Voraus!
Antworten
Sie ändern die Kathoden (Ziffern), bevor Sie die neuen Daten einrasten. Für eine kurze Sekunde werden die Daten für die vorherigen Ziffern auf der aktuellen Ziffer angezeigt.
Tauschen digitalWrite(CAS[count], HIGH);und digitalWrite(latch, HIGH);sollte das beheben.