Hallo, 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.
:
Bearbeitet durch User
Zo R. schrieb: > Alle Parameter (Baudrate, Parität, Stoppbits, Flow Control) sind korrekt > eingestellt. Hat jemand eine Idee, woran es liegen könnte? Vermute: die Parameter sind NICHT richtig eingestellt. Lieber dreimal kontrollieren, als einmal blöd aus der Wäsche gucken. Dann: Irgendwelche Zweitverwendungen für den UART-Pin in deinem Code? Irgend ein Timer der den TX-Pin zwischendurch mal als Debug-LED benutzen will? GND von ESP32 und FTDI verbunden oder nicht? Auch ein beliebter Anfänger-Fehler...
:
Bearbeitet durch User
Benutzt Du Arduino? Wenn ja: Mit welcher Funktion empfängt der ESP die Daten und mit welcher sendet er? Etwa serial.print?
Zo R. schrieb: > 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.
Zo R. schrieb: > ich habe ein Problem mit der seriellen Kommunikation zwischen meinem > ESP32 und dem PC über ein FTDI USB-RS232-Kabel. Der ESP32 ist mit RS232-Pegelwandlern ausgestattet? Welche Baudrate verwendest Du? Welche Leitungen sind zwischen dem "FTDI USB-RS232-Kabel" und den RS232-Pegelwandlern auf Deiner ESP32-Schaltung verbunden?
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.
Achso, vergessen: echtes RS232 hat invertierte Pegel und mehr Spannung, man muss sich entscheiden ob man Logiclevel oder RS232 macht.
Uwe schrieb: > Wir hatten schon billige Adapter, die > gingen bei 9k6 perfekt, aber bei 115k nicht mehr. Was für welche sollen das gewesen sein?
Noname vom Ali, mehr weiß ich auch nicht mehr, halt so kleine Platinchen, eine Seite USB A, andere Seite 2.54er Stiftleiste.
Uwe schrieb: > Noname vom Ali, mehr weiß ich auch nicht mehr Also noch nicht mal, von wem die USB-UART-Bridge darauf war?
Hat jemand eine Idee, woran es liegen könnte? Das Timing wird nicht stimmen. Schick mal 127 auf den Bus und schau, ob die Flanke des 8.bits richtig erkannt wird.
Guten Morgen, hier ein paar Angaben: XIAO-ESP32-C3
1 | #define UART1_TX_PIN 6 // D4
|
2 | #define UART1_RX_PIN 7 // D5
|
3 | #define UART1_BAUD 9600
|
4 | |
5 | uint8_t data[2] = {0xAA, 0xAA}; |
6 | |
7 | const uart_config_t uart_config = |
8 | {
|
9 | .baud_rate = UART1_BAUD, |
10 | .data_bits = UART_DATA_8_BITS, |
11 | .parity = UART_PARITY_DISABLE, |
12 | .stop_bits = UART_STOP_BITS_1, |
13 | .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, |
14 | .source_clk = UART_SCLK_APB |
15 | };
|
16 | |
17 | void setup() |
18 | {
|
19 | Serial.begin(115200); |
20 | |
21 | uart_param_config(UART_NUM_1, &uart_config); |
22 | uart_set_pin(UART_NUM_1, UART1_TX_PIN, UART1_RX_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); |
23 | uart_driver_install(UART_NUM_1, 1024, 0, 0, NULL, 0); |
24 | }
|
25 | |
26 | void loop() |
27 | {
|
28 | uart_write_bytes(UART_NUM_1, data, 2); |
29 | delay(1000); |
30 | }
|
Für eine weitere UART Verbindung, können diese Pins verwendet werden. Oder kann ich für die UART1 Verwendung nur bestimmt Pins nutzen? Ich habe mal die GPIO Pin 2 und 3 benutzt. Auch da ist das Fehlerbild gleich.
:
Bearbeitet durch User
Zo R. schrieb: > hier ein paar Angaben: Du hast keine einzige meiner Fragen nach der Hardware beantwortet (bis, indirekt, die nach der Baudrate).
Für Testzwecke versendet der Controller das Bitmuster 00000001 (0x01). Auf dem Oszilloskope sieht das Bitmuster soweit ok aus. Kabel: USB-RS232 mit FTDI Chip Ich sende die Daten jede Sekunde
:
Bearbeitet durch User
Auch wenn ich nur ein einzelnes Byte versende ist das Verhalten gleich.
Zo R. schrieb: > Kabel: USB-RS232 mit FTDI Chip Das ist keine Hardwarebeschreibung. Ein ESP32 hat keine UART mit RS232-Pegeln. Wie hast Du das Kabel mit Deinem ESP32 verbunden? Zeig ein Photo von Deinem Aufbau, wenn es Dir zu schwer fällt, das ganze in Worte zu fassen oder einen Schaltplan zu zeigen. Zo R. schrieb: > 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")?
Harald K. schrieb: > Zo R. schrieb: >> Kabel: USB-RS232 mit FTDI Chip > > Das ist keine Hardwarebeschreibung. > Ein ESP32 hat keine UART mit RS232-Pegeln. > Wie hast Du das Kabel mit Deinem ESP32 verbunden? Ich habe das Kabel direkt an dem ESP32 verbunden (TX/TX/GND) > Zeig ein Photo von Deinem Aufbau, wenn es Dir zu schwer fällt, das ganze > in Worte zu fassen oder einen Schaltplan zu zeigen. XIAO-ESP32-C3 mit USU-RS232 direkt verbunden. > Zo R. schrieb: >> 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")?
:
Bearbeitet durch User
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.
Harald K. schrieb: > Der ESP32 ist mit RS232-Pegelwandlern ausgestattet? Es reicht ein USB-Seriell-Wandler für 3.3V Zo R. schrieb: > FTDI USB-RS232-Kabel Der ESP32 kann mit RS232-Pegeln nichts anfangen. Uwe schrieb: > 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.
> Uwe schrieb: > > 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 :-)
:
Bearbeitet durch User
Signalaufzeichnung Ausgangspin USB-RS232Kabel Pin TX Brauch dann ein USB-UART Kabel dafür.
:
Bearbeitet durch User
Zo R. schrieb: > Ich habe das Kabel direkt an dem ESP32 verbunden (TX/TX/GND) Evtl. liegt es am Kurzschluss in der TX Leitung. Zo R. schrieb: > Signalaufzeichnung Ausgangspin USB-RS232Kabel Pin TX > > Brauch dann ein USB-UART Kabel dafür. Warum hilfst du nicht den Helfenden? Mach ein Foto vom Aufbau!
:
Bearbeitet durch User
Das jetztige Kabel funktioniert wohl nicht mit meinem Vorhaben. Man sieht doch der Pegel vom TX Ausgang USB RS232 ist nicht 0V ... 3.3V. Foto vom Aufbau bringt nix. Das Foto hift auch nicht weiter. Aufbau PC <==> USB-RS232 ==> TX ==> GPIO6 ESP32C3 Board <== RX <== GPIO7 == GND == GND
:
Bearbeitet durch User
Zo R. schrieb: > PC <==> USB-RS232 ==> TX ==> GPIO6 ESP32C3 Board Dir wurde schon mehrfach geschrieben, dass RS232 am ESP32 nicht funktioniert. Auch nicht am ESP32-C3
Zo R. schrieb: > Signalaufzeichnung Ausgangspin USB-RS232Kabel Pin TX 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. Stopbit 1 und Parity none. Ja das mit dem RS232 habe ich doch auch schon festgestellt.
Zo R. schrieb: > 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.
Zo R. schrieb: > Ja das mit dem RS232 habe ich doch auch schon festgestellt. Und warum nutzt du es weiterhin bzw. stellst dazu Fragen ?
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.
Zo R. schrieb: > Bereits oben habe ich gepostet dass ich die Baudrate 9600 eingestellt > habe. Wo hast du die eingestellt? Bei 9600 Bd müsste 1 Bit 104us dauern. Davon ist auf dem Oszi nichts zu sehen.
Dass der ESP32-C3 über natives USB verfügt hat von euch keiner auf dem Schirm?
Jens K. schrieb: > 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.
:
Bearbeitet durch User
Vielleicht hat es Zo R. überlesen: ohne Pegelwandler auf ESP32-Seite kann das nicht funktionieren. Er soll doch bitte erst mal das ausprobieren. ciao Marci
Marci W. schrieb: > Er soll doch bitte erst mal das ausprobieren. Er hat dort einen, nur leider irgendeinen - nämlich den falschen. Guck dir das Signal an.
:
Bearbeitet durch User
Rainer W. schrieb: > Jens K. schrieb: >> 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 Also im Endeffekt USB (CDC).
:
Bearbeitet durch User
Obelix X. schrieb: > Also im Endeffekt USB (CDC). 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.
Harald K. schrieb: > Die wenigsten USB-Seriell-Bridges sind CDC-Geräte Ist aber auch nicht schlimm. Gegenüber dem PC stellen sich die Chips als Serielle Schnittstelle dar und darauf kommt es dem TO an, denke ich. Harald K. schrieb: > können wir genausogut übers Wetter reden. Hier ist es kalt. ;-)
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.
Ich fass noch mal kurz zusammen: - (hier regnet es) - 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 ;-)
Zo R. schrieb: > Foto vom Aufbau bringt nix. Das Foto hift auch nicht weiter. > > Aufbau > > PC <==> USB-RS232 ==> TX ==> GPIO6 ESP32C3 Board > <== RX <== GPIO7 > == GND == GND
Uwe schrieb: > 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.
:
Bearbeitet durch User
Uwe schrieb: > 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.
Uwe schrieb: > - Er sieht 900µs Bitzeit, also ca. 115k. Also damit habe ich ein Problem. Sollten nicht: 115200 -> 8,681µs 9600 -> 104,167µs
Stimmt, ich meinte 9 Mikrosekunden und hatte 900 geschrieben. Sorry.
Harald K. schrieb: > 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. Zo R. schrieb: > OsziBild.jpg In diesem Sinne: Der Fortschritt ist nicht aufzuhalten, auch wenn es noch nicht bei allen angekommen ist ;-)
Rainer W. schrieb: > 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?
Harald K. schrieb: > Magst Du erklären, wieso Du das ausgerechnet als Antwort auf einen > Beitrag von mir verfasst? Ich wollte deinem Beitrag noch einen weiteren Vorteil der technischen Entwicklung vom 18. zum 21. Jahrhundert hinzufügen ;-)
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 ...
Harald K. schrieb: > Aber der war noch nicht in diesem Thread. Sicher? Uwe schrieb: > ESP sendet (Bild vom 11.2.) > ... > Am Ausgang des USB-RS232-Wandlers misst er (am 11.2. 10:05)
Nee, ich dachte da an einen anderen, der seine Elaborate auch immer mit seinem Namen unterschreiben muss.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.