Für stromsparende Anwendungen mit numerischer Anzeige, sind LC-Anzeigen nach wie vor besonders geeignet. Hier wird eine statische Ansteuerung mit Schieberegistern gezeigt, die mit kostengünstigen, leicht verfügbaren Bauteilen auskommt. Die Stellenanzahl läßt sich problemlos erweitern, sodass auch mehrere Anzeigen von einem µC angesteuert werden können. Im Gegensatz zu 7-Segment-Anzeigen mit LEDs, die statisch oder im Multiplex angesteuert werden können, muß bei LCDs jedes aktive Segment mit einer Wechselspannung (typ. 30-100Hz) bezogen auf die 'backplane' (BP) betrieben werden. Jede angezeigte Stelle besteht aus acht Segmenten 'A' – 'G' und '.'. Da die Stromaufnahme sehr gering ist, reicht pro Stelle ein CMOS-4094 Schieberegister. Für eine 4-stellige Anzeige braucht man somit vier Schieberegister. Ferner braucht man ein Steuersignal für die gemeinsame BP. Da der Dezimalpunkt ganz rechts keinen Sinn ergibt – in der Regel ist er auf der Anzeige auch garnicht ausgeführt – kann man den 8. Ausgang eines Schieberegisters hierfür verwenden. Wie gesagt müssen die Segmente mit Wechselspannung bezogen auf BP betrieben werden. In der gezeigten Schaltung/Programm wird dies dadurch erreicht, dass die zugehörigen Bits im Speicher für die BP immer auf '0' und ein aktives Segment auf '1' gesetzt werden. Bei der Ausgabe auf die Schieberegister, die per Interrrupt mit 100Hz erfolgt, werden die auszugebenden Bytes (Digits) einmal wie abgespeichert und anschließend invertiert ausgebenen (EXOR mit 0xff). Dadurch wird an den aktiven Segmenten eine 50Hz Wechselspannung in Bezug auf BP erzeugt, die ein Tastverhältnis von typ. 50% aufweist. Dies ist wichtig, damit sich an den Segmenten kein Gleichspannungsanteil bildet, der unter 1% bleiben muß. Um die Signale zur Ansteuerung gering zu halten, werden nur LCD_DATA, LCD_CLK und LCD_STR für die 4094 ausgegeben. Der '1' Pegel für OE wird aus dem zyklischen LCD_STR-Signal gewonnen und zwischengespeichert. Siehe Schaltplan: R1, C1, R2, D1 Auf der Platine zur Ansteuerung ist noch Platz für einen Attiny45/85, mit dem sich einfache Anwendungen umsetzen lassen. Mit den 'Innereien' des Tiny45 lassen sich zum Beispiel eine Temperaturanzeige/Überwachung oder – wie im angehängten Programm 'LCD_4_45.c' – ein Spannungs-Messmodul aufbauen. Es geht dabei nicht um Präzisionsmessungen, sondern um Beispiele für eigene Programme. Es wird gezeigt, wie die LCD-Ansteuerung per Interrupt erfolgt, wie 'int'- oder 'float'-Zahlen (int32_t x1000 skaliert auf drei Nachkommastellen) ausgeben werden, wie sich die Schaltung per 3V-Kopfzelle sparsam ein/ausschalten und betreiben läßt sowie ein paar kleine programmtechnische Spielereien. Eine nähere Beschreibung der EIN-AUS-Funktion findet sich hier: Beitrag "EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä." Im ausgeschaltenten Zustand liegt die Stromaufnahme bei <0,3µA und im Betrieb bei <0,5mA. Eine CR2032 Knopfzelle reicht für >400h Betriebsstunden. Die LC-Anzeige verblasst bei Vcc <= 2V; Vcc kann aber auch bis 5V betragen. Der Musteraufbau (Bilder) weicht noch etwas von der endgültigen Schaltung ab. Falls mehr IO-Pins notwendig sind, fände ein ATtiny44 noch genug Platz auf der Platine. Bei Gelegenheit werde ich ggf. noch ein Programm für einen einfachen 4-stell. Drehzahlmesser hinzufügen.
Für den einfachen Nachbau bzw. Umbau anbei die Dateien zur Schaltung erstellt mit Eagle 4.09.
Schönes Projekt. Hast du auch eine Bauteile Liste ? Display etc. ? Wo hast du die Platine fertigen lassen ?
Als Display kann man dies nehmen, wobei die Abbildung nicht korrekt ist. Bitte das Datenblatt ansehen: http://such001.reichelt.de/index.html?ACTION=3;ARTICLE=10182;SEARCH=lcd%204,0 Was es sonst noch an LCDs gibt, ist hier zu sehen, wobei es auch Typen in transflektiver Ausführung gibt. Auch hier bitte in die Datenblätter sehen: http://www.schukat.com/schukat/schukat_cms_de.nsf/index/CMSFFEDE67DB7032C11C1256DF1003EF651?OpenDocument&wg=W4235&refDoc=CMS963E5A52B42365E9C125707C004A048A&kb=DE112TS-20/7.5 Die anderen Bauteile sind Wald- und Wiesentypen. Muster-PCB ist von M&V (pcb-center.de).
Noch etwas zu den Frontrahmen. Der oben verwendete ist ein AR1950 http://www.schukat.com/schukat/schukat_cms_de.nsf/index/CMSFFEDE67DB7032C11C1256DF1003EF651?OpenDocument&wg=G7831&refDoc=CMSB2DFF5D99FA77051C125709E004C5C9F&kb=AR1950 Ein paar davon habe ich hier zu liegen, falls Jemand diese verwenden möchte. Ebenfalls habe ich noch einige AR1977 mit roter Filterscheibe, die sich wie hier gezeigt für 6-stellige 13mm Anzeigen eignen. Beitrag "7-Segm.-LED-Anzeige, 6-stellig, statische Ansteuerung mit (74HC)4094"
M. N. schrieb: > ... Bei der Ausgabe auf die > Schieberegister, die per Interrrupt mit 100Hz erfolgt, werden die > auszugebenden Bytes (Digits) einmal wie abgespeichert und anschließend > invertiert ausgebenen (EXOR mit 0xff). Dadurch wird an den aktiven > Segmenten eine 50Hz Wechselspannung in Bezug auf BP erzeugt, die ein > Tastverhältnis von typ. 50% aufweist. Dies ist wichtig, damit sich an > den Segmenten kein Gleichspannungsanteil bildet, der unter 1% bleiben > muß. Die Schaltung ist genau das, was ich brauche, um einen ICL7107 zu ersetzen. Allerdings blicke ich bei der ISR nicht so ganz durch. Was macht die Variable static uint8_t temp? Die wird ja jedes Mal neu definiert. Was ändert sich da mit dem ^= 0xff? Bin offensichtlich mit C noch nicht so sattelfest. Gab's zu Fortran's Zeiten noch nicht. Danke und Gruss Ruedi
Ruedi Heimlicher schrieb: > Was macht die Variable static uint8_t temp? Die wird ja jedes Mal neu > definiert. Das static sorgt dafür, dass temp einen festen Speicherplatz bekommt, beim Programmstart einmalig initialisiert wird (hier mit 0x00) und nur in der ISR bekannt ist und verändert werden kann. > Was ändert sich da mit dem ^= 0xff? temp ^= 0xff; kann man auch auseinanderziehen und so formulieren: temp = (temp ^ 0xff); Alle Bits von temp werden invertiert (EOR-Befehl beim AVR) und temp zugewiesen, sodass in aufeinanderfolgenden ISR-Aufrufen temp zwischen den Werten 0x00 und 0xff wechselt: 0x00, 0xff, 0x00, 0xff, .... Bei der Ausgabe der Segmente werden diese durch "anzeige[n] ^ temp" abwechselnd unverändert (temp ist 0x00) oder invertiert (temp ist 0xff) ausgegeben. Da auch die backplane (Q5 von IC1) mit invertiert wird, ensteht an den aktiven Segmenten eine Wechselspannung. > Bin offensichtlich mit C noch nicht so sattelfest. Gab's zu Fortran's > Zeiten noch nicht. Sei froh, dass ich Dir keine Lochkarten zuschicken muß :-)
M. N. schrieb: > Das static sorgt dafür, dass temp einen festen Speicherplatz bekommt, > beim Programmstart einmalig initialisiert wird (hier mit 0x00) und nur > in der ISR bekannt ist und verändert werden kann. Danke vielmals, genau das hat mir gefehlt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.