Ich suche nach einer einfachen Möglichkeit, einen Zeilencode zu implementieren (sowohl die Codierungs- als auch die Decodierungsteile). Dies könnte so etwas wie Biphase Mark Code, Differential Manchester oder irgendetwas anderes sein, das die folgenden Eigenschaften hat:
Die schlechte Nachricht ist: Einige Probleme lassen sich einfach nicht per Software beheben; Sie müssen entweder Ihre Einschränkungen lockern oder neue Hardware hinzufügen.
Viele optische Kopplungssysteme haben Einschaltverzögerungen, die nicht genau gleich Ausschaltverzögerungen sind, wie Sie bereits bemerkt haben: "..00100.. die 1 erscheint länger ... ..11011.. die 0 erscheint kürzer.". In diesem System ist die 1-zu-0-Verzögerung länger als die 0-zu-1-Verzögerung. Wenn Sie Glück haben, sind diese Verzögerungen konsistent genug, um kompensiert zu werden. Ein Impulsstrecker kann so einfach sein wie eine Diode, ein Kondensator und ein paar Widerstände.
Viele Leitungscodes scheinen Ihre Kriterien zu erfüllen, darunter 4B5B-Codierung , 8b/10b-Codierung (oder einer der typischerweise darin verwendeten 3b/4b- oder 5b/6b-Codes), 6b/8b-Codierung , Manchester-Codierung und ihre Varianten wie Differential Manchester-Codierung , Drei von Sechs, Glasfaser , Pulspositionsmodulation usw.
Ich vermute, Sie haben bereits einige optische Freiraum-Kommunikationshardware eingerichtet, die ein wenig skurril ist, und Sie versuchen, Hardware-Macken vollständig in Software zu kompensieren.
Ein Quick-and-Dirty-Schema ist:
Viele Leitungscodes können angemessen angenähert werden, indem Bytes in eine Folge von Hexadezimalziffern (Nybbles), Quartärziffern oder einzelnen Binärziffern (Bits) aufgeteilt und dann eine Nachschlagetabelle entworfen werden, die diese Ziffer in 8 oder 10 oder 16 oder so umwandelt Bits (Chips), die, wenn sie vom UART oder dem SPI-Peripheriegerät gesendet werden, diesen Leitungscode angemessen annähern.
Vielleicht kann Ihr System zuverlässig zwischen 16 verschiedenen übertragenen Bytes unterscheiden, sodass jedes übertragene übertragene Byte in 4 Datenbits dekodiert werden kann – Ihr Sender verwendet eines von 16 Bytes in seiner kurzen Liste. Wenn Sie ein Byte mit einem isolierten 1-Bit senden und die Hardware es so weit dehnt, dass der Empfänger manchmal ein Muster mit einem einzelnen 1-Bit und manchmal ein Muster mit zwei 1-Bits sieht, müssen beide Muster in dasselbe dekodiert werden 4 Datenbits. (Außerdem muss der Empfänger irgendein Rauschen zwischen den Paketen irgendwie wegwerfen, die 'U'-Präambelbits wegwerfen usw.).
Manchmal können Sie irgendwo in der Senderhardware einen Impulsdehner einfügen und die Widerstände im Sender so einstellen, dass am kritischen Punkt im Empfänger die 1-zu-0-Verzögerung praktisch gleich der 0-zu-1-Verzögerung ist .
Manchmal können Sie irgendwo in der Empfängerhardware einen Impulsdehner einfügen und die Widerstände im Empfänger so einstellen, dass am kritischen Punkt im Empfänger die 1-zu-0-Verzögerung praktisch gleich der 0-zu-1-Verzögerung ist .
Es gibt mehrere existierende Implementierungen von optischer Freiraumkommunikation, die mit 1 Megabit/Sekunde oder schneller laufen.
Würde einer von denen für Sie funktionieren?
Ignacio Vazquez-Abrams
Alex I
gbulmer
JimmyB
JimmyB
Alex I
Alex I
Alex I
mkeith
Alex I
Alex I
mkeith
davidcary
Alex I