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?
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.
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.
danke. PCICR |= (1<<PCIE0); EICRA |= (1<<ISC10) | (1<<ISC00); PCMSK0 |= (1<<PCINT4); So müsste das doch jetzt funktionieren, oder?
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.