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

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.

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.