000
12.11.2023, 23:40 Uhr
Egon
|
Hallo,
gegeben: -Arduino UNO 3 mit Atmega 328 -passendes LCD-Shield
Ich versuche mich ja seit einiger Zeit an einem Frequenzzähler der mal eine spezielle Funktion ausführen soll, jedoch bin ich schon mit der Umsetzung am Anfang etwas überfordert.
Die späteren Funktionen mal nicht betrachtet geht es um einen Zähler der zwei Eingänge hat, genannt fA und fB. fA stellt dabei das Tor dar, fB ist die Messgröße die dabei gezählt wird.
Als Anfänger habe ich nun einen Kanal aufgebaut und mich dabei an die Grundfunktionen des 328 gehalten und einen Kanal als einfachen Zähler programmiert der über die Periodenzeit die Frequenz berechnet. Ich habe das bewusst gewählt weil ich mit Timern etc. gar keine Erfahrung habe.
Das Problem:
Mein Generator liefert exakt jede Frequenz mit weniger als 0,01% Abweichung, aber die Messwerte die ich bekomme sehen grob so aus:
Generator (Hz)....Arduino 50...................>50,37 100.................>100,77 500.................>503,52 1000...............>1007,04 5000...............>5128,00 10000.............>10006,92
Mein Programm sieht so aus:
#include <LiquidCrystal.h> int input=12;
int high_time; int low_time; float time_period; float frequency; LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup() { pinMode(input,INPUT); lcd.begin(16, 2); } void loop() { lcd.clear(); lcd.setCursor(0,0); lcd.print("Frequency Meter");
high_time=pulseIn(input,HIGH); low_time=pulseIn(input,LOW);
time_period=high_time+low_time; time_period=time_period/1000; frequency=1000/time_period; lcd.setCursor(0,1); lcd.print(frequency); lcd.print(" Hz"); delay(500); }
Frage:
Woher kommen die Fehler die die oben genannte Abweichung begründen? Ich bin davon ausgegangen das bei so niedrigen Frequenzen der Weg über die Periodendeauer die besten Ergebnisse liefern sollten. Grüße Egon Dieser Beitrag wurde am 13.11.2023 um 00:13 Uhr von Egon editiert. |