Debounce-Funktion aus dem GCC-Tutorial

Gast #2275346
Lesenswert?
• ▲
▼
Hallo, arbeite jetzt mit nem attiny2313.
Hab den USBtoSerial Konverter unter Linux (nein unter Windows klappts 
nicht :-( ) zum laufen gebracht.

Auf jedenfall hab ich mir mal diese Debounce-Funktion mal angeschaut und 
wenn ich sie richtig verstanden habe, schaut diese doch erstmal nach, ob 
der Pin auf GND gezogen wurde, oder? Und dann wartet die Funktion 100ms 
und guckt dann ob der Pin wieder auf High steht, wartet wieder 100ms und 
gibt dann true zurück.

Ich taste das indem ich eine LED mit einem jeweiligen druck auf den 
Taster aus und beim nächsten Druck wieder anschalte.

Wenn das so wäre dann wundert mich eins:
Wenn ich den Taster gedrückt lasse (dauerhaft auf GND) müsste nach 
meinem Verständnis sich doch nichts an dem Status der LED ändern, oder? 
Das dürfte doch erst passieren, wenn ich den Taster wieder loslasse, 
oder? Weil die Funktion doch verraussetzt das ich einmal auf GND 
geschaltet habe, und erst wenn dann auf High wieder geschaltet wird eine 
1 zurückgibt. Aber was nun wirklich passiert ist, dass die LED auch bei 
einem dauerhaften Druck angeht nur nicht wieder den Zustand wechselt 
solange ich den Taster gedrückt halte.
Ich benutze das Pollin-Board. Nach meinem Verständnis sind die Taster 
Active-Low.
1
int debounce(const volatile uint8_t* port, uint8_t pin)
2
{
3
if(!(*port & (1 << pin)))
4
{
5
  _delay_ms(50);
6
  _delay_ms(50);
7
  if(*port & (1 <<pin))
8
  {
9
  _delay_ms(50);
10
  _delay_ms(50);
11
  return 1;
12
  }
13
}
14
return 0;
15
}
16
int main(void)
17
{
18
    DDRD |= ((1 << PD5) | (1 << PD6));
19
    PORTD = (1 << PD5);
20
    while(1) {
21
  if(debounce(&PIND,PD4))
22
  {
23
    PORTD ^= (1 << PD6);
24
  }
25
    }
26
    return 0;
27
}
Gast #2275423
Lesenswert?
• ▲
▼
spess53 schrieb:
> Hi
>
>>Ich benutze das Pollin-Board. Nach meinem Verständnis sind die Taster
>>Active-Low.
>
> Lt. Schaltplan nicht.
>
> MfG Spess

Vielleicht hätte ich mal genau auf den Schaltplan schauen sollen :) Ich 
hab irgendwas auf einer Wikiseite hier gelesen gehabt (Thema Entprellen 
von Tastern beim Pollin-Board) und hab das wohl falsch in Erinnerung 
gehabt. Ich frickel mal eben meine debounce-Funktion um :D

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.