7-Segmentanzeigen

einfache Ansteuerung / Schaltungen für LCD und LED

 
1. analoges Einbaumodul mit LC-Anzeige
2. Einbaumodul für Frequenz - Drehzahl, ext. Quarzoszillator
3. Einbaumodul für Frequenz - Drehzahl, autom. Abschaltung
4. 4-stell. LCD-Zähler mit Quadraturdekoder
 
5. neue Version, 4-stell. LCD-Basismodul mit ATtiny44
6. Geschwindigkeitsmessung 10.0 - 200.0 km/h
7. Temperaturmessung PT1000 / KTY81
 
11. serielle LED 7-Segmentanzeige - statischer Betrieb
12. Einbaumodul reziproker Frequenzzähler 6-stell. LED-Anzeige
13. 6-stell. LED-Zähler mit Quadraturdekoder
14a. 4-stell. LED-Zähler, multiplex, autom. Abgleich
14b. 4-stell. Zähler: LED oder BCD multiplex, BCD-Ausgang statisch
15. 5-stell. LED-Zähler, multiplex
 
zurück zur Übersicht

 

Stand: 2014-08-04

Mit nachfolgenden Schaltungen wird gezeigt, wie sich 7-Segmentanzeigen mit Schieberegistern einfach und flexibel ansteuern lassen.

1. analoges Einbaumodul mit LC-Anzeige

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' bzw. 'LCD_4_45.hex' – 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.

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. Für eigene Schaltungen kann die Datei 'LCD_4_1.brd' verwendet werden.

nach oben

2. Einbaumodul für Frequenz - Drehzahl Version 1

Die zuvor gezeigte Schaltung eignet sich in leicht modifizierter Form für einen 4-stelligen Frequenz-/ Drehzahlmesser mit 7-Segment LCD. Eingangsfrequenzen im Bereich 0,100 -> 9999 Hz bzw. 6,000 -> 9999 U/min werden mit max. Auflösung angezeigt. Unterhalb 0,1 Hz wird ein 'timeout' generiert und oberhalb bildet die 4-stell. Anzeige die Grenze. Da hier eine reziproke Frequenzmessung angewendet wird, ist die minimale Meßdauer eine Periode. Bei Signalen >=3 Hz wird die Meßrate auf 3 Mess./s begrenzt.

Die Programme 'Drehzahl_4_45.c' bzw. 'Drehzahl_4_45.hex' sind eine abgemagerte Version eines 4-Kanal Drehzahlmessers, der hier beschrieben wurde: Beitrag "4-Kanal Drehzahlmessung".

Timer0 dient der Ansteuerung der Anzeige; die strobe-Impulse werden jetzt allerdings per OC0A erzeugt. Dies ist notwendig, damit die LC-Anzeige mit exakt 50% Tastverhältnis angesteuert wird und dennoch der Interrupt von T0 bei 'höheren' Eingangsfrequenzen die Messung nicht stören kann. Der erste Befehl in ISR (TIMER0_OVF_vect) ist daher sei();.
In dieser Routine werden zusätzlich zwei Schalter-Signale abgefragt: "Frequenz/Drehzahl" und "Halt". Eine kleine Spielerei am Rande. Timer1 läuft mit vollem CPU-Takt, wobei seine Überläufe die Messzeit mit 31,25 kHz grob und TCNT1 feiner aufgelöst liefern. Im Grunde würden die Überläufe schon eine hinreichend genaue Zeit liefern. Die Eingangsimpulse selbst werden per PCINT von PB4 erfaßt. Die negative Flanke wird ausgewertet, deren Impulse werden gezählt und anhand Timer1 der genaue Zeitpunkt dazu festgehalten.

Für einfache Versuche/Genauigkeiten reicht der µC-interne RC-Oszillator. Hier ist der Versuchsaufbau um einen 8MHz Quarzoszillator (XO53) erweitert. Abweichend vom Schaltplan muß bei diesem Typ der enable-Eingang offen bleiben oder auf '1' gesetzt werden. Das Datenblatt des XO53 spricht von max. 8mA Stromaufnahme, was doch sehr hoch wäre. Effektiv sind es beim vorliegenden Muster 1,2 mA, sodaß die Gesamtstromaufnahme bei Vcc = 3V unter 4 mA liegt. Damit eignet sich die Schaltung gut für mobilen Batteriebetrieb.
Sofern sehr niedrige Drehzahlen unter 1 U/min nicht von Interesse sind, kann man den angezeigten Wert anders skalieren. Bei einer Anzeige in 1000 U/min könnten Drehzahlen bis > 600.0 kU/min abgelesen werden. Die feinste Auflösung wäre dann 1 U/min (Anzeige 0.001).

Die Bilder vom Versuchsaufbau mit XO53 Quarzoszillator: Für eigene Schaltungen kann auch hier die Datei 'LCD_4_1.brd' verwendet werden.

nach oben

 

3. Einbaumodul für Frequenz - Drehzahl Version 2

An der zuvor gezeigten Version 1 sind ein paar Änderungen vorgenommen worden, um die Schaltung für den Batteriebetrieb zu optimieren; auf den ext. Oszillator wird daher verzichtet. Mit einem Abgleich kann aber auf 1% genaue Meßwerte kommen, was immer noch besser als bei analogen Meßinstrumenten ist, insbesondere wenn Frequenz/Drehzahl sehr niedrig sind.

Zum einen kann man jetzt per #define MAX_F auswählen, ob die interne Taktfrequenz weiterhin 8MHz betragen soll oder auf 1MHz reduziert wird. Im letzteren Fall sinkt die Stromaufnahme im Betrieb deutlich von ca. 2,5mA auf rund 0,5mA bei 3V; die max. Eingangsfrequenz beträgt aber nur noch ca. 3kHz. Zum anderen geht der µC bei fehlenden Eingangsimpulsen in den power-down Modus, der mit <1µA Stromaufnahme die Batterie entlastet. Dies erfolgt nach rund 30 Sekunden.

Der Schalter 'Halt' hat eine andere Funktion bekommen und skaliert die Werte jetzt mit 1000, sodaß 'kHz' und 'kUpm' angezeigt werden. Bei 8MHz CPU-Takt sind Frequenzmessungen bis 35kHz und Drehzahlen bis 2000MUpm darstellbar. Intern werden die Berechnungen von Frequenz und Drehzahl sowie die Meßwertanzeige jetzt mit float-Variablen ausgeführt, wodurch der Quellcode überschaubarer wird und der .hex-Code sogar kleiner ausfällt.

nach oben

 

4. 4-stell. LCD-Zähler mit Quadraturdekoder

Die zuvor gezeigte Schaltung läßt sich in abgewandelter Form zur Weg-/Umdrehungsmessung von Quadratursignalen verwenden. Die 90° verschobenen Signale werden mit "PH-A" und "PH-B" verbunden, wobei die Änderung jeder Flanke gezählt wird: 4-fach Auswertung. Da zu den Zähleingängen die internen pullup-Widerstände aktiviert sind, lassen sich auch passive Schalter (Reedrelais, Drehgeber) oder Hallsensoren mit offenem Kollektor-Ausgang (z. B. TLE4905) direkt anschließen.

Die Nullstellung des Zählers erfolgt mit "RESET" und die Umrechnung in den Ausgabewert mit einem Schalter am Eingang "SKAL", womit zwischen zwei vorgebbaren Skalierungen umgeschaltet wird.

Die Auswertung der Flankenwechsel erfolgt in der ISR TIMER1_OVF indem zyklisch die neuen Pegel von Phase A und Phase B mit dem vorherigen verglichen werden. Bei einer Änderung wird der Zählerstand entsprechend erhöht oder vermindert. Bei schnellen Flankenwechseln ist es zweckmäßig, den µC mit 8MHz Taktfrequenz zu betreiben, da hier die Abtastfrequenz der Zähleingänge ca. 31kHz beträgt. Bei der Auswertung darf kein Pegelwechsel verloren gehen.

Das Programm 'Quadrat_cnt45.c' zeigt die Grundfunktionen für Zähler, Anzeige im Bereich -999 -> 0.000 -> 9999, Skalierung und Reset-Eingang. Dazu auch noch die Datei 'Quadrat_cnt45.hex'.

nach oben

5. neue Version, 4-stell.-LCD-Basismodul mit ATtiny44

Diese Version bietet mit dem ATtiny44 im 14-pol. Gehäuse mehr Anschlüsse und einen einfachen Betrieb mit einem Quarz. In Verbindung mit dem16-Bit Timer1 mit diversen Capture und Compare-Registern, sind ext. Ereignisse schneller und präziser erfaßbar.

Das Schaltbild zeigt die zusätzlichen Anschlüsse, wobei PA0 und PA3 noch völlig frei verwendet werden können.

Der Musteraufbau mit einem 12MHz Quarz und der Bestückungplan.

nach oben

6. Geschwindigkeitsmessung 10.0 - 200.0 km/h

Mit der zuvor gezeigten Schaltung (4-stell. LCD mit ATtiny44) läßt sich direkt eine Geschwindigkeitsmessung durchführen. Dazu werden die Start-Stopp-Signale einer Meßstrecke an die Eingänge IN1 (PA.1) und IN2 (PA.2) gelegt. Die Signale können von mechanischen Schaltern, Lichtschranken oder Hallgebern stammen, wobei jeweils die negative Flanke ausgewertet wird. Die so durchgeführte Zeitmessung wird in km/h umgerechnet und angezeigt. Im Beispielprogramm 'speed_44.c' werden gültige Werte im Bereich 10.0 - 200.0 km/h erwartet; ungültige Meßwerte werden nicht angezeigt, wobei auch ein Durchfahren der Meßstrecke in falscher Richtung keinen gültigen Meßwert ergibt. Nach einer gültigen Messung wird das Ergebnis für eine vorgegebene Zeit (hier 3 s) angezeigt, bevor eine neue Messung gestartet werden kann. Die Meßbereitschaft wird durch den blinkenden Dezimalpunkt signalisiert.

Für die Zeitmessung wird die input-capture-Funktion des Timer1 verwendet. Das ermöglicht eine Auflösung der Zeitmessung von 83,33 ns bei 12 MHz CPU-Takt. Somit können auch noch höhere Geschwindigkeiten gemessen oder kürze Meßstrecken >= 10 mm eingerichtet werden. Das Ergebnis wird rechtsbündig mit einer Nachkommastelle angezeigt. Dies kann bei Bedarf entsprechend angepaßt werden. Die Ansteuerung der LC-Anzeige ist weiter oben hinreichend beschrieben.
Die fertige Datei 'speed_44.hex' arbeitet im Bereich 10.0 - 200.0 km/h mit 0,300 m Meßstrecke und zeigt den letzten gültigen Meßwert für >= 3 s an, bis ein neuer Wert ermittelt wurde.

nach oben

7. Temperaturmessung mit PT1000 / KTY81

Mit leicht modifizierter Schaltung des ATtiny44 Basismoduls läßt sich eine einfache Schaltung zur Temperaturmessung mit PT1000 oder KTY81-110 Sensoren aufbauen. Zum einen werden die Widerstandswerte R4, R5 auf 0 Ohm geändert, zwischen Pin12 und Pin13 des µC eine Verbindung (Lötbrücke) hergestellt und ein Abblockkondensator C9/0,1µF zwischen Pin13 (AREF) und Pin14 (GND) ergänzt. Die übrige Beschaltung bleibt bestehen, wobei Q1 entfallen kann, da das Programm den internen RC-Takt mit 1 MHz verwendet. Extern über Steckverbinder ergänzt werden R_REF (1000 Ohm, 0,1%), der Sensor selbst und der EIN-AUS-Taster. Die EIN-AUS-Funktion ist hier näher beschrieben.

identische Schaltung für PT1000 und KTY81-110

Das Auswerteprogramm 'PT1000_KTY81.c' mißt zunächst den Widerstand des Sensors. Dabei wird eine ratiometrische Messung durchgeführt, bei der nur für kurze Zeit (ca. 200µs) die Refernenzspannung an PA1 aktiviert wird. Unabhängig von der absoluten Spannung an AREF ermittelt der interne ADC das Teilungsverhältnis von PT_x / R_REF. Mit ADC_MAX = 1023 des 10 Bit Wandlers und R_REF 1000 Ohm ergibt sich: PT_x = R_REF*ADC_wert/(ADC_MAX-ADC_wert). Bei langen Zuleitungen muß unter Umständen noch der Zuleitungswiderstand abgezogen werden.
Zum errechneten PT_x wird abschließend der eff. Temperaturwert aus einer Tabelle mit hinreichend vielen Stützstellen linear interpoliert. Das Programm hat je eine Tabelle für PT1000 und KTY81, die der einzige Unterschied bei der Auswertung sind. Dazu noch die Datei 'PT1000_KTY81.hex'.

Mit einer Messrate von 5 Mess./s und einer Meßzeit von ca. 200 µs werden der Strom durch den Sensor und damit dessen Eigenerwärmung gering gehalten. Die ratiometrische Messung benötigt keine feste Referenzspannung, sodaß die Schaltung von ca. 1,8 - 5,5 V arbeitet. Durch die geringe aktive Stromaufnahme von < 0,4 mA @ 3 V ist ein Batteriebetrieb problemlos. Das Programm schaltet den µC nach 5 Minuten in den power-down-Modus, wobei die Stromaufnahme auf < 1 µA sinkt.

nach oben

11. serielle LED 7-Segmentanzeige - statischer Betrieb

Multiplexen von 7-Segment LED-Anzeigen ist für die viele Elektroniker das Mittel der Wahl. Bei einigen Anzeigen ist es auf Grund der vorgegebenen Anschlüsse auch unumgänglich. Verwendet man allerdings gängige 13mm LEDs oder größer, deren 10 Anschlüsse je 5 oben und je 5 unten angeordnet sind, bringt eine statische Ansteuerung der Segmente einige Vorteile und kann selbst von kleinen µCs im 8-pol. Gehäuse erledigt werden.

Die statische Ansteuerung erfolgt über Schieberegister, wobei drei Datenleitungen SER_DAT, SER_CLK und SER_STR ausreichen. Empfehlenswert ist noch eine 4. Leitung SER_OE, die die Ausgänge der Schieberegister aktivieren kann und darüber auch die Steuerung der Helligkeit mittels PWM erlaubt. Als Schieberegister gut geeignet ist der Typ ..4094, den es in uralter CMOS-Ausführung (CD4094, HEF4094) gibt, und der auf Grund seiner 'schlappen' CMOS-Ausgänge die Segmente direkt ansteuern kann. Die Ausgänge begrenzen ihren Strom durch ihren Innenwiderstand. Bei Vcc = 5V stellt sich ein Segmentstrom von ca. 5mA ein.

Weiterhin gibt es den 74HC4094 mit deutlich höheren Ausgangsströmen, bei denen der Segmentstrom durch Reihenwiderstände (typ. 470 Ohm ca. 6mA@5V oder auch 220 Ohm ca. 6mA@3V) begrenzt werden muß. Bei der Bestückung kann der zusätzliche Widerstand von Nachteil sein; dafür arbeiten die 74HC4094 bereits ab Vcc = 2V und problemlos bei Vcc = 3V.

Bei Multiplex-Anzeigen muß man die Treiber auf die verwendeten LEDs anpassen: Anzeige mit gemeinsamer Anode oder gemeinsamer Kathode brauchen eine deutlich geänderte Ansteuerung. Bei statischer Ansteuerung hingegen sind nur die Anschlüsse der Anoden/Kathoden auf GND oder Vcc zu legen und das Bitmuster für die Segmente 1:1 oder invertiert auszugeben. Wenn man es unbedingt braucht, könnte man die Anzeige auch gemischt bestücken :-)

Die angehängten Fotos zeigen die einfache Verdrahtung; die unterschiedliche Zuordnung der Segmente wird per Software erledigt.

Ob nun 3 oder 8 Stellen angesteuert werden sollen, der Aufwand ist recht gering und für jede weitere Stelle gleich. Es können auch mehrere mehrstellige Anzeigen kaskadiert werden. Das angefügte Programm 'Digit_6LED.c' zeigt die Grundfunktionen für eine 6-stellige Anzeige. Dazu noch die Datei 'Digit_6LED.hex' und ein abschließendes Foto der Anzeige mit Frontrahmen.

nach oben

 

12. Einbaumodul reziproker Frequenzzähler 6-stell. LED-Anzeige

Zusammen aus der zuvor beschriebenen statischen 7-Segment LED-Ansteuerung und an anderer Stelle beschriebenen Schaltungen zur Frequenzmessung ist ein Einbaumodul entstanden, dessen nachfolgender Schaltplan viele Optionen aufweist. Das endgültige Programm dazu ist noch in Vorbereitung, der bisherige Quellcode kann aber schon verwendet werden 'Fmeter_LED328.c'. Die aktuelle .hex-Datei enthält <4kB Code und kann auch für einen ATmega48 erzeugt werden.

Ein paar Eckdaten:

 

Die Leiterplatte kann in Eigenregie gefertigt werden: 'fmeter_6LED.brd'.

Bilder vom fertigen Modul, welches hier mit 10MHz Quarz und Trimmkondensator bestückt ist. Bei 10MHz kann die Schaltung im Bereich 2,7V - 5V betrieben werden.

Ansicht von unten: als 7-Segmentanzeigen wurden hier solche mit 14,2mm Ziffernhöhe bestückt, die pinkompatibel zu 13mm Anzeigen sind.

nach oben

 

13. 6-stell. LED-Zähler mit Quadraturdekoder

Die zuvor gezeigte Schaltung läßt sich in abgemagerter Version zur Weg-/Umdrehungsmessung von Quadratursignalen verwenden. Die 90° verschobenen Signale werden mit "LT3" und "LT4" verbunden, wobei die Änderung jeder Flanke gezählt wird: 4-fach Auswertung. Da zu den Zähleingängen die internen pullup-Widerstände aktiviert sind, lassen sich auch passive Schalter (Reedrelais, Drehgeber) oder Hallsensoren mit offenem Kollektor-Ausgang (z. B. TLE4905) direkt anschließen. Als µC wird hier ein ATmega48/88 verwendet.

Das Programm 'qcnt_6led.hex' wertet Signale von Inkrementalgebern aus. In der vorliegenden Version werden Signale eines Längenmeßstabes mit 40µm Teilung erwartet. Diese werden auf 'mm' skaliert auf der 6-stell. 7-Segmentanzeige angezeigt. Der angezeigte Wert wird zusätzlich per UART ausgegeben.

Jede Flankenänderung an "LT3" (INT0) und "LT4" (INT1) wird mit einer schnellen Interruptroutine erfaßt. Diese sind in Assembler geschrieben: 'qcnt_6sub.s'.
Bei 20MHz CPU-Takt sind Flankenänderungen im Abstand bis 2µs möglich, was einer Signalfrequenz von 125kHz entspricht. Für die Assemblerroutinen sind einige Register des ATmega reserviert, um schnellste Interruptverarbeitung zu erreichen. Dies muß allerdings vom C-Compiler unterstüzt werden, wie es die Kickstart Version eines IAR-EW für AVR bietet.
Bitte beachten: Es müssen die Register R6 - R15 reserviert werden. CSTACK sollte >= 0x30 sein!
Das Hauptprogramm ist in C geschrieben: 'qcnt_6led.c'.

In der Regel werden Rechtecksignale von magnetischen oder optischen Gebern angelegt, die nicht prellen. Falls dies nicht garantiert werden kann, können die Eingangssignale per externen 2 x D-FF synchronisiert werden. An "LT1" (PD6) wird hierzu ein 500kHz Signal ausgegeben. Ferner kann die Signalerfassung auch intern synchronisiert werden (Timer0), wodurch jedoch die max. Eingangsänderungen auf >=2,5µs reduziert werden. Damit lassen sich auch mechanische Impulsgeber sauber erfassen. Ein '0'-Signal an "LT2" (PD5) beim Einschalten stellt diesen Modus ein, der den µC jedoch permanent zu 30% -> 50% auslastet.

Weiterhin können auch Sinus-Signale erfaßt werden, sofern ihre Amplituden >2Vss sind und der 0-Punkt der Signale bei Vcc/2 liegt. Hier haben die Eingangsschmitttrigger der ATmega48/88 ihre Schaltschwellen (siehe Datenblatt: Pin Threshold and Hysteresis).

Ein Schaltungsbeispiel dafür findet sich hier.

nach oben

 

14a. 4-stell. LED-Zähler, multiplex, reziproke Messung von Frequenz-Drehzahl, autom. Abgleich

Die gezeigte Schaltung benötigt nur wenige Bauteile, um einen reziproken Frequenzzähler mit 4-stelliger LED-Anzeige zu bauen. Eingangsfrequenzen von 0,1Hz - ca. 300kHz bzw. Drehzahlen von 6,000Upm - 999,9kUpm können gemessen werden. Das reziproke Meßverfahren sorgt dabei für schnelle Meßraten bei hoher Auflösung. Die maximale Meßrate ist auf 3 Messungen/s eingestellt. Minimal ist eine Periode notwendig, sodass z.B. bei Frequenzen von 1Hz 'nur' jede Sekunde ein neues, 4-stelliges Ergebnis angezeigt wird. Bei Frequenzen >= 1kHz oder Drehzahlen >=1kUpm signalisiert eine LED, dass das Ergebnis mit dem Faktor 1000 abzulesen ist.

Um bei konstanten Signalen die laufenden Messungen zu signalisieren, blinkt der '.' ganz rechts im Takt der Messung und bleibt dabei ca. 1/6s eingeschaltet. Bei fehlendem Eingangssignal oder bei Frequenzen < 0,100Hz erscheint in der Anzeige der Text 'tout'. Um unterschiedliche LED-Anzeigen und ggf. invertierende Treiber zu berücksichtigen, kann man die Pegel per #define anpassen. Ebenso können die Taktfrequenz, die Multiplexrate oder auch die Skalierung des Ergebnisses angepaßt werden. Die Kommentare im Quelltext weisen auf diese Optionen hin. Die .hex-Datei ist für einen ATmega48 erzeugt kann aber auch für einen ATmega88 verwendet werden.

Sofern man keine hohe Auflösung für niedrige Frequenzen/Drehzahlen benötigt und keine separate LED für 'kHz' bzw. 'kUpm' vorsehen möchte, kann man das Ergebnis in der Ausgaberoutine 'zeige_x()' mit 0,001 skalieren. Dadurch wird der Wert 1Hz zu 1mHz und in der Anzeige mit "0,001" dargestellt. Der Meßbereich 1Hz - 300kHz erscheint dann in der Anzeige mit "0,001" - "300.0". Gleiches gilt für Drehzahlmessungen.

2013-08-14:
Für einen einfachen Abgleich mit einem stabilen 1Hz Signal muß dieses am Signaleingang anliegen und der Eingang PB2 per ST2 auf GND gelegt werden. Nachdem die aktuelle Messung abgeschlossen ist, wird aus dem 1Hz-Referenzsignal ein Korrekturwert errechnet und im EEPROM an den Adressen 2-3 (low-high) permanent gespeichert. Die Anzeige von "8888" signalisiert den erfolgreichen Abgleich. PB2 kann wieder freigegeben werden.
Für den automatischen Abgleich muß der verwendete Quarz mit der vorgegeben F_CLOCK weitgehend übereinstimmen und der angezeigte Wert im Bereich 0,999 - 1,001 liegen. Andernfalls wird der Abgleich ignoriert.

2013-08-16:
Die aktuelle Version schaltet den µC nach 30 Sekunden in den 'power down', wobei die Stromaufnahme <1µA wird. Die genaue Zeit ergibt sich aus den Konstanten TOUT x ABSCHALTZEIT, die eigenen Bedürfnissen angepaßt werden können. Unter Umständen müssen auch die Digit- und Segmenttreiber für 'power down' angepaßt werden, damit keine Leckströme durch die Treiberschaltung entstehen. Passend zur C-Quelle auch die .hex-Datei.

Sofern mit anderen Referenzfrequenzen abgeglichen werden soll, kann der errechnete Korrekturwert manuell ins EEPROM geschrieben werden.

nach oben

 

14b. 4-stell. LED-Zähler wie zuvor mit 7-Segment oder BCD-Ausgang multiplex, Option: BCD-Ausgang statisch

2015-11-21:
Mit leicht veränderter Schaltung/Programm wird wie zuvor die Frequenz mit 4-stelligem Ergebnis gemessen. Die Messung der Drehzahl sowie die automatische Abschaltung entfallen. Dafür kann das Multiplex-Ausgabeformat wie gehabt für 7-Segment Anzeigen oder BCD-kodiert gewählt werden. Die Ansteuerung der 7-Segment Anzeigen ist bereits oben gezeigt; hier wird die Beschaltung mit BCD-Datenausgabe gezeigt, die mit Schließen von 'BR1' angewählt wird.

Die Ausgangspins, die zuvor für die LED-Anzeige benutzt wurden, werden bei BCD-Datenausgabe wie folgt verwendet:

Bit 0 - 3: BCD-kodierter Wert
Bit 4 - 5: zugehörige Stelle 0 - 3; 0 = MSB 3 = LSD
Bit 6: Übernahmeimpuls; gültige Daten wenn '0'
Bit 7: Dezimalpunkt aktiv '1'

'/WR' ist '1' während sich die Daten ändern und wird nach ca. 0,4 µs auf '0' gesetzt, nachdem die MPX-Daten gültig sind. Die Ausgangsdaten sind noch ca. 1,7 µs gültig, wenn '/WR' für die nächste Ausgabe wieder auf '1' gesetzt wird. Zur Datenübernahme können daher die positive oder negative Flanke und der '0'-Pegel als Schreibsignal verwendet werden. Die Datenausgabe erfolgt mit 400 Hz, sodaß ein kompletter Ausgabezyklus 10 ms benötigt.
Die Signale 'MSD' => 'LSD' werden unabhängig vom Ausgabeformat ausgegeben!

Optional können die Meßwerte im Bereich 0,00 Hz bis 9,999 kHz auch als statische BCD-Daten in Schieberegister 4094 geschrieben werden. Wie im Schaltbild gezeigt werden hierbei auch immer zwei Nachkommastellen ausgegeben. Die Ausgabe erfolgt immer nach einer gültigen Messung. Daher kann das 'STR'-Signal auch ohne Schieberegister als 'Fertig'-Signal für neue Daten verwendet werden: kurzer positiver Impuls ca. 7 µs.

Die .hex-Datei kann zunächst ohne Änderungen der 'fuses' des ATmega48/88 programmiert werden. Der µC läuft dann mit der sehr ungenauen (< 10%) internen 8 MHz Taktfrequenz des Prozessors. Damit der ext. Quarz als Taktquelle verwendet wird, müssen die CKSELx-Bits im 'fuse low byte' auf 3-8 MHz eingestellt werden; je nach Versorgungsspannung ist es auch sinnvoll, den 'brown-out detector' auf 2,7 oder 4,3 V einzustellen.

nach oben

 

15. 5-stell. LED-Zähler, multiplex, Vorteiler

Eine erweiterte Schaltung wie zuvor mit 5-stelliger Anzeige, diversen Status-LEDs für 'mHz', 'Hz', 'kHz', 'MHz', 'F', 'P', 'UPM', 'N' ... und passenden Eingängen zur Einstellung der Betriebsart. Mit opt. Vorteilern werden Eingangsfrequenzen bis 200 MHz gemessen.

Die Leiterplatte mit 10 mm LED-Anzeigen (befinden sich wie auch die Status-LEDs auf der Rückseite) paßt hinter einen Einbaurahmen mit Filterscheibe (siehe LCD-Anzeige weiter oben).

Eine Anwendung als 5-stelliger reziproker Frequenzzähler für Batteriebetrieb ist hier zu finden.

nach oben

zurück zur Übersicht