uC liest Taster nicht richtig ein - warum?

OP #1379802
Lesenswert?

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 
:-(

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