Gast
#1881321
Hi , immoment programmiere ich einen Atmel mega 8 auf einem selbstgebauten Board. Da ich gern Taster verwenden möchte, habe ich mich in das Thema entprellen eingearbeitet und mir nun den Code von Peter Dannegger runtergeladen. "Entprellen für Anfänger". Der Code funktioniert gut und das "prell" Problem ist behoben. Nun habe ich eine frage zum Programmablauf. Ich bin das ganze Schematisch durchgegangen, scheine aber einen Denkfehler zu haben: Zunächst ist kein Tastergedrueckt, somit ist flag=0 und wir können nur in den "else" teil springen. Solange der Taster nicht gedrueckt ist, wird i=0 gesetzt. Ist der Taster nun gedrueckt, war es aber vorher noch nicht (flag =0), wird kurz gewartet, (255*delay zeit, wobei dies nur passiert,wenn der Taste dabei die ganze zeit gedrueckt wurde), danach setzen von i=1 und flag=1. Die Taste ist jetzt also tatsächlich gedrueckt worden und "prellt nicht mehr". Nun müsste meiner Meinung nach die Break Anweisung greifen und die endlos For Schleife verlassen und damit die Else Anweisung verlassen werden. Damit währe das Makro dann geschlossen. Beim nächsten Aufruf der debounce Funktion in meiner Main Funktion, ist das flag nun auf 1 und entweder prellt der taster nun noch (nach dem loslassen) oder er ist immer noch gedrueckt. (wir springen nun beim ersten aufruf in den if teil) Das Programm testet nun ob noch prellt / gedrueckt ist. Falls dieser Zustand für 25ms unterbrochen wird, gilt der Taster als losgelassen und entprellt. flag und i werden auf 0 gesetzt. Da meine LED*s erst aufleuchten, wenn ich den Taster loslasse, funktioniert das Programm scheinbar anders. Meiner Meinung nach müsste durch die Break Anweisung(nach setzen von flag und i=1) direkt der Status geändert werden. Ich habe mir dazu überlegt: Das Makro springt nachdem i=1 und das flag gesetzt wurden, direkt wieder an den Anfang, bevor es den Wert von i zurueckgeben kann. Könnte mir jemand erklären, wo ich etwas falsch verstanden habe? Vielen lieben Dank Oliver