Forum: Mikrocontroller und Digitale Elektronik Externer Frequenzzähler


von Hans K. (xon)


Lesenswert?

Moin, ich weiß, dass ein ähnliches Thema schon zu genüge hier im Forum 
diskutiert wurde, aber irgendwie helfen mir die anderen Beiträge nicht 
weiter...

Ich möchte folgendes bauen: Einen externen Frequenzmesser (im Bereich 
von 0 bis 300 Hz) für den PC. Der soll einfach ein Rechtecksignal zu 
einer Zahl umwandeln und dann zum Rechner schicken, so dass ich ihn da 
weiterverwenden kann... Ich hab mir schon einige Gedanken gemacht, aber 
ich weiß nicht ob ich umbedingt noch Bauteile vor den Controllereingang 
bauen muss...

Und dann bin ich mir noch nicht ganz sicher, wie ich bei meinem 
Controller (ATmega 8) einen so "großen" Timerwert zur Auswertung 
erzeugen kann. Mache ich das so, dass ich den Counter immer bis max. 
hochzählen lasse und dann wieder zurücksetzte?

greetz

von Ulrich (Gast)


Lesenswert?

Für die Messung so niedriger Frequenzen nimmt man am besten den ICP 
Eingang.  Über die Input Capture Funktion kann dann der Zählerstand von 
Timer 1 (16 Bit) für die Flanken gemessen werden. Der Timer1 läuft dabei 
die ganze Zeit durch. Die Periodendauer egibt sich dann aus der 
Zeitdifferenz zwischen 2 Flanken der selben Sorte.
Wenns einfach sein soll wählt man den Prescaler so, das sich die 
Zeitdifferenz noch als 16 Bit Wert darstellen läßt. Bei 0 Hz geht das 
natürlich nicht mehr.

von Hmm... (Gast)


Lesenswert?

> Moin, ich weiß, dass ein ähnliches Thema schon zu genüge hier im Forum
> diskutiert wurde, aber irgendwie helfen mir die anderen Beiträge nicht
> weiter...

Wieso denn nicht?

> Ich möchte folgendes bauen: Einen externen Frequenzmesser (im Bereich
> von 0 bis 300 Hz) für den PC. Der soll einfach ein Rechtecksignal zu
> einer Zahl umwandeln und dann zum Rechner schicken, so dass ich ihn da
> weiterverwenden kann...

Am simpelsten wär es, wenn dein Frequenzzähler jede volle Sekunde den 
Wert in einen String verpackt per UART verschickt.

Hat dein PC denn noch eine serielle Schnittstelle? Falls ja nimm einen 
MAX232 (siehe Tutorial) und gut ist. Falls nicht besorg dir noch einen 
USB-Seriell-Wandler. Wenn du nur periodisch Strings an den Rechner 
sendest sollte hier sogut wie jeder Wandler (10€ Digitus Dongle) 
funktionieren.

> Ich hab mir schon einige Gedanken gemacht, aber
> ich weiß nicht ob ich umbedingt noch Bauteile vor den Controllereingang
> bauen muss...

Tja, kommt drauf an wie dein Signal aussieht (Signalpegel) und mit 
welcher Betriebsspannung du deinen Atmega8 betreiben willst/musst.

Wo kommt dein zu messendes Signal her?
Welche Spannung ist zu erwarten?

Falls dein Controller mit +5V läuft und das Signal ebenfalls 5V-Pegel 
hat würde ich am Eingang einfach eine 5.6V Z-Diode gegen Masse und 
Betriebsspannung vorsehen. Das reicht als einfache Schutzbeschaltung.

> Und dann bin ich mir noch nicht ganz sicher, wie ich bei meinem
> Controller (ATmega 8) einen so "großen" Timerwert zur Auswertung
> erzeugen kann. Mache ich das so, dass ich den Counter immer bis max.
> hochzählen lasse und dann wieder zurücksetzte?

Wieso, der 16-Bit Timer kann immerhin bis 65535 zählen, falls du ihn mit 
dem zu messenden Signal takten magst. Der 8-Bit Timer sorgt (per 
Interrupt) dann für eine Torzeit für 1s. Sobald die Torzeit rum ist 
startet gleich die nächste Messung und die letzte wird umgerechnet und 
verschickt.

von [Frank] (Gast)


Lesenswert?

@Hans Krabe

Hier eine Minimalversion bis 5MHz mit Tiny2313 und serieller 
Schnittstelle.
http://cappels.org/dproj/30MHzfmeter/30MhzFmtr.html

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.