Hallo zusammen, ich habe mit einem Arduino nano einen Interrupt handler über den Port 2 hergelitten. Alles wunderbar. Leider zählt der Interrupt alles mögliche nur nicht meine vom Freq. Genrator gelieferten 5V Rechtecke, da entstehen doppelmessungen. Ich möchte von 0.5Hz bis 1Mhz lediglich einen flanken-Counter inkrementieren der bei einem bestimmten stand einen anderen Puls liefert zb. um eine Kamera zu triggern die über die Impulse auf der Achse geliefert werden. Muss hier ein LC Glied eingebracht werden ? Warum zählt der Counter gegen Masse ich hätte sehr gerne das dieser erst im Positiven Fall alktiv wir.. Hier mal das funktinierende Example mit Serial Feedback. int LED=13; int OUTPORT=5; volatile unsigned long alteZeit=0, entprellZeit=1000,ti,stat=0,cnt(0); void setup() { Serial.begin(115200); pinMode(OUTPORT, OUTPUT); // LED Pin pinMode(LED, OUTPUT); // LED Pin pinMode(2, INPUT); // Pin 2 ist INT0 digitalWrite(2, HIGH); // interner Pull up Widerstand auf 5V (gegen Masse=HIGH gegen 5V=LOW) attachInterrupt(0, interruptRoutine, LOW); // Pin 2 (INT 0) geht auf 0V (LOW) dann interruptRoutine aufrufen } void loop() { delay(1000); // Dauerschleife //unsigned long time; //Serial.print("Time: "); //time = micros(); //prints time since program started Serial.println(cnt); cnt=0; // wait a second so as not to send massive amounts of data } void interruptRoutine() { ti=micros(); if((ti - alteZeit) > entprellZeit) { stat^=1; digitalWrite(LED, stat); // OUT umschalten digitalWrite(OUTPORT, stat); // LED umschalten alteZeit = ti; // letzte Schaltzeit merken cnt++; } } Der Input flattert reichlig, danke für Hinweise.. Grüße aus Berlin Karsten
Karsten S. schrieb: > attachInterrupt(0, interruptRoutine, LOW); Der Interrupt feuert während der gesamten LOW Phase. Ohne Unterlass. Karsten S. schrieb: > ich hätte sehr gerne das dieser erst > im Positiven Fall alktiv wir. Dann sage im das! Tipp: Er kann auch "Flanke"
Hallo und Danke für die schnelle Antwort, bisher habe ich mit Atmelstudio gewirkt, dort mache ich das über Register. Das mit Arduino ist aber sehr schön für Versuche, wie genau beschreibe ich denn da eine Flanke ? Normalerweise hat man dort noch einen Timer mit dabei. Danke für weitere Hinweise Karsten
Hmm... Arduino Doku noch nicht gefunden? Hier, ein Anfang: https://www.arduino.cc/en/Reference/AttachInterrupt Karsten S. schrieb: > dort mache ich das über Register. Das kannst du beim Arduino genau so machen.
Danke für deine Hinweise, sehr gut habe das Flag OnChange gefunden damit geht es. Aber nur bis 1.1 Khz dann kommt der gar nicht mehr mit, gibt es hinweise wie man das auf 100 Khz ziehen könnte.. scheint so bei weitem zu langsam zu sein .. hmm.,. schlechte Nachricht für mich wenn das der Fall sei.. Danke Grüße Karsten
Wenn du Flanken zählen willst, dann nimm einen Zähler, sonst auch Timer genannt. Der hat einen Eingang für solche Zwecke. Bei vielen Arduinos ist Timer1 für sowas zuständig.
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.