Gast
#66405
Hallo! Ich möchte einen Reed-Kontakt (Radl-Dacho Anwendung) entprellen. Dazu will ich nach dem Interrupt (INT0) - Eingang den Interrupt disablen und nach dem Ablauf eines Timers diesen wieder enablen. Leider hab ich das Problem, dass wären der Interrupt disabled ist, irgendwo etwas gesetzt wird wenn ein Zwischen Interrupt eintrifft. Dh. Wenn ich zweimal den Taster betätige dann wird der 2. Druck gemerkt und nach dem Verzögern ausgefürt... Vielleicht kann mir wer helfen oder ich hab mich mit den Register vertan... Aja ich arbeite mit dem ATMEGA16 / 10MHz Hier der Code: /** BENUTZUNG: REED ****/ interrupt [EXT_INT0] void ext_int0_isr(void) { GICR &= 0xBF; // Disable Ext.Interrupt 0 --> Reed OFF. printf("Interrupt eingegangen, (EXT) Disabled\n\r"); zaehler++; printf ("Zaehler: %i \n\r",zaehler); PORTD.5 = 1; TCNT2=0x00; TIMSK |= 0x40; // Enable --> Timer2-Interrupt ON. } /** BENUTZUNG: Reed-Entpreller ****/ interrupt [TIM2_OVF] void timer2_ovf_isr(void) { static int i = 0; i++; if (i>100) { PORTD.5 = 0; TIMSK &= 0xBF; // Disable --> Timer2-Interrupt OFF. TCNT2=0x00; i=0; GIFR &= 0xBF; GICR |= 0x40; // Enable Ext.Interrupt 0 --> Reed ON. printf("Interrupt (EXT) Enabled\n\r"); } }