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:
1 |
|
2 | DDRB &= ~((1<<PB1) | (1<<PB2)); // PB1 und PB2 als Eingang
|
3 |
|
4 | if (SpeicherBits == 1)
|
5 | {
|
6 | Ergebnis[AnzahlMessungen] |= (PINB & (1<<PINB1));
|
7 | Ergebnis[AnzahlMessungen] |= ( (PINB & (1<<PINB2))<<1);
|
8 | SpeicherBits = 2;
|
9 | }
|
10 |
|
11 | else if (SpeicherBits == 2)
|
12 | {
|
13 | Ergebnis[AnzahlMessungen] |= ( (PINB & (1<<PINB1))<<2);
|
14 | Ergebnis[AnzahlMessungen] |= ( (PINB & (1<<PINB2))<<3);
|
15 | SpeicherBits = 3;
|
16 | }
|
17 |
|
18 | else if (SpeicherBits == 3)
|
19 | {
|
20 | Ergebnis[AnzahlMessungen] |= ( (PINB & (1<<PINB1))<<4);
|
21 | Ergebnis[AnzahlMessungen] |= ( (PINB & (1<<PINB2))<<5);
|
22 | SpeicherBits = 4;
|
23 | }
|
24 |
|
25 | else if (SpeicherBits == 4)
|
26 | {
|
27 | Ergebnis[AnzahlMessungen] |= ( (PINB & (1<<PINB1))<<6);
|
28 | Ergebnis[AnzahlMessungen] |= ( (PINB & (1<<PINB2))<<7);
|
29 | AnzahlMessungen++;
|
30 | SpeicherBits = 1;
|
31 | }
|
Vielen Dank und Grüße, Alexander