Forum: Mikrocontroller und Digitale Elektronik Hilfe zu "Interrupt" Befehl


von Julian L. (gama)


Lesenswert?

Guten Tag!
Ich bin noch ein ziemlicher Anfänger in Sachen Microcontroller und 
schäme mich fast eine so banale Frage überhaupt zu stellen. Ich habe mir 
ein Arduino Board bestellt und habe nun dazu eine Frage.
Ich habe eine Tonabfolge programmiert und möchte nun diese per Tasten 
druck abbrechen. Da aber der Zustand des Buttons am Anfang meiner 
Hauptschleife abgefragt wird, muss ich praktisch den Taster die ganze 
Zeit gedrückt halten, bis meine Schleife von vorn beginnt, damit der 
Befehl "noTone" ausgeführt werden kann. Ich aber möchte, dass der 
"Sound" sofort beendet wird. Nun habe ich mich etwas informiert und bin 
auf den Begriff "Interrupt" gestoßen. Doch auch nach längerem 
recherchieren habe ich noch nicht die genaue Aufbauweise und wie ich 
diesen Befehl in meinen Sketch einbauen kann durchschaut. Daher wäre ich 
Euch sehr verbunden, wenn ihr mir etwas auf die Sprünge helfen könntet. 
Vielen Dank im voraus
Gruß Julian

von Düsendieb (Gast)


Lesenswert?

eine pffigere Programmierung in der Hauptschleifer erreicht das Ziel 
auch.

Du hast bestimmt mit delay gearbeitet.

Lass die weg und arbeite mit einem Timertakt und einigen If Abfragen

von Julian L. (gama)


Lesenswert?

Vielen Dank für Deine Antwort!
Doch ist es nicht einfacher und schneller ohne die vielen If Schleifen?
Außerdem habe ich oben genannt,dass ich mich noch nicht so gut auskenne, 
daher wäre es sehr nett, wenn du mir sagen könntest was ein "Timertakt" 
ist und wie man ihn einsetzt :-)
Vielen Dank!

von Helfer (Gast)


Lesenswert?

Mit dem Thema bist du schon mitten in der Programmierung für 
Fortgeschrittene.

Ein grundsätzlicher Weg ist:

1. Du benutzt einen Timer Interrupt, der alle x Millisekunden die Taste 
abfragt und das Ergebnis in einer Hilfsvariable speichert. Im Grunde 
funktioniert das wiehier im AVR-GCC-Tutorial im Timer-Aschnitt 
beschrieben.

2. Das regelmäßig ausgeführte Hauptprogramm (loop also), schaut in der 
Hilfsvariable nach und reagiert entsprechend. Die Hilfsvariable muss 
allerdings volatile gekennzeichnet sein. Warum steht im Artikel über die 
Interrupts.

Um das Thema Prellen/Entprellen bei Tasten zu entschärfen, kannst du die 
Routine in 1. entsprechend schreiben. Also z.B. ändert sich die 
Hilfsvariable erst, wenn x-mal hintereinander der gleiche Tastenwert 
anliegt. Näheres zum Entprellen steht im gleichnamigen Artikel.

Beim Aufsetzen eines Timers in der Arduino Umgebung muss man beachten, 
dass für eigene Zwecke nur TIMER1 und TIMER2 benutzbar sind, denn TIMER0 
ist der Systemtimer des Arduino. Näheres dazu in 
http://wiki.mediazone.co.nz/Arduino+Timer+Interrupts

von Falk B. (falk)


Lesenswert?

Das Zauberwort heißt Multitasking und ist eigentlich einfacher als 
man denkt.

MFG
Falk

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

>If Schleifen
uuuh, iiiih, es gibt keine IF-Schleifen, nur Abfragen ;)

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.