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
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
Oha, die For-Schleife müsste natürlich anders aussehen. Beispielsweise so: for (int i = 0; i < 8; i++) ...
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
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 }
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.