Ablauf Taster-Abfrage

Gast #172333
Lesenswert?

Hallo

ich kämpfe gerade mit dem STK500, einem ATmega8 + Taster + LED.

Folgendes, ich möchte mit dem Taster die LED Einschalten und beim
nächsten Tasten ausschalten.

1. Tasterzustand einlesen
2. Warten (ca. 50ms)
3. Tasterzustand einlesen
4. Zustand aus 1 und 3 XOR
==> Wenn Taster-BIT aus 4 LOW Sprung zu 1
5. Aktueller LED Status umdrehen
6. Ausgabe von 5
7. Sprung zu 1

Irgendwie hat mir der Biergarten heut Nachmittag stark zu gesetzt, oder
ich bin zu blöd. Versuche es übrigens in Assembler. Die Zeitverzögerung
habe ich übrigens hinbekommen mittels Timer, eigentlich dachte ich,
dass das schwierige ist.

Gruß Daniel
Gast #172338
Lesenswert?

OK:
1. Tasterzustand einlesen und solange er low ist - warten!
Worauf Warten? Soll der Controller die ganze Zeit darauf warten, dass
die High-Pegel bekommt?

2. Warten (ca. 50ms)
Schon wieder dieses böse Wort.

3. Tasterzustand einlesen und solange er high ist - warten!
Und schon wieder.
Dein Programm macht nichts anderes als dauernd darauf zu warten, dass
sich der Zustand einer Taste ändert.

4. Aktueller LED Status umdrehen
5. Sprung zu 1

Daniel hat da schon den richtigen Ansatz:
Er liest den Zustand der Tasten ein. Wartet eine Zeit ab, und
vergleicht dann den vorher eingelesenen Zustand mit dem aktuellen.
Die Wartezeit von 50ms ist schon ziemlich lang. Wenn der Controller
sonst nicht viel zutun hat, stört das aber erstmal wenig.
In diesen 50ms könnte es sein, dass die Taste ihren Zustand noch mal
ändert.
Mit der zweiten Abfrage stellt man fest, ob das anliegende Signal den
richtigen Wert hat, und der Taster nicht mehr prellt.

Ich verstehe leider nicht, wieso dein Programm die ganze Zeitdarauf
warten soll, dass bestimmte Pegel anliegen. Das bremst nur, und
erfordert, dass der Bediener dauernd die Taste betätigt und wieder
loslässt.

@Daniel:
Du musst erst abfragen, ob die Taste noch betätigt ist, oder es sich um
einen neuen Tast-Vorgang handelt. Sonst togglet die LED solange die
Taste betätigt wird.
Gast #172339
Lesenswert?

Wenn der Taster aber nicht an einem Interrupteingang hängt, muß ich ihn
doch ständig abfragen, oder? Ich weiß ja nie wann der Taster gedrückt
wird???
Zudem macht das Programm von Daniel ja auch nichts anderes? Er springt
immer wieder zu Pos. 1 zurück. Einmal von 4 oder von 7.

Versteh ich da was nicht?
Gast #172340
Lesenswert?

Das Programm fragt bei Bedarf den Tasterzustand ab.
Der Teil, den Daniel programmieren will, gehört vielleicht zu einem
grösseren Programm, das vielleicht noch irgendwas berechnet oder
irgendeine Anzeige bedient oder was auch immer.
Wenn der Controller jetzt die ganze Zeit darauf warten würde, was
welche Taste macht, wäre das ziemlich uneffektiv.
Bei grösseren Projekten macht man es dann sowieso so, dass die Tasten
im Rahmen eines Timer-Interrupts abgefragt werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren