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
Oliver A. schrieb:> im moment programmiere ich einen Atmel mega 8 auf einem selbstgebauten> Board.
Welches Board? Schaltplan?
> Da meine LED*s erst aufleuchten, wenn ich den Taster loslasse,> funktioniert das Programm scheinbar anders.
Welches Programm? Quellcode?
Oliver A. schrieb:> Da meine LED*s erst aufleuchten, wenn ich den Taster loslasse,> funktioniert das Programm scheinbar anders.
Dann sind Deine Taster andersrum. Ist aber kein Problem, da Du den Code
ja verstanden hast. Tausche einfach das ! in den beiden Pinabfragen aus.
Man braucht ja einen definierten Pegel, wenn der Taster nicht gedrückt
ist und dazu schaltet man den internen Pullup ein. Drückt man den
Taster, muß der Pegel wechseln, d.h. der Taster muß gegen GND schalten.
Du hast warscheinlich den Taster gegen VCC geschaltet und deshalb noch
nen zu sätzlichen pulldown Widerstand gegen GND benötigt.
Falls Dein Board noch nen Kondensator am Taster hat, schmeiß ihn raus
(Pollin Board Fehler).
Peter
Hi,
Ich habe es nun auf mein pollin Board gespielt, dort tritt dasselbe auf.
Wobei ich dazu sagen muss, dass mein "selbstbau" board, einfach nur
prozessor, quarz sowie taster mit kondensator / widerstand sind.
(Die taster sind genauso beschaltet, wie im pollin board, da ich gelesen
hatte, dass man damit dem prellen zusätzlich entgegen wirken kann)
Da Herr Dannegger mir jetzt geschrieben hat, dass ich den code
verstanden habe, bin ich froh.
Es scheint ja zum glück nur am board zu liegen :)
Ich werde jetzt einfach die Beschaltung auf meinem selbstbau board
ändern.
Vielen Dank
Oliver
Jeder halbwegs normal denkende Bastler oder Entwickler wird bei AVRs die
Taster an GND anschließen. Das ermöglicht die Nutzung der internen
Ziehwiderstände. Und genau dafür hat Peter seine geniale Entprellung
ausgelegt.
Die Pollin-Bausätze werden wahrscheinlich von Azubis im Rahmen der
Ausbildung entwickelt. Das sieht man daran, dass eigentlich kein Bausatz
schaltungsmäßig wirklich optimal ist, die meisten Schaltungen sind
schlichtweg falsch, schlecht, oder wären ohne materiellen Mehraufwand
nur durch etwas mehr Gehirnschmalz einfach besser machbar gewesen.
Die Tastenbeschaltung des Pollin-AVR-Boards ist einfach nur Schrott. Die
unsinnigen Elkos schließen kurzzeitig die Betriebsspannung kurz und
sorgen für ungewollten Reset des AVRs. Sowas sollte man nicht zum
Vorbild nehmen.
MfG
Hi,
danke für die Erklärung.
Ich habe von Elektronik leider nicht allzuviel Ahnung und das Board habe
ich mir vor ca. 3 Jahren gekauft.
Die Taster muss man glücklicherweise nicht nutzen.
Ich habe über die Pinleiste die Anschlüsse auf ein Breaboard geführt.
Oliver A. schrieb:> Hi,>> danke für die Erklärung.>> Ich habe von Elektronik leider nicht allzuviel Ahnung und das Board habe> ich mir vor ca. 3 Jahren gekauft.
Ich hatte es mir damals auch gekauft, aber nie aufgebaut. Ich konnte es
dann einem entfernt wohnenden Bekannten übereignen, mit der Maßgabe, die
Peripherie nicht zu bestücken und das Board ausschließlich als
ISP-Programmer zu benutzen (sein Bastel-PC hat noch echte V.24).
> Die Taster muss man glücklicherweise nicht nutzen.
Aber wenn man es nicht weiß? Wer denkt denn bei einem industriell
hergestellten gutaussehenden Board an solchen Pfusch? Du bist doch das
Paradebeispiel, wie man auf Sowas reinfallen kann. ^^
> Ich habe über die Pinleiste die Anschlüsse auf ein Breaboard geführt.
Auch die Anschlussbelegung der Stiftleiste wurde bei ausgeschaltetem
Hirn festgelegt. Das hätte man viel günstiger machen können.
So, genug gemeckert. ^^
MfG