7. Januar 2017

Winterprojekt: Die Anzeige der Digitaluhr

Das neue Jahr hat begonnen und es kann mit der Anzeige weitergehen. Dieser Beitrag beschreibt insbesondere die Hardware, also den Aufbau und die Verdrahtung. Für den Test gibt es ein erstes kleines Programm.

Die eigentliche Anzeige

Eine digitale Uhr benötigt jeweils zwei Ziffern für die Stunden und die Minuten. Die Anzeige besteht demnach aus vier 7-Segment-Anzeigen. in einer ersten Hochrechnung sind folglich für die Ansteuerung 7 x 4 = 28 digitale Ausgänge erforderlich. So viele Ausgänge besitzt der Arduino allerdings nicht. Deshalb erfolgt die Ansteuerung multiplex.

Das Multiplex-Prinzip

Bei Bildschirmen oder Fernsehern gibt es immer eine Frequenzangabe, Die Angabe von beispielsweise 50 Hertz (Hz) bedeutet, dass fünfzig mal in der Sekunde das Bild erneuert wird. Unser Auge ist träge, deshalb sind schnelle, einzelne Bilder nicht mehr zu unterscheiden. Entsprechend verschmelzen sie zu einer laufenden Bewegung.

Mit den Ziffern der Uhr funktioniert es genauso. Eigentlich zeigen die 7-Segment-Anzeigen nacheinander ihre Ziffern an. Erfolgt der Wechsel allerdings schnell genug, so sehen unsere Augen vier leuchtende Ziffern.

Für die Ansteuerung benötigt dieses Verfahren sieben Ausgänge gleichzeitig für alle vier Segmente. Vier weitere Ausgänge steuern jeweils den gemeinsamen Gegenpol der Segmente und wählen die jeweils anzuzeigende Ziffer aus. Die Anzahl der benötigten Ausgänge reduziert sich immerhin von 28 auf 11 und die kann der Arduino ansteuern.

Unter Strom

Mit den Strom einer einzelne Leuchtdiode kann der Arduino umgehen. An den gemeinsamen Gegenpol geben beispielsweise für die Ziffer Acht immerhin sieben Dioden Strom ab. In Foren liest man häufiger der Arduino kann bis zu 50 mA liefern. Laut Datenblatt sind es allerdings nur 40 mA. Da die blauen Dioden sehr hell sind, könnten größere Vorwiderstände gewählt werden, beispielsweise 1 Kiloohm. Von 5 Volt fallen 2,8 Volt Spannung an der Diode ab und folglich verbleiben 2,2 Volt am Widerstand. Geteilt durch 1000 Ohm mal 7 Segmente = 15,4 mA, das funktioniert. Bei einem Experiment ergab sich allerdings das die Ausgänge meines Arduino unterschiedlich viel Strom liefern, so dass ein Segment deutlich dunkler war als die anderen. Nach einem Tausch war es wieder das Segment dieses Ausgangs, das dunkler war. Das ist unschön, deshalb habe ich den Strom mit Hilfe von Transistoren geschaltet.

Der Transistor als Schalter

In der Restekiste habe ich noch BC 547C Transistoren. Die Verstärkung (das “C”) ist für diese Anwendung eigentlich übertrieben, trotzdem erfüllen sie ihren Zweck. Sie können mit einem kleinen Strom einen großen schalten. Bei den von mir verwendeten 220 Ohm Widerständen ist das 7 x (2,2/220) = ca. 70 mA. Meine kleine Testschaltung sieht wie folgt aus:

Schalten mit dem Transistor

Auf diesem Video habe ich das Schalten durch den Arduino durch einen Taster simuliert. Diese Schaltung kann ich dementsprechend auf den gemeinsamen Pol aller 7-Segement-Anzeigen anwenden.

Der Schaltplan für die Anzeige insgesamt ist

Schaltung Anzeige

Testprogamme

Die Funktion ziffer(int) aus dem letzten Beitrag sowie das Feld mit den Ansteuerungscodes benutze ich genauso wie im letzten Beitrag. Die Initialisierungsschleife des Setup nimmt zudem vier weiteren Ausgänge 3 bis 6 auf, die ebenfalls als Ausgang eingestellt werden. Die Werte für die darzustellenden Ziffern enthält das Feld

int ausgabe[] = { 4, 3, 2, 1};

Im Loop rufe ich zunächst nur eine Prozedur  doAusgabe() auf, in der eine Schleife die nächste Ziffer schaltet.

for(int z=0; z<4; z++) {
  selectZiffer(z);
  ziffer(ausgabe[z]);
  delay(5);
}

Sie selektiert zunächst das zu schaltende Segment, steuert anschließend die Segmente entsprechend der zugehörigen Ziffer an und wartet. Die Prozedur selectZiffer(int) schaltet alle außer dem angeben Segment ein.

void selectZiffer(int z) {
  for(int i=0; i<4; i++) {
    if(i==z) digitalWrite(6-i, HIGH);
    else digitalWrite(6-i, LOW);
  }
}

Die Verzögerung in doAusgabe() definiert im Moment für die maximale Wiederholrate. Ist die Wartezeit zu lang, so flimmert die Anzeige oder extremer, der Wechsel ist erkennbar. Für den Funktionstest ist das allerdings so gewollt. So lässt sich der Ablauf schließlich auf gut verfolgen.

Resumee

Technisch funktioniert die Anzeige nun. Ein kleines Programm existiert bereits, doch das ist ausbaufähig. Die “softe” Seite der Anzeige ist Thema des nächsten Beitrags.

Bisherige Beiträge zum Winterprojekt

1 Comment

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

I accept that my given data and my IP address is sent to a server in the USA only for the purpose of spam prevention through the Akismet program.More information on Akismet and GDPR.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.