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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ralph S. (jjflash)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
1 lesenswert
nicht 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.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.