Taster mittels Interrupt einlesen sinnvoll

Gast #1547649
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.
#1547655
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
Gast #1547716
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?
#1547743
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren