www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Entprellen, beispiel und frage


Autor: dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich wollte mal wissen ob folgender code:
void entprell (void) {
_delay_ms(10);
if ( (PINC & _BV(PC0)) == 1 ) {
       _delay_ms(5);
    if ( (PINC & _BV(PC0)) == 1){
        T_HAS_BEEN_PUSHED!();
                }
        }

}

aufgerufen durch :
if ( (PINC & _BV(PC0)) == 0 ){
entprell();
}


In Ordnung ist, um eine Taste zu entprellen.
Der Taster ist aktiv Low und der Pullup aktiviert.

Wenn die Taste gedrückt wird, wird in die entprell Funktion gesprungen 
und dort 10ms gewartet. Wenn der Taster Pin dann wieder high ist, wird 
5ms gewartet und wenn er dann immernoch high ist, wird in eine funktion 
gesprungen, die bei mir, eine register mit leds inkrementiert.



Ist das vom Prinzip her korrekt programmiert?
Es funktioniert nämlich...


Danke.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>In Ordnung ist, um eine Taste zu entprellen.

Nach Analyse des Codes:
_delay_ms
folgt ein: NEIN

Beitrag "Tasten entprellen - Bulletproof"

Autor: dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

danke das du es dir angeschaut hast.



Was genau ist an delay nicht in ordnung?

Mir ist klar, dass diese art des entprellens den kompletten uC 
blockiert!
Ist aber immoment nicht schlimm...

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ist aber immoment nicht schlimm..

Naja, dann kannst es erstmal lassen.
(Hab mir den COde im Detail nicht angesehen)

Autor: dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah das ist ja sehr lustig ;)


Dann empfiehlst du mir es erstmal so zu lassen, ohne zu wissen ob es 
seinen zweck erfüllt...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Dann empfiehlst du mir es erstmal so zu lassen, ohne zu wissen ob es
>seinen zweck erfüllt...

DU sagst doch es geht ;) Wenn du Zeit hast zu warten
dann ist das so ok.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein. So meinte ich das nicht.

Meine ersten Entprell-versuche waren auch etwa so:

wenn taste gedrückt, kurz warten und wenn immernoch gedrückt wirds als 
gedrückt erkannt.
Für die ersten Erfahrungen am µC ist das ok.
Aber man sollte sich alsbald mit besseren Entprellungen beschäftigen:
Die Tasten werden zyklisch (zB alle 10ms) abgefragt. Ist diese nicht 
gedrückt, wird ein Zähler genullt. Wird diese als gedrückt erkannt, den 
Zähler um eins erhöhen.
Ist der Zähler größer als X1 wird "Taste gedrückt" ausgegeben und vom 
Zählwert ein Zahlenwert etwas kleiner als X1 abgezogen.

Autor: dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
joi...

bisher hatte ich nur assembler...

Nun lern ich C und wir haben dort noch nicht gerlernt einen interrupt zu 
benutzen...
Sonst hätte ich mir einen Timer ISR geschrieben und alle 10ms den status 
eingelesen...Dann hätte ich nebenher noch was anderes machen können.

Aber aufgabenstellung ist halt es so zu lösen ;)



Trotzdem danke.

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.