Big 7-Segment Anzeige mit Arduino UNO ansteuern

Gast #4469835
Lesenswert?

Hallo alle zusammen,
Ich habe vor einiger Zeit ein 4-stellige 7-Segmentanzeige(Counter) mit 
dem Arduino UNO gebastelt. Leider sind mir die Anschlüsse irgendwann mal 
ausgegangen so das ich den UNO mit Schieberegistern erweitert habe. Der 
Nachteil ist nun das die Anzeige flimmert. Um eine steuerung mit PWM zu 
umgehen möchte ich mit einen BCD Decoder die Schaltung realisieren.
Zu dem benötigt die Anzeige ca. 6.9V bei 20mA. Also habe ich mir gedacht 
ich benutze als Decoder den 4543 und für die gemeinsamme Anode der 
Anzeige einen ULN2803 zu verbauen. Aber bereits nach zwei Anschlüssen 
fängt der 4543 an zu "kochen".
Also habe ich mir gedacht ich setze  einen UDN2981 zwichen die Ausgänge 
des Decoders und der 7-Sementanzeige. Da der UDN aber negiert muss ich 
den PI an Pin6 aus Masse setzen was wiederum den 4543 nicht nur zum 
"kochen" sondern gleich zum "glühen" bringt.
Kann mir jemand sagen was ich falsch mache?
Angehängte Dateien:
Gast #4469866
Lesenswert?

Schalte jeden Schieberegisterausgang über einen 1K-Widerstand an einen 
Transistor (2.B. 2N3904). An den Collector kommen 6.9V, an den Emitter 
die Anoden der Anzeigen. Die Kathoden schaltest du ähnlich, nur Kathode 
an den Collector und Emitter nach Minus.
Gast #4469870
Lesenswert?

Ja du hast natürlich vollkommen Recht(bereits getestet und für Gut 
befunden).
Ich habe nicht erwähnt das ich Zeitgleich eine 20x8 Dot Matrix betreiben 
möchte. Jedes für sich macht keine Schwierigkeiten aber beide zusammen 
sehr wohl. Habe schon überlegt sie mit zwei  Atmel168 zu betreiben. 
Möchte es aber erst mal so versuchen.
Gast #4470020
Lesenswert?

habe jetz die vorgeschlagene Schaltung mit dem seperaten 
Schieberegister(4094) versucht und habe auch hier das gleiche Problem. 
Es wird ziemlich schnell ziemlich heiss. Auch ohne das ein Signal 
anliegt.
Gast #4470203
Lesenswert?

Der Vollständigkeit halber hier noch meine Lösung.

int freigabe1 = 11;//CD4094 PIN1 (storePin)
int tackt1 = 12;//CD4094 PIN3 (clockPin)
int bit1 = 13;//CD4094 PIN2(datapin)
int uebergabe = 10;// übergibt die Zeichen an Anzeige

int spalten_wert = 0;
int display_zeichen = 5;

byte daten_spalte;
int count1 = 10000;

void setup()
{
  pinMode(freigabe1, OUTPUT);
  pinMode(tackt1, OUTPUT);
  pinMode(bit1, OUTPUT);
  pinMode(uebergabe, OUTPUT);

}

void loop()
{
  zeil_schreib();

  for (int i = 1; i < 8; i++)
  {
    digitalWrite(freigabe1, LOW);

    daten_spalte = spalten_wert;
    shiftOut(bit1, tackt1, LSBFIRST, daten_spalte);

    digitalWrite(freigabe1, HIGH);
  }

digitalWrite(uebergabe, HIGH);
}




void zeil_schreib()
{
  //hier soll die Auswahl für die zeichen hin geschrieben: 
a,b,c,d,e,f,g,dp

  switch(display_zeichen)
  {
    case 0:
      spalten_wert = B11111101;

    break;

    case 1:
      spalten_wert = B01100001;

    break;

    case 2:
      spalten_wert = B11011011;

    break;

    case 3:
      spalten_wert = B11110011;

    break;

    case 4:
      spalten_wert= B01100111;

    break;

    case 5:
      spalten_wert = B10110111;

    break;

    case 6:
      spalten_wert = B10111111;
    break;

    case 7:
      spalten_wert = B11100001;
    break;

    case 8:
      spalten_wert = B11111111;
    break;

    case 9:
      spalten_wert = B11110111;
    break;

  }
}
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren