Forum: Projekte & Code Frequenz / Drehzahl, 4-stell. 7-Segm.-LCD, ATtiny45


von M. N. (Gast)


Angehängte Dateien:

Lesenswert?

Anbei eine Schaltung mit Programm 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.
Das Programm ist eine abgemagerte Version eines 4-Kanal Drehzahlmessers, 
der hier beschrieben wurde: 
Beitrag "4-Kanal Drehzahlmessung mit ATmega88"

Die Grundschaltung und auch die Ansteuerung der LC-Anzeige sind an 
anderer Stelle schon beschrieben, wobei hier einige Bauteile / 
Programmteile weggelassen wurden. 
Beitrag "7-Segm. LCD-Ansteuerung, 4-stelliges Einbaumodul, Attiny45"

Timer0 dient wie gehabt 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, zählt die Impulse und ermittelt anhand Timer1 
den genauen Zeitpunkt dazu.
Die Auswertung läuft in main() über uint32_t Variablen. Dies reicht mit 
entsprechender Skalierung für 4-stellige Ergebnisse aus.

Für den Versuchsaufbau kann der interne 8MHz RC-Oszillator des Attiny45 
genutzt werden; sinnvoll wird die Schaltung aber erst mit einem Takt aus 
einem quarzstabilem Taktgenerator.

von M. N. (Gast)


Angehängte Dateien:

Lesenswert?

Mittlerweile habe ich den Versuchsaufbau um einen 8MHz Quarzoszillator 
(XO53) erweitert und das Programm ein wenig verändert. Abweichend vom 
Schaltplan muß 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).
Anbei das geänderte Programm und Fotos vom Aufbau.

von M. N. (Gast)


Lesenswert?

Zu den obigen Programmen habe ich diverse Varianten probiert, die ich in 
lockerer Form hier aufgelistet habe: 
http://www.mino-elektronik.de/7-Segment-Variationen/LCD.htm#lcd2

In der letzten Version bin ich von der ursprünglichen uint32_t Rechnerei 
ganz abgewichen und voll auf float-Berechnungen umgestiegen: das 
Programm ist überschaubarer und der Code ist trotz Erweiterungen mit 
2600 Byte recht klein geblieben.
Ohne den ext. Quarzoszillator ist die Genauigkeit zwar reduziert, dafür 
kann der µC nach einer Abschaltzeit (hier 30s) automatisch in den 
power-down Modus gehen. Das Ergebnis ist ein Frequenz-/Drehzahlmesser, 
der sich nur bei anliegendem Signal einschaltet.

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
Noch kein Account? Hier anmelden.