Forum: Mikrocontroller und Digitale Elektronik Tastenentprellung über Hardware, was praktikabel?


von Matthias H. (maethes26)


Angehängte Dateien:

Lesenswert?

Guten Abend zusammen,

ich habe mein ersten uC Board in Betrieb genommen und möchte nun 
Tastenabfragen programmieren.

Dabei habe ich mir Gedanken zur Entprellung der Schalter gemacht.
In meiner jetzigen Schaltung habe ich die Hardwareentprellung so wie im 
Bild von irgendeiner bestehenden Schaltung übernommen.

Jetzt frage ich mich aber, die Atmels Atmega 32 haben doch interne 
Pullupwiderstände, die ich auch aktivieren kann.

Wie kann ich nun die externen Widerstände sparen und dennoch eine 
Entprellschaltung einbauen?

Oder wie würdet ihr das machen?

Viele Grüße,

Matthias.

von Karl H. (kbuchegg)


Lesenswert?

Matthias H. schrieb:

> Oder wie würdet ihr das machen?

mittels Software-Entprellung
Und zwar mit meinen Lieblingsroutinen, die im Punkt 2.3 angegeben sind 
(Interruptverfahren nach PeDa): Code einfach übernehmen, in Betrieb 
nehmen, Tastenauswertung programmieren und mich um die Entprellung nicht 
mehr weiter kümmern müssen. Das ist einer der wenigen Codes, die man 
tatsächlich nicht verstehen muss. Dazu funktioniert er einfach zu gut 
und ist zu universell einsetzbar.

von Matthias H. (maethes26)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Matthias H. schrieb:
>
>> Oder wie würdet ihr das machen?
>
> mittels Software-Entprellung

Hallo Karl Heinz,

ich habe mich auch schon ein klein wenig in das Thema 
Softwareentprellung eingelesen.
Da ich noch ein Anfänger bin, dachte ihc mir ich gehe auf Nummer ischer 
und mache das in Hardware, um schon mal programmierfehler 
auszuschließen.

Per Software ist natürlich elegant. Muss auch mal schauen, ob das nicht 
zu viel Rechenzeit kostet, diese Entprellung.

Viele Grüße,

Matthias.

von Karl H. (kbuchegg)


Lesenswert?

Matthias H. schrieb:

> Da ich noch ein Anfänger bin, dachte ihc mir ich gehe auf Nummer ischer
> und mache das in Hardware, um schon mal programmierfehler
> auszuschließen.

Nimm die PeDa Entprellung.
Die muss man nicht verstehen, das ist ein Copy and Forget Code. Der 
funktioniert einfach.

>
> Per Software ist natürlich elegant. Muss auch mal schauen, ob das nicht
> zu viel Rechenzeit kostet, diese Entprellung.

Der Rechenzeitbedarf liegt unter 1% und ist somit komplett 
vernachlässigbar.

von Matthias H. (maethes26)


Lesenswert?

Danke für die Info.

Dann muss ich mich in das Thema reinarbeiten und versuchen den Code zum 
Laufen zu kriegen.

WErde den Code zu der PeDa Entprellung im Netz suchen.

Vielen Dank für Deine schnelle Hilfe.

Einen schönen Abend noch wünscht Matthias.

von Peter D. (peda)


Lesenswert?

Du weißt, daß ein Kondensator im Einschaltmoment einen Kurzschluß 
darstellt?

Bei Deiner Schaltung kriegt also bei jedem Drücken der MC einen 
kräftigen Hieb auf die VCC.
Dieser Efffekt ist auch vom Pollin-Board bekannt und berüchtigt.


Peter

von Karl H. (kbuchegg)


Lesenswert?

Matthias H. schrieb:
> Danke für die Info.
>
> Dann muss ich mich in das Thema reinarbeiten und versuchen den Code zum
> Laufen zu kriegen.
>
> WErde den Code zu der PeDa Entprellung im Netz suchen.

Musst du nicht suchen

Entprellung <- klick

ganz unten

von Peter D. (peda)


Lesenswert?

Miniaturtaster können durch diesen hohen Stromstoß auch schneller 
verschleißen.

Daher wird Hardwareentprellung von erfahrenen Programmierern gemieden.


Peter

von Matthias H. (maethes26)


Lesenswert?

Hallo Peter,

wenn ich den Taster betätige, wird der Eingang des uC, der zuvor durch 
den Widerstand hochgezogen wurde, auf Null gezogen. Der Kondensator hat 
am oberen Poll +5V, aber was am unteren Pol des Kondensators für eine 
Spannung bei geöffneten Schalter anliegt, kann ich gar nicht sagen.

Danke für Deinen Tipp mit dem Kurzschluss. Das habe ich aber noch nciht 
ganz verstanden.

Viele Grüße,

MAtthias.

von Karl H. (kbuchegg)


Lesenswert?

Matthias H. schrieb:

> Danke für Deinen Tipp mit dem Kurzschluss. Das habe ich aber noch nciht
> ganz verstanden.

WEnn du den Taster schliesst, wird der Kondensator direkt zwischen Vcc 
und GND geschaltet und bildet so erst mal einen Kurzschluss. Und zwar so 
lange bis er sich geladen hat.
Und genau das will man eigentlich nicht haben. Denn jeder Kurzschluss, 
egal wie zeitlich kurz er ist, hinterlässt seine Spuren in der 
Versorgungsspannung Vcc.

Aber wie gesagt: Eigentlich ist das alles gar nicht notwendig. 
Softwaremässiges Entprellen funktionert hervorragend und mit den PeDa 
Routinen bekommt man dann auch noch ein paar Goodies mit dazu, wie zb 
Autorepeat, was besonders bei Eintellsachen, die man mittels 
Rauf-/Runter Tasten einstellt, mehr als nur angenehm ist.

von Matthias H. (maethes26)


Lesenswert?

Klasse, jetzt habe ich denn Sinn der Softwareentprellung versatanden.

Klar, die Tastbetätigung hinterlässt Spuren in der Versorgungsspannung. 
Ich meine sogar ein flackern der LED beim Tasten bemerkt zu haben.

Das wird für mich nicht leicht die Softwareentprellung zu verstehen, 
aber da muss ich durch.

Viele Grüße und noch einen schönen Abend.

von Karl H. (kbuchegg)


Lesenswert?

Matthias H. schrieb:

> Das wird für mich nicht leicht die Softwareentprellung zu verstehen,
> aber da muss ich durch.

Wie gesagt:

Ich bin normalerweise unter den Ersten, die jemanden naheliegen sich mit 
'geklauten' Code zu beschäftigen um ihn zu verstehen. Aber dieser Code 
ist so trickreich und funktioniert gleichzeitig so gut, dass es ok ist, 
ihn nicht zu verstehen. Du musst nur verstehen, wie man ihn konfiguriert 
und benutzt. Und das ist nicht weiter schwer, wie das im Artikel 
beigefügte Beispiel zeigt.

von Philipp (Gast)


Lesenswert?

Mal abgesehen von der Software Entprellung.
Müsste im Schaltplan von Matthias H. die Kondensatoren nicht parallel 
zum Taster liegen? So wie ich das gerade sehe, müssten sich die 
Kondensatoren gleich nach dem einschalten aufladen und können sich bis 
zum ausschalten nicht wieder entladen, wenn sie parallel zum Widerstand 
liegen. Außerdem dürfte es doch auch keinen Kurzschluss in der 
Versorgungsspannung geben, wenn die Kondensatoren parallel zu den 
Tastern liegen.
Oder hab ich gerade 'n Brett vorm Kopf?

von Karl H. (kbuchegg)


Lesenswert?

Philipp schrieb:

> So wie ich das gerade sehe, müssten sich die
> Kondensatoren gleich nach dem einschalten aufladen und können sich bis
> zum ausschalten nicht wieder entladen, wenn sie parallel zum Widerstand
> liegen.

Doch. Über den Widerstand werden sie entladen. Der Widerstand schliesst 
den Kondensator kurz und entlädt ihn so.

> Außerdem dürfte es doch auch keinen Kurzschluss in der
> Versorgungsspannung geben, wenn die Kondensatoren parallel zu den
> Tastern liegen.

WEnn sie parallel zu den Tastern liegen, werden sie bei Betätigen des 
Tasters schlagartig entladen. AUch nicht besser.

von Philipp (Gast)


Lesenswert?

>WEnn sie parallel zu den Tastern liegen, werden sie bei Betätigen des
>Tasters schlagartig entladen. AUch nicht besser.
Okay....aber dann könnte man ja auch einen Widerstand in reihe mit einem 
Kondensator parallel zum Taster schalten...sollte dann doch okay sein?

von Karl H. (kbuchegg)


Lesenswert?

Und der Aufwand steigt und steigt :-)

von Philipp (Gast)


Lesenswert?

>Und der Aufwand steigt und steigt :-)
Also zwei Widerstände und ein Kondensator finde ich lange nicht so 
aufwändig wie eine vernünftige Entprellung in Software :)
Aber das ist wahrscheinlich Geschmackssache?

von Tip (Gast)


Lesenswert?

Philipp schrieb:
> Außerdem dürfte es doch auch keinen Kurzschluss in der
> Versorgungsspannung geben, wenn die Kondensatoren parallel zu den
> Tastern liegen.

Der Kurzschluß besteht aus zwei Komponenten:
1. Spannungseinbruch auf der Versorgungsspannung
2. Kontaktabbrand auf dem Schalter

Letzteren Effekt hast du auch, wenn das C überm Schalter hängt - nicht 
schön.

von Karl H. (kbuchegg)


Lesenswert?

Philipp schrieb:
>>Und der Aufwand steigt und steigt :-)
> Also zwei Widerstände und ein Kondensator finde ich lange nicht so
> aufwändig wie eine vernünftige Entprellung in Software :)

Langsam.
Entprellung in Code ist ja nur die halbe Miete. Du brauchst dann auch 
noch Flankenerkennung.

Der PeDa Code macht das in (moment ich muss zählen) 6 Zeilen Code + 
Aufsatz eines Timers samt zugehöriger ISR, die man in den meisten 
Programmen sowieso schon hat. Und das dann für 8 Tasten gleichzeitig. 
Was ist da drann aufwändig? Denn hast du in deinen Code schneller 
eingebaut als du einen Widerstand einlöten kannst :-)

von Patrick (Gast)


Lesenswert?

Jupp, ist Geschmackssache ;)

Ich als Hardwareker (schreibt man das so?) hab auch kein generelles 
Problem mit einer Hardware-Entprellung; man muss es halt nur richtig 
machen ("Hirn an" ist die Devise ;)

Klar: Wenn die Anzahl der zu erwartenden Exemplare des Gebildes in die 
Zehntausende geht, wird Software-Entprellung billiger sein, da der Code 
nur einmal geschrieben (und gedebuggt und getestet usw. ;) werden muss, 
die Hardwarekosten jedoch jedes Mal wieder anfallen. Aber speziell beim 
Bastler dürften die Kosten von einer Handvoll Widerständen und 
Kondensatoren nicht wirklich ins Gewicht fallen.

von Karl H. (kbuchegg)


Lesenswert?

Patrick schrieb:

> die Hardwarekosten jedoch jedes Mal wieder anfallen. Aber speziell beim
> Bastler dürften die Kosten von einer Handvoll Widerständen und
> Kondensatoren nicht wirklich ins Gewicht fallen.

Wenn du mich jetzt sehen könntest, würdest du mich grinsen sehen.

Darum gehts doch gar nicht. Die Sw Entprellung hat soviele Vorteile 
(überhaupt die PeDa Variante), dass es sich gar nicht lohnt, da jetzt 
über eine Alternative nachzudenken.

Es ist wirklich so einfach in der Benutzung wie:
1
  while( 1 ) {
2
    ...
3
4
    if( get_key_press( 1<<LEFT_KEY ) )
5
      ...
6
7
    ...
8
  }

und der Code wird ausgeführt, wenn der Benutzer einmal die Taste 'Links' 
drückt. Egal wie stark die Taste prellt, egal wie lange der Benutzer 
drauf ist, egal ob ich in den letzten 3 Sekunden den µC 
extrembeschäftigt habe. Um mehr muss ich mich nicht kümmern, als mit 
diesen simplen Abfragen meine Programmlogik richtig zu stellen. Alles 
andere passiert von mir unbemerkt im Hintergrund. Und wenn ich einen 
Zahlenwert habe, zb die Helligkeit einer LED, dann schreibe ich
1
  while( 1 ) {
2
    ....
3
    if( get_key_press( 1<<UP ) || get_key_rpt( 1<<UP )) {
4
      if( Intensity < 100)
5
        Intensity++;
6
    }
7
8
    if( get_key_press( 1<<DOWN ) || get_key_rpt( 1<<DOWN )) {
9
      if( Intensity > 0 )
10
        Intensity--;
11
    }
12
13
    ....
14
  }
trag noch in den #defines am Anfang ein, dass ich für UP bzw. DOWN einen 
Autorepeat haben möchte und kriege: ein einzelner Tastendruck stellt 1 
Stufe höher/tiefer. Bleibt der Benutzer länger auf der Taste, setzt der 
Autorepeat ein und die Helligkeit geht schnell rauf/runter.

Das alles sind für mich Dinge, die ich nicht mehr missen möchte und die 
ich mit Hardware-Entprellung nie so billig und so schnell realisiert 
bekomme.

Und wenn die Taste aufgrund Hardware-Problemen umziehen muss, dann ist 
das ein Eintrag bei den #define, der geändert werden muss und alles 
läuft wieder wie gehabt.

Ich kann nur jedem empfehlen: Probiert das Teil aus! Du wirst nie wieder 
auch nur einen Gedanken an eine Alternative verschwenden.

von Matthias H. (maethes26)



Lesenswert?

Hallo zusammen,

anbei eine Interessante Messung von der Hardwaretastenentprellung.

Ihr habt mir gesagt, das beim Betätigen des Taster hohe Ladeströme 
fließen. Dies habe ihc mit meinem Oszi untersucht und konnte dies mit 
dem 100Mega Samples 30MHz ien wenig einfangen.
siehe Bild.

Konnte leider nur nicht an dieser Software den triggerzeitpunkt 
verstellen. dAs hatte keine Auswirkungen.

Kann ich mit diesem Messgerät über  eine Einstellung z..B. min max auch 
einen Einbruch einfangen? Das gelang mir bis jetzt nicht.
Das scheint mir ein teures und gutes Messgerät zu sein.

Viele Grüße,

Matthias.

von citb (Gast)


Lesenswert?

Das Oszillogramm zeigt aber nur den Ablauf NACH dem Einbruch, das 
Ueberschwingen nach oben. Der erste Einbruch duerfte noch schlimmer 
aussehen.

Frage an die Profis: Gibt es das mit dem Ueberschwingen nach dem 
einbruch oder ist das ein Messfehler?

citb

von Matthias H. (maethes26)


Lesenswert?

glaub ich auch, das das nur der überschwinger ist. kenne mich da aber 
noch nicht aus.

hatte leider keine möglichkeit diesen einbruch einzufangen.
vielleicht habt ihr ja noch tipps wie doch


brauche ich andere oszi software? kann ich andere überhaupt benutzen?

viele GRüße

von citb (Gast)


Lesenswert?

Matthias H. schrieb:
> glaub ich auch, das das nur der überschwinger ist. kenne mich da aber
> noch nicht aus.

Na die erste sichtbare Auslenkung geht eindeutig nach oben.
Der Einbruch muesste aber nach unten zu sehen sein, der ist 
offensichtlich links aus dem Bild herausgefallen.


citb

von Karl H. (kbuchegg)


Lesenswert?

citb schrieb:

> Frage an die Profis: Gibt es das mit dem Ueberschwingen nach dem
> einbruch oder ist das ein Messfehler?

Wie das genau aussieht hängt vom Spannungsregler ab und wie schnell der 
nach dem Kurzschluss die 5V wieder herstellen kann und wieviele 
Einschwinger der dazu braucht. Zudem hängt das alles noch von den 
Kapazitäten ab, mit denen die Spannungsversorgung gepuffert wird, sowie 
von den Blockkondensatoren, die zb den µC vor genau solchen Dingen 
schützen sollen.

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.