mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik uC liest Taster nicht richtig ein - warum?


Autor: Daniel B. (scheinleistung)
Datum:

Bewertung
0 lesenswert
nicht 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:
// Aktiviere Pull-Up für Taster (PC3) und aktiviere LED1 (PC0), LED2 (PC1) und LED3 (PC2)
PORTC     |= (1<<PC3);    //aktiviere Pull Up  
DDRC      = (1 << DDC0) | (1 << DDC1) | (1 << DDC2);  //Ausgang für LEDs
DDRC      &= ~( 1 << DDC3 );  //Eingang für Taster


Hier die Inetrrupt Routine die in 10ms Schritten den Taster abfrägt
ISR(TIMER0_OVF_vect)
{  
    if (!(KEY_PIN & (1<<KEY_PINNO)) ) 
    {
          antiBounceCounter++;
    }
    else 
    {
      antiBounceCounter = 0;
    }
}


Hier die Abarbeitung des Tasters:
void antiBounce(void)
{
   // Taste ist mind. CNTMIN * 10 ms "prellfrei" 
  if(antiBounceCounter > CNTMIN)
  {  
  
    //Taste wurde gedrückt und losgelassen BEVOR 2Sekunden Limit erreicht
    if ((antiBounceCounter < CNT_2S) && (KEY_PIN & (1<<KEY_PINNO))) 
    {   
      PORTC |= (1<<PC1); //zur Signalisierung
      wait100();
      wait100();
      PORTC &= ~(1<<PC1);
    }

                if ((antiBounceCounter > CNT_2S)) //länger als 2sekunden betätigt
    { 
      
        PORTC |= (1<<PC1); //zur Signalisierung
        wait100();
        wait100();
        PORTC &= ~(1<<PC1);
    }
       }
}

Definitionen:
#define CNTMIN      7      // Min. Zeit um Tastendruck zu erkennen
#define CNT_2S      200     // "lange gedrueckt:"
#define KEY_PIN      PINC   // Quelle für Taster
#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 
:-(

Autor: H.j.Seifert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahrscheinlich wie so oft - JTAG-Fuse.
Bastel mir bald mal ein Makro auf die Tastatur.

Autor: Daniel B. (scheinleistung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JTAG war vorher auf STK500 und auch jetzt aktiviert... Richtig? Falsch?

Autor: Daniel B. (scheinleistung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber jetzt gehts... Da muss am STK500 etwas anders eingestellt gewesen 
sein. Danke Du hast mir den Abend gerettet endlich kann ich schlafen 
gehen ;-)

Autor: H.j.Seifert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falsch würde ich sagen. Mit JTAG geht PINC3 nicht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.