Forum: Mikrocontroller und Digitale Elektronik Binäre Werte zusammenfügen Atmega88


von marco (Gast)


Lesenswert?

Hallo Jungs

brauche mal wieder euere Hilfe und zwar zu folgenden Problem:

An den pins D1 D2 D3 D4 eines Atmega8 liegt z.b die Binäre information 
1001 .

Ich frage nun  die 4 pin nacheinander ab und habe dann 4 bits Variabeln 
zb. var1 var2 var3 var4.

Wie kann ich nun die 4 Variabeln zusammenfügen , daß der inhalt 1001 
ergibt.

wäre sehr nett wenn jemand mir helfen kann oder eine andre Methode 
vorschlägt

PS: Ich schreibe in C

MfG

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Bitmanipulation ist das, was du brauchst...

von Stephan (Gast)


Lesenswert?

marco schrieb:

> Ich frage nun  die 4 pin nacheinander ab und habe dann 4 bits Variabeln
> zb. var1 var2 var3 var4.

Warum nicht den ganzen Port einlesen ? Dann hast Du Dein Byte.
Die überzähligen einfach verUNDen.

von Peter (Gast)


Lesenswert?

1
unsigned char myValue;
2
myValue = (PIND > 1) & 0x1F;

von Peter (Gast)


Lesenswert?

Oups...
1
unsigned char myValue;
2
myValue = (PIND >> 1) & 0x0F;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

marco schrieb:
> Wie kann ich nun die 4 Variabeln zusammenfügen , daß der inhalt 1001
> ergibt.
Wobei die Reihenfolge nicht ganz unwichtig ist. Wenn dein Wort z.B. so 
aussieht:
>> An den pins D1 D2 D3 D4 eines Atmega8 liegt die Binäre information 1100
Dann ist blöderweise die Bitreihenfolge vertauscht, am Port liegt dann 
nämlich der Wert xxx0011x an, und das ist (eigentlich) die falsche 
Reihenfolge... :-o

Gewöhn dir besser an, die Bits immer absteigend zu nummerieren, denn so 
ist auch die Wertigkeit in einem binären Wort: das MSB ist links, das 
LSB rechts...

von marco (Gast)


Lesenswert?

Hi Jungs
Danke für die Hilfe, nun kommt das nächste Problem.

#Ich möchte aus PIND6 ,PIND7, PINB0 und PINB1 wieder eine 4 bit variale 
machen.wobei PIND6 das niedrigste bit ist.
Beispiel

PINB1--> 1

PINB0 --> 1

PIND7--> 0

PIND6--> 1


Wert= 1101

kann mir jemnad kurz eine Zeile schreiben wie das geht.Ich habe es 
allein leider nicht hingekriegt

Danke im Voraus

von Oliver (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Vorne anfangen.

Und dazu das hier:

Lothar Miller schrieb:
> Bitmanipulation ist das, was du brauchst...

Da musst du durch.

Oliver

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.