Estoy buscando una manera fácil de implementar un código de línea (tanto las partes de codificación como las de decodificación). Esto podría ser algo como Biphase Mark Code, Differential Manchester o cualquier otra cosa que tenga las siguientes propiedades:
La mala noticia es que algunos problemas simplemente no se pueden solucionar en el software; debe relajar sus restricciones o agregar nuevo hardware.
Muchos sistemas de acoplamiento óptico tienen retardos de encendido que no son exactamente iguales a los retardos de apagado, como ya notó: "..00100.. el 1 parece más largo... ..11011.. el 0 parece más corto". En este sistema, el retraso de 1 a 0 es más largo que el retraso de 0 a 1. Si tiene suerte, esos retrasos son lo suficientemente consistentes como para compensarlos. Un extensor de pulsos puede ser tan simple como un diodo, un capacitor y un par de resistencias.
Muchos códigos de línea parecen cumplir con sus criterios, incluida la codificación 4B5B , la codificación 8b/10b (o cualquiera de los códigos 3b/4b o 5b/6b que se usan normalmente), la codificación 6b/8b , la codificación Manchester y sus variantes, como Diferencial Codificación Manchester , Tres de Seis, Fibra Óptica , Modulación de posición de pulso , etc.
Supongo que ya tiene configurado un hardware de comunicación óptica de espacio libre que es un poco peculiar, y está tratando de compensar las peculiaridades del hardware por completo en el software.
Un esquema rápido y sucio es:
Muchos códigos de línea se pueden aproximar adecuadamente dividiendo los bytes en una secuencia de dígitos hexadecimales (nybbles), dígitos cuaternarios o dígitos binarios individuales (bits) y luego diseñando una tabla de búsqueda que transforme ese dígito en 8, 10, 16 o más. bits (chips) que, cuando se envían al UART o al periférico SPI, se aproximan adecuadamente a ese código de línea.
Quizás su sistema pueda distinguir de manera confiable entre 16 bytes transmitidos diferentes, por lo que cada byte transmitido puede decodificarse en 4 bits de datos: su transmisor usa uno de los 16 bytes en su lista corta. Cuando envía un byte con un 1 bit aislado, y el hardware lo estira lo suficiente como para que el receptor a veces vea un patrón con un solo 1 bit y otras veces ve un patrón con dos 1 bits, ambos patrones deben decodificarse en el mismo 4 bits de datos. (Además, el receptor debe desechar de algún modo cualquier ruido entre paquetes, desechar los bits de preámbulo 'U', etc.).
A veces, puede insertar un extensor de pulsos en algún lugar del hardware del transmisor y ajustar las resistencias en el transmisor de modo que, en el punto crítico del receptor, el retraso de 1 a 0 sea prácticamente el mismo que el retraso de 0 a 1. .
A veces, puede insertar un extensor de pulsos en algún lugar del hardware del receptor y ajustar las resistencias del receptor de manera que, en el punto crítico del receptor, el retraso de 1 a 0 sea prácticamente el mismo que el retraso de 0 a 1. .
Hay varias implementaciones existentes de comunicación óptica de espacio libre que se ejecutan a 1 megabit/segundo o más rápido.
¿Te serviría uno de esos?
Ignacio Vázquez-Abrams
alex yo
gbulmer
jimmyb
jimmyb
alex yo
alex yo
alex yo
keith
alex yo
alex yo
keith
davidcary
alex yo