www.mikrocontroller.net

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


Autor: Oliver A. (Gast)
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Oliver A. (Gast)
Datum:

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

Autor: Kluchscheißernder Nixwisser (kluchscheisser)
Datum:

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

Autor: Oliver A. (Gast)
Datum:

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

Autor: Kluchscheißernder Nixwisser (kluchscheisser)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver A. schrieb:
> Ich habe von Elektronik leider nicht allzuviel Ahnung


http://www.mikrocontroller.net/articles/AVR-GCC-Tu...


Peter

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.