Forum: Mikrocontroller und Digitale Elektronik AVR per Interrupt (Tasterdruck) ins Unterprogramm


von Stefan Friedse (Gast)


Lesenswert?

Hallo :)

Bin ganz neu beim Thema AVR und habe eine Frage zu Interrupts. Ich hoffe 
ihr könnt mir helfen.

Ich habe einen ATMega32 und möchte per Taster an PD2 von einem 
Unterprogramm ins Andere und beim nächsten Taster-Druck wieder 
zurückwechseln. Ist das möglich? Könnt ihr mir einen Codeschnipsel 
hinwerfen? Werde aus dem AVR-GCC-Tutorial (Ich nutze gcc/studio) an der 
Stelle leider nicht schlau. Reicht als Entprellung nach dem 
Programmwechsel ein kurzer Delay?

Viele Grüße und Danke im Voraus!!

von Karl H. (kbuchegg)


Lesenswert?

Stefan Friedse schrieb:
> Hallo :)
>
> Bin ganz neu beim Thema AVR und habe eine Frage zu Interrupts. Ich hoffe
> ihr könnt mir helfen.
>
> Ich habe einen ATMega32 und möchte per Taster

Taster und Interrupts sind eine schlechte Idee.

> zurückwechseln. Ist das möglich? Könnt ihr mir einen Codeschnipsel
> hinwerfen?

Klar.
Die beste Methode sieht so aus
http://www.mikrocontroller.net/articles/Entprellung#Komfortroutine_.28C_f.C3.BCr_AVR.29

von Stefan Friedse (Gast)


Lesenswert?

Ich kenne mich ja nicht aus. Wie löst man es sonst?
Ich möchte per Taster in ein Unterprogramm und beim nächsten Tasterdruck 
wieder herauswechseln.

von möööp (Gast)


Lesenswert?

mach es mit einem zustand
und frage den taster zyklisch ab

von Karl H. (kbuchegg)


Lesenswert?

Stefan Friedse schrieb:
> Ich kenne mich ja nicht aus. Wie löst man es sonst?

Im Link ist alles was du brauchst

> Ich möchte per Taster in ein Unterprogramm und beim nächsten Tasterdruck
> wieder herauswechseln.

Bau die Funktionalität aus dem Link ein.
Ein Aufruf von get_key_press sagt dir ann alles weitere

von Stefan Friedse (Gast)


Lesenswert?

Das verstehe ich leider nichtmal ansatzweise :(

von Karl H. (kbuchegg)


Lesenswert?

Stefan Friedse schrieb:
> Das verstehe ich leider nichtmal ansatzweise :(

Musst du auch nicht.
Das ist eine der wenigen Funktionalitäten, bei denen es ok ist, sie 
nicht zu verstehen.

Wie ein Timer funktioniert, weißt du (hoffentlich).
Das man mit einem Timer einen Overflow-Interrupt auslösen kann, weißt du 
hoffentlich auch.

Den Teil in der ISR übernimmst du einfach. Das ist ok, wenn dir das 
spanisch vorkommt.

Dann brauchst du noch die einzelnen get Funktionen und fertig.

Beim Beispiel im Link ist ganz unten die main-Funktion, die dir zeigt 
wie das alles zusammenspielt.

-> die defines noch anpassen auf den Port und die Pins an denen deine
   Tasten hängen
-> Taktfrequenz eintragen (ist nicht so kritisch)
-> ISR Code bei dir einbauen
-> Die Get Funktionen bei dir einbauen
   (du wirst fürs erste nur die get_key_press brauchen. Alle anderen
   kannst du fürs erste ignorieren)

-> Von überall her get_key_press mit der Tastenbezeichnung aufrufen,
   wo du eine Tastendruck-Abfrage brauchst

-> Sich am perfekten funktionieren der Tasten erfreuen

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.