Hallo zusammen, versuche grad meinen ersten Interrupt zu generieren und komme grad nicht weiter.... Ich versuche eine steigende Flanke am PB2 zu detektieren. Hierfür möchte ich den INT0 verwenden, jedoch ohne Erfolg. Mein Ansatz: ISR(INT0_vect) { // Mach was.... } int main(void) { DDRB = 1 << PB2; PORTB = 1 << PB2; GIFR &= 1<<INTF0; MCUCR &= (1<<ISC01 | 1<<ISC00); sei(); while(1) { // Mach was.... } } So, was mache ich falsch oder was fehlt hier noch? Vorab besten Dank!
1 | MCUCR |= (1 << ISC00) | (1 << ISC01); //configure INT0: rising edge |
2 | GIMSK |= (1 << INT0); //enable INT0 |
3 | sei(); |
4 | |
5 | ISR(EXT_INT0_vect) { |
6 | /*tu etwas*/ |
7 | } |
Bitte bedenke aber, das INT0 im sleep mode nur "low level" erkennt (also keine egde detection) und daher in diesem Falle der pin change interrupt das Mittel der Wahl ist:
1 | //configure pinchange interrupt on PB2/INT0/PCINT10 |
2 | PCMSK1 |= (1 << PCINT10); //configure interrupts for the PCINT1[8:11] to PB2 |
3 | GIMSK |= (1 << PCIE1); //enable PCINT10 |
4 | sei(); |
5 | /*ggf. hier sleep mode aktivieren*/ |
6 | ISR(PCINT1_vect) { |
7 | /*hier müsstest du jetzt noch feststellen, um welche flanke es sich handelt/ob PB2 high oder low ist*/ |
8 | /*tu etwas*/ |
9 | } |
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.