ATMega644 extern INT0

Gast #2879119
Lesenswert?

Guten Tag,
ich schalte am INT0 des Mega644 einen Taster. Der INT0 ist so 
konfiguriert, dass er bei einer steigenden Flanke ausgelöst werden soll. 
Jedoch löst der Interrupt ständig aus, wenn low Pegel herrscht, also 
wenn ich den Tester fest halte. (Habe gelesen das dies die 
Standardeinstellung ist)
Das Ganze habe ich am Oszi überprüft, dort sind die Pegel eindeutig zu 
erkennen.
Das delay in der ISR ist unschön, hilft aber versuchsweise bei der 
Entprellung...

Als Ausgabe lasse ich LEDs toggeln. Momentan ist es jedoch so, dass bei 
halten des Tasters (also low Pegel am Pin) die LED an PC2 im 200ms Takt 
blinkt. Die andere LED macht gar nichts.

Ich hoffe ihr könnt mir helfen!
Vielen Dank schon mal!!!

1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <util/delay.h>
4

5
ISR(INT0_vect)
6
{  
7
  if (PIND & (1<<PD2))
8
  {//logisch 1
9
    PORTC ^= (1<<PC2);
10
  }
11
  else
12
  {//logisch 0
13
    PORTC ^= (1<<PC3);
14
  }
15
  _delay_ms(200);
16

17
}
18

19
int main(void)
20
{
21
  //LED's
22
  DDRC |= (1<<PC2) | (1<<PC3);  //PC3 as output
23
  PORTC |= (1<<PC2) | (1<<PC3);  //Enable internal pull ups
24

25
  //Extern INT
26
  DDRD &= ~(1<<PD2);        //INT0 as input
27
  PORTD |= (1<<PD2);        //Enable internal pull ups
28
  
29
  //Init extern INT0
30
  MCUCR |= (1<<ISC00) | (1<<ISC01);
31
  EIMSK |= (1<<INT0);
32
  EIFR |= (1<<INTF0);
33
  
34
  sei();
35
    
36
    while(1)
37
    {
38

39
    }
40
}
Gast #2879161
Lesenswert?

Andreas schrieb:
> MCUCR ist so konfiguriert das die steigende Flanke detektiert werden
> soll.

Ich nehme dafür aber EICRA.

Letztlich ist es auch Wurscht. Nimm eine anständige Entprellroutine; 
eine banale Lösung mit Taster an INTx-Pin scheitert immer und immer 
wieder. 1000 x hier schon beschrieben, dass das absolter Müll ist.
Wenn außer mir keiner antwortet, dann liegt das an dem _delay_ms(200) in 
der Interrupt-Routine. Die meisten müssen beim Lesen erst einmal zum 
Arzt, um sich Schmerzmittel verschreiben zu lassen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren