Tengo dos módulos de transceptor de infrarrojos de TFDU4101-TR3 en dos placas separadas, cada una conectada al microcontrolador ATMega164PA . Para controlar 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 golpear un poco. RX y TX siguen el estándar normal, RX está activo bajo y 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 placa A a la placa B, no obtengo 100 pulsos, sino que a veces obtengo 90 u 81 o 98. En resumen, no obtengo la cantidad de pulsos deseada. ¿Hay algo mal con mi enfoque?
Por favor, hágamelo saber si se necesita más información.
El enfoque general suena bien, pero debe tener cuidado de no exceder la longitud máxima del pulso de transmisión. Según 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 deshabilite:
Esta entrada Schmitt-Trigger se utiliza para transmitir datos en serie cuando SD es bajo. Un circuito de protección en el chip desactiva el controlador LED si el pin TXD se activa durante más de 50 μs (máx. 300 μs).
Entonces, suponiendo que sus 5 KHz sean una onda cuadrada, habrá excedido la duración del pulso. Una vez que se solucione, las cosas deberían ser más confiables, aunque la última vez que usé un transceptor IrDA recibía o dos por ciento de los paquetes que estaban dañados, por lo que vale la pena considerar la detección de errores dependiendo de lo que esté haciendo.
También vale la pena señalar que algunos microcontroladores Atmel (y otros) tienen un modo USART que cumple con el tiempo IrDA, aunque después de un vistazo rápido a la hoja de datos, esa parte en particular no parece tener esa función.
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 en torno a eso.
Entonces, la duración de un bit es de 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,800kHz. Así que parece que suma.
No tienes que enviar datos a esa velocidad. Sin embargo, trate de usar una modulación de portadora base similar, y luego el chip no luchará 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 1, y debe ser razonablemente sólido y confiable. Aunque es posible que también deba usar la detección de errores.
460,800kHz es una velocidad bastante alta para bit bang, aunque es factible. Puede comenzar intentando enviar datos de esa manera.
Intento que la señal de modulación de la portadora base se realice en el hardware para reducir la carga en la CPU.
La forma en que hago la transmisión es configurar un temporizador MCU para estar lo más cerca posible del tiempo del ciclo de modulación base y usarlo para controlar el LED del transmisor. Algunos de los temporizadores de 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 preescala)
Luego uso el valor del registro de captura/comparación (0 o máximo, según el esquema de modulación) para conectar esa señal con los datos. La señal de la portadora base se generará correctamente usando un valor de comparación de 1/2 conteo máximo, incluso si mi software está un poco ocupado.
david normando
david normando
PedroJ
david normando
PedroJ
david normando