www.mikrocontroller.net

Forum: Compiler & IDEs Speicherung von Pin-Zuständen funktioniert nicht


Autor: Alexander (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Programm geschrieben, das in durch den Timer vorgegebenen 
Zeitabständen die Pegel an den Pins PB1 und PB2 speichert. Um 
Speicherplatz zu sparen, wird in eine 8-Bit Variable vier mal der 
jeweilige Zustand gespeichert, danach kommt die nächste Variable.
Jetzt habe ich PB1 mit 5V und PB2 mit GND verbunden. Also müsste die 
VAriable doch eigentlich 0b01010101 sein? Es kommt bei mir über den UART 
aber immer 0b10101010 an. Das ganze ist also genau vertauscht.

Wenn ich PB1 mit GND und PB2 mit 5V verbinde kommt 0b10101000 raus.

Was mach ich nur falsch?


Hier der Code:
 
DDRB &= ~((1<<PB1) | (1<<PB2)); // PB1 und PB2 als Eingang 

if (SpeicherBits == 1) 
{ 
Ergebnis[AnzahlMessungen] |= (PINB & (1<<PINB1)); 
Ergebnis[AnzahlMessungen] |= ( (PINB & (1<<PINB2))<<1); 
SpeicherBits = 2; 
} 

else if (SpeicherBits == 2) 
{ 
Ergebnis[AnzahlMessungen] |= ( (PINB & (1<<PINB1))<<2); 
Ergebnis[AnzahlMessungen] |= ( (PINB & (1<<PINB2))<<3); 
SpeicherBits = 3; 
} 

else if (SpeicherBits == 3) 
{ 
Ergebnis[AnzahlMessungen] |= ( (PINB & (1<<PINB1))<<4); 
Ergebnis[AnzahlMessungen] |= ( (PINB & (1<<PINB2))<<5); 
SpeicherBits = 4; 
} 

else if (SpeicherBits == 4) 
{ 
Ergebnis[AnzahlMessungen] |= ( (PINB & (1<<PINB1))<<6); 
Ergebnis[AnzahlMessungen] |= ( (PINB & (1<<PINB2))<<7); 
AnzahlMessungen++; 
SpeicherBits = 1; 
}

Vielen Dank und Grüße, Alexander

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm mal ein Blatt Papier und geh Schritt für Schritt nach was du da 
wohin schiebst und wo dieses Bit vor und nach dem Schieben steht.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>(PINB & (1<<PINB1)
und
>(PINB & (1<<PINB2)

tum wohl nicht das, was du erwartest, wenn der enztsprechende Pin 0 oder 
1 ist.

Also:
(PINB & (1<<PINB1)
ist ausgeschrieben
PINB & (1<<1)
also
PINB & 2

Ist der Pin PB1 auf GND, ergibt das
0 & 2 = 0
Ist der Pin auf VCC, ergibt das
2 & 2 = 2 = 0b00000010

Entsprechend für Pin PB2
0 & 4 = 0
bzw.
4 & 4 = 4 = 0b00000100

Die Einser sind also nicht da, wo du sie gerne hättest.

Oliver

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.