Ablauf Taster-Abfrage

Gast #172333
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 #172335
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
Gast #172338
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
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
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.
Gast #172343
@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)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.