Problem mit USB-to-Serial-Dongle

Hallo,
ich habe ein Arduino-Programm geschrieben, das mir die Eingaben von der seriellen Schnittstelle mit vorangestelltem "Empfangen" zurückliefert. Auf deutsch: Gibt man im seriellen Monitor "Hallo" ein, wird ein "Empfangen : Hallo" zurückgegeben. Das funktioniert einwandfrei.
Jetzt habe ich meinen USB-to-TTL (CH340)-Dongle an meinen PC angeschlossen, um dem Arduino von diesem etwas zu senden. Verkabelt hab ich es folgendermaßen :

USB-TTL-Konverter Arduino Nano
RXD -> TX-Pin
TXD -> RX-Pin
GND -> GND

Die Stromversorgung erfolgt bei beiden über den USB-Anschluss. Anschließend hab ich mit dem seriellen Tool "HTerm" zwei Sitzungen geöffnet, eine mit COM6 (Arduino Nano) und eine mit COM8 (USB-TTL-Konverter).
Wenn ich bei HTerm vom COM6 (Arduino Nano) etwas sende, empfangen beide HTerm-Sitzungen (COM6 und COM8) dasselbe mit vorangestelltem "Empfangen :". Soweit ok.

Versuche ich aber, vom COM8 (USB-TTL-Konverter) etwas an den Arduino zu senden, bekomm ich es von keiner der beiden Sitzungen (weder COM6 noch COM8 zurück).

Wo liegt der Fehler ?

P.S. Ich verwende diesen USB-TTL-Konverter

Serial ist eine Punkt zu Punkt Verbindung, kein Bus.

Dein USB/TTL adapter drängt sich in die bestehende USB-Verbindung zu RX/TX rein, über die Seriell und die Programmierung läuft.
Das kann zum Exitus des NANO führen.
Wenn Du eine zweite serielle Verbindung nutzen willst, schau Dir Softwareseriell an.

Gruß Tommy

Der USB TTL Adaptiert soll später durch einen anderen Mikrocontroller ersetzt werden, damit der Arduino und der andere Mikrocontroller (evtl. ebenfalls ein Arduino) sich über UART unterhalten können und gemeinsam Nachrichten austauschen.
Würde das funktionieren mit der bestehenden Verbindung oder brauche ich dafür auch eine zweite serielle Schnittstelle mit SoftwareSerial ?

Hi

Wenn der Arduino NUR an der seriellen Verbindung hängt, also nicht per USB als COM erkannt wurde, kannst Du die Hardware-Serielle so wie immer benutzen, nur eben, daß die Daten auf Pin 0 und 1 ‘hin und her tanzen’, statt über USB zum PC.
DA kannst Du dann RX<->TX bzw. umgekehrt verbinden und gegenseitig Nachrichten verschicken/empfangen.

Zum Testen ist Das natürlich etwas blöde, da man Da per USB den neuen Sketch hoch schiebt.

Ggf. kann man Da eine Art Umleitung programmieren, daß bei einem gesetztem INPUT (=Test-Betrieb) die ganze Abwicklung via SoftwareSerial abgehandelt wird, bei Start fehlendem Pin aber die Hardware benutzt wird.

Oder den Sketch per ISP aufspielen und auf die USB-Geschichte in diesem Fall pfeifen.
(geht mit einem weiteren Arduino als “Arduina as ISP” oder per normalem Brenner den Sketch ‘als HEX exportieren’, also die so gewonnene HEX brennen - killt wohl Alles den Bootloader des Ziel-Arduino, kann man, wenn benötigt aber ebenso wieder zurück brennen)

MfG

UnoRookie:
Der USB TTL Adaptiert soll später durch einen anderen Mikrocontroller ersetzt werden, damit der Arduino und der andere Mikrocontroller (evtl. ebenfalls ein Arduino) sich über UART unterhalten können und gemeinsam Nachrichten austauschen.
Würde das funktionieren mit der bestehenden Verbindung oder brauche ich dafür auch eine zweite serielle Schnittstelle mit SoftwareSerial ?

Du brauchst eine zweite serielle SST.
Wie weit sind die beiden auseinander? Evtl. wäre auch I2C eine Variante.

Gruß Tommy

Tommy56:
Du brauchst eine zweite serielle SST.
Wie weit sind die beiden auseinander? Evtl. wäre auch I2C eine Variante.

Gruß Tommy

Die beiden befinden sich auf demselben Steckbrett, es würde sogar für SPI noch reichen. Der Einfachheit halber hab ich mich jedoch für USART entschlossen.

postmaster-ino:
Hi

Wenn der Arduino NUR an der seriellen Verbindung hängt, also nicht per USB als COM erkannt wurde, kannst Du die Hardware-Serielle so wie immer benutzen, nur eben, daß die Daten auf Pin 0 und 1 ‘hin und her tanzen’, statt über USB zum PC.
DA kannst Du dann RX<->TX bzw. umgekehrt verbinden und gegenseitig Nachrichten verschicken/empfangen.

Ach so, also wenn der Arduino nicht über USB, sondern von einer externen Spannungsquelle wie z.b. dem 5V Ausgang des USB-TTL-Adapter gespeist würde, dann müsste dieses Szenario auch funktionieren, oder?

Nochmal: Serial ist kein Bus (Mehr als 2 Teilnehmer sind falsch). Das hat mit der Speisung nichts zu tun.

Bei der Entfernung wäre I2C die bevorzugte Variante für die Kommunikation.

Gruß Tommy

Nochmal: Serial ist kein Bus (Mehr als 2 Teilnehmer sind falsch). Das hat mit der Speisung nichts zu tun.

Bei der Entfernung wäre I2C die bevorzugte Variante für die Kommunikation.

Gruß Tommy

Ja, aber in diesem Fall (Wenn die Speisung über extern erfolgt und der Arduino nicht per USB angesteckt ist) wird für den Arduino auch kein COM-Port erstellt und dann gibt es auch nur 2 Teilnehmer, wobei es dann funktionieren müsste, wie postmaster-ino geschrieben hat

Sie sind aber immer noch mit dem internen USB-TTL-Wandler des NANO verbunden und da ist nicht vorgesehen, dass da jemand sich dazwischen hängt.
Du kannst Glück haben, dass es eine Weile funktioniert. Es kann aber auch zum IC-Tod führen.

Gruß Tommy

Tommy56:
Sie sind aber immer noch mit dem internen USB-TTL-Wandler des NANO verbunden und da ist nicht vorgesehen, dass da jemand sich dazwischen hängt.
Du kannst Glück haben, dass es eine Weile funktioniert. Es kann aber auch zum IC-Tod führen.

Das ist so nicht ganz richtig. Zumindest von der HW her ist das schon vorgesehen. Deshalb ist der USB-Seriellwandler nicht direkt, sondern über einen 1KOhm Widerstand mit dem Uno verbunden. Auch bei allen Clonen die ich habe ist das so.
Wenn man da also einen externen Wandler anschließt (oder die Pins als allgemeine IO nutzt) geht erstmal nichts kaputt. Richtig ist aber, dass die serielle Schnittstelle kein Bus ist. Ist eine externe Schnittstelle angeschlossen, kann man den internen USB-Wandler nicht mehr nutzen. Beides parallel geht nicht.
Da aber bei der Arduino-IDE die interne USB Schnittstelle eigentlich die einzige Debugging Möglichkeit ist, sollte man sich schon gut überlegen, ob man das so machen will.

Wenn sein NANO die Rs drin hat, wird dieser überleben. Das sieht man aus der Ferne leider nicht so genau.
Die fehlenden Debug-Möglichkeiten schränken ihn aber wirklich sehr ein. Da wäre evtl. eine Variante mit SoftwareSeriell empfehlenswerter.

Danke für die Infos zu den Clones.

Gruß Tommy

Weiß langsam nimmer weiter.
Hab mein Programm auf einem Arduino Mega 2560 laufen lassen, verbunden mit einem "USB zu TTL 3,3 V Serial UART Konverter Kabel mit FTDI Chip". Dann folgendermaßen verbunden :
Arduino Mega FTDI
5V 5V
GND GND
RX0 TXD
TX0 RXD
Da funktioniert das Ganze tadellos. Ich sende vom FTDI, er empfängt es wieder mit vorangestelltem "Empfangen : ".

Jetzt hab ich es zuhause mit meinem Arduino Nano und meinem "USB-to-Serial CH340" nachgebaut :
Arduino Nano USB-to-Serial CH340
5V 5V
GND GND
RXD TXD
TXD RXD

Da funktioniert immer noch nichts. Ich versteh das nicht. Habs mit nem Arduino Uno versucht, da gehts auch nicht.
Kann es sein, dass so etwas nur mit den hochwertigen FTDI-Chips geht ?

Ich bin faul, würdest Du bitte die Testsketche hier reinstellen?

Jo klar :

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  while(Serial.available())
  {
    char c=Serial.read();
    if (c != '\n' && c != '\0')
    {
      Serial.print("Empfangen : ");
      Serial.println(c);
    }
  }
}

Wenn ich den USB-TTL-Adapter abstecke und den Arduino Nano wieder per USB speise und den seriallen Monitor laufen lasse, geht alles.
Gibt man im seriellen Monitor z.B: ein : “Hallo”
erscheint :
“Empfangen : H
Empfangen : a
Empfangen : l
Empfangen : l
Empfangen : o”

Nur der USB-TTL-Adapter hat Probleme mit dem Senden…

Wenn ich UNO-Rx von Adapter-Tx trenne, geht es. Ist das bei Dir auch so?

Zwei, die auf den selben Pin schreiben wollen, ist blöd. Da kann es von Zufällen abhängen, ob es geht. Wäre so meine erste Einschätzung.

Ich hab jetzt mal die Pegel gemessen. Bei meinem CH340G liegen an RX und TX 3,66V an und bei dem FTDI-Chip 3,3 und 3,4 Volt.
Wahrscheinlich liegt es daran....

MicroBahner:
Das ist so nicht ganz richtig. Zumindest von der HW her ist das schon vorgesehen. Deshalb ist der USB-Seriellwandler nicht direkt, sondern über einen 1KOhm Widerstand mit dem Uno verbunden. Auch bei allen Clonen die ich habe ist das so.
Wenn man da also einen externen Wandler anschließt (oder die Pins als allgemeine IO nutzt) geht erstmal nichts kaputt. Richtig ist aber, dass die serielle Schnittstelle kein Bus ist. Ist eine externe Schnittstelle angeschlossen, kann man den internen USB-Wandler nicht mehr nutzen. Beides parallel geht nicht.
Da aber bei der Arduino-IDE die interne USB Schnittstelle eigentlich die einzige Debugging Möglichkeit ist, sollte man sich schon gut überlegen, ob man das so machen will.

Der orginal Arduino UNO, MEGA2560 und der NANO haben zwischen USB-Serial Adapter (ATmega16U2 bzw FT232) und TX//RX Pins des ATmega328 bzw ATmega2560 Widerstände drin damit diese beiden Pins als serielle TTL Schnittstelle für ein anderes Gerät/Platine (ohne Widerstände) verwendet werden können. Da geht nichts kaputt und die serielle Schnittstelle wird gegenüber dem USB Adapter bevorzugt.
Jetzt da Du keinen orginal NANO, sondern einen Nachbau mit CH340 hast kann die Sache anders sein. Ich habe keinen Schaltplan eines CH340-NANOs gesehen, noch besitze ich einen, um es auf der Platine zu kontrollieren.
Grüße Uwe

uwefed:
Jetzt da Du keinen orginal NANO, sondern einen Nachbau mit CH340 hast kann die Sache anders sein.

Wie schon geschrieben, bei meinen Clones ( 2 verschiedene mit unterschiedlicher Entflechtung ) ist das auch genau so wie beim Original. Natürlich kann ich das nicht für alle möglichen Clone behaupten. Der TO müsste halt mal mit einem Multimeter zwischen den Nano-Anschlüssen TX/RX und den entsprechenden Anschlüssen des CH340 den Widerstand messen.

Ich glaube das Problem, dass das Senden und Empfangen mit UART beim FTDI funktioniert und mit meinem CH340 USB-TTL-Konverter nicht funktioniert (bzw. nur das Empfangen funktioniert), liegt an der Pegelkonvertierung, die ich diesem Post entnommen hab :
Was ist ein USB-TTL-Konverter

Kann ich die Pegel (z.B. durch Widerstände) so ändern, dass das Senden vom USB-TTL-Konverter an den RX-Pin des Arduinos als solches verstanden wird ?

(Zur Erinnerung : Mit meinem USB-TTL-Dongle klappt das Empfangen von Nachrichten des Arduino an den Dongle. Das Senden von Nachrichten vom Dongle zum Arduino funktioniert allerdings nicht)