Tengo una aplicación donde envío mensajes semidúplex en un bus RS485.
Mis dispositivos esclavos en este bus normalmente están en modo de recepción, escuchan los comandos, y cuando reciben un comando, cambian al modo de transmisión y transmiten una respuesta al maestro.
Los esclavos usan el EUSART de un microcontrolador PIC16F1788.
Me he dado cuenta de que el último byte en esta respuesta a veces está dañado.
Tengo una teoría de que esto podría deberse a que el último byte del mensaje no se transmite completamente antes de que el esclavo deshabilite el controlador en el chip de interfaz RS485 que estoy usando, y por lo tanto cortando el último byte.
Mi código de espera hasta que se haga la transmisión es así:
while (TRMT==0)
{
}
RS485_DRIVER_ENABLE=0;
RS485_DRIVER_ENABLE es un #define asignado a un pin de salida conectado a la habilitación de transmisión en el chip RS485.
Leyendo el manual de PIC:
Dice:
"El bit TRMT permanece libre hasta que todos los bits se hayan salido del registro TSR".
Sin embargo, lo que realmente me interesa es que todos los bits se transmitan, por lo que lo anterior parece no ser exactamente la garantía correcta que me gustaría.
¿Debo agregar un retardo de, por ejemplo, 2-3 bits después de que se indique la TRMT?
¿Hay alguna "mejor práctica" para este tipo de cosas?