Pin Abfrage, wo ist der Fehler?

Gast #789445
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.
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.
Gast
Noch etwas:

Wenn ich die _delay_ms(50); einfüge, ist der Flash 195% voll und ohne 
die Funktion 26%!? Ist das normal, oder wird der Tiny nicht unterstützt?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.