Ich versuche, eine Schnittstelle mit einem Gerät über eine asynchrone serielle Schnittstelle herzustellen. Hier ist die Einschaltanforderung aus dem Gerätedatenblatt:
Einschalt-Reset-Anforderungen Beim Anlegen von Strom an das DNT900 müssen der /RESET-Pin 39 und der RADIO_TXD-Pin 31 anfänglich niedrig gehalten werden. Der /RESET-Pin muss niedrig gehalten werden, bis die Versorgungsspannung 100 ms lang 3,3 Volt erreicht, und dann hoch gesetzt werden. Der RADIO_TXD muss weitere 10 ms lang niedrig gehalten werden, nachdem der /RESET-Pin hoch geht. RADIO_TXD wird mit einem 100-K-Ohm-Widerstand schwach nach unten gezogen, um die Rücksetzanforderung beim Einschalten zu erfüllen, es sei denn, diese Leitung wird durch ein externes Signal hochgetrieben.
Die Hardwareserie auf meinem Arduino (Pins 1 & 2) zieht RX hoch und erfüllt somit nicht die Einschaltanforderung des Geräts. Das Gerät geht in den Bootloader-Modus und ist unbrauchbar.
Die einzige Lösung, die ich gefunden habe, ist die Verwendung von SoftwareSerial und das Auskommentieren von zwei Codezeilen in der RX-Init-Routine:
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);
}
Das scheint zu funktionieren, aber gibt es einen besseren Weg? Gibt es eine Lösung in Hardware statt Software? Ich suche nach der robustesten und zuverlässigsten Lösung, damit das Gerät nicht in den Bootloader-Modus wechselt und nicht mehr wie erwartet funktioniert.
Danke.
Sie sollten in der Lage sein, den Pin mit DigitalWrite zu manipulieren, BEVOR Sie die SoftwareSerial-Instanz auf diesem Pin initiieren. Wenn Sie den seriellen Hardware-Port verwenden möchten, müssen Sie möglicherweise eine externe Logik zu UND dem seriellen Hardware-Pin mit einem anderen digitalen Pin von Arduino hinzufügen, und dann können Sie die ersten 100 ms oder so mit einem Digitalwrite auf den Override-Pin überschreiben. Sinn ergeben?
Chris Stratton
Andyz Smith