Skip to content

Eliminar delayMicroseconds() #35

@peninquen

Description

@peninquen

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions