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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren