Tasten Entprellung Problem

Gast #1918707
Lesenswert?
• ▲
▼
Hallo,

ich weiß nicht genau, wie ich mein Problem beschreiben soll, aber ich 
fange einfach mal so an.
Ich benutze den Entprellungscode von
http://www.mikrocontroller.net/articles/Entprellung#Debounce-Makro_von_Peter_Dannegger

Dieser Funktioniert eigentlich ganz gut. Doch leider nicht beim ersten 
mal.

Der nachfolgender Pseudocode, soll mein Problem beschreiben.

Pseudocode:
1
void funktion(void)
2
{
3
   while(1)
4
   {
5
      if(debounce(PINC, PC1)) 
6
      {
7
         …;
8
         break;
9
      }
10
   }
11

12
   while(1) 
13
   {
14
      if(debounce(PINC, PC1)) 
15
      {
16
         …;
17
         break;
18
      }      
19
   }
20
}

Beim ersten Aufruf der Funktion habe ich das Gefühl, dass wenn ich 
meinen Taster drücke, gleichzeitig die zweite while-schleife mit 
gedrückt wird. Wenn ich aber die Funktion zum zweiten mal Aufrufe, wird 
zuerst der erste und dann der zweite debounce abgefragt.

Vielleicht hatte schon mal jemand das Problem von euch. Oder ich sehe 
den Wald vor lauter Bäumen nicht. Aber woran kann sowas den liegen? Oder 
hab ich einen logischen Fehler mit den while(1)??
Gast
Lesenswert?
• ▲
▼
habe gerade nochmal mit zwei Taster probiert. Es liegt also daran, dass 
beim ersten Aufruf durch einen Klick beide debounce() aufgerufen werden. 
Beim zweiten Aufruf der Funktion aber die debounce() nacheinander 
aufgerufen werden.

Kann mir vielleicht einer erklären, wie sowas zustande kommt?
Lesenswert?
• ▲
▼
Die Funktion arbeitet als Macro, damit pro Taste eine neue Merkvariable 
angelegt wird.
Damit darf man sie pro Taste aber auch nur an einer Stelle aufrufen.
Willst Du sie an mehreren Stellen aufrufen, mußt Du eine Funktion 
schreiben.
1
uint8_t debounce_C1( void )
2
{
3
  return debounce(PINC, PC1);
4
}


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.