Gast
#3100172
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.


