PIC-Lernbeispiel: LED-Ziffernanzeige


zurück , Lernbeispiele , PIC-Prozessoren , Elektronik , Homepage


Eine 4-stellige 7-Segment-LED-Ziffernanzeige wird angesteuert
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.

Foto-VQE14

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.
 
Stromlaufplan 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.

Foto Bestückungsseite (klein) 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-Tabelle
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
Der 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.
Bei der Verwendung solcher Tabellen muss man darauf achten, dass der addwf-Befehl nur 8-bittig arbeitet, der Programcounter aber viel länger ist. Innerhalb der Tabelle, darf keine Befehlsadresse der Form xxxFF auftauchen. Der addwf-Befehl kann solche Adressen nicht überspringen, sondern springt stattdessen zu einer Adresse 256 Byte vor dem gewünschten Ziel. Die Adressen muss man deshalb im *.lst-File prüfen und evtl. durch "org"-Befehle und Sprünge manipulieren.


Programmlisting



zurück , Lernbeispiele , PIC-Prozessoren , Elektronik , Homepage

Autor: sprut
erstellt: 2000
letzte Änderung: 06.06.2003