Bitstream in Bytevariable (char) schieben

Gast #77239
Lesenswert?
• ▲
▼
Halli Hallo

Hat jemand eine Idee, wie ich einen Bitstrom (welcher ich vom AVR an
PIND.1 einlesen will) in eine Bytevariable streamen kann?

Ich muss das in einer Schleife tun (frage den Distanzsensor von Sharp
ab) und erhalte einen seriellen 8-Bitstrom.

Also irgenwie:

for(int i=8;i<0;i--){
 cmeinChar=PIND.1; //hier bitweise in den char schieben?!?
}

Vielleicht ein Array of Bit machen? Gibts das?

Hat jemand schon mal mit dem Sharp GP2DO2 gearbeitet???

Danke für eure Antworten!
Marcel
Gast #77240
Lesenswert?
• ▲
▼
Hallo Marcel,

ich würd das so machen:

for(int i = 8; i < 0;i--) {
 cmeinChar = cmainChar << 1; // um ein Bit nach links shiften
 cmeinChar = cmainChar | PIND.1; // 1. Bit setzen, falls Eingang "1"
}

Thomas
Gast #77242
Lesenswert?
• ▲
▼
Danke für die Info Thomas

Die Schleife ist schon Ok, da ich zuerst das MSB vom Sensor erhalte
(->also rückwärtszählen).

Also ich probier dann das mal aus; scheint von der Logik her in
Ordnung.
Vielen Dank!
Marcel
Gast #77243
Lesenswert?
• ▲
▼
hmm, also ein kleiner schlaufenfehler ist natürlich noch da; diese
blöden <> zeichen
es müsste natürlich so aussehen:


for(int i=8;i>0;i--){
 cmeinChar = cmainChar | PIND.1; // 1. Bit setzen, falls Eingang "1"
 cmeinChar = cmainChar << 1; // um ein Bit nach links shiften
}
Gast #77244
Lesenswert?
• ▲
▼
Hallo nochmal,

also ob du rauf oder runter zählst ist ja in diesem Fall egal. Die
Zählrichtung hat ja nichts mit der Reihenfolge zu tun, in der die Bits
in dein Char reingeshiftet werden.
Im letzten Beitrag hast du die zwei Zeilen vertauscht. War das Absicht?
So wird nämlich das Bit, welches du als erstes reinshiftest (also dein
MSB) beim letzten Durchlauf aus dem Byte "rausgeschoben" und Bit 0
von cmeinChar wird nach Schleifende immer eine Null sein.

Thomas
Gast #77245
Lesenswert?
• ▲
▼
Danke für deine Nerven. Irgendwie habe ich ein heilloses durcheinander
gemacht. wahrscheinlich würde es manchmal Sinn machen, einen Tag lang
nicht daran zu arbeiten. Sonst sieht man vor lauter Pointern,
Schleifen, Bits und Bytes die einfachsten Dinge nicht mehr:-)

Vielleicht bekomme ich diese dumme Infrarotmessung noch hin; die
Ultraschallmessung war dagegen ein Kinderspiel!

marcel
Gast #77246
Lesenswert?
• ▲
▼
Hi

es ist nicht ganz egal ob man hoch oder runterzählt. Die meisten
Controller (welcher eigentlich nicht?) können nach einer Operation
Springen wenn das Ergebnis gleich oder ungleich null ist. Wenn man
jetzt hochzählt muß vor dem Sprung noch eine Vergleichsoperation
durchgeführt werden. Ergebnis: Mindestesn einen Maschinenbefehl
gespart.

Matthias

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren