www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit Tasterentprellung


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe mal eine Frage,...hoffe das mir einer weiter hilft.

Ich verwende einen Atmega32. Über den Pin PD2 wird über den Interrupt 
ständig ein Taster abgefragt. Wird dieser betätigt setze ich alarm auf 1

bisher:

SIGNAL(SIG_INTERRUPT0)
{
  alarm = 1;
}


Nun habe ich aber Probleme mit der EMV bekommen da der Taster an einem 
längeren Kabel angeschlossen ist, Deswegen möchte ich den Taster gerne 
entprellen. Da die main methode im Ruhezustand keine anderen Aufgaben 
hat außer den Schalter zu überwachen kann ich mir einen etwas längeren 
interupt leisten.

habe es mit folgendem Code versucht:


SIGNAL(SIG_INTERRUPT0)
{
  alarm = 1;
        timer_wait(500);
        if (0<<PD2)
        alarm = 1;
}


JEdoch kann ich jetzt den Alarm nicht mehr auslösen. Kann mir einer 
sagen was ich falsch mache ... oder wie man den Pin richtig abfragt.
Würde mich auf eine Antwort freuen!
Vielen Dank
Stefan

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry ein alarm = 1 ist unten zu viel es muss natürlich heißen:



SIGNAL(SIG_INTERRUPT0)
{
        timer_wait(500);
        if (0<<PD2)
        alarm = 1;
}

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
liegt es vielleicht daran das die abfrage:

 if (0<<PD2)

nicht korrekt ist?

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tasten im Interrupt ?? Pfui
Den ext Interrupt sollte man tunlichst lassen.

Ich hoffe es ist der Timer gemeint.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Tasten

Autor: YS-500 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if ( !(PIND & (1<<PIND2)) )

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan wrote:
> Nun habe ich aber Probleme mit der EMV bekommen da der Taster an einem
> längeren Kabel angeschlossen ist, Deswegen möchte ich den Taster gerne
> entprellen.

Dazu hat sich bei mir die 4-fach Abtastung bewährt.
Ein Zustandswechsel wird nur dann übernommen, wenn 4-mal hintereinander 
der entgegengesetzte Zustand erkannt wird.
Als Abtastintervall hat sich 10ms bewährt. Die 40ms Verzögerung sind bei 
manueller Betätigung unmerkbar.


> Da die main methode im Ruhezustand keine anderen Aufgaben
> hat außer den Schalter zu überwachen kann ich mir einen etwas längeren
> interupt leisten.

Kann man machen.
Also bei jedem Programm von neuem anfangen zu überlegen, welche 
umständliche Entprellmethode man sich denn nun leisten kann.
Und wenn das Programm wächst, sich ärgern, daß man es sich plötzlich 
nicht mehr leisten kann und von neuem anfangen nachzudenken.


Ich bevorzuge allerdings die eine für alles Entprellmethode.
Da muß man nie wieder nachdenken. Einfach ins neue Programm einfügen und 
vergessen. Ich hab sie deshalb bulletproof genannt.


Peter

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Antworten,....
@ Stefan Henning:
warum sollte man so was immer vermeiden? warum wird es denn dann 
hardwareseitig unterstützt. das ist ja ein alarm gerät was nur über 
einen taster ausgelöst werden kann.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe es gerade mit folgendem Code probiert:


SIGNAL(SIG_INTERRUPT0)
{
        timer_wait(500);
        if ( !(PIND & (1<<PIND2)) )
        alarm = 1;
}


Jetzt passiert gar nichts...bekomme den alarm einfach nicht auf 1 ???

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.