Forum: Mikrocontroller und Digitale Elektronik Taster mittels Interrupt einlesen sinnvoll


von Manuel (Gast)


Lesenswert?

Hallo,

ich bin recht neu in Sachen Mikrocontroller und programmiere bzw. lese 
mehr seit ca. 1 Woche.
Nun möchte ich ein Programm schreiben, dass folgedes tut:
Taster 1 schaltet LED 1 an bzw. aus
Taster 2 schaltet LED 2 an bzw. aus

Ist es sinnvoll die Abfrage der Taster in einem externen Interrupt zu 
lösen? Oder hält dies das Programm (wegen der Entprellungsroutine nach 
Christian Riggenbach) zu lange auf?

Im Moment habe ich dies mit if's gemacht, in denen ich eine Variable 
Abfrage (Variable statusTaster 0=nicht gedrückt, 1=gedrückt):
1
if (statusTaster==0)
2
      {
3
        // den Taster abfragen, Funktion kehrt zurück, wenn der Status stabil ist (Entprellung)
4
        debounce( (uint8_t*)&PINB, (1<<Taster1) );
5
6
        if ( !(PINB & (1 << Taster1)) )  //frägt den Zustand des Tasters ab
Aber irgendwie funktioniert das Programm nicht richtig/zuverlässig so.

Da ich Anfänger bin, weiß ich nicht so recht, ob ich Tasterzustände in 
Interrupts oder in main Abfrage.

von Karl H. (kbuchegg)


Lesenswert?

Manuel schrieb:

> Nun möchte ich ein Programm schreiben, dass folgedes tut:
> Taster 1 schaltet LED 1 an bzw. aus
> Taster 2 schaltet LED 2 an bzw. aus

Gut

> Ist es sinnvoll die Abfrage der Taster in einem externen Interrupt zu
> lösen?

Nein

> (Variable statusTaster 0=nicht gedrückt, 1=gedrückt):

Sicher?
Meistens macht man das nämlich genau anders rum!

> Oder hält dies das Programm (wegen der Entprellungsroutine nach
> Christian Riggenbach) zu lange auf?

Ja.
In einer ISR hat eine Warteschleife nichts verloren. Schon gar nicht 
eine Warteschleife mit dem Zeitbedarf, der für Entprellen notwendig ist.


Siehe
http://www.mikrocontroller.net/articles/Entprellung#Komfortroutine_.28C_f.C3.BCr_AVR.29

von Manuel (Gast)


Lesenswert?

Hallo,

ok, das ist schon einmal gut.
Demnach kann ich ja über ein externes Interrupt keinen Taster einlesen 
den ich softwaremäßig entprelle, da ja hier immer Zeit benötigt wird.
Demnach ginge das ja nur, wenn ich hardwaremäßig entprelle oder nicht?

von Karl H. (kbuchegg)


Lesenswert?

Manuel schrieb:

> ok, das ist schon einmal gut.
> Demnach kann ich ja über ein externes Interrupt keinen Taster einlesen

können tust du schon.
Aber wenn du den Interrupt nicht unbedingt brauchst um zb den µC aus 
einem Schlafzustand herauszuholen, gibt es keinen wirklichen Grund 
dafür.

> den ich softwaremäßig entprelle, da ja hier immer Zeit benötigt wird.
> Demnach ginge das ja nur, wenn ich hardwaremäßig entprelle oder nicht?

Nein. Wieso.
Im angebenen Link ist eine Methode, die zuverlässig ohne externe 
Hardware und ohne Warteschleifen entprellt. Die Methode ist allerdings 
auf active-Low Taster ausgelegt. Das müsstest du umdrehen.

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.