www.mikrocontroller.net

Forum: Compiler & IDEs Taster einlesen und entprellen


Autor: Robert Schillling (robert_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle!!

So, ich hab da einmal eine Frage. Ich muss für eine Menüsteuerung 4
Tasten einlesen.

Entweder ich mach es mit externen Interrupts oder ich frage alle zb
10ms die Taster ab.
Was ist da besser geeignet??

Wenn ich das ganze mit dem Timer mach lassse ich den 8 Bit Timer im
Output Compare Modus laufen. Dabei zähle ich von 0 - 99. So treten bei
16MHz Taktfrequens und einem Prescaler von 64 25 Interrupts pro 10ms
auf, oder??

Dann erhöhe ich in der Interruptroutine eine Zählervariabele und prüfe
ob sie größergleich 25 ist. Wenn ja, setze ich die Variable auf 0 und
frage die Taster ab.

Aber die Taster prellen doch meistens mehr als 10ms oder? Also muss ich
das ganze noch Softwaretechnisch entprellen. Oder besser von der
Hardwareseite??

Ich könnte doch zB 10x prüfen ib der Taster gedrückt ist, oder?? Doch
wie mache ich das am besten?? Ich hab eine Variable die mit 10
initialisiert wird. Dazu habe ich noch eine Statusvariable. In der
steht ob der TAster gedrückt war. Wenn in der 0 steht, dann prüfe ich
ob der TAster gedrückt ist. Wenn ja, dann schreibe ich eine 1 in die
Variable. Wenn in der Variable eine 1 steht, dann prüfe ich den Taster,
wenn ja, veringere ich die Zählervariable (die am Anfang auf 10 stehet).
Wenn eine 1 in der Variable steht und der TAster nicht gedrückt ist,
dann schreibe ich wieder eine 0 in die Statusvariable und in die
Zählervariable schreibe ich wieder eine 10.

Kann ich das so machen?? Sind 10 Prüfungen zu wenig?? Das wären 100ms.

Kann ich das noch anderes lösen??

Dank eim Voraus

Gruß Robert

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Otto Richter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Robert,

ich arbeite seit einiger Zeit (als absoluter Anfänger) an einem
Projekt, in dem es 16 Tasten gibt. Mir war von Anfang an klar, dass man
so 'was nur seriös mit Interrupts macht. Es gibt eine Applikation von
ATMEL, heißt irgendwas mit "..4x4-keypad.." (atmel.com). Da siehst
Du, wie der Interrupt erzeugt wird und wie man mit 8 IOs bis zu 16
Tasten abfragt. Es ist doch beknackt, wenn der AVR alle 10ms
nachschauen soll, ob eine Taste gedrückt wurde.

Entprellen habe ich mit einem delay gemacht: es kommt also ein oder
mehrere Interrupts, der AVR verzweigt bereits bei 1. in die ISR, wartet
dann etwas und das Programm schaut dann nach, ob die Taste noch gedrückt
ist.

Ist auch nicht 100% elegant, weil das delay den Prozessor aufhält und
in der Zeit nur max. 1 weitere Interrupt  (nach dem delay) abgearbeitet
werden kann. Wenn mehr als 1 Interrupt kommt, sind die anderen
verloren.

Im Tutorial ist ein Beispiel für eine Entprellung, das ich aber noch
nicht genauer angesehen habe, weil ich es zu spät gefunden habe. Das
scheint sehr eklegant zu sein, weil es mit Timern arbeitet und eine
Repeat-Funktion hat.

Wenn Du willst, kann ich Dir auch meinen gcc-code schicken, ich muss
ihn nur "freischneiden". Mail mich an !

otto-richter@versanet.de

(endlich kann ich 'mal einen einigermaßen fundierten Beitrag zum Forum
schreiben).

Otto

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Otto

"Es ist doch beknackt, wenn der AVR alle 10ms nachschauen soll, ob
eine Taste gedrückt wurde."


Warum sollte das beknackt sein ?

10ms sind 160.000 Zyklen bei 16Mhz.
Angenommen die Abfrageroutine dauert 100 Zyklen, dann sind das ja
wahnsinnige

100/160.000 = 0,06% CPU-Last

Kein Mensch auf der Welt kann merken, wenn die CPU um 0,06% langsamer
läuft.


Peter

Autor: Otto Richter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Peter

wenn Dein chip nichts weiter zu tun hat, kein echtes Problem. Im
Übrigen ist das Ganze möglicherweise wirklich nur Kosmetik. Aber der
Interrupt wurde erfunden, um ausglöst zu werden und um der
Echtzeitfähigkeit näher zu kommen.

Außerdem bin ich stolz mit meinen 57 Jahren auf dem Buckel und einem
halben Jahr C-Erfahrung so 'was 'hingekriegt zu haben ( smilie ) ;

Otto

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bin auch noch C Anfänger, aber habe auch schnell gemerkt das INT´s oft
besser sind. Ich baue bis dato eigentlich immer Module mit Battarien
auf und ein INT kann den µC schon aus dem powerdown ziehen. Das spart
irre viel Strom.

cu

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Otto

"wenn Dein chip nichts weiter zu tun hat, kein echtes Problem."


Lies Dir nochmal die genannte Zahl durch:

0,06% !!!

D.h. auch wenn er zu 99,93% beschäftigt wäre, schafft ers noch.

In der Regel können MCs nur von sehr erfahrenen Programmierern zu >=50%
ausgelastet werden
Die meisten Programme nutzen aber nur 1% .. 20% und verbummeln den Rest
in Warteschleifen.



"Aber der Interrupt wurde erfunden, um ausglöst zu werden und um der
Echtzeitfähigkeit näher zu kommen."


Nein, er wurde erfunden, um Echtzeitfähigkeit zu garantieren, was heißt
innerhalb der geforderten Zeit zu reagieren.
Anforderungen müssen immer eingehalten werden, näherkommen ist
ungenügend.


Aber da eh kein Mensch 10ms Verzögerung warnehmen kann, ist auch eine
Tastenentprellung mit nem 10ms Timerinterrupt absolut echtzeitig.

Die externen Interrupts sind dagegen Sachen vorbehalten, die wirklich
schnell sein müssen (wenige µs Latenzzeit), z.B. Interrupt des
Ethernetchips, Überlastabschaltung eines Schaltreglers usw.


Peter

Autor: Der Albi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum macht man sich den ganzen Stress, wenn man das doch Hardwaremäßig
entprellen kann?? Ist natürlich eine Frage der Taster.. aber könntest
du nicht einfach kleine Kondensatoren  parallel schalten, die geladen
werden, wenn die Taste gedrükt ist und somit die Prell-Fehler
ausgleichen? Wenn du die Taste Loslässt, musst du sie natürlich wieder
entladen also kurzschließen. D.h. du brauchst Taster, die nicht nur
einen Staturs haben können.
Wäre das nicht einfacher!?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Albi,

"Warum macht man sich den ganzen Stress, wenn man das doch
Hardwaremäßig entprellen kann??"


http://www.mikrocontroller.net/forum/read-4-310276.html#new

Wo siehst Du da Streß ?

Ich sehe nur Einfachheit und Komfort.

Entprellen ist nur so nebenbei, Gedrückt-Erkennung,
lang-/kurz-Erkennung, Wiederholfunktion braucht man doch auch oft.


Extra Hardware muß man jedesmal einlöten.
Die Software entwickelt man einmal und dann vergißt man sie und wendet
sie nur noch an.


Peter

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Warum macht man sich den ganzen Stress, wenn man das doch
> Hardwaremäßig entprellen kann?

Genau.  Wofür den Stress mit den blöden Controllern, man kann
das auch alles in Hardware machen.

Jörg, schnell seine 74xxx-Kiste wieder ausgrabend...

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
74xxx ?
Neumodisches Klumpert.
Sowas kann man auch mit NOR-Gattern alleine machen.
Was gut genug für Apollo war, wird doch wohl noch
gut genug für dich sein :-)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DTL?  Ja, vielleicht finde ich noch paar KME3-Bausteine in der
Kiste.

Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und dazu das passende ELJABU, in welchem die Dinger beschrieben sind
:-))

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.