Para hacer más eficiente el código y permitir la ejecución de otros procesos sin retrasos es necesario eliminar delayMicroseconds() que puede introducir una parada en el procesador de hasta 11.458 microsegundos a 2400 bauds.
Ahora está así:
case SENDING:
if ((*_hwSerial).availableForWrite() == SERIAL_TX_BUFFER_SIZE - 1) { //TX buffer empty
// time to send last byte and required empty time space
delayMicroseconds(_T2_5);
La función comprueba el buffer TX, cuando está vacio significa que el último byte se encuentra en el registro de TX del UART, por lo que se para hasta asegurar que se ha enviado y además le datos un espacio vacio de T1.5.
Para la nueva función se establece un timer sendMicros y un intervalo sending_interval antes de la función sendBuffer() y en el siguiente estado SENDING realizaría la comparación para cambiar al siguiente estado.
Me preocupa que el UART valla mas deprisa o despacio que, con lo que se pueden presentar dos problemas:
- Si el UART va más despacio, cambiamos el estado de TxenablePin a LOW antes de tiempo, y se interrumpe la TX.
- Si el UART va más deprisa de lo esperado, el MAX485 continua en modo Tx y se empiezan a recibir datos.
Voy a hacer pruebas de timing en microsegundos para confirmar, me falta un osciloscopio para analizarlo correctamente.
Para hacer más eficiente el código y permitir la ejecución de otros procesos sin retrasos es necesario eliminar
delayMicroseconds()que puede introducir una parada en el procesador de hasta 11.458 microsegundos a 2400 bauds.Ahora está así:
La función comprueba el buffer TX, cuando está vacio significa que el último byte se encuentra en el registro de TX del UART, por lo que se para hasta asegurar que se ha enviado y además le datos un espacio vacio de T1.5.
Para la nueva función se establece un timer
sendMicrosy un intervalosending_intervalantes de la funciónsendBuffer()y en el siguiente estadoSENDINGrealizaría la comparación para cambiar al siguiente estado.Me preocupa que el UART valla mas deprisa o despacio que, con lo que se pueden presentar dos problemas:
Voy a hacer pruebas de timing en microsegundos para confirmar, me falta un osciloscopio para analizarlo correctamente.