Forum: Mikrocontroller und Digitale Elektronik attachInterrupt LC Filter ?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Karsten S. (kahnsoft)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht 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 Karsten S. (kahnsoft)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
von Karsten S. (kahnsoft)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.