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 .
>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...
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
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
"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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.