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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.