Estoy tratando de interactuar con un dispositivo a través de una serie asíncrona. Aquí está el requisito de encendido de la hoja de datos del dispositivo:
Requisitos de reinicio de encendido Al aplicar energía al DNT900, el pin 39 /RESET y el pin 31 RADIO_TXD deben mantenerse bajos inicialmente. El pin /RESET debe mantenerse bajo hasta que el voltaje de la fuente de alimentación alcance los 3,3 voltios durante 100 ms y luego establecerse en alto. El RADIO_TXD debe mantenerse bajo 10 ms adicionales después de que el pin /RESET pase a nivel alto. RADIO_TXD se reduce débilmente con una resistencia de 100 K ohmios para cumplir con el requisito de reinicio de encendido, a menos que esta línea esté alta por una señal externa.
La serie de hardware en mi arduino (pines 1 y 2) está elevando RX, por lo que no cumple con el requisito de encendido del dispositivo. El dispositivo entra en modo cargador de arranque y no se puede utilizar.
La única solución que he encontrado es usar SoftwareSerial y comentar dos líneas de código en la rutina de inicio de RX:
void SoftwareSerial::setRX(uint8_t rx)
{
pinMode(rx, INPUT);
//if (!_inverse_logic)
// digitalWrite(rx, HIGH); // pullup for normal logic!
_receivePin = rx;
_receiveBitMask = digitalPinToBitMask(rx);
uint8_t port = digitalPinToPort(rx);
_receivePortRegister = portInputRegister(port);
}
Esto parece funcionar, pero ¿hay una mejor manera? ¿Hay una solución en hardware en lugar de software? Estoy buscando la solución más robusta y confiable para que el dispositivo no entre en modo de cargador de arranque y deje de funcionar como se esperaba.
Gracias.
debería poder manipular el pin con DigitalWrite, ANTES de iniciar la instancia de SoftwareSerial en ese pin. Si desea utilizar el puerto serial del hardware, es posible que deba agregar una lógica externa Y el pin serial del hardware con otro de los pines digitales de Arduino y luego puede anular los primeros 100 ms más o menos, con una escritura digital en el pin de anulación. ¿tener sentido?
chris stratton
andyz smith