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.
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.
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.
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.
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.
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
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
Miniaturtaster können durch diesen hohen Stromstoß auch schneller verschleißen. Daher wird Hardwareentprellung von erfahrenen Programmierern gemieden. Peter
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.
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.
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.
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.
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?
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.
>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?
>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?
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.
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 :-)
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.
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.
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.
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.