Arduino UNO: Reset und der 100nF Kondensator; -> Seriell flashen über TX/RX

Hi,

bin gerade dabei einen UNO seriell mit einem USB-TTL Adapter zu flashen.
Mit manuellem Reset klappt das einwandfrei.

Da der Adapter auch einen RST-Pin hat, wollte ich den UNO automatisch resetten lassen.
Also den RST-Pin des Adapters mit dem Reset (der nebem 3,3V) des Arduino verbunden.
--> Geht nicht. Programmdownload nicht erfolgreich

avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Recv: 
avrdude: stk500_getsync(): not in sync: resp=0x00

avrdude done.  Thank you.

Wenn der Reset-Pin angeschlossen ist, dann geht auch der manuelle Download nicht mehr. Beim Drücken des ResetPins am Arduino wird der USB-Adapter vom Betriebssystem kurz abgemeldet, und die Arduino IDE meckert, daß der COM-Port nicht mehr verfügbar ist.

Ich hab im Internet nachgeforscht, und da wird öfters geschrieben, daß in die Resetleitung noch ein 0,1µF-Kondensator rein soll. Aber wenn ich mir das Layout des Uno so anschau, dann ist da ja bereits einer drauf.
In der Nähe befindet sich auch noch eine Art Lötbrücke: RESET-EN. Aber deren Sinn werde ich nach Studieren des Schaltplans wohl nie ergründen können. Die brückt eine Verbindungsleitung?????

Im Anhang mal der angesprochene Schaltplan

Unbenannt.JPG

Uups wie doof von mir.
Der C geht ja rüber zum ATMEGA16.

OK, ich hab dann mal einen 100nF in die RST-Leitung rein gehängt. Aber das Verhalten ist dassselbe. Kein Download und COM-Port Verlust beim Reset-Taster drücken.
Muss da die Verbindung zum ATMEGA16 aufgebrochen werden??

Du hast eine Reset-Leitung bei Deinem USB-TTL-Adapter? Welchen Adapter nimmst Du? Die Reset-Leitung muss für einen Reset für ein paar Mikrosekunden nach Masse gezogen werden. Macht das die Leitung Deines TTL-Adapters?

Edit: aus Millisekunden werden Mikrosekunden.

Welchen Adapter nimmst Du?

Den hier: (siehe Bild)

Die Reset-Leitung muss für einen Reset für ein paar Mikrosekunden nach Masse gezogen werden. Macht das die Leitung Deines TTL-Adapters?

Muss ich mal morgen mit dem Oszi prüfen.

Ich schätze mal, die RST-Leitung ist direkt mit DTR verbunden, dann müsstest Du statt einer direkten Verbindung einen Kondensator nehmen. Der leitet dann den Impuls kurz durch, zieht aber die Leitung nicht durchgehend nach Masse (womit der Arduino ausser Gefecht gesetzt wäre).

...dann müsstest Du statt einer direkten Verbindung einen Kondensator nehmen...

Hab ich probiert. Sieh mal in "Reply#1" des Threads

Die Reset-Leitung muss für einen Reset für ein paar Mikrosekunden nach Masse gezogen werden. Macht das die Leitung Deines TTL-Adapters?

Muss ich mal morgen mit dem Oszi prüfen.

Wieso Oszi...habs jetzt mal mit dem Multimeter gemessen. Der RST-Pin hat 4,4V. Während des Programmierens fällt der Pegel auf 3,3V?????

Damit wirds wohl nicht gehen :frowning:

So, jetzt glaub ich , daß ich den Wandler gehimmelt habe. Über RX und TX geht nichts mehr rein oder raus. Pech gehabt.

Mein nächster Versuch ist jetzt mit einem RS232/TTL-Wandler:

Aufbau: Wandler an serielle Schnittstelle, Arduino und Wandler mit 5V versorgt. RX und TX verbunden. RTS mit reset (mal ohne, mal mit Kondensator)
Mit dem Konstrukt kann ich über das Terminalfenster seriell mit dem Arduino kommunizieren. Aber Download ( auch ohne verbundener Resetleitung und mit manuellem Reset) klappt einfach nicht.
Ist das vllt. auch ein Problem der Baudrate? Im Sketch sind 9600 für die serielle Kommunikation eingetragen. Die IDE will aber mit 115200 flashen. Muss man da in Windows was umstellen?
Wobei ich bei meinem USB-TTL Wandler auch nichts umstellen musste.

Irgendwie komm ich da jetzt nicht weiter.


Hab jetzt noch einen RS232-TTL Wandler gefunden. Allerdings ohne RST-Leitung. Mit dem geht es wieder prima zu flashen (allerdings manueller Reset)
Ich fürchte bei dem Pollin-Modul ist der MAX232N von der Baudrate an der Grenze. Der kann lt. Datenblatt maximal 120kBit/s.
Da beim Arduino mit 115200 geflasht wird, ist das wohl mit dem Wandler nicht mehr möglich.

Der andere RS232-TTL Wandler hat einen MAX3232. Und der kann 250kBit/s.

Ist ne Vermutung von mir.

Kennt jetzt jemand einen RS232-TTL-Konverter, der die Baudrate kann und auch eine Reset-Leitung hat?

Hmm... nach längerer Recherche im Internet, glaube ich, daß der ATMega16U das serielle flashen über die TX/RX-Leitungen stört.
Hier steht einiges dazu:
http://blog.solutions-cubed.com/programming-the-arduino-uno-with-a-serial-port/

Sieht so aus, als ob ich mir das serielle Flashen ohne modifizierten Arduino abschminken kann.

hk007:

Die Reset-Leitung muss für einen Reset für ein paar Mikrosekunden nach Masse gezogen werden. Macht das die Leitung Deines TTL-Adapters?

Muss ich mal morgen mit dem Oszi prüfen.

Wieso Oszi...habs jetzt mal mit dem Multimeter gemessen. Der RST-Pin hat 4,4V. Während des Programmierens fällt der Pegel auf 3,3V?????

Damit wirds wohl nicht gehen :frowning:

Der Impuls ist zu kurz als daß Du etwas sinnvolles mit dem Multimeter messen kannst. Du brauchst ein Osziloskop um diese Messung durchführen zu können.

Die zwei Widerstände sind eigendlich dazu da, daß man die Seriele Schnittstelle trotz ATMega16U verwenden kann.

Du kannst den ATMega16U in Reset halten und so deaktivieren. Dazu brauchst Du nur den Reset-Pin des ATMega16U auf Masse zu schalten. Am einfachsten geht das am ICSP-Anschluß des ATMega16U.

Ciao Uwe

@Uwe

Dazu brauchst Du nur den Reset-Pin des ATMega16U auf Masse zu schalten. Am einfachsten geht das am ICSP-Anschluß des ATMega16U

Ich hab das jetzt mal probiert. Sind am linken oberen 6pol. ISP-Stecker die beiden rechten Pins oder?
Aber gebracht hat es nichts. Die Reset-Leitung bleibt immer auf 4,7 Volt.

Ich verwende aktuell einen RS232-TTL-Wandler mit einem MAX2323-Chip. Da auf dem Modul nur RX und TX "verbaut" sind hab ich die DTR-Leitung über einen der freien Level-Shifter gelegt.
Ohne Arduino ist dieses Signal HIGH und beim Starten des Download-Vorganges wird das Signal LOW. Damit es nur der benötigte kurze Impuls wird, hab ich noch den berüchtigten 100nF-Kondensator (kein Elko) in Reihe geschaltet.
Aber wie es aussieht schafft es die Schaltung nicht den Reset-Pin des Arduino für die notwendige Zeit auf Low zu ziehen.

hk007:
@Uwe

Dazu brauchst Du nur den Reset-Pin des ATMega16U auf Masse zu schalten. Am einfachsten geht das am ICSP-Anschluß des ATMega16U

Ich hab das jetzt mal probiert. Sind am linken oberen 6pol. ISP-Stecker die beiden rechten Pins oder?
Aber gebracht hat es nichts. Die Reset-Leitung bleibt immer auf 4,7 Volt.

Damit hälst Du den ATmega16U2 im Reset und nicht den ATmega328. Es ist richtig dort 4.7V zu messen.

hk007:
Ich verwende aktuell einen RS232-TTL-Wandler mit einem MAX2323-Chip. Da auf dem Modul nur RX und TX "verbaut" sind hab ich die DTR-Leitung über einen der freien Level-Shifter gelegt.
Ohne Arduino ist dieses Signal HIGH und beim Starten des Download-Vorganges wird das Signal LOW. Damit es nur der benötigte kurze Impuls wird, hab ich noch den berüchtigten 100nF-Kondensator (kein Elko) in Reihe geschaltet.
Aber wie es aussieht schafft es die Schaltung nicht den Reset-Pin des Arduino für die notwendige Zeit auf Low zu ziehen.

Ich nehme an der RS232-TTL-Wandler wird über Arduino mit Spannung versorgt. Bist Du sicher daß TX und RX richtig angeschlossen sind? Hast Du zB einen Sketch der Pin 13 HIGH schaltet auf den Arduino draufgeladen? Was passiert wenn dann der Upload-Vorgang startet? Geht das Led an pin 13 kurz aus?

Grüße Uwe

Damit hälst Du den ATmega16U2 im Reset und nicht den ATmega328. Es ist richtig dort 4.7V zu messen.

Das ist mir klar :wink:
Ich meinte damit, daß ich es nicht schaffe die Reset-Leitung des 328 auf LOW zu ziehen, selbst wenn ich den den ATMega16U durch den Trick lahmlege.

Ich nehme an der RS232-TTL-Wandler wird über Arduino mit Spannung versorgt

JA

Bist Du sicher daß TX und RX richtig angeschlossen sind?

JA, denn mit manuellem Reset geht der Download, und auch über den seriellen Monitor bekomm ich Daten. (Ich sende im Sketch über die Schnittstelle)

Hast Du zB. einen Sketch der Pin 13 HIGH schaltet auf den Arduino draufgeladen? Was passiert wenn dann der Upload-Vorgang startet? Geht das Led an pin 13 kurz aus?

Ich hab mal in meinen Sketch die LED mit eingebunden.
NEIN, die geht beim Start des Download nicht aus.

Ich habs jetzt mal so gemacht. Die DTR ohne Kondensator an den Reset. An dem Pin mit dem Multimeter gemessen. Wenn ich den Download starte, dann sehe ich daß die Reset-Leitung auf LOW geht. Gleich anschliessend hab ich die reset-Leitung geöffnet. Damit geht wie erwartet der Download.
Es ist nur das Problem, daß ich es mit dem Kondensator nicht schaffe, einen Impuls auf die Reset-leitung zu bekommen.

Den C in Reihe einschleifen ist schon richtig, oder??

HI,

jetzt hab ich mal mit dem Oszi gemessen, wie das Reset-Signal aussieht.

So wie das aussieht, kann es ja nicht gehen. Ich krieg die Reset-Leitung maximal auf 2,2V runter.
Sind da 100nF zu wenig?
Was mir auch noch Sorgen macht, ist die Spannungsspitze im Anschluß. Wo kommt die denn plötzlich her?????

Reset.bmp (146 KB)

Nächster Versuch:

Ich hab die kleine Brücke in der Reset-Leitung zum ATMega16U aufgemacht.
Jetzt läuft es.
Auch auf dem Oszi sieht man, daß die Reset-Leitung auf annähernd 0V gezogen wird.

Aber 2 Probleme hab ich noch mit der Lösung:

  • Der Spike nach dem Reset-Impuls. Das sind annähernd 10V. Da hab ich jetzt aber doch Angst um meinen Arduino
  • Durch das Auftrennen der Leitung hab ich mir die Möglichkeit genommen weiterhin über USB zu flashen. (Ja ich weiss, manuell geht es trotzdem)

Reset_2.bmp (146 KB)

Der positive Spike kommt vom L-H Übergang des Reset-Signals. Der Kondensator ist noch geladen und wird zu den 5V summiert und daraus werden dann 10V. Das ist normal und nicht problematisch. Der Reset-Eingang des ATmega hält 12V aus ( braucht es zur HV Programmierung).
Du kannst es mit einem größeren Kondensator versuchen, Schalte mal eine 2. 0,1µF Kondensator paralell.

Es funktioniert wahrscheinlich mit dem 0,1µF Kondensator wegen dem USB-boot-En-Widerstand nicht (1KOhm auf masse am ATmega16U2 Reset-Ausgangs-Pin).

Grüße Uwe

@Uwe

Du kannst es mit einem größeren Kondensator versuchen, Schalte mal eine 2. 0,1µF Kondensator paralell.

Das war die Lösung. Damit geht der automatische Download über die serielle Schnittstelle
Am Oszi sieht man auch daß das Signal jetzt (auch bei nicht modifiziertem Arduino) auf Masse gezogen wird.
Hast du auch eine Erklärung für die 2 darauf folgenden Signalsprünge der Reset-Leitung?
So ca. 125ms nach Reset-Impuls und dann nochmal so 175ms später.

Ach ja und es nimmt kein Ende:
Jetzt geht das Programmieren über USB nicht mehr. Ich muss dazu dann die TX und RX Leitungen abhängen. Das kenn ich zwar schon, aber schön wäre es doch, wenn beides ohne "Umbauten" gehen würde.
Wenn ich mir den Schaltplan des Uno ansehe (und ich mich an einen von Uwes früheren Posts erinnere), dann sind da 2x 1k Widerstände in den Leitungen zum USB-ATMega. Vllt. bringt es ja auch was, wenn ich in die TX und RX-Leitungen meines "seriellen Programmers" genauso 2 Widerstände hänge.

Reset_3.bmp (146 KB)

Ich weiß nicht woher die 2 negativen Spikes kommen. Ich kann Dir nur sagen daß sie nicht vom Kondensator kommen da die nachfolgenden positiven Spikes fehlen. Die müssen vom ATmega328 kommen weil mehr nicht angeschlossen ist. Sind diese auch da, wenn Du bei einem unmodifizierten Arduino den ResetTaster drückst?

Versuch mal einen kleineren Kondensator paralellzuschalten. Ein zweiter 0,1µF ist dann doch zu groß. Versuchs mal mit zwei 0,1µF in Reihe geschaltet zum orginalen 0,1 µF Kondensator zu löten. Das ergibt dann 0,15µF. Mehr kann ich leider nicht dazu sagen.

Grüße Uwe

Also an einem unmodifizierten Uno (ohne TX/RX/Reset) hab ich beim Flashen über USB ähnliche Spikes auf der Reset-Leitung.

Ich werd morgen mal weitere Versuche machen.

hk007:
Also an einem unmodifizierten Uno (ohne TX/RX/Reset) hab ich beim Flashen über USB ähnliche Spikes auf der Reset-Leitung.

Also würd ich sagen ist das Normal.

Gute Nacht und gutes Versuchen Morgen.
Grüße Uwe