uC liest Taster nicht richtig ein - warum?

OP #1379802
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.