ich habe ein Problem mit der seriellen Kommunikation zwischen meinem ESP32 und dem PC über ein FTDI USB-RS232-Kabel. Der ESP32 sendet Daten über UART1, aber auf dem PC kommen die Zeichen fehlerhaft an.
Alle Parameter (Baudrate, Parität, Stoppbits, Flow Control) sind korrekt eingestellt. Hat jemand eine Idee, woran es liegen könnte? Könnte es am Pegelwandler liegen oder gibt es bekannte Probleme mit FTDI-Chips in dieser Konstellation?
Wenn ich die bytes 0x55, 0x55 sende werden diese bytes auch korrekt empfangen. Wenn ich die beiden bytes abändere in 0xAA und 0xAA dann empfängt der PC die bytes 0x95 und 0x15.
Alle Parameter (Baudrate, Parität, Stoppbits, Flow Control) sind korrekt
eingestellt.
Das sagen sie alle. Wenn dazu die Hardware und die Software fehlerfrei sind, muss es auch funktionieren.
Wie schnell versuchst du zu übertragen und wie sehen die Signale am UART aus?
Passieren die Fehler bei Übertragung von Einzelzeichen oder bei Zeichenblöcken.
Welche Baudrate wird verwendet? Wir hatten schon billige Adapter, die gingen bei 9k6 perfekt, aber bei 115k nicht mehr. Ansonsten mal mit Oszi schaun was die Pegel sagen.
Auf dem Oszilloskope sieht das Bitmuster soweit ok aus.
Zeig das Oszillogramm. Weißt Du, wie eine UART-Datenübertragung funktioniert, d.h. wie das Oszillogramm aussehen sollte, oder ist das von Deiner Seite nur so eine Art Annahme ("sieht soweit gut aus")?
Auf dem Oszilloskope sieht das Bitmuster soweit ok aus.
Mit dem Oszilloskope habe ich jedes Bit von dem UART Datenpacket untersucht. 0x01 Datenbyte das gesendet wird.
Startbit Datenbits (LSB first) Stopbit
0 1 0 0 0 0 0 0 0 1
Zeig das Oszillogramm. Weißt Du, wie eine UART-Datenübertragung
funktioniert, d.h. wie das Oszillogramm aussehen sollte, oder ist das
von Deiner Seite nur so eine Art Annahme ("sieht soweit gut aus")?
Es bleibt leider immer noch unklar, ob der "USU-RS232" ein echtes RS-232 macht (dann sind die Pegel invertiert, also low bei Idle). Falls er einen Sub-D-9 hat, ist das sehr wahrscheinlich. Zur Überprüfung könntest du den TX vom Adapter auf dem Oszi anschauen, und Daten vom PC her senden, und das Oszillogramm vergleichen bezüglich Pegeln und Baudrate.
Noname vom Ali, mehr weiß ich auch nicht mehr, halt so kleine
Platinchen, eine Seite USB A, andere Seite 2.54er Stiftleiste.
Dann stelle fest, was dort für Chips drauf sind.
Du brauchst einen USB-Seriell Wandler für 3.3V Signalpegel.
Sorry für die Verwirrung, MEIN Thema hatte sich erledigt, ich hab das seltsame Teil vor geraumer Zeit entsorgt und nun ausreichend Adapter, die mit 921600 Baud funktionieren. Alles bestens.
@TO: Es bleibt leider immer noch unklar, ob der "USU-RS232" ein echtes RS-232 macht (dann sind die Pegel invertiert, also low bei Idle). Falls er einen Sub-D-9 hat, ist das sehr wahrscheinlich. Zur Überprüfung könntest du den TX vom Adapter auf dem Oszi anschauen, und Daten vom PC her senden, und das Oszillogramm vergleichen bezüglich Pegeln und Baudrate.
Ein Foto vom Aufbau und den Oszi-Bildern der beiden Datenleitungen könnten Wunder wirken, und das lustige Ratespiel etwas abkürzen :-)
Was hast du da gemessen? Wo ist deine Nulllinie, welche Pegel hat das Signal und welche Übertragungsrate hast du eingestellt?
Der Signalverlauf sieht nach RS232 aus. Damit kann der ESP nichts anfangen.
Bereits oben habe ich gepostet dass ich die Baudrate 9600 eingestellt
habe.
Nach den Oszilloskopbildern mit knapp 9µs Bitbreite hätte ich auf 115200 Baud getippt, was auch zu "Serial.begin(115200)" im gezeigten Code passen würde.
Wenn man davon ausgeht dass der ESP32 den RS232 Pegel scheinbar kurzzeitig überlebt, der UART Pegel aber invertiert ist (wegen RS232) dann kommt man auf das beobachtete Ergebnis: 0x55 0x55 liefert ein 0x55 0x55 und 0xAA 0xAA ein 0x95 0x15
Beispiel (ohne Garantie):
1
0xAA 0xAA
2
3
10101010 10101010
4
Invertiert (da RS232 Pegel)
5
01010101 01010101
6
7
LSB first
8
9
10101010 10101010
10
11
S: Start Bit, s: Stop Bit
12
000: Pegel ohne Signal
13
14
Das wird gesendet (8N1):
15
16
S s S s
17
000 1101010100 1101010100 000
18
19
So wird es von der ESP32 UART interpretiert
20
21
S sS
22
00011010101001101010100000
23
10101001 10101000
24
25
LSB First:
26
27
10010101 -> 0x95
28
00010101 -> 0x15
Das fehlenden Stop Bit hat scheinbar keine Wirkung bzw. würde man wohl in den ESP32 UART Status Bits als Frame-Error sehen.
Dass der ESP32-C3 über natives USB verfügt hat von euch keiner auf dem
Schirm?
Hast du den Eröffnungspost nicht gelesen?
Zo R. möchte Daten über UART1 und USB-Seriell-Wandler an einen PC schicken und fragt, warum die gesendeten Daten bei ihm falsch am PC ankommen.
Der ESP32 hat auch natives WLAN, über dass man die Daten übertragen könnte.
Die wenigsten USB-Seriell-Bridges sind CDC-Geräte, aber das ist im Rahmen dieses Threads genauso irrelevant wie Deine Beobachtung.
Da der Threadersteller nicht an einer Lösung seines Problemes interessiert ist, können wir genausogut übers Wetter reden. Hier hats heute Nacht geschneit.
Der große Vorteil des Lebens im 21. Jahrhundert gegenüber zum Beispiel des 18. Jahrhunderts ist der problemlos funktionierender Heizungen. Und Klospülungen!
Um das jetzt nicht völlig entgleiten zu lassen, wiederhole ich ein letztes Mal die Aufforderung an den Threadstarter, endlich mal ein BILD seines Aufbaus zu zeigen, oder in klaren Worten zu erklären, wie er denn seinen FTDI-Adapter mit RS232-Pegeln an seinen ESP32 angeschlossen haben will.
Der TO hat mit dem Oszi gemessen, dass der ESP sendet (Bild vom 11.2.).
Er sieht 900µs Bitzeit, also ca. 115k.
Idle is high, wie man das erwarten würde.
Der Tastkopf ist falsch eingestellt. Das Bild zeigt 330mV anstatt 3.3V high.
Am Ausgang des USB-RS232-Wandlers misst er (am 11.2. 10:05) dass Idle low ist, also ein echtes RS232. Damit ist klar, dass das am ESP32 nicht funktionieren kann, weil die Pegel invertiert und verschoben sind.
Auch hier falsche Tastkopfeinstellungen. Die +0.6V und -0.6V dürfen in natura +6V und -6V sein.
Die Baudratenwünsche mag sich der TO noch mal anschauen. Es sind 9600 und 115k im Spiel, die Oszi-Bilder deuten auf 115k.
Der TO hat verstanden, dass er einen anderen Adapter braucht.
Alternativ hätte er zusätzlich einen MAX232 einbauen können, der das logic-level-seriell auf echtes RS232 gewandelt hätte, womit der RS232-Adapter funktioniert hätte.
Wenn jetzt noch vom TO ein Bild vom "falschen" und "richtigen" Adapter kämen und die Erfolgsmeldung, dass alles funktioniert, könnte man den Thread dann eigentlich zu machen ;-)
Noname vom Ali, mehr weiß ich auch nicht mehr, halt so kleine
Platinchen, eine Seite USB A, andere Seite 2.54er Stiftleiste.
Hatte ich auch schon. Bei mir waren MAX3232 drauf. War aber Fake oder schlechte Nachbauten. Habe die Chips runter gelötet und von Reichelt neu rauf getan. Seitdem funktionieren diese. Ich hatte vorher aus Neugier Fehlersuche betrieben. Die Fakechips waren am schwingen, mal ja mal nicht. War auf dem Scope gut zu sehen.
Seitdem kaufe ich fast keine Halbleiter oder kleine Breadboards mehr in China oder wenn recht eindeutig zu erkennen ist, dass die angebotenen dort her stammen.
Alternativ hätte er zusätzlich einen MAX232 einbauen können, der das
logic-level-seriell auf echtes RS232 gewandelt hätte, womit der
RS232-Adapter funktioniert hätte.
übliche 232 Chips arbeiten nur an 4,5V und somit ist idle also in Ruhe auch >3,3V kein Pegel der dem ESP gefällt.
Was immer klappt ist einen echten MAX3232 am ESP zu verwenden auf echte "V24" mit dem PC zu verbinden.
Die eingebaute Ladungspumpe und Invertierung sorgt für Anpassung von Spannung und Ruhepegel.
Der große Vorteil des Lebens im 21. Jahrhundert gegenüber zum Beispiel
des 18. Jahrhunderts ist der problemlos funktionierender Heizungen. Und
Klospülungen!
Der andere Vorteil ist, das HTML bereits erfunden wurde und neuerdings in der Lage ist, Verknüpfungen zu nutzen, so dass man an Stelle von bspw. "(am 11.2. 10:05)" einfach einen Link einbauen kann, z.B. indem man die referenzierte Stelle markiert und beherzt auf "Markierten Text zitieren" klickt. Das spart dem Leser viel Sucherei im Faden, weil man einfach darauf klicken kann und der Text auf dem Bildschirm dann in wundersamer Weise zur referenzierten Stelle springt. Und genauso wundersam gelangt man mit der "Zurück"-Taste, die bereits in viele Browser unterstützen wird, wieder zum ursprünglichen Beitrag.
und beherzt auf "Markierten Text zitieren" klickt.
Magst Du erklären, wieso Du das ausgerechnet als Antwort auf einen Beitrag von mir verfasst? Einfach nur so, weils Wetter grad so ist, wie es ist, oder hat das einen tieferen Sinn?
Ah, da hast Du natürlich recht, es gibt den einen oder anderen Kandidaten hier im Forum, der schon mehrfach deutlich darauf hingewiesen wurde, wie das mit dem Zitieren funktioniert, und der sich beharrlich weigert, das zur Kenntnis zu nehmen. Aber der war noch nicht in diesem Thread.
Nutze doch mal testweise ein ESP32-Board mit eingebautem USB-Anschluss. Dann sieht man zumindest, ob das Problem durch die Hard- oder die Software verursacht wird.
Ein weiterer Test wäre es, mal eine SoftSerial zu benutzen. Dort gibts m.W. in der Begin-Methode eine Option, um inverse Logik einzuschalten ...