Hallo zusammen,
Ich teste ein kleines Programm gerade das erste mal auf einer kleinen,
selbstgelöteten Schaltung (ATMEGA16). Vorher habe ich das STK500
benutzt.
Die Bedienung eines Tasters hat super funktioniert vorher, jetzt auf dem
neuen Target funtioniert gar nichts mehr, das Programm verhält sich als
wäre der Taster IMMER PERMANENT betätigt. Nur warum. Ich habe den
internen Pull Up aktiviert und ziehe mit dem Taster nach Masse, genau
wie beim STK500. Ich messe am Port Pin auch High Pegel wenn ich nicht
betätige und Low Pegel wenn ich betätige. Also alles wie es sein soll.
Trotzdem funktioniert das identische Programm zum Abfragen des Tasters
nicht mehr!
Hier die Konfiguration:
1 | // Aktiviere Pull-Up für Taster (PC3) und aktiviere LED1 (PC0), LED2 (PC1) und LED3 (PC2)
|
2 | PORTC |= (1<<PC3); //aktiviere Pull Up
|
3 | DDRC = (1 << DDC0) | (1 << DDC1) | (1 << DDC2); //Ausgang für LEDs
|
4 | DDRC &= ~( 1 << DDC3 ); //Eingang für Taster
|
Hier die Inetrrupt Routine die in 10ms Schritten den Taster abfrägt
1 | ISR(TIMER0_OVF_vect)
|
2 | {
|
3 | if (!(KEY_PIN & (1<<KEY_PINNO)) )
|
4 | {
|
5 | antiBounceCounter++;
|
6 | }
|
7 | else
|
8 | {
|
9 | antiBounceCounter = 0;
|
10 | }
|
11 | }
|
Hier die Abarbeitung des Tasters:
1 | void antiBounce(void)
|
2 | {
|
3 | // Taste ist mind. CNTMIN * 10 ms "prellfrei"
|
4 | if(antiBounceCounter > CNTMIN)
|
5 | {
|
6 |
|
7 | //Taste wurde gedrückt und losgelassen BEVOR 2Sekunden Limit erreicht
|
8 | if ((antiBounceCounter < CNT_2S) && (KEY_PIN & (1<<KEY_PINNO)))
|
9 | {
|
10 | PORTC |= (1<<PC1); //zur Signalisierung
|
11 | wait100();
|
12 | wait100();
|
13 | PORTC &= ~(1<<PC1);
|
14 | }
|
15 |
|
16 | if ((antiBounceCounter > CNT_2S)) //länger als 2sekunden betätigt
|
17 | {
|
18 |
|
19 | PORTC |= (1<<PC1); //zur Signalisierung
|
20 | wait100();
|
21 | wait100();
|
22 | PORTC &= ~(1<<PC1);
|
23 | }
|
24 | }
|
25 | }
|
Definitionen:
1 | #define CNTMIN 7 // Min. Zeit um Tastendruck zu erkennen
|
2 | #define CNT_2S 200 // "lange gedrueckt:"
|
3 | #define KEY_PIN PINC // Quelle für Taster
|
4 | #define KEY_PINNO PC3
|
Hat jemand eine Idee warumd as hier nicht funktioniert, also warum der
uC meint der Taster sei permanent betötigt, obwohl es vorher am STK500
so funtioniert hat? Finde keinen Fehler, Ich beiss gleich in Keyboard
:-(