Forum: Mikrocontroller und Digitale Elektronik Portpins geschickt einlesen


von Manuel (Gast)


Lesenswert?

Prozessor: AVR Atmega8

Hallo,

ich möchte eine Kombination aus 3 Portpins geschickt einlesen und je 
nachdem, welche Kombination ausgewählt ist, etwas Bestimmtes tun.

Und zwar so wollte ich beispielsweise Port C verwenden und dort PC0, 
PC1, PC2 am einfachsten die internen Pullups aktivieren.
Nun sollen an die Ports Masse einzeln Masse angelegt werden, sodass je 
nachdem wo die Masse anliegt, 2^3 = 8 verschiedene 
Zuständs-Kombinationen entstehen, z.B.
Zustand 1: PC0 low, PC1 high, PC2 high
Zustand 2: PC0 high, PC1 low, PC2 low
usw.

Nun ist meine Frage, wie man das am besten im Programm einliest, um 
etwas zu machen.

Angenommen man würde nur Port C verwenden und sonst dort nichts 
anschließen, so könnte man ja den ganzen Port in eine Variable einlesen 
und bekommt eine Zahl als Ergebnis. Diese könnte man dann auswerten.
Am einfachsten wäre es, wenn man eine Zahl in diesem Falle von 0 bis 7 
bekommen würde, doch wie setzt man das am besten um?
Schließlich sind bei internen Pullups der "Standard-Zustand" high und 
damit das Bit gesetzt.

Gruß
Manuel

von Tom (Gast)


Lesenswert?

Such mal nach "Bitmanipulation".

Das Ausmaskieren der fünf nicht benötigten Bits  geht über eine 
UND-Verknüpfung mit binär 00000111.

Das "Umdrehen" der Bits über eine "Exklusive Oder"-Verknüpfung mit 
00000111.

von Tom (Gast)


Lesenswert?

...war vielleicht ein wenig kurz beantwortet. Ich lege nochmal nach:
Als erstes liest Du einfach den "kompletten" Port, also 8 Bit in ein 
Register ein. Das geht unabhängig davon, ob an den anderen Ports 
irgendetwas angeschlossen ist. Der Zustand dieser übrigen Bits 
interessiert Dich aber nicht.

Du musst jetzt zwei Dinge tun.
1. Die nicht benötigten Bits "ausmaskieren", sozusagen "auf null" 
setzen. Das kannst Du über eine UND-Verknüpfung machen.
2. Du drehst Deine Bits um, damit Du deine 3-Bit-Zahl bekommst.

Ob Du erst ausmaskierst und dann umdrehst oder umgekehrt ist egal. Beim 
"Umdrehen" musst aber je nach Reihenfolge darauf achten mit welcher Zahl 
du die Exklusiv-Oder-Verknüpfung durchführst. (00000111 oder 11111111)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.