Forum: Mikrocontroller und Digitale Elektronik DTR - Signal innerhalb AVRDUDE abschalten beim Protokolltype STK500v2


von Ralph S. (jjflash)


Lesenswert?

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:
1
avrdude -c stk500v2 -p atmega168 -P /dev/ttyUSB0 -b 115200 -V -U flash:w:tetris6_devboard.hex
2
avrdude: stk500_2_ReceiveMessage(): timeout
3
4
avrdude: AVR device initialized and ready to accept instructions
5
6
Reading | ################################################## | 100% 0.07s
7
8
avrdude: Device signature = 0x1e9406
9
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
10
         To disable this feature, specify the -D option.
11
avrdude: erasing chip
12
avrdude: reading input file "tetris6_devboard.hex"
13
avrdude: input file tetris6_devboard.hex auto detected as Intel Hex
14
avrdude: writing flash (6492 bytes):
15
16
Writing | ################################################## | 100% 1.35s
17
18
avrdude: 6492 bytes of flash written
19
20
avrdude: safemode: Fuses OK
21
22
avrdude done.  Thank you.

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.

von Ralph S. (jjflash)


Lesenswert?

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

von Einer K. (Gast)


Lesenswert?

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)

von Ralph S. (jjflash)


Lesenswert?

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.

von Joachim B. (jar)


Lesenswert?

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

von Einer K. (Gast)


Lesenswert?

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.

von Einer K. (Gast)


Lesenswert?

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.
1
@echo on
2
set port=COM9
3
mode %port% BAUD=9600 PARITY=N DATA=8 STOP=1 to=off xon=off odsr=off octs=off dtr=hs rts=hs idsr=off
4
5
echo 80>\\.\%port%
6
7
pause

In wie weit das unter anderen OS geht, KA.

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
Noch kein Account? Hier anmelden.