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 #1918715
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?
#1918727
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

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.