Atmega328 und 4Digit 7 Segment Ghost blinkt!

Sep 13 2020

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

4 Gerben Sep 13 2020 at 20:37

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.