mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Taster mittels Interrupt einlesen sinnvoll


Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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):
if (statusTaster==0)
      {
        // den Taster abfragen, Funktion kehrt zurück, wenn der Status stabil ist (Entprellung)
        debounce( (uint8_t*)&PINB, (1<<Taster1) );

        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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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/Entprellun...

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.