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