mikrocontroller.net

Forum: Compiler & IDEs Tasten Entprellung Problem


Autor: T.iK. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/Entprellun...

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

Der nachfolgender Pseudocode, soll mein Problem beschreiben.

Pseudocode:
void funktion(void)
{
   while(1)
   {
      if(debounce(PINC, PC1)) 
      {
         ;
         break;
      }
   }

   while(1) 
   {
      if(debounce(PINC, PC1)) 
      {
         ;
         break;
      }      
   }
}

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

Autor: T.iK. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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.
uint8_t debounce_C1( void )
{
  return debounce(PINC, PC1);
}


Peter

Autor: T.iK. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank

nun geht es

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.