Forum: Mikrocontroller und Digitale Elektronik attachInterrupt LC Filter ?


von Kahn P. (Gast)


Lesenswert?

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

von Einer K. (Gast)


Lesenswert?

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"

von Kahn P. (Gast)


Lesenswert?

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

von Einer K. (Gast)


Lesenswert?

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.

von Kahn P. (Gast)


Lesenswert?

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

von Einer K. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.