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
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
@Ralf: Ziemlicher Blödsinn @Daniel: Prinzipiell sollte dein Ansatz funktionieren. Vermutlich machst du im Programm selbst einen Fehler...Posten!
@Rahul: Wo liegt dein Problem? Wenn was falsch ist, dann erklär es mir mal...
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.
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?
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.
Hallo Zum letzten Beitrag. Welche Werte sind für den Timer-Interrupt zum Eingänge prüfen gängig? Alle 25ms? Gruß Thomas
@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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.