PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmel 2560 -> Pin Changed Interrupts



AVRbrauns
20.04.2008, 00:49
Hallo zusammen,
ich würde gerne an dem Atmel 2560 die PCINT Interruppts verwenden.
Am PinK.5 habe ich einen Taster angeschlossen und würde gerne mit PCINT21 überprüfen.

Leider erhalt eich immer die Fehlermeldung:

Unknown interrupt source [PCINT21]


Auch wenn ich das mit Bascom mitgelieferte Beispiel ausführe klappt das zwar mit dem eingetragenen Chip, wenn ich diesen aber abändere auf den m2560def.dat dann erhalte ich auch die besagte Fehlermeldung.

Kann der 2560 überhaupt PCINTs auswerten ?

Vielen Dank
avrbrauns

linux_80
20.04.2008, 01:02
Hallo,
die PCINTs sind Byteweise organisiert, dH. PCINT0 - 7 von PortB sind Interrupt PCINT0 usw.
Nicht jedes Pin hat einen eigenen Interrrupt. Welcher Eingang den IRQ ausgelöst hat, muss man in der ISR selber nachschauen, es können 8 pro ISR/Port sein.
Wenn man aber nur einen freischaltet (in PCMSKx), kann man sich das sparen.
Siehe auch DB.

AVRbrauns
20.04.2008, 01:11
Hallo,
vielen Dank für deine Antwort.

Ich habe am ganzen Port K nur einen Pin belegt das ist der PinK.5
An diesem hängt ein Taster, den ich gerne per Interrupt abfragen möchte.

WIe kann ich den Interrupt ansprechen PCINT21 kennt der Compiler nicht :-(

Sauerbruch
20.04.2008, 06:23
Wie linux_80 schon sagte: Die PC-Interrupts gibt´s nur byteweise. Du kannst also nicht z.B. 20 verschiedene Interrupt-Routinen deklarieren, sonder nur 3: PCINT0, PCINT1 und PCINT2. Diese 3 Gruppen fassen die PCINT-Pins 0-7, 8-15 und 16-23 zusammen.

Meistens ist es ja aber so, dass man nur von einem einzigen dieser jeweils 8 Pins den Interrupt ausgelöst haben möchte; dafür gibt´s dann die PCMSK-Register0-2, in denen man festlegen kann, welcher der 8 einen Interrupt auslösen kann und welcher eben nicht.

Wenn Du konkret den PinK5 nehmen möchtest, musst Du die ISR für PCINT2 benennen und mit PCMSK2 = &B00100000 dafür sorgen, dass bei Pegeländerungen der anderen K-Ports eben nichts passiert.

AVRbrauns
20.04.2008, 12:16
Vielen Dank für deine gute Erklärung. Deine Ausführung ist mir jetzt klar.
Leider kannte mein Compiler keinen PCINT.

Ich habe das Problemchen jetzt gefunden. beim 2560 heißen die 3 PCI0, PCI1, PCI2

Vielen Dank
avrbrauns

stefan_Z
06.05.2008, 13:28
Ja, das ist mal wieder typisch Bascom...
Registernamen sind unterschiedlich und der Compiler sagt nur Bullshit wie "WHILE/WEND nicht erkannt in irgendeiner Zeile".