¿Por qué IR Transceptor transmite / recibe basura?

0

Estoy intentando conectar dos microcontroladores de forma inalámbrica mediante transceptores IR. El microcontrolador que estoy usando es ATMega164PA que funciona con un suministro de 3.3V a 8MHz y el transceptor es TFDU4101-TR3 . Estoy utilizando la comunicación en serie para ambos. Cuando trato de enviar un carácter 10 veces de un transceptor a otro, obtengo un rango de números entre 255 y 193. ¿Hay algo que estoy haciendo mal? Incluso si envío cualquier otro personaje consigo la misma basura.

También, ¿puedo escribir mi propio protocolo para establecer la comunicación entre los dos dispositivos?

A continuación se muestra un esquema de mi configuración:

    
pregunta David Norman

3 respuestas

2

Suena como una discrepancia en la velocidad en baudios o un problema de detección de bit de inicio. Los caracteres entre 255 y 193 significan que los bits 7 y 6 siempre están configurados (0b11000000 == 192), así como algunos bits más bajos (que son anteriores en la secuencia serial). Cabe destacar que el receptor está inactivo con RXD alto mientras que el transmisor debe estar inactivo con TXD bajo; esta combinación podría causar un comportamiento inesperado del bit de inicio, ya que el transmisor AVR estará inactivo. Al no estar familiarizado con los estándares de señalización IrDA, probablemente llevaría un osciloscopio a la señal para examinar si RXD está simplemente invertido desde TXD.

Si tenemos un comportamiento de polaridad invertida, esperamos una transmisión como ... 1111110dddddddd111111 ... se convierta en ... 111111xx0DDDDD00 ... 0001111 ..., con el primer 0 perdido como no hay transmisión, el 0 detectado como bit de inicio que coincide con el 1 menos significativo del byte transmitido, pero el bit de parada 1 se invertirá marcando el error de trama. En un momento posterior, el 0 se detectará como un bit de inicio y, finalmente, el transmisor se apaga, lo que provoca la aparición de un byte con un patrón 11 ... 00 que no tiene el error de trama detectado. Todos los bits de datos que se reciben están invertidos y en la posición incorrecta. Los xes representan 0s transmitidos que pasan desapercibidos ya que el transmisor pasa de no enviar debido a un impulso demasiado largo a no enviar porque el valor es 0. Si este es el comportamiento, un inversor lógico en TXD debería resolverlo.

Nota de la aplicación de Atmel AVR1303 , Uso y configuración de IR Módulo de comunicación, cubre un periférico destinado a hablar con este tipo de transceptor. Debe mostrar qué tipo de señalización se utiliza normalmente. Por lo que parece, el formato utilizado es un pulso por solo 0 bits, por lo que la conexión directa al USART no es el camino a seguir.

    
respondido por el Yann Vernier
1

Estos transceptores IrDA están diseñados para funcionar dentro de los límites del estándar IrDA, donde la salida de un UART típico se modula en un esquema de codificación de 3 / 16ths-a-1-bit (o en algunas velocidades en baudios, simplemente un límite en el tiempo máximo de iluminación IR, alrededor de 1.6uS, creo). Necesita un chip 'endec' IrDA (por ejemplo, Microchip MCP2120 y otros en esta familia) en cada lado de la transmisión entre las MCU, o algunas MCU tienen 'endecs IrDA' que pueden habilitarse.

    
respondido por el Techydude
0

La forma de onda utilizada para IRDA es muy diferente de la forma de onda UART habitual. Los UART incorporados en muchas MCU tienen un modo IRDA, pero no está claro si el ATmega16L lo tiene; no se menciona en la hoja de datos de resumen .

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas