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