Geschätztes Forum, ein kleines Assemblerbeispiel, wie per ext. Interrupt ein Drehgeber z.B. STEC11B ausgelesen werden kann. Lösungsprinzip: Der Kanal-A löst bei jeden Flankenwechsel einen externen Interrupt aus. Bei einem Interruptaufruf wird aber zuerst der Zustand vom Kanal-B ermittelt. Anschließend startet eine Zeitschleife, es wird solange geawartet, bis sich das System beruhigt hat und kein Pegelwechsel mehr Kanal-A erfolgt(z.B. 1ms pro Schleife). Erst dann wird der Zustand vom Kanal-A ermittelt und ein ev. noch anstehender ext. Interrupt (INT0) gelöscht. Bernhard
Bernhard S. schrieb: > Lösungsprinzip: Externe Interrupts sind keine gute Lösung. Wurde hier im Forum schon oft "durchgekaut". Einfach die Suchfunktion anwerfen. Viel Glück.
Bernhard S. schrieb: > Der Kanal-A löst bei jeden Flankenwechsel einen externen Interrupt aus. Schlechte Idee Nummer 1. Tasten fragt man nie mittels Interrupts ab. Und ein Drehgeber ist ja im Prinzip nichts anderes als zwei Tasten, die in einer bestimmten Reihenfolge betätigt werden. Wie Davis schon richtig sagte wurde das schon x-Mal durchexerziert. > Anschließend startet eine Zeitschleife, es wird solange geawartet, bis > sich das System beruhigt hat und > kein Pegelwechsel mehr Kanal-A erfolgt(z.B. 1ms pro Schleife). Damit blockierst du dein ganzes System pro Schleifendurchlauf für 1ms? Schlechte Idee Nummer 2.
@alle ein mögliches einfaches Assembler-Beispiel, wie ein rastender Drehgeber ausgelesen werden kann. Bei Drehrichtung-1 blinkt kurz die gelbe LED, bei Drehrichtung-2 die grüne. Bei einem unkorrektem Interruptaufruf (z.B. Programmierfehler) leuchtet die rote LED. Bei Programmen, die nicht zeitkritisch sind, kann ein solches Verfahren angewendet werden. In diesem aktuellen Projekt nutze ich es z.B., es sind eh eine Menge Warteschleifen systembedingt erforderlich, bei Drehgeberbetätigung ist keine Bildaufbauverzögerung erkennbar: Beitrag "Spektrumanalysator Frequenzspektrumanalysator Frequenzspektrometer Speki Wobbelgenerator TFT Atmega8" Nutürlich behindert die 1ms-Warteschleife in der Interruptroutine die Programmabarbeitung in der Hauptschleife. Aber ev. auftretende Interrupts (z.B. TWI) können durch verschachtelte Interrupts ermöglicht werden (bitte vorher INT0 deaktivieren). Im Bild "DREHGEBER_PRINZIP_ext_INTERRUPT" habe ich versucht das Prinzip nochmal grafisch darzustellen. Nach mehreren langsamen Drehversuchen kam das Bild "DREHGEBER_starkes_Prellen" zustande. Bernhard
Martin schrieb: > Schlechte Idee Nummer 2. Taster muß an Interupt-PIN angeschossen werden, also PIN nicht frei wählbar. Schlechte Idee Nummer 3
Muss ich kurz mal widersprechen. Mann kann durchaus einen Drehgeber Interruptunterstützt auslesen. Unterstützt, da man im Interrupt den Wechsel des Pegels von z.B A erkennt und sich das merkt. Ausserhalb des Interrupt-Contextes macht man dan Entprellung und die Drehrichtungserkennung machen und dann wieder den Interrupt aktivieren. Im übrigen kann man sich eine Eigenschaft von zu Nutze machen: Wenn A wechselt ist B stabil. Hab ich vor kurzen selber implementiert und funktioniert sehr gut. Davis schrieb: > Externe Interrupts sind keine gute Lösung. Wurde hier im Forum schon oft > "durchgekaut". Einfach die Suchfunktion anwerfen. Viel Glück.
Niemand ist unnütz, er kann auch als schlechtes Beispiel dienen.
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.