Hallo Zusammen, da ich nach stundenlanger Suche auch hier auf der Seite nichts gefunden habe, habe ich eine Frage an die Profis. Ich habe einen ATMega16, den ich per C Code programmiere. Ich möchte gerne über mehrere Tasten Interrupts auslösen und habe bisher keine für mich verständliche Erklärung gefunden, wie ich das anstellen kann. Ich möchte z.B. über eine Taste eine bestimmte Funktion ausführen und über eine andere Taste eine andere Funktion aufrufen. Kann mir hierbei jemand von Euch helfen, da mir nach der Suche einfach nur noch der Kopf schwirrt.... Vielleicht sehe ich den Wald ja vor lauter Bäumen nicht. Gruß Roland
hallo, entsprechend deiner überschrift vermute ich einfach mal so, dass du mehrere externe interrupts benutzen willst. dazu musst du für jeden eine eigene ISR schreiben. hier steht wie: http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html hth, gute nacht, bye kosmo
kosmonaut pirx wrote: > entsprechend deiner überschrift vermute ich einfach mal so, dass du > mehrere externe interrupts benutzen willst. Aber nur bis zu dem Zeitpunkt, da er merkt, dass man mechanische Tasten sowieso entprellen muss und daher einen Timerinterrupt stattdessen benötigt...
Jörg Wunsch wrote: > Aber nur bis zu dem Zeitpunkt, da er merkt, dass man mechanische > Tasten sowieso entprellen muss und daher einen Timerinterrupt > stattdessen benötigt... Hallo Jörg, ich dachte die Entprellung der Taste erfolgt dann in der Funktion, die die Taste aufruft. Ok, eswar spät gestern Abend und den meinen Logikfehler habe ich inzwischer eingesehen. Kannst Du mir vielleicht zu Deinem Lösungsvorschlag (mehrere Timerinterrupts) ein wenig weiterhelfen? Da ich eher C-lastig bin, ist die Programmierung des ATMEGA16 manchmal ein wenig verwirrend für mich.... Besten Dank & Gruß Roland
Es sind nicht mehrere Timerinterrupts, sondern ein ,,tick''-Timer, der z. B. alle 10 ms aufgerufen wird. Den braucht man in einer hinreichend komplexen Applikation ohnehin, um alle von der Zeit abhängenden ,,Standardaufgaben'' auszuführen, und der pollt dann gleich die Tasten mit. Wenn eine Taste 2- oder 3mal als gedrückt erkannt worden ist, wird es dann dem Hauptprogramm gemeldet. Implementierungen dafür dürftest du einige in den einschlägigen Codesammlungen finden. Externer Interrupt (oder pin change interrupt, aber den hat der ATmega16 nicht) hat bei mechanischen Tasten nur Sinn, um damit dem Prozessor aus dem sleep zu ziehen. Danach schaltet man den aber auch wieder ab.
Ich vermute mal, dein eigentliches Problem lautet: Wie frage ich mehrere Tasten ab? Und das hat mit externen Interrupts so gut wie gar nichts zu tun. So gehts: Beitrag "Tasten entprellen - Bulletproof" Oliver
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.