Hallo! Ich versuche gerade einen Decoder für meine Ferbedienung zu schreiben. Jetzt hab ich in meiner Interruptroutine folgendes: if (bit_time > BIT_AVG_TIME) { pre_command <<= 1; pre_command |= 1; } else { pre_command <<= 1; } das ganze funktioniert aber leider nicht. Wenn das erste ankommende Bit eine 0 ist, passiert beim links shiften natürlich nix :-). Was gibt es für Alternativen? Ich kann jetzt natürlich abfragen welches Bit gerade bearbeitet wird und dann entsprechend setzten; da ich aber in ner Interruptroutine bin, frage ich mich, ob es auch einfacher geht??? Viele Grüße Manuel
Ok, ich glaub ich setzte einfach das erste Bit und schiebe es dann später nach hinten raus :-)
Manuel schrieb: > Hallo! > > Ich versuche gerade einen Decoder für meine Ferbedienung zu schreiben. > Jetzt hab ich in meiner Interruptroutine folgendes: > > if (bit_time > BIT_AVG_TIME) { > pre_command <<= 1; > pre_command |= 1; > } > else { > pre_command <<= 1; > } > > das ganze funktioniert aber leider nicht. Wenn das erste ankommende Bit > eine 0 ist, passiert beim links shiften natürlich nix :-). Und? Warum ist das so wichtig? Nach 8-maliger Abarbeitung hast du 8 Bits da reingeschoben. Und wenn dann eben das MSB eine 0 ist, dann ist es eben eine 0. > Was gibt es für Alternativen? Wozu? Dein Code ist völlig korrekt. Zumindest was das Einschieben von 0-en und 1-en angeht. Man könnte das noch etwas kompakter schreiben
1 | ....
|
2 | // nächstes Bit anhängen
|
3 | pre_command <<= 1; |
4 | if (bit_time > BIT_AVG_TIME) |
5 | pre_command |= 1; |
6 | ...
|
aber ansonsten ist daran nichts falsch.
Ja, du hast natürlich vollkomen recht. Ich such wieder Fehler wo keine sind :-(.
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.