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 | }
|