Hallo, ich habe ein Problem mit dem externen INT2 vom Mega32. ich habe folgendes an code: Externer INT0 und INT1 funktionieren, was mache ich falsch?? ... // globale interrupt register INT0 - INT2 einschalten GICR |= (1<<INT0); // enable INT0 - PD2 GICR |= (1<<INT1); // enable INT1 - PD3 GICR |= (1<<INT2); // enable INT2 - PB2 // INT2 fallend Flanke MCUCSR |= (1<<ISC2); ... /* ** Interrupt routine für externen INT2 - PB2 */ ISR(INT2_vect) { TxUart("INT2\r\n"); } ... sei(); Globale interrupts einschalten ....
Holger Patz schrieb: > // INT2 fallend Flanke > MCUCSR |= (1<<ISC2); Stimmt nicht. 1 nach Bit ISC2 von MCUCSR bedeutet Interrupt bei *rising edge* und du musst eine Mindestdauer des Pulses einhalten (tint typ. 50 ns).
Crosspost Beitrag "INT2 Problem Mega32" @ Holger Patz: Hier kannst du auch direkt sehen, warum Crossposten böse ist. Mein Namensvetter hat jetzt seine Zeit mit etwas verschwendet, was im anderen Thread längst abgehandelt wurde.
Hi Stefan, ok stimmt, dann aber so // INT2 fallend Flanke MCUCSR&= ~(1<<ISC2); Init Pins: // INT0 cbi(DDRD, PD2); sbi(PORTD,PD2); // INT1 cbi(DDRD, PD3); sbi(PORTD,PD3); // INT2 cbi(DDRB, PB2); sbi(PORTB,PB2); Beschaltung: Taster an GND und an INT2. Wenn ich nun den Taster drücke sollte es doch mit der og. Einstellung klappen oder?? Tut's aber nicht. Habe in der INT2 Routine einfach mal ein Piepsen ausgegeben über ein Buzzer um es ganz einfach zu halten. Habe ich irgend wsa vergessen zu initialisieren ? /* ** Interrupt routine für externen INT2 - PB2 */ ISR(INT2_vect) { Beep(5,200); // piept 5 mal für 200 ms }
ok, dachte beim ersten Post, dass ich im falschen Thema gelandet wäre ... sorry kommt nicht wieder vor!
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.