Frequenzzaehler AVR-GCC

OP #1716664
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
Angehängte Dateien:
#1717064
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren