Pin Abfrage, wo ist der Fehler?

Gast #789445
Lesenswert?

Hallo,

ich habe folgendes Problem mit meinem Programm (für ATtiny26)
1
int main()
2
{
3
  uint8_t Drehzahl,Taster;
4

5
  DDRB = (1<<DDB0)|(1<<DDB1);              // LEDs
6
  
7
  DDRA &= ~((1<<DDA0)|(1<<DDA1)|(1<<DDA2)); //Taster UP,DOWN,SET
8
  PORTA = (1<<PA0)|(1<<PA1)|(1<<PA2);   //Pullups aktivieren
9
  
10
  TIMSK |= (1<<TOIE0);    //Timer0 Overflow Interrupt enable 
11
  TCCR0 |= (1<<CS02);    //Prescaler = 256 & Timer sarten
12
  GIMSK |= (1<<INT0);    //INT0 enable
13
  MCUCR |= (1<<ISC01);    //INT0 auf fallende Flanke
14
  Drehzahl = eeprom_read_byte(&SpeicherDrehzahl);
15
  sei();
16

17
  while(1)
18
  {
19
    Taster=PINA;
20
    if( Taster <7)
21
    { 
22
      PORTB|=(1<<PB1); //LED an
23
        ...

Ich habe wie im Programm zu erkennen an PA0, PA1 und PA2 Taster 
angehängt und die internen Pullups aktiviert.
Mein Problem ist jetzt, dass wenn ich die Taster betätige (Taster ziehen 
den entsprechenden Pin auf Masse) die If-Anweisung nie durchlaufen wird. 
Egal welchen Taster ich drücke.
Ich hänge vor diesem blöden Fehler schon ein paar Stunden. Im Simulator 
funktioniert es aber auf dem µC nicht.
Die LED ist auch richtig angeschlossen, von Pin über Widerstand nach 
Masse.

Vielleicht sieht jemand von euch den Fehler, ich sehe den Wald vor 
lauter Bäumen nicht mehr.
#789456
Lesenswert?

Du hast den kompletten Port A als Eingänge konfiguriert, aber nur für 
die letzten drei Pins (an denen ja vermutlich die Taster hängen) die 
Pull-Ups aktiviert. Das bedeutet, dass alle anderen Pins hochohmige 
Eingänge sind. Wenn die nicht extern definiert auf Masse gezogen werden, 
wissen nur die Götter und Naturgeister, was für Pegel da im Moment der 
Tasterabfrage anliegen. Entweder Du legst die freien Pins definiert auf 
Masse, oder Du maskierst sie bei der Abfrage aus, indem Du sie mit einem 
& explizit auf Null setzt. Die zweite Methode ist die bessere und auch 
einfacher zu implementieren.

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