Hallo,
steh grad auf dem Schlauch. Hab hier einen Atmega 64 und einen vierfach
Dip-Schalter gegen VCC dran.
VCC
|
o-o-o-o
| | | |
1 2 3 4 <DIPs>
| | | |
| | | o--- Pin B6 <uP-Portpin>
| | o-+--- Pin B7 <uP-Portpin>
| o-+-+--- Pin G3 <uP-Portpin>
o-+-+-+--- Pin G4 <uP-Portpin>
| | | |
R R R R <10K-Widerstände>
| | | |
o-o-o-o
|
GND
Die einzelnen Portpins sind DDR = 0 definiert.
Die Schalter wollte ich in ein Struct ablegen, etwa so.
1 | struct dipbits{
|
2 | byte b0 : 1;
|
3 | byte b1 : 1;
|
4 | byte b2 : 1;
|
5 | byte b3 : 1;
|
6 | byte b4 : 1;
|
7 | byte b5 : 1;
|
8 | byte b6 : 1;
|
9 | byte b7 : 1;
|
10 | } __attribute__((_packed_));
|
11 |
|
12 | #define DIP_BIT(port, bitnummer) (((volatile struct dipbits *)&port)->b##bitnummer)
|
13 | #define DIP1 DIP_BIT(PORTB, 6)
|
14 | #define DIP2 DIP_BIT(PORTB, 7)
|
15 | #define DIP3 DIP_BIT(PORTG, 3)
|
16 | #define DIP4 DIP_BIT(PORTG, 4)
|
und im Main dann quasi den Hex-Wert der Schalter berechnen und per UART
rausschicken.
1 | unsigned int dipwert = (DIP1 * 1 + DIP2 * 2 + DIP3 * 4 + DIP4 * 8);
|
Aber egal was ich an den Schaltern einstelle, es bleibt immer "0". Wo
denke ich hier falsch?
Uwe