Taster sollen Interrupt auslösen

Gast #394118
Lesenswert?
• ▲
▼
Hallo Leute,

ich hoffe ich nerve nicht zu sehr und das andere evtl. auch was von
meiner doofen Fragerei haben. Ich will lernen mit Interrupts in C zu
arbeiten. An meinen Atmega128 habe ich am kompletten PORTF Taster, also
8 Stück an der Zahl (high-active).
Nun ist es bei Interrupts ja so das ich
1. zuerst mal die includedatei interrupt.h aus der avr-lib
implementieren
2. die Interrupts global mit sei() aktivier (deaktivieren mit cli()
)und
3. die Interrupt-Service-Routine schreib mit
   ISR(Name_vect)

#include <avr/interrupt.h>
ISR(Name_vect)
{
// hier Interruptcode
}
Jetzt hätt ich (glaube ich) keine Schwierigkeit zum Beispiel einen
Timer_Interrupt zu realisieren. Aber irgendwie haut des mit den Tastern
noch nicht hin. Was für Namen_vect muss ich da angeben. Wie gesagt
hängen an PORTF und wär auch ADC0...7 .
Gast #394119
Lesenswert?
• ▲
▼
>zuerst mal die includedatei interrupt.h aus der avr-lib
>implementieren

Nee, brauchst du nicht, die gibt es schon. Was du meinst ist einfügen
oder "inkludieren".

Externe Interrupts kann man an Pins legen deren Zweit-Bezeichnung
"INTx" lautet (wobei x für eine Zahl zwischen 0 und 7 steht).
PortE hat davon ein paar...

(Der Mega128 unterstützt noch keinen Pinchange-Interrupt.)

Du musst dann natürlich noch dem Controller sagen, wie er welchen
Interrupt erzeugen soll (pegelgetriggert, flankengetriggert, Richtung
der Flanke...).
Das Datenblatt ab Seite 87 dürfte/sollte dich dahingehend
interessieren...
Gast #394120
Lesenswert?
• ▲
▼
zu dumm nur dass nicht ein einziger externer Interrupt auf PORTF des
Mega128 liegt.

PE4 - PE7 und PD0 - PD3 wären ihr Preis gewesen. Wenn Du diese Ports
noch nicht belegt hast, kannst Du sie als Interrupteingang definieren
und dann Deine PORTF - Pins denen zuweisen. Das ist dann zwar mehr ein
Software-Interrupt als ein Hardware-Interrupt, aber vieleicht hilft es
Dir ja weiter. Genaue Anleitung wie das zu machen ist, findest Du im
Manual unter dem Punkt Interne Interrupts
Gast #394121
Lesenswert?
• ▲
▼
Wie ihr merkt lerne ich gerade und mach so manchen Fehler. Also zuerst
mal inkludier ich in Zukunft...
Dann werd ich mir wohl merken müssen das ich nicht jeden x-beliebigen
PORT als Eingang nutzen kann, zumindest wenn ich mit Interrupts
arbeiten will.
Ich kann jetzt nicht gleich wieder alles umbelegen, PortE4...7 und
D0...3, die für externe Interrupts kann ich leider nicht mehr
verwenden. Da hängen Ausgänge dran die ich jetzt nicht mehr
umschmeissen will. Mein "Glück" ist das ich sowieso für meine
Anwendung auf einen USART-Interrupt warten muss und erst dann sind
meine Taster relevant. Zeitkritisch ist die Anwendung (nach meiner
Einschätzung) auch nicht, weshalb ich dann ruhig mal pollen kann.
Danke für die Hilfe

Grüße Christoph
#394122
Lesenswert?
• ▲
▼
"Ich kann jetzt nicht gleich wieder alles umbelegen"

Mußt Du auch garnicht. Tasten müssen entprellt werden und das geht nur
mit nem Timerinterrupt und dem ist es völlig egal, welchen Port Du
einliest (es können auch alle sein).

Schau mal in die Codesammlung.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren