Ansteuerung von 7-Segment-Anzeigen

By | 20. Februar 2016

1. Ansteuerung von 7-Segment-Anzeigen

Eine Siebensegmentanzeige ist ein optoelktronisches Anzeigeelement aus sieben separat schaltbaren, sichtbaren Balken, die in Form eines Rechtecks mit einem Mittelbalken angeordnet sind. Üblicherweise werden die Segmente mit lateinischen Buchstaben A bis G bezeichnet, wobei oben begonnen, im Uhrzeigersinn fortgefahren und das mittlere Segment zuletzt benannt wird. Zusätzlich ist noch ein weiteres Segment vorhanden, der Dezimalpunkt der mit DP bezeichnet wird.

Man unterscheidet üblicherweise solche mit einer gemeinsamen Anode und Ausführungen mit gemeinsamer Kathode. 7-Segment-Anzeigen mit gemeinsamer Kathode werden somit mit einem logischen “Low” Signal angeschaltet, während die mit einer gemeinsamen Anode dementsprechend mit einem logischen “High”-Signal angeschaltet werden. Die folgende Graphik zeigt die schematische Darstellung und die PIN-Belegung einer Segment-Anzeige mit einer gemeinsamen Anode:

TM1638

Zur Ansteuerung von Siebensegmentanzeigen wurden Anfangs meist integrierte Siebensegment-Decoder-Schaltungen in TTL- oder CMOS-Technologie verwendet. Seit den 1990er Jahren ersetzt mehr und mehr ein programmierbarer Mikrocontroller die vorher in großer Zahl erforderlichen ICs. Aus diesem Grund soll im folgenden gezeigt werden, wie dies mit dem Arduino gemacht werden kann.

Zuerst der gesamte Quelltext:

2. LED Steuerung mit dem Arduino

Der Arduino besitzt neben analogen auch digitale Ein- und Ausgänge. Jeder Pin kann sowohl als Eingang- als auch als Ausgangs-Port verwendet werden. Dazu gibt es eine Funktion pinMode (PinName, Modus), die legt im Setup fest, ob ein Pin als Eingang (INPUT) oder als Ausgang (OUTPUT) verwendet wird.

Um die Ausgabe von Werten zu testen, wollen wir im folgenden verschiedene LEDs auf einer Bar Graph Anzeige ansteuern. Dabei handelt es sich um mehrere aneinander gereihte LEDs, die je nach Ausführung über eine gemeinsame Anode oder Kathode verfügen und so über einen Vorwiderstand direkt angesteuert werden können. Nach dem gleichen Prinzip sind auch 7-Segmentanzeigen aufgebaut. Für unsere Aufgabe habe ich eine kleine Platine gebaut, auf der ein BarGraph LED mit 20 LEDs mit einer gemeinsamen Kathode sitzt, die wir ansteuern wollen.

BarGraph

Als Beispiel möchte ich nicht nur eine LED ansteuern, dazu gibt es genügend Beispiele, sondern mehrere in einem Schritt. Dazu habe ich ein Array als Datenstruktur definiert, in dem 10 verschiedene Byte-Kombinationen definiert sind, die ich nacheinander auf dem LED-BarGraph darstellen:

Der Kern des Programms sind zwei ineinander geschachtelte For-Schleifen. Die erste Schleife (i-Schleife) läuft von 0 bis 9 und bestimmt die i-te Zeile des Arrays Sequenz[i][j] mit den Informationen welche LEDs anzusteuern sind. Die zweite Schleife j-Schleife) läuft von 0 bis 7 und liest jedes Bit der Zeile aus und weist gleichzeitig jedes Bit dem zugehörigen Ausgangsport zu. Mit dem Befehl digitalWrite(pinArray[j],ledSequenz[i][j]) werden die Werte dann dem zugehörigen Ausgangsports zugewiesen.\

Eine LED kann nicht direkt an die Ausgangs-Pins des Arduino angeschlossen werden, da die Strom- und Spannungswerte über einen Vorwiderstand angepasst werden müssen. Die Pins des Arduino liefern 5V. Gleichzeitig sollte die Spannung an der LED etwa bei 2V liegen, so dass am Widerstand eine Spannungsdifferenz von 3V abfallen sollte. Der maximale Strom den ein Pin des Arduino liefern kann liegt bei 40mA.

Da bei Überschreitung die Schaltung in Mitleidenschaft gezogen werden kann, darf dieser Wert nicht überschritten werden. Für ein deutliches Aufleuchten der LED genügt üblicherweise ein Strom von 10-25mA, so dass wir über das Ohmsche Gesetz den Widerstand berechnen können, der bei etwa 300 Ohm liegt. Somit sind wir mit einem Widerstand mit 330 Ohm auf der sichern Seite. Größere Widerstände gehen natürlich auch, würden sich aber auf die Helligkeit der LED auswirken.

3. Funktion und Aufbau von Schieberegister

Ein Schieberegister ist eine logische Schaltung, die mehrstellige binäre Signale taktgesteuert aufnehmen, speichern und wieder abgeben kann. Schieberegister ermöglichen die Transformation serieller Daten in parallele Daten und umgekehrt. Sie bestehen im Grunde aus hintereinander geschalteten D- oder JK-FlipFlops. Die Takteingänge aller Stufen werden zusammengeschaltet und über einen gemeinsamen Takt versorgt. Da ein Flip-Flop nur ein Bit speichern kann, müssen je nach Anwendung mehrere Flip-Flops zu einem Schieberegister zusammengeschaltet werden. Bei dem weit verbreiteten IC vom Typ 74HC595 beispielsweise sind 8 FlipFlops integriert, so kann man mit lediglich 3 Arduino-Pins 8 Ausgangspins ansteuern.

SR1

Die Funktionsweise eines Schieberegisters kann man sich wie folgt vorstellen: Ein serieller Datenstrom wird über eine Datenleitung an den Daten-Pin DS des Bausteins übertragen. Das am Daten-Pin DS anliegende Bit kann über einen Pegelwechsel von LOW nach HIGH am sogenannten ShiftClock-Pin (SHCP) in den Zwischenspeicher geschoben werden. Dieser Vorgang kann beliebig oft wiederholt werden, bis der Zwischenspeicher voll ist oder genügend Daten aufgenommen wurden. Sobald ein Pegelwechsel von LOW nach HIGH am sogenannten StoreClock-Pin (STCP) erfolgt, werden alle Daten aus dem Zwischenspeicher an die Ausgangs-Pins übertragen.

Die Funktionsweise kann mit folgendem Arduino Programm (das ich aus dem Blog von Adi Dax übernommen habe) getestet und nach empfunden werden:

Damit kann man die Anzahl der Ausgänge auf eine elegante Art erweitern. Insbesondere die Möglichkeit, mehrere Schieberegister Bausteine hinter einander zu schalten, schafft eine große Flexibilität in Sachen Steuerung.

Beispiel-Schaltung: Board mit 24 Ausgängen

Als Beispiel für die Möglichkeiten mehr als 8 Ausgänge zu steuern, habe ich eine Schaltung mit 3 IC 74595 entwickelt. Aufgebaut als Experimentierplattform für den Arduino und entsprechenden Anschlussmöglichkeiten auf einer Lochrasterplatine prototypisch umgesetzt.

Damit stehen nun 24 Ausgabe-Register zur Verfügung die nach dem oben beschriebenen Prinzip angesteuert werden können. Die Schaltung ist nicht kompliziert, nur etwas aufwendig von Hand zu verdrahten und nach folgendem Prinzip aufgebaut:

Bildschirmfoto 2015-03-27 um 04.22.08

Die Ansteuerung erfolgt wie bei einem einzelnen Schaltkreis d.h. alle Steuersignale werden parallel an alle ICs angeschlossen. Nur die DS-Leitungen der zweiten und folgenden Schieberegister werden kaskadiert.