Arduino Uno R3 Hardware seriell: Peripherie stört den USB/Seriell-Konverter?

Ich verwende gerne den seriellen Hardware-Port (Pin 0 RXund 1 TX), um ein Bluetooth-Modul anzuschließen. Intern sind diese Pins auch mit dem integrierten USB-zu-Seriell-Konverter-Mikrocontroller verbunden, der zum Flashen des ATMega328 unter Verwendung des Bootstrap-Codes verwendet wird.

Geben Sie hier die Bildbeschreibung ein(Von http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf )

Jetzt würden sich diese beiden Signale stören, denke ich.

  • Können die RX/TX-Pins als Schnittstelle zu einem UART-Peripheriegerät verwendet werden?
  • Wenn, was sollte man tun, um kollidierende Signale zu vermeiden?

Ich konnte in meinen Arduino-Büchern und bei Google keine Beispiele finden, die den seriellen Hardware-Port des Uno R3 zum Anschließen von Peripheriegeräten verwendeten.

Bearbeiten 1:

Lassen Sie mich folgendes hinzufügen: Ich möchte den seriellen Monitor (der Arduino IDE) und das Peripheriegerät (Bluetooth-Modul) nicht gleichzeitig verwenden. Ich erwarte nicht, dass es gleichzeitig verwendet werden kann. Das Gerät sollte ohne angeschlossenen USB laufen. Das Bluetooth-Modul wird in diesem Fall verwendet, um den Arduino fern und drahtlos zu steuern.

Selbst wenn nicht beide zusammen verwendet werden, vermute ich, dass der ATMega16U und das Peripheriegerät stören könnten.

Und: Ich weiß, es gibt ein Shield und auch ein "ArduinoBT", aber ich möchte sie nicht verwenden, solange dies mit der seriellen Hardwareschnittstelle des Uno möglich ist.

Bearbeiten 2:

Das Peripheriemodul (Bluetooth) arbeitet mit 3,3 V, während das Arduino mit 5 V arbeitet.

Antworten (2)

Diese beiden mit RN4A und RN4B gekennzeichneten Widerstände werden verwendet, um die uart-Leitung vor Konflikten zu schützen und gleichzeitig dem externen Header Priorität zuzuweisen. Sie wirken wie schwache Klimmzüge, da alles vor (in diesem Fall links von) den Widerständen nur die Leitung nach ihnen beeinflusst, wenn die Leitungen nicht verwendet werden.

Alle seriellen Verbindungen, die an den Header angeschlossen sind, haben Vorrang vor der USB- / seriellen Verbindung des Arduino, da sie die Leitungen direkt mit Strom versorgen können.

Dies führt jedoch auch zu Problemen während der Programmierung. Verwenden Sie daher einen Aktivierungsstift oder Netzschalter oder entfernen Sie einfach das Bluetooth-Modul während der Programmierung.

Macht es einen Unterschied, ob das Bluetooth-Modul mit 3,3 V betrieben wird?
Aus der Atmega16U2-Spezifikation (18.4, Seite 152): "Wenn ein vollständiger Rahmen übertragen wird, kann ihm direkt ein neuer Rahmen folgen, oder die Kommunikationsleitung kann in einen Ruhezustand (hoch) versetzt werden." macht der 5-V-Leerlauf-High-Zustand Probleme?
Das ist ein bisschen eine Grauzone. Die Frage wäre in etwa, ob das 3,3-V-Gerät (wahrscheinlich) Schutzdioden hat und ob der Strom durch die Widerstände über diese Spannungsdifferenz innerhalb der Nennleistung dieser Dioden liegt und ob die 3,3-V-Versorgung so ausgelegt ist, dass sie den eingespeisten Strom absorbiert in die Versorgungsschiene. Eine Sache, die Sie versuchen können, ist die Verwendung noch größerer Widerstände an der Stelle, an der Sie Ihr 3,3-V-Gerät anschließen. Wenn Ihre Widerstände zu groß sind, erhalten Sie Datenfehler, während es bei den Widerständen zu klein ist, wo eine Beschädigung theoretisch möglich ist.
Sie können auch erwägen, Ihre eigenen Zenerdioden (in Sperrrichtung vorgespannt, auf Masse) hinzuzufügen, wenn Sie sicher sein möchten. Einige Leute haben sogar LEDs (mit ihrem relativ großen Durchlassspannungsabfall ) als solche Klemme verwendet – siehe zum Beispiel einige der Schnittstellenschaltungen für den Software-USB-Hack.
@ try-catch-finally ohne ein Datenblatt für das Bluetooth-Modul würde ich mich auf der Seite "Sie werden es töten" irren. Sie müssen die Ebenenübersetzung verwenden. Ein Paar Transistoren würde das gut machen. Einige Module haben jedoch Ebenenübersetzungen. Aber dies ist eine andere Frage und wurde bereits beantwortet, verwenden Sie die Suche.

Ich kann mir keinen Grund vorstellen, warum Ihr peripherer UART und der USB-UART stören würden. Wahrscheinlich möchten Sie Ihr UART-Peripheriegerät während der Programmierung trennen, da dies die Programmierung beeinträchtigen kann.

Ich wäre auch nicht überrascht, wenn Sie den Datenverkehr zwischen ATmega und peripherem UART abhören und Daten über USB in den ATmega einfügen können. Sie möchten also wahrscheinlich den Computer trennen, während Ihr Gerät in Betrieb ist.

Die Tatsache, dass sie beide versuchen würden, denselben Empfangsstift zu treiben, wäre Grund genug. Der Vorwiderstand bietet möglicherweise einen begrenzten elektrischen Schutz, ist aber weit davon entfernt, ein tatsächlicher Multiplexer zu sein, wenn beide mit aktivierten Treibern verbunden sind. Es ist üblich, eine serielle Software-Implementierung auf einem unbenutzten GPIO-Pin zu verwenden, wenn serielle Peripheriegeräte an die Single-Hardware-UART-Art von Arduino-Boards angeschlossen werden (im Gegensatz zu den Arduino-MEGA-Style-Boards mit mehreren Hardware-UARTs).
Bei einem meiner späteren Projekte ist nicht genügend Portplatz vorhanden, um Software seriell zu verwenden (tatsächlich werde ich Software seriell verwenden, aber es wird mit einem anderen Gerät verbunden). Selbst wenn genügend Portplatz vorhanden ist, möchte ich diese Methode nicht verwenden, solange es einen seriellen Port gibt, der verwendet werden kann (oder warum wurde er mit zwei Anschlüssen verkabelt? Ich denke, es ist eine Art Verschwendung.) Zumindest ich Denken Sie - Sie könnten mich korrigieren - dass die - selbst die "neue" - Software-Serienimplementierung mehr Platz im Flash-Speicher benötigt.