Forum: Mikrocontroller und Digitale Elektronik Ablauf Taster-Abfrage


von Daniel M (Gast)


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

von Alex (Gast)


Lesenswert?

Warum XOR und nicht AND?

von Ralf (Gast)


Lesenswert?

1. Tasterzustand einlesen und solange er low ist - warten!
2. Warten (ca. 50ms)
3. Tasterzustand einlesen und solange er high ist - warten!
4. Aktueller LED Status umdrehen
5. Sprung zu 1

von Rahul (Gast)


Lesenswert?

@Ralf:
Ziemlicher Blödsinn

@Daniel:
Prinzipiell sollte dein Ansatz funktionieren.
Vermutlich machst du im Programm selbst einen Fehler...Posten!

von Ralf (Gast)


Lesenswert?

@Rahul:

Wo liegt dein Problem? Wenn was falsch ist, dann erklär es mir mal...

von Rahul (Gast)


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.

von Ralf (Gast)


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?

von Rahul (Gast)


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.

von Thomas (Gast)


Lesenswert?

Hallo

Zum letzten Beitrag. Welche Werte sind für den Timer-Interrupt zum
Eingänge prüfen gängig? Alle 25ms?

Gruß

Thomas

von ...HanneS... (Gast)


Lesenswert?


von Ralf (Gast)


Lesenswert?

@Rahul:

Mit welcher Timer-Interrupt Zeit fragt man die Tasten während dem
Hauptprogramm ab, sodass man nichts verpasst? (@HanneS: ich meine nicht
die Entprellzeit)

von ...HanneS... (Gast)


Lesenswert?

Abfrageintervall etwa 4...50ms. Der genaue Wert richtet sich danach, was
der Timer-Int noch so alles zu erledigen hat.

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.