Forum: Mikrocontroller und Digitale Elektronik Entprellen für Anfänger (frage)


von Oliver A. (Gast)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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?

von Peter D. (peda)


Lesenswert?

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

von Oliver A. (Gast)


Lesenswert?

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

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

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

von Oliver A. (Gast)


Lesenswert?

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.

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?


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.