Forum: Mikrocontroller und Digitale Elektronik Interrupt-Problem


von NormalerTyp (Gast)


Lesenswert?

Hallo an alle,

ich arbeite gerade mit der Arduino IDE und verwende in einem Code einen 
einfachen Interrupt. Da delay() ja nicht funktioniert, spricht etwas 
dagegen, den Programmfluss durch einige rechenintensive Codeteile zu 
verlangsamen? Ich habe in der IDE keinen Befehl gefunden, mit dem sich 
eine Interrupt Routine verlangsamen lässt und delayMicroseconds() 
funktioniert auch nicht.
Danke im Voraus,

NormalerTyp

von Karl H. (kbuchegg)


Lesenswert?

NormalerTyp schrieb:
> Hallo an alle,
>
> ich arbeite gerade mit der Arduino IDE und verwende in einem Code einen
> einfachen Interrupt. Da delay() ja nicht funktioniert

sagt wer?

> spricht etwas
> dagegen, den Programmfluss durch einige rechenintensive Codeteile zu
> verlangsamen?

Die Frage ist: warum willst du etwas verlangsamen?

Wenn es um Zeitstuerungen geht (die länger als ein paar µs sind), dann 
ist ein Warteschleifenansatz sowieso meistens der falsche Weg. 
Timer-Interrupt, eventuell mit Abzählen der Aufrufe, ist der saubere 
Weg.

von NormalerTyp (Gast)


Lesenswert?

Auf arduino.cc steht, delay() funktioniert in einer Interrupt-Routine 
nicht.
Siehe -> http://arduino.cc/en/Reference/AttachInterrupt
Etwas runterscrollen, da steht es in kursiver Schrift.

NormalerTyp

von Karl H. (kbuchegg)


Lesenswert?

NormalerTyp schrieb:
> Auf arduino.cc steht, delay() funktioniert in einer Interrupt-Routine
> nicht.


Ah.
OK. Das war mir nicht klar, dass du von delay in einer ISR sprichst, 
bzw. wie die Arduino Lib bei einem delay vorgeht.

Nichts desto trotz: Über welche Zeiten reden wir bei 'Verzögerung' und 
warum muss das in einer ISR passieren?

von NormalerTyp (Gast)


Lesenswert?

Ich habe ein Display an den Arduino angeschlossen, auf dem bei Auslösen 
eines externen Interrupts eine Zahl heruntergezählt werden soll (Und 
zwar in Sekunden). Dafür brauche ich ja eine Verzögerung.
Wenn schon ein Moderator sagt, dass ein Timer besser ist, wird der auch 
verwendet ;)
Ich habe mich gerade schlaugemacht und gesehen, dass es eine Library 
namens TimerOne gibt, mit der sich einfach ein Timer einbinden lässt.
Werde ich schnell ausprobieren.

NormalerTyp

von Karl H. (kbuchegg)


Lesenswert?

NormalerTyp schrieb:
> Ich habe ein Display an den Arduino angeschlossen, auf dem bei Auslösen
> eines externen Interrupts eine Zahl heruntergezählt werden soll (Und
> zwar in Sekunden). Dafür brauche ich ja eine Verzögerung.
> Wenn schon ein Moderator sagt, dass ein Timer besser ist, wird der auch
> verwendet ;)
> Ich habe mich gerade schlaugemacht und gesehen, dass es eine Library
> namens TimerOne gibt, mit der sich einfach ein Timer einbinden lässt.
> Werde ich schnell ausprobieren.

Gut. Das ist der richtige Weg.

Ein delay ist meistens nicht die Lösung, sondern schafft in einem 
Programm erst recht die Probleme.

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.