Forum: Mikrocontroller und Digitale Elektronik Frequenzmessen


von anfänger0815 (Gast)


Lesenswert?

Hallo Forum,
bräuchte nur einen Anstupser. Wie würdet ihr mit einem, mit 16 Mhz, 
getakteten Atmega 8535 350 KHz messen. Ich verwende im Moment die 
Methode, daß bei jedem Nulldurchgang ein Inerrupt ausgelöst wird und 
dann der Zählerstand ausgelesen wird. Funktioniert aber nur bis knapp 80 
KHz, dann ist reppo, ich denke einfach zu viele Ints.

von Ulrich (Gast)


Lesenswert?

Etwas besser als mit einem Interrupt und auslesen des Timer vom Hand ist 
die Verwendung der ICP Funktion. Da macht die Hardware das Auslesen des 
Timers. Das wird zumindest genauer als mit dem Interrupt, aber erst 
einmal auch nicht schneller. Wenn man sich Anstrengt sollte man die 350 
kHz im Interrupt noch gerade so hinbekommen, in ASM auch noch einiges 
mehr.

Die ICP Funktion kann man auch ohne Interrupt nutzen, durch pollen der 
Signal Bits. Das wird ggf. etwas schneller.
Schneller ginge es auch mit einem externen Hardware Teiler, so dass man 
nicht mehr die 350 kHz sondern etwa 1/16 oder 1/256 davon misst.


Die Alternative wäre sonst das Zählen der Pulse in einer festen Zeit 
über den T1 Eingang, so wie bei einem klassischen Zähler.

von MaWin (Gast)


Lesenswert?

anfänger0815 schrieb:
> Wie würdet ihr mit einem, mit 16 Mhz,
> getakteten Atmega 8535 350 KHz messen

16 bit Timer im input capture mode.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Willst Du nur messen, ob die 350kHz auch 350kHz sind oder musst Du noch 
de Phaselage auswerten?

Ansonsten:
Im Nulldurchgangs-Interrupt nur einen Zähler inkrementieren (3 Byte) und 
nach genau 1 Sekunde diesen auslesen und zu Null setzen und nach einer 
weiteren Sekunde wieder auslesen und so weiter. Die 
Input-Capture-Methode (reziprokes Messen) sollte man eher bei 
niedrigen zu messenden Frequenzen nutzen.

: Bearbeitet durch User
von anfänger0815 (Gast)


Lesenswert?

Danke erst einmal für eure Antworten. Jetzt muß ich mich erst einmal 
einlesen um die Richtige Methode zu finden. Danke nochmal und ein 
schönes WE

von W.S. (Gast)


Lesenswert?

Knut Ballhause schrieb:
> Die
> Input-Capture-Methode (reziprokes Messen) sollte man eher bei
> niedrigen zu messenden Frequenzen nutzen.

mal präzise: immer dann, wenn die zu messende Frequenz niedriger ist als 
die effektive Refrenzfrequenz, liefert die sogenannte Reziprok-Methode 
eine höhere Auflösung als die Nicht-Reziprok-Methode. Der Unterschied 
zwischen beiden ist technisch marginal: bei der Reziprokmethode öffnet 
das Meßtor taktsynchron zum Eingangssignal und schließt auch wieder 
taktsynchron dazu, während bei der Nicht-Reiprok-Methode das Meßtor 
taktsynchron zum Referenztakt öffnet und schließt. Ob das Meßtor nun ein 
Stück Hardware ist oder ein Zustand in einem Programm, ist für's Prinzip 
egal.

W.S.

von anfänger0815 (Gast)


Lesenswert?

Ich habe jetzt die Lösung. Ich mess die Frequenz nicht mehr leufend, 
sondern nur noch 10 mal in der Sekunde. D.h. ich gebe den Interrupt 
frei, warte bis er auslöst, setzte den Zähler auf Null. Beim nächsten 
Auslösen sperre ich den Interrupt und lese den Zähler aus.

von Irgendwer23 (Gast)


Lesenswert?

Hi,

teile dir die Frequenz doch herunter, z.B. mit einem Zähler.

Ob das mit den internen Timern ATMEGAS geht, keine Ahnung. Vermutlich 
aber schon irgendwie. Sonst muss man halt einen externen Zähler nehmen, 
kostet ja fast nix.

Wenn du dir die Frequenz z.B. um den Faktor 32 verkleinerst und dann 
misst, müsste das viel leichter und präziser gehen, weil auch der Fehler 
durch den 16MHz Takt kleiner ist.

von anfänger0815 (Gast)


Lesenswert?

Wäre eine Möglichkeit, ist aber wieder ein zusätzliches Bauteil

von Mike (Gast)


Lesenswert?

anfänger0815 schrieb:
> ich gebe den Interrupt frei

ach den ...

von Ulrich (Gast)


Lesenswert?

Bei 350 kHz ist die Messung nur einer Periode nicht besonders genau. Das 
sind ja nur um die 50 Taktzyklen. Da müsste man schon die Zeit für viele 
Perioden (Größenordnung 1000) messen: also die Startzeit ablesen, und 
dann erst einmal nur zählen und dann nach z.B. 1000 Perioden die 
Stopp-zeit ablesen. Wenn man es geschickt anstellt, sollte das bei 350 
kHz noch gerade so in C gehen - zur Not halt die ISR in ASM.

Die Alternativ bei so hoher Frequenz wäre halt klassisch zählen, über 
den T1 Eingang. Das ist der geringere Aufwand und immer noch besser als 
die Zeit für nur 1 Periode.

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.