Im Vergleich zu LCD-Displays, die neben Ziffern auch
Buchstaben sauber
anzeigen können, und deren Eigenintelligenz die Ansteuerung sehr
einfach
macht, nehmen sich 7-Segment LED-Anzeigen eher bescheiden aus. Sollen
aber
nur Ziffern dargestellt werden, bieten sie auch Vorteile: Die Anzeige ist vergleichsweise groß und selbstleuchtend. Das vereinfacht das schnelle Erfassen der dargestellten Zahlen. Besonders bei Messgeräten und Uhren ist das von Vorteil. Außerdem sind die LED-Displays vergleichsweise billig. Die zweistelligen grünen VQE24 und roten VQE14 (gemeinsame Anode) aus DDR-Restbeständen sind bei Conrad für ein Butterbrot zu haben gewesen. Bei Pollin gab es Anfang 2003 die rotleuchtenden, dreistelligen LED-Anzeigen TOT-4301FE-1N für wenige Cent. |
Aus der Anzeige lässt sich später eine Stopp-Uhr
oder ein Frequenzzähler
bauen.
Schaltung
Eine 4-stellige Anzeige wird aus zwei jeweils 2-stelligen
VQE24/VQE14-Displays
(entspricht Toshiba TLG325/TLR325) aufgebaut. Der Hardwareaufwand soll
gering bleiben. Deshalb wird auf 7-Segment-Decoder-Schaltkreise oder
externe
Latchs verzichtet. Lediglich Widerstände zur Strombegrenzung sind
vorgesehen. Damit ist eine Multiplexansteuerung nötig, d.h. es
leuchtet
immer nur eine Stelle des Displays. Durch schnelles Umschalten zwischen
den 4 Stellen des Displays wird ein Dauerleuchten aller Stellen
vorgetäuscht.
Sowohl das Multiplexen wie auch die 7-Segment-Codierung muss der PIC erledigen.
Wenn alle 8-Segmente eine Ziffer des Displays (einschließlich
Dezimalpunkt) mit jeweils dem Maximalstrom von 20 mA leuchten,
fließen
160 mA durch die gemeinsame Anode des LED-Segments. Das ist weitaus
mehr,
als die 20 mA die ein einzelnes PIC-Pin liefern kann. Nun kann man sich
auf den Standpunkt stellen, dass durch das Multiplexen der
Durchschnittsstrom
nur 40 mA beträgt. Durch eine Halbierung der Segmentströme
auf
10 mA wäre man wieder im grünen Bereich. Sicherer ist es
aber,
den PIC-Pins, die die Anodenströme steuern jeweils einen externen
Treibertransistor zu verpassen.
Die Kathoden der 4 Anzeigestellen sind untereinander
verbunden.
Die Anoden bleiben separat.
RB0-RB7 sind Ausgänge und liegen im Ruhezustand auf "1". Jedes dieser Pins steuert über einen Widerstand die Kathode eines Segments an. Der Widerstand begrenzt den Strom auf ca. 15 mA (rotes Display) bzw. 10mA (grünes Display). Die Pins RA0-RA3 sind Ausgänge und liegen im Ruhezustand auf "1". Sie steuern Treibertransistoren an, die die Anoden der LED-Anzeige mit +5V verbinden, wenn der entsprechende Ausgang auf "0" gelegt wird. Der Eingang am RA4 wird noch nicht benötigt. |
Ein Vorschlag für eine geeignete Leiterplatte ist hier: dabei habe ich aus Platzgründen SMD-Widerstände verwendet. |
Programmablauf
Zur Vorbereitung muss man die Pins RB0-RB7 sowie RA0-RA3 in
Ausgabe-Mode
schalten und auf "1" setzen.
Zur Anzeige einer 4-stelligen Zahl muss man der Reihe nach die Pins RA0-RA3 vorübergehend auf "0" legen und den 7-Segment-Code der zugehörigen Ziffer am Port B ausgeben. Um ein Flackern der Anzeige zu vermeiden, sollte die Darstellung der gesamten Zahl mindestens 50 mal pro Sekunde wiederholt werden.
Das Timing der Anzeige kann durch Warteschleifen oder Timerinterrupt erfolgen. In diesem Beispiel wird ein Timerinterrupt verwendet, der alle 4 ms zur nächsten Anzeigestelle weiterschaltet. Der 4 MHz Takt des Keramikschwingers teilt der PIC intern zum 1 MHz-Arbeitstakt. Diesen lege ich über einen 32:1-Vorteiler auf den Timer0. Dieser löst nach jeweils 125 Impulsen einen Interrupt aus. (1 MHz : 32 = 31250 Hz; 31250 Hz : 125 = 250 Hz)
Interessant ist auch das Auslesen der Tabelle, mit der einer Ziffer der zugehörige 7-Segment-Code zugewiesen wird.
; 7-Segment-TabelleDer Befehl "addwf PCL, f" erhöht den Programcounter um den Wert der Ziffer, der in w abgelegt ist. Dadurch springt das Programm auf eine der folgenden 10 Zeilen. Der "retlw"-Befehl lädt w mit dem dahinterstehenden Wert und kehr aus dem Unterprogramm zurück.
Segmente
addwf PCL, f
retlw B'00011000' ; 0
retlw B'11011110' ; 1
retlw B'00110010' ; 2
retlw B'01010010' ; 3
retlw B'11010100' ; 4
retlw B'01010001' ; 5
retlw B'00010001' ; 6
retlw B'11011010' ; 7
retlw B'00010000' ; 8
retlw B'01010000' ; 9
Programmlisting
Autor: sprut
erstellt: 2000
letzte Änderung: 06.06.2003