Problemas relacionados con los módulos de transceptor que golpean a Bit

1

Tengo dos módulos de transceptor de infrarrojos de TFDU4101-TR3 en dos tableros separados se conectaron cada uno al microcontrolador ATMega164PA . Para manejar estos transceptores, se necesita un endec que no he usado en mi diseño debido a restricciones presupuestarias.

Entonces, lo que estoy tratando de hacer es golpearme. El RX y el TX siguen el estándar normal, el RX está activo bajo y el TX está activo alto. Estoy alternando el pin TxD uno 'Tablero A' 50 veces a 5 Khz para enviar 50 pulsos al receptor. En la "Placa B", he implementado una interrupción de cambio de PIN que técnicamente debería recibir 100 pulsos (2 pulsos por cada pulso de transmisión que recibe). Este no es el diseño final, solo estoy aprendiendo y experimentando cómo transmitir datos de una placa a otra.

Ahora el problema es que cuando envío 50 pulsos de la Junta A a la Placa B, no recibo 100 pulsos, sino que a veces obtengo 90 u 81 o 98. En resumen, no obtengo el número deseado de pulsos . ¿Hay algún problema con mi enfoque?

Por favor, avíseme si necesita más información.

    
pregunta David Norman

2 respuestas

2

El enfoque general suena bien, pero debe tener cuidado de no exceder la longitud máxima del impulso de transmisión. Aparece en la hoja de datos. 20 uS es una longitud de pulso típica y si se excede demasiado, puede ver que hará que el controlador LED se desactive:

  

Esta entrada Schmitt-Trigger se usa para transmitir datos en serie cuando SD está bajo. Un circuito de protección en chip desactiva el controlador de LED si el pin TXD está activado durante más de 50 μs (máx. 300 μs).

Entonces, suponiendo que su 5 KHz es una onda cuadrada, habrá excedido esa duración de pulso. Una vez que se solucionen, las cosas deberían ser más confiables, aunque la última vez que usé un transceptor IrDA me estaba conectando o el dos por ciento de los paquetes estaban dañados, por lo que vale la pena considerar la detección de errores según lo que esté haciendo.

También vale la pena señalar que algunos microcontroladores Atmel (y otros) tienen un modo USART que cumple con la temporización IrDA, aunque después de un rápido vistazo a la hoja de datos, esa parte en particular no parece tener esa característica.

    
respondido por el PeterJ
1

El TFDU4101 está diseñado para transmitir datos a 115.2 kbit / s. Esa es una de las velocidades estándar de IrDA. Así que el dispositivo está optimizado alrededor de eso.

Por lo tanto, la duración de un bit es aproximadamente 1,000,000us / 1152.kbit / s = 8.7us

La hoja de datos dice que el ancho de pulso RXD (recibido) típico se especifica como 2.2us, lo que significaría 4 pulsos por bit de una señal portadora de aproximadamente 460,800 kHz. Así que parece que se suma.

No tiene que enviar datos a esa velocidad. Sin embargo, intente utilizar una modulación de portadora base similar, y entonces el chip no estará luchando contra usted. Utilice un número entero de ciclos de esa frecuencia portadora para enviar sus datos, con un número distintivo de ciclos para representar 0 y d 1, y debe ser razonablemente sólido y confiable. Aunque es posible que también necesite utilizar la detección de errores.

460,800kHz es bastante alta velocidad a bit bang, aunque es factible. Puede comenzar intentando enviar datos de esa manera.

Intento que la señal de modulación del operador base se realice en hardware para reducir la carga en la CPU.

La forma en que hago la transmisión es configurar un temporizador MCU para que sea lo más cercano al tiempo de ciclo de modulación de base que sea práctico, y usarlo para controlar el LED del transmisor. Algunos de los temporizadores ATmel le permiten establecer el conteo máximo, y con un valor de captura / comparación de 1/2 conteo máximo, generará una onda cuadrada. (Una alternativa es dividir el reloj, usando un valor de escala previa)

Luego uso el valor de registro de captura / comparación (0 o máx, dependiendo del esquema de modulación) para conectar esa señal con los datos. La señal del operador base se generará correctamente utilizando un valor de comparación de 1/2 conteo máximo, incluso si mi software está un poco ocupado.

    
respondido por el gbulmer

Lea otras preguntas en las etiquetas