Guten Tag.
Ich hatte vor ein paar Tagens chon mal eine Frage zum Frequenzzählen mit einem Arduino.
Jetzt habe ich den Code soweit fertig und habe nun den Interrupt an pin 21. An pin 21 liegt testweise GND durch einen Taster getrennt.
Jedes mal, wenn ich den Taster betätige, schaltet GND durch und mein LCD zeigt mir dann auch die (von mir geschätzte) Frequenz an. Zwei mal drücken pro Sekunde: 2 Hertz plus einige Nachkommastellen und so weiter.
Das funktioniert schonmal. Nun habe ich einen anderen Arduino genommen und mir da einen pin wechselweise HIGH und LOW ausgeben lassen. Diese Zustände sollten dann ja auch eindeutig definiert sein, sodass ein "Springen" des Interrupts eigentlich vorbei sein sollte.
void setup(){
pinMode(8, OUTPUT);
digitalWrite(8, HIGH);
}
void loop(){
digitalWrite(8, LOW);
delay(200);
digitalWrite(8, HIGH);
delay(200);
}
Und nun habe ich das Problem, dass eigentlich immer irgendwas mit 70 HZ auf dem Display steht, sobald ich meinen zweiten Arduino als Eingang nehme...
Das ist der Code, der messen soll:
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
volatile unsigned long period = 0;
volatile unsigned long prevtime = 0;
volatile float f = 0;
volatile float delta = 0;
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop()
{
period;
f=1000000/(float)period;
delta = f*f*0.002;
detachInterrupt(2);
lcd.setCursor(0,0);
lcd.print("Freq=");
lcd.setCursor(5,0);
lcd.print(f, 4);
lcd.setCursor(14,0);
lcd.print("Hz");
lcd.setCursor(0,1);
lcd.print("d_f=");
lcd.setCursor(5,1);
lcd.print(delta,3);
lcd.setCursor(13,1);
lcd.print("mHz");
Serial.println(period);
attachInterrupt(2, Frequenz, RISING);
}
void Frequenz()
{
period = micros() - prevtime;
prevtime = micros();
}
Vielleicht kann sich das mal jemand gönnen und mir einen Tipp geben, in welcher Richtung die Fehler sind.
Als Anmerkung: Ich bin noch nicht ganz so lange dabei ;).
Vielen Dank im Voraus und ein angenehmes Wochenende ;).