www.mikrocontroller.net

Forum: Compiler & IDEs Mehrere externe Interrupts C für ATMega16?


Autor: Roland D. (duro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: kosmonaut pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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__...

hth, gute nacht,
bye kosmo

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Roland D. (duro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.