Forum: Mikrocontroller und Digitale Elektronik Taster sollen Interrupt auslösen


von Ederer Christoph (Gast)


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 .

von inoffizieller WM-Rahul (Gast)


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...

von tex (Gast)


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

von Ederer Christoph (Gast)


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

von Peter D. (peda)


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

von Ederer Christoph (Gast)


Lesenswert?

Kling auch logisch. Das hab ich auch schon in der Codesammlung gesehen.
Nur da war ich halt noch auf "meine" (nicht existierenden)anderen
Interrupts

Danke

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
Noch kein Account? Hier anmelden.