Forum: Compiler & IDEs Tasten Entprellung Problem


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von T.iK. (Gast)


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)??

von T.iK. (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?

von Peter D. (peda)


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

von T.iK. (Gast)


Lesenswert?

Vielen Dank

nun geht es

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.