www.mikrocontroller.net

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


Autor: Ederer Christoph (Gast)
Datum:

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

Autor: inoffizieller WM-Rahul (Gast)
Datum:

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

Autor: tex (Gast)
Datum:

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

Autor: Ederer Christoph (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Ederer Christoph (Gast)
Datum:

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

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.