Hallo Leute,
habe kleines C-programm geschrieben, wo ich INT0 durch ein
Taster-Drücken auslöse. Dann wird ein Zähler um 1 erhöht.
Leider funktioniert es nicht immer, da manchmal um mehr als eins erhöht
wird:
Bsp: Counter = 10 >> taster Drücken >> counter = 12 (Sollte aber 11
sein)
hier ein Code-Asuschnitt:
volatile uint8_t counter;
SIGNAL(SIG_INTERRUPT0)
{
counter = counter + 1;
}
int main(void)
{
PORTD = 0x0C;
DDRD = 0x32;
GIFR |= (1 << INTF0);
GIFR |= (1 << INTF1);
MCUCR |= 0x03;
MCUCR |= 0x0C;
GICR |= (1 << INT0);
GICR |= (1 << INT1);
cli(); // clear Interrupt
sei(); // enable interrupts
while (1)
{ }
}
Kann mir bitte jemand dabei helfen? Vielen Dank im Voraus
Gruß
Stichwort: Tastenentprellung !!!
^^ wenn du noch nen Timer übrig hast, kannste den ja so einstellen, dass der nen Output Compare Interrupt auslöst. Dann ermöglicht dein Tastendruck den Timer-OCM-Interrupt und wenn der dann kommt, wird erst geschaut, wo der Taster gerade ist.. also nachdem er sich beruhigt hat. zB für nen 8Bit-Timer (Zeiangaben für fCPUI/O = 8MHz):
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
Vielen Dank, Es funktioniert. Grüße
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.