Hallo alle miteinander,
Ich habe:
- den Code von AVRUSB500 (geringfügig) modifiziert, so dass er auch auf
einem Arduino UNO Board (und ausserhalb des Boards auf ATmega8, 88, 168
und 328p) funktioniert.
- AVRUSB500 verwendet das STK500v2 Protokoll mit einer Baudrate von
115200
Mein Problem:
Während auf einem eigenen PCB-Layout (egal ob mit einem FTDI oder CH340G
als USB Bridge) alles gut ist (weil kein automatischer Reset ausgeführt
wird), besteht bei einem Arduino-Board das Problem, dass der MCU über
einen Kondensator mit der DTR-Leitung der USB-Bridge verbunden ist.
Da AVRDUDE beim Start ein Signal auf DTR sendet, löst dieses einen Reset
des UNO Boards aus und somit ist erst einmal der Bootloader aktiviert.
Erst nach einer Verweildauer (nachdem kein Programmupload in den UNO
erfolgt) startet das Anwenderprogramm (in diesem Fall mein AVRUSB500).
Dies führt dazu, dass nach dem Starten von AVRDUDE das UNO-Board nicht
gleich antworten kann, weil das Board sich im Bootloadermodus befindet
und löst somit einen Timeout beim AVRDUDE aus.
Nach diesem ersten Timeout findet AVRDUDE nun einen STK500v2 Programmer
und alles ist gut:
Nun zur Frage:
Gibt es eine Möglichkeit (ohne Änderung des Quellcodes von AVRDUDE - ich
würde das sehr sehr gerne unmodifiziert lassen) das Auslösen des DTR
Signals zu verhindern oder die Abfrage des Programmers nach dem Start
von AVRDUDE zu verzögern ? (smile Jörg Wunsch weiß hier doch
sicherlich bescheid),
Gruß,
Ralph S.
PS: ich weiß, dass ich den Bootloader des UNO-Boards entfernen kann,
aber das ist genau das, was ich nicht tun möchte weil dann das Board
einen externen Programmer benötigt
Arduino Fanboy D. schrieb:> Ein Elko, 10 bis 100µF zwischen Reset und GND des UNO unterdrückt den> DTR Reset>> (findet man in (fast) jeder "Arduino as ISP" Anleitung)
... und dann? Dann geht ein Upload einer neuen Firmware nicht mehr weil
der Bootloader nicht mehr erreichbar ist !!!
So... könnte ich den UNO gleich via SPI programmieren und den Bootloader
entfernen, aber genau das möchte ich ja nicht machen. Der Bootloader
soll erhalten bleiben.
Dennoch danke für die Antwort.
ich verstehe immer noch nicht was der TO erreichen will
Ralph S. schrieb:> Da AVRDUDE beim Start ein Signal auf DTR sendet
das macht hyperterm auch, egal wie ich den Arduino anspreche über USB,
den Reset gibt es immer weil offensichtlich mit FTDI oder CH340/341g
Bridge immer DTR wackelt, was hat das mit AVRDUDE zu tun?
Ralph S. schrieb:> Erst nach einer Verweildauer
kann mit optiboot, neuer Bootloader verkürzt werden.
Ich habe alle meine Arduinos den neuen Bootloader verpasst und alle
Board.txt angepasst (verkürzter Ausschnitt)
habe den neuen kurzen Optiboot aber neu auf 57K6 gebracht, die 115K
waren für viele Anwendungen zu schnell -> USB Server Sharkoon LANport
400, wUSB (Hama)
nano.menu.cpu.atmega328fullmemlowup=ATmega328P (New Boot Full Mem Low
Upload)
nano.menu.cpu.atmega328fullmem=ATmega328P (New Bootloader Full Mem)
nano.menu.cpu.atmega328=ATmega328P (New Bootloader Old Mem)
nano.menu.cpu.atmega328old=ATmega328P (Old Bootloader Low Mem)
nano.menu.cpu.atmega328old.build.mcu=atmega328p
Ralph S. schrieb:> Arduino Fanboy D. schrieb:>> Ein Elko, 10 bis 100µF zwischen Reset und GND des UNO unterdrückt den>> DTR Reset>>>> (findet man in (fast) jeder "Arduino as ISP" Anleitung)>> ... und dann? Dann geht ein Upload einer neuen Firmware nicht mehr weil> der Bootloader nicht mehr erreichbar ist !!!>> So... könnte ich den UNO gleich via SPI programmieren und den Bootloader> entfernen, aber genau das möchte ich ja nicht machen. Der Bootloader> soll erhalten bleiben.>> Dennoch danke für die Antwort.
Entweder bist du verwirrt, oder du hast mich verwirrt!
Wie du auch bei einem Auto nicht durch beide Vordertüren gleichzeitig
ein- aussteigen kannst, gibt es auch hier eine Situation wo du
Entscheidungen treffen musst.
Bedenke:
Der USB SerialWandler beherrscht keine Telepathie!
Er KANN NICHT wissen, ob du den Bootloader jetzt starten möchtest, oder
nicht.
Ralph S. schrieb:> Gibt es eine Möglichkeit (ohne Änderung des Quellcodes von AVRDUDE - ich> würde das sehr sehr gerne unmodifiziert lassen) das Auslösen des DTR> Signals zu verhindern
Wie man den DTR Reset verhindert habe ich dir gesagt.
Das wolltest du wissen.
Wenn dir die Antwort nicht passt, dann hast du mein volles
Mitgefühl,....
Aber mehr kann ich dir nicht bieten.
Wenn du den UNO als Programmieradapter nutzen willst, dann mach den
Kondensator drauf. Willst du den UNO selber beschreiben, dann ziehst du
den Kondensator. Oder machst dir einen Jumper da hin.
Am Rande:
Jeder originale UNO, und auch die meisten Clone, haben haben eine
Reset-Enable Lötbrücke. Durchgekratzt, kein DTR Reset.
Auch hier würde ein Jumper dein Problem lösen.
Joachim B. schrieb:> weil offensichtlich mit FTDI oder CH340/341g> Bridge immer DTR wackelt, was hat das mit AVRDUDE zu tun?
Es ist die Software, welche den Pin Wackeln lässt!
Unter Win gibts die Möglichkeit den DTR Reset zu unterdrücken.
Hier eine Batchdatei, welche Daten (hier der String "80") an einen
Arduino übertragen kann, ohne einen Reset auszulösen.
Eine eigene Frage?
Dieser Thread ist über 8 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.