Forum: Compiler & IDEs PCINT Interrupt mega88


von KernelPanic (Gast)


Lesenswert?

Hallo.
Ich verstehe die PCINT interrupts nicht wirklich...
Die Pins eines mega88 haben im Datenblatt alle die PCINT Eigenschaft. 
Wie kann ich das denn nun in meinem Program verwenden?
Ich habe ja nur PCINT0-PCINT2 zur verfügung. Ich müsste aber auf PB4 ein 
Interupt bekommen. Ist das irgendwie möglich?

von Andreas K. (a-k)


Lesenswert?

So schwer zu verstehen? PCINT0..2 sind die Register, jedes davon hat 8 
Bits. Ergibt insgesamt 24 Bits, mehr als genug für den Mega88.

von Johannes M. (johnny-m)


Lesenswert?

Die Pin Change Interrupts sind in Gruppen mit den entsprechenden Pins 
verbunden. Jeder der drei Pin Change Interrupts ist für einen kompletten 
Port zuständig (PCIF0 für die Pins PCINT0...7, also Port B, PCIF1 für 
PCINT8...14, also Port C, PCIF2 für PCINT16...23, also Port D). Mit den 
PCMSK-Registern (Pin Change Interrupt Mask Register) kann man die 
einzelnen Pins für den dazugehörigen Interrupt aktivieren. Wenn Du also 
an PB4 einen Pin Change Interrupt haben willst, musst Du zunächst mal 
den Pin Change Interrupt 0 freigeben (PCIE0) und zusätzlich im PCMSK0 
das zu PB4 gehörige Bit PCINT4 setzen.

von KernelPanic (Gast)


Lesenswert?

danke.
        PCICR |= (1<<PCIE0);
  EICRA |= (1<<ISC10) | (1<<ISC00);
  PCMSK0 |= (1<<PCINT4);
So müsste das doch jetzt funktionieren, oder?

von Johannes M. (johnny-m)


Lesenswert?

> EICRA |= (1<<ISC10) | (1<<ISC00);
Das hat mit den Pin Change Interrupts nichts zu tun, das ist nur für die 
externen Interrupts. Die Pin Change Interrupts können nicht 
flankenselektiv ausgelöst werden. Die Flankenerkennung muss in Software 
gemacht werden. Der Rest müsste aber stimmen.

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
Noch kein Account? Hier anmelden.