Forum: Projekte & Code Frequenzzaehler AVR-GCC


von Marko B. (glagnar)


Angehängte Dateien:

Lesenswert?

Hi,

ich hab mir mal auf die Schnelle einen Frequenzzaehler gestrickt. Die 
Hardware besteht erstmal nur aus einem nackten Mega16 auf einem STK500, 
welcher von einem 16MHz Quarz getaktet wird, und einem Text-LCD. Zur 
Messung benutze ich zwei Timer: einmal den Timer0, welcher alle 1ms 
Interrupts generiert und eine ms-Variable hochzaehlt (fuer die Gate 
Time) und zum anderen den Timer1, der die Pulse am T1-Pin zaehlt. Die 
maximale Frequenz die mit dem T1 Pin gemessen werden kann ist F_CPU/2, 
hier also 8 MHz.

Die Ueberlaeufe von Timer1 werden in einer 8-bit Variablen mitgezaehlt. 
Damit betraegt der maximale Zaehlwert 2^24. Somit ist eine Aufloesung 
von 1Hz moeglich.

Der Zaehlvorgang laeuft folgendermassen ab:

Timer1 starten
Timer0 starten
Warten bis ms=x
Timer1 stoppen
Timer0 stoppen

Die einzigen Ungenauigkeiten sind jetzt die Zeit, die gebraucht wird um 
den Timer0-Interrupt abzuarbeiten, sowie die Zeit, die ein Durchlauf der 
Warteschleife benoetigt. Diese muessen also nachher abgezogen werden.

Das ganze funktioniert soweit ganz gut. Ein 1MHz Quarzoszillator (100ppm 
laut Datenblatt) wird mit 1000100 Hz angezeigt. Zusammen mit den 30ppm 
des 16MHz Quarzes ist das plausibel. Waere aber schoen wenn jemand die 
Korrektheit des Messalgorithmus' bestaetigen koennte!

TODO:

- Formatierte Ausgabe mit 1000er Trennzeichen
- Messmodus fuer langsamere Signale mittels Messung der Periodendauer 
ueber ICP-Pin inkl. Tastverhaeltnismessung
- Vorverstaerker fuer kleine Amplituden
- Vorteiler fuer hoehere Frequenzen
- Impulszaehlmodus

von Karl H. (kbuchegg)


Lesenswert?

Anregung:
Wenn du die Timer startest:
Warte zuerst, bis du eine Steigende Flanke am Messeingang registrierst. 
Auf die Art hast du keinen Jitter bei Beginn der Messung.

Die Abfrage, ob die Zeit um ist, kannst du auch in die TIMER0_COMP 
legen, die bei abgelaufener Zeit ein Flag auf 1 setzt und gleichzeitig 
den Timer 1 wieder dich macht. Dann bist du die Ungenauigkeit durch die 
Warteschleife weitgehend los.

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.