ich habe einen Arduino UNO via USB an den PC angeschlossen (virt. COM4) und gleichzeitig die Serielle-Schnittstelle des Arduino via MAX232 an virt. COM6 des PC's verbunden.
Problem: Der Sketch-Upload funktioniert dann nicht.
Fehlermeldung der IDE "avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x69"
Erst als ich den MAX232 vom Arduino getrennt habe (RX, TX Pin) hat der Upload funktioniert.
Wer kann mir sagen warum sich der Arduino so verhält und warum Rx, Tx Pins nicht mit dem MAX232 verbunden sein dürfen, damit der Sketch-Upload via USB funktioniert ?
Habe ich den MAX232 noch nicht richtig mit dem Arduino verbunden? Ich benutze nur die Rx, TX Pin's. CTS/RTS vom MAX232 sind nicht mit dem Arduino verbunden.
ich habe einen Arduino UNO via USB an den PC angeschlossen (virt. COM4)
und gleichzeitig die Serielle-Schnittstelle des Arduino via MAX232 an
virt. COM6 des PC's verbunden.
Wozu soll das auch gut sein? Die USB Verbindung ist nur solange
belegt solange der Flash-Vorgang läuft. Sie ist danach ohne
weitere Künsteleien für normale Rx/Tx Übertragungen nutzbar.
Man könnte mittels Diode und Widerstand ein logisches AND erzeugen, dann muss man den externen UART nicht immer abziehen. Der muss dann aber auch ruhig sein, wenn ein Upload auf den Arduino erfolgt.
Also ist es nicht ohne weiteres möglich den Arduino via USB zu
programmieren, wenn der UART RX-Pin gleichzeitig verbunden ist ?
So wie es jetzt aufgebaut ist, nein.
Aber wie Wastl schon feststellte. Wozu meinst du, die EXTRA Verbindung über einen MAX232 zum PC zu brauchen? Die braucht man an sich nicht! Sein Serial.Print() etc. läuft auch über den USB-UART!
Für mich wäre diese Möglichkeit praktisch, da dann eine Programmierung
ohne Umbau oder weitere Schaltung (RX-Disconnect) möglich wäre.
Erst als ich den MAX232 vom Arduino getrennt habe (RX, TX Pin) hat der
Upload funktioniert.
Logisch, denn der Bootloader nutzt den UART. Die Schaltung auf dem
Arduion ist sogar so gestaltet, daß ein externer UART Vorrang vor dem
USB-UART hat.
Das TX Pin ist egal, das ist ein Ausgang an der CPU. Kritisch ist das
RX-Pin, das vom USB als auch externen UART getrieben werden kann.
Beim Nano oder Pro-Mini schalte ich vom TX Pin des externen MAX232 eine Isolationsdiode mit Cathode auf MAX232 TX Pin. Das isoliert die Blockade des Bootloaders durch den externen MAX232 TX Pin. Man muß lediglich darauf achten, daß während des Bootloader Betriebs, der MAX232 keine Daten erhält und dann den USB TX Pin blockiert. Umgekehrt funktioniert das, weil der USB Serial über 1K Widerstände mit dem uC RX/TX Pin verbunden sind und ein externer Serial Betrieb deswegen den Vorrang hat und die Isolationsdiode am MAX232 TX Ausgang notwendig ist. Es ist auch zweckmässig einen 10-20K vom RX Pin nach Vcc zu schalten um bessere Flankensteilheit zu gewinnen.
Jedenfalls funktioniert das bei mir bestens.
In einen Sensor Projekt läuft so ein RS485 Transceiver in Parallel mit dem Einsteck Serial Transceiver über USB bei einem Pro-Mini bestens.
Nachtrag:
Sehe gerade im Nachhinein, daß Falk es ohnehin schon früher vorgeschlagen hatte.
Wenn ich nur über die Verbindung vom MAX232 (USB nicht verbunden) gehe funktioniert der Sketch-Upload ebenfalls nicht. (Externe Spg.-Versorgung ist vorhanden ;-) )
Das soll nicht heißen, dass ich mit eurer Lösung nur die USB-Verbindung zu verwenden nicht einverstanden bin.
Wenn ihr mich an dieser Stelle nochmal aufklärt.
Wenn ich nur über die Verbindung vom MAX232 (USB nicht verbunden) gehe
funktioniert der Sketch-Upload ebenfalls nicht. (Externe Spg.-Versorgung
ist vorhanden ;-) )
Das soll nicht heißen, dass ich mit eurer Lösung nur die USB-Verbindung
zu verwenden nicht einverstanden bin.
Wenn ihr mich an dieser Stelle nochmal aufklärt.
Danke für die schnellen Antworten und Grüße
Bin nicht sicher, was Du da meinst. Wenn Du auch über den MAX232 den Bootloader ansprechen willst, musst Du den RTS Pin über einen C mit dem Reset Eingang des 328er verbinden, damit AVRDUDE den 328er resetten kann. Oder Du machst den Reset einfach bei Hand über den Druckknopf. Das funktioniert mit etwas Übung auch.
AVR Dude hält den RTS Pin während des Programmiervorgangs permanent auf LOW und startet über ein Serien C durch einmaligen Reset am Anfang den Bootloader.
Kannst Du Dein Problem sonst etwas näher beschreiben?
Hi, kannst Du bitte etwas genauer auf DTR eingehen. Ich habe noch CTS
und RTS am MAX232 zur Verfügung. Was genau müsste ich machen ?
Das was der Rest der Welt macht. Nur USB anstecken und gut!
Mein Ziel: Wahlweise entweder die USB-Verbindung zu verwenden oder über
reinen UART-Betrieb zu gehen
Wofür? Für die Kommunikation mit dem PC? Dafür reicht die USB-Verbindung mit dem virtuellen COM-Port!
Darüber läuft auch die Programmierung des Arduino. So wie es Millionen von Arduion-Anwendern tun!
Danke für die Erklärung mit dem RTS-Pin. Ich werde das so aufbauen und
freue mich wenn ich dann auch via UART einen Sketch-Upload machen kann.
Nochmal vielen Dank in die Runde für eure schnellen Antworten. Ihr habt
mir sehr geholfen.
Grüße an alle und ein schönes Wochenende
Tobias
Gern geschehen.
Ich habe das mit dem manuellen RESET auf einem STK500 früher genauso gemacht um einen Arduino Bootloader für einen ATMEGA1284P zu testen. Mit dem STK500 war ich über RS232 verbunden und startete dann den Bootloader einfach mit dem RESET Taster auf dem STK500. Das funktionierte ganz gut, weil AVRDUDE wiederholt versucht sich mit dem Target in Verbindung zu setzen, bevor er aufgibt. Da kann man dann relaxed vorgehen.
Hi, kannst Du bitte etwas genauer auf DTR eingehen. Ich habe noch CTS
und RTS am MAX232 zur Verfügung. Was genau müsste ich machen ?
Das was der Rest der Welt macht. Nur USB anstecken und gut!
Mein Ziel: Wahlweise entweder die USB-Verbindung zu verwenden oder über
reinen UART-Betrieb zu gehen
Wofür? Für die Kommunikation mit dem PC? Dafür reicht die USB-Verbindung
mit dem virtuellen COM-Port!
Darüber läuft auch die Programmierung des Arduino. So wie es Millionen
von Arduion-Anwendern tun!
Beim UNO vielleicht. Beim PRO-MINI ist das zumindest für mich auch ein aktuelles Problem, weil dann temporär ein USB Serial Kabel am 6-Pin Header eingesteckt ist und ich von der Anwendungsseite her einen MAX232 oder MAX483 parallel mit dran habe. Vielleicht ist es bei Tobias ähnlich, daß er aus irgendeinen triftigen Grund den USB Serial des UNOs oder NANO nicht (immer) einsetzen möchte.
Beim UNO vielleicht. Beim PRO-MINI ist das zumindest für mich ein
aktuelles Problem, weil dann temporär ein USB Serial Kabel am 6-Pin
Header eingesteckt ist und ich von der Anwendungsseite her einen MAX232
oder MAX483 parallel mit dran habe.
Vielleicht ist es bei Tobias
ähnlich,
Nö, sein MAX232 verbindet nach seiner Aussage auch zum PC.
"ich habe einen Arduino UNO via USB an den PC angeschlossen (virt. COM4)
und gleichzeitig die Serielle-Schnittstelle des Arduino via MAX232 an
virt. COM6 des PC's verbunden."
Beim UNO vielleicht. Beim PRO-MINI ist das zumindest für mich ein
aktuelles Problem, weil dann temporär ein USB Serial Kabel am 6-Pin
Header eingesteckt ist und ich von der Anwendungsseite her einen MAX232
oder MAX483 parallel mit dran habe.
Vielleicht ist es bei Tobias
ähnlich,
Nö, sein MAX232 verbindet nach seiner Aussage auch zum PC.
"ich habe einen Arduino UNO via USB an den PC angeschlossen (virt. COM4)
und gleichzeitig die Serielle-Schnittstelle des Arduino via MAX232 an
virt. COM6 des PC's verbunden."
Das ist sinnlos.
Das habe ich aber auch schon so gemacht. Ein USB port gehört dem AVRDUDE und der andere ist mit anderer HW verbunden oder Teraterm für gewisse Upload Aktivitäten. Das einfache Terminalprogram im IDE kann ja das nicht.
So ist das IDE bequemer bedienbar, weil dann das Terminalprogram nicht den USB port freigeben muß. Dann kann der 2. USB Port mit dem Terminalprogram immer dran bleiben. Nur darf der zweite Serial Port nur dann aktiv sein, wenn AVRDude nicht kommuniziert.
Arduino UNO Schaltplan: DTR!
Nix RTS
Auch Pro Mini und Nano.
Tobias schrieb:
Hi, kannst Du bitte etwas genauer auf DTR eingehen.
Einfach mal den Schaltplan des UNO untersuchen.
Den lese ich jetzt hier nicht vor.
Wenn ich mich recht erinnere, wird zumindest beim FT232RL der RTS Pin während des AVRDude Zugriffs aktiviert. Aber Du magst recht haben. Kann es aber derzeit nicht verifizieren.
Beim USB CH340 Kabel mit den 6 Pins, welches ich meist mit dem Pro-Mini verwende, wird in der Tat der DTR Pin dafür verwendet und ist auch so beschriftet dort.
Lässt sich ja leicht feststellen, welchen Ausgang AVRDude tatsächlich beansprucht.
Also ist es nicht ohne weiteres möglich den Arduino via USB zu
programmieren, wenn der UART RX-Pin gleichzeitig verbunden ist ?
1
Signal von USB o-----[===]---+--------o Rx Eingang Mikrocontroller
2
|
3
Signal vom MAX o-------------+ (High)
Im Ruhezustand liefern beide Signalquellen einen HIGH Pegel. Die Kommunikation findet durch LOW-Impulse statt.
Weil dein ruhender MAX aber ständig HIGH liefert, sieht der Mikrocontroller ständig HIGH. Was der USB-UART Chip durch den Widerstand liefert, kann der Mikrocontroller nicht sehen. Dessen Signal wird komplett im Widerstand verheizt.
kurzes Feedback. Ich habe Deinen Schaltungsvorschlag umgesetzt und siehe da jetzt funktioniert der Sketch-Upload auch wenn der RS232 angeschlossen ist :-)
Habe meine kompletten Schaltungsaufbau mal als Bild angehängt.
kurzes Feedback. Ich habe Deinen Schaltungsvorschlag umgesetzt und siehe
da jetzt funktioniert der Sketch-Upload auch wenn der RS232
angeschlossen ist :-)
Habe meine kompletten Schaltungsaufbau mal als Bild angehängt.
Nochmal herzlichen Dank und Grüße
Tobias
Hallo Tobias,
vielen Dank für Deine Erfolgsrückmeldung. Freut mich sehr.