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?
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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.