Hallo, ich wollte mit einem Arduino (Eigentlich ja egal) eine Frequenz messen, die ich von einer anderen Schaltung bekomme. Die Frequenz liegt im Bereich 0.5 bis ca. 150 Hertz und die Spannungspegel schwanken zwischen High~2.5V und Low~0.5V. Ich dachte jetzt daran, dass ganze mit einem Spannungsteiler an einen Digitalpin zu schalten und dann per Interrupt z.B. die fallenden Flanken zu messen. De Anzahl würde ich dann in einer Variable speichern und per Timer das ganze genau jede Sekunde ausgeben, wenn höhere Genauigkeit, dann würde ich eben 2,3 Sekunden nehmen und den Wert der Variable genau hierdurch teilen, dann komme ich ja genau auf die Hertz. Kann das so klappen oder wie messt ihr eine solche Frequenz?
Jeromyo Hochgesang schrieb: > Kann das so klappen oder wie messt ihr eine solche Frequenz? Mit einem reziproken Frequenzzähler. Bei niedrigen Frequenzen von z.B. 1Hz wirst du keine Lust haben, eine viertel Stunde zu warten, um sie auf 3 Stellen genau zu bestimmen. Beitrag "Frequenzzähler 1Hz - 40MHz"
Jeromyo Hochgesang schrieb: > Hallo, > > ich wollte mit einem Arduino (Eigentlich ja egal) eine Frequenz messen, > die ich von einer anderen Schaltung bekomme. Die Frequenz liegt im > Bereich 0.5 bis ca. 150 Hertz und die Spannungspegel schwanken zwischen > High~2.5V und Low~0.5V. Ich dachte jetzt daran, dass ganze mit einem > Spannungsteiler an einen Digitalpin zu schalten und dann per Interrupt > z.B. die fallenden Flanken zu messen. De Anzahl würde ich dann in einer > Variable speichern und per Timer das ganze genau jede Sekunde ausgeben, > wenn höhere Genauigkeit, dann würde ich eben 2,3 Sekunden nehmen und den > Wert der Variable genau hierdurch teilen, dann komme ich ja genau auf > die Hertz. Kann das so klappen oder wie messt ihr eine solche Frequenz? Atmel Datenblatt (z.B. ATmega 2560), Vih, Input High Voltage (Except XTAL1 and RESET pins): 0.6VCC. Beim 5V-Arduino ist Vih also 3V, und die erreichst du mit High~2.5V nicht sicher. Also besser einen Level Shifter vorschalten oder einen 3.3V uC nehmen.
Danke Sebastian, die Spannung kann ich an der anderen, frequenzerzeugenden Schaltung mit Leichtigkeit ändern, dann stelle ich sie auf ca. 3 Volt ein, danke!
Um Dein Eingangssignal mit dem genannten Pegel direkt auszuwerten, eignet sich am besten der Eingang AIN1 in Kombination mit der ICP-Funktion des Timers 1. Die Schaltschwelle kann man mit AIN0 vorgeben, oder stattdessen die interne 'bandgap reference' verwenden. Beim ATmega328 (zum Beispiel) liegt diese bei ca. 1,1V, was für Dein Signal gut passen würde. Ferner kannst Du anstatt AIN1 über den ADC-Multiplexer auch jeden anderen ADCx-Eingang als Signaleingang benutzen, sofern der ADC nicht anderweitig verwendet wird. Mit ICP und T1 zu arbeiten, liefert die höchste Auflösung. Falls Dir ein 4-5 stelliges Eregbnis reicht, kann man das Signal auch mit der PCINT-Funktion an irgendeinem beliebigen Eingang erfassen. Das Datenblatt beschreibt die typischen Schaltschwellen und Hysteresen der digitalen Eingänge. Bei den neueren AVRs liegen die Schaltschwellen bei rund VCC/2 und die Hysteresen bei einigen 100mV. Sofern Du Dein Signal mit einem Spannungsteiler in Richtung VCC verschiebst, kannst Du die PCINT-Funktion nutzen. Bei geringerer Auflösung kann dann jeder Timer verwendet werden, indem er ohne Vorteiler läuft und nur die Überläufe als Zeitreferenz verwendet werden. Eine feinere Auflösung erhält man durch Auslesen des Timers in der PCINTx-Interruptroutine. Damit sind die Messzeiten auf rund 10µs genau zu erfassen, was bei 1s Messzeit 5-stellige Ergebnisse liefert. Ein Beispielprogramm findest Du hier: Beitrag "Frequenz / Drehzahl, 4-stell. 7-Segm.-LCD, ATtiny45" wobei Du Dich zunächst nur auf die Interruptroutinen von T1 (beim ATtiny45 nur 8 Bit breit) und die Auswertung konzentrieren solltest.
Über die Eingänge muss ich mir noch genauer Gedanken machen, aber ich denke ich mache es über einen ADC-Eingang,da stehen noch genug zur Verfügung.Aber wie gesagt, ich werde mir zunächst noch die Schaltschwellen ansehen und an der Interruptroutine arbeiten.
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.