PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pin Change Interrupt am Mega2561



slavezero
05.05.2009, 19:19
Hi,

ich will / muss den Pin Change Interrupt PCINT4 (PortB.4) nutzen. Wie geht das in BASCOM?
das kennt BASCOM nicht:

Config PCInt4 = change
Enable Interrupts
Enable Pcint4

On Pcint4 Isr_pcint4
.
.
.

weis nicht wo ich noch suchen soll :-(

Sauerbruch
05.05.2009, 22:12
Das ist´n bisschen tricky - aber eigentlich ganz einfach:

Es gibt nur 3 PinChange-Interrupts, die aber von je 8 verschiedenen I/O-Pins ausgelöst werden können. Hierzu sind die 24 PCINT-Eingänge in 3 Gruppen zusammengefasst:
PCINT0: Umfasst alle PCINT-Pins von 0-7 (d.h. PB.0 - PB.7)
PCINT1: Umfasst alle PCINT-Pins von 8-15
PCINT2: Umfasst alle PCINT-Pins von 16-23.

Wenn Du also mit dem Anschluss B.4 arbeiten willst, musst Du erstmal in etwa folgenden Code schreiben:

Config PCINT0 = change
On PCINT0 ISR
Enable PCINT0

Damit aber die anderen Pins, die zur Gruppe PCINT0 gehören, nicht den selben Interrupt auslösen, gibt´s für jede Gruppe ein sogenanntes "Mask"-Register, mit dem man festlegenen kann, welcher PCINT-Anschluss denn auch wirklich einen Interrupt auslösen soll: PCMSK2, 1 und 0.

PCMSK0 = &B00010000

aktiviert z.B. den PCINT4-Eingang als einzigen der Gruppe 0-7 - so wie Du es vorhattest.

Klar?

slavezero
06.05.2009, 05:18
alles klar,
vielen Dank

slavezero
06.05.2009, 17:47
Hi,

zu früh gefreut: BASCOM kennt für M2561 keinen PCINTx (?)! ](*,)

der Codeschnipsel sieht so aus:

Config Pcint0 = change
Pcmsk0 = &B00010000
On Pcint0 Isr_pcint4
Enable Pcint0

ich habe es auch mit low, low_level probiert. ich bekomme immer nur Fehlermeldungen.
Compiler Version ist: 1.11.9.2


Und nun? :-s

Sauerbruch
06.05.2009, 18:04
Sorry - da hatte ich wohl einen kleinen Denkfehler (war ja auch schon spät gestern...)

Einen PinChange-Interrupt kann man logischerweise auf nichts anderes konfigurieren als auf "Change" :-) Von daher kann´s diesen Befehl auch nicht geben.

Lass "Config PCINT = Change" einfach mal weg. Nur

On PCINT0 ...
Enable PCINT0
Enable Interrupts

slavezero
06.05.2009, 18:24
Nö, geht auch nicht.

Diese Fehlermeldungen bekomme ich:

Error: 117 Line: 45 Unknown interrupt [PCINT0]
Error: 85 Line: 46 Unknown interrupt source [PCINT0]

Sauerbruch
06.05.2009, 19:41
Hmmm... was der 2561 für Syntax-Spezialitäten hat, weiss ich auch nicht. Das ist eine Liga über mir :-)

Ganz sicher kannst Du aber direkt das entsprechende Register manuell setzen (PCICR, im Datenblatt gut beschrieben):

PCICR = &B00000001

Das aktiviert den PCINT0.

slavezero
06.05.2009, 19:49
Das ist schon klar, aber wie ersetze ich On xxx? und den Einsprung in die ISR?

for_ro
06.05.2009, 20:08
Das ist schon klar, aber wie ersetze ich On xxx? und den Einsprung in die ISR?

Die Interrupts heißen tatsächlich PCI0, PCI1 und PCI2.

Gruß

Rolf

slavezero
06.05.2009, 20:13
DANKE O:)

jetzt gehts =P~ da musste erstmal drauf kommen - man o man

danke und tschüß

thewulf00
07.05.2009, 10:42
Also im C kann ich die PinChange-Interrupts auf Change, Steigende Flanke oder fallende Flanke konfigurieren.