Programmierung 16U2 und 2560 nach erstmaliger Bestückung

Hallo zusammen,

ich hatte eine ähnliche Frage schon vor einigen Monaten gestellt, kam da mangels Sprachbarriere aber nicht weiter. Daher nun der Versuch auf Deutsch. Der Hintergrund ist, dass ich ausgehend vom originalen MEGA-Schaltplan selbst zu Übungszwecken das Board gelayoutet habe. Das Board ist nun soweit bestückt und ich müsste den 16U2 als auch den 2560 nun programmieren. Mich erschlägt es förmlich bei den vielen Artikeln mit verschiedenen Möglichkeiten, Hardwaremodifikationen, etc.

Vom Prinzip her ist mir klar, was ich benötige:

1.) auf den 16U2 die Firmware für USB-Serial-Umsetzung aufspielen.
2.) auf den 2560 den Bootloader aufspielen, damit er zukünftig von der Arduino IDE heraus programmiert werden kann

Nun, weiß ich nicht, wie ich das am einfachsten bzw. überhaupt bewerkstelligen soll. Ich habe mir von Atmel den ICE Programmer/Debugger besorgt, diesen könnten wir also nutzen. Aber da ich generell noch keinen uC geflasht habe (immer nur über die Arduino IDE) gearbeitet, weiß ich auch nicht wirklich wie das gehen soll bzw. welche Software man benötigt. Von Atmel gibt es ja dieses Flip, aber auch Atmel Studio.

Wenn mir jemand etwas Hilfestellung geben könnte, wäre ich dankbar.

Viele Grüße
Markus

Nachtrag: Den Bootloader würde ich versuchen mal nach dieser Anleitung über einen Uno einzuspielen: https://support.arduino.cc/hc/en-us/articles/4841602539164

Bleibt noch die Firmware für den 16U2

Bis zum Ende lesen. Und ggfls. da fragen, wie das geht :wink:

ICE dran stecken, und "Bootloader Brennen" drücken.
Flip (ohne ICE) würde für den 16U2 natürlich auch gehen.
(wenn man die Fuses mit dem ICE setzt)

Bei der Arduino IDE sind alle nötigen Hexdateien im Lieferumfang vorhanden.

ArduinoFirmwareRestore.zip (81,2 KB)

Oder auch hier, bin nur nicht so schnell :roll_eyes:

Hoffentlich ist es so einfach, wie es bei euch klingt. Ich werde es spätestens am Wochenende versuchen und gebe dann Bescheid, ob positiv oder negativ verlaufen.

So, ich habe jetzt mit der Anleitung von @agmue mit Flip den 16U2 geflasht, Davor wurde er in der Systemsteuerung als Atmega 16U2 erkannt und danach als Arduino Mega 2560. Irgendwelche Fuses habe ich nicht gesetzt, weil davon auch nichts in der Anleitung stand.

Nun zum 2560. Dort habe ich in der Arduino IDE die Einstellungen wie am angehängten Screenshot eingestellt und bekomme eine Fehlermeldung (siehe zweiter Screenshot). Dabei hatte ich das MEGA-Board über USB an den PC angeschlossen und zusätzlich den ICE-Programmer über PC-USB auf den ICSP-Header. Kann mir bei dem Fehler jmd weiterhelfen?

einstellungen

In der Zwischenzeit habe ich die Methode mit dem Arduino als Programmer probiert, um den Bootloader draufzubekommen: https://support.arduino.cc/hc/en-us/articles/4841602539164

Das schien soweit auch zu funktionieren. Nachdem ich nun den Versuch unternommen habe auf den MEGA normal über USB einen Sketch hochzuladen, bekomme ich eine Timeout-Fehlermeldung.

Ich weiß nicht, ob ich irgendwo nen Fehler gemacht habe. Fuses habe ich nirgends gesetzt, aber das wurde auch nirgendwo beschrieben.

Doch, beim Brennen des Bootloaders wird das gleich mit gemacht.

Bei ATtinys verzichte ich zur Speicherersparnis auf einen Bootloader, muß aber einen leeren brennen, damit die Fuses gesetzt werden.

Übertrage doch mal mittels UNO ein Blinkprogramm, ob der Mega2560 überhaupt etwas tut.

Wenn du die ausführlichen Ausgaben aktivieren würdest, könntest du sehen, dass dieses nicht stimmt.
Hast du aber leider nicht.

Wenn du die KOMPLETTEN Meldungen posten würdest und nicht solche Verstümmelungen, könnten wir das auch sehen.

Tipp:
Wenn du Fehler in der IDE siehst, erscheint ein Button: "Fehlermeldungen kopieren"
Der hat einen Zweck. Ob du es glaubst, oder auch nicht....

Ja, das funktioniert, er blinkt wie er soll dann. Auch das Draufladen des Bootloaders läuft ohne Fehler ab.

Wenn ich dann den MEGA direkt über USB anschließe und den Blinksketch draufladen möchte kommt wie gesagt der Timeout-Fehler.

Arduino: 1.8.10 (Windows 10), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

Der Sketch verwendet 1448 Bytes (0%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers, 8183 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega2560 -cwiring -PCOM21 -b115200 -D -Uflash:w:C:\Users\mlanger\AppData\Local\Temp\arduino_build_332855/Blink.ino.hex:i 

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM21
         Using Programmer              : wiring
         Overriding Baud Rate          : 115200
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer

avrdude done.  Thank you.

Beim Hochladen des Sketches ist ein Fehler aufgetreten

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

Mir fällt auf, dass die TX-LED des 16U2 gar nicht leuchtet und die RX nur alle paar Sekunden einmal blinkt. Normalerweise sind die ja richtig am Flackern. Wenn die TX schon nicht leuchtet, spricht das doch für ein Problem mit dem 16U2, ebenso, dass der 2560 vom Uno direkt programmiert werden konnte, oder?

Was das wohl bedeuten mag.........

Hast du die Fuses des 16U2 richtig gesetzt?

Willst du jetzt ernsthaft das Kompilierungs-Protokoll des mitgelieferten Blinksketches sehen? Kann ich dir natürlich hochladen, aber was soll da drinstehen?

Nein, ich habe keine Fuses gesetzt, das hatte ich ja schon gesagt. Welche müsste man denn wie setzen? Ich habe wie gesagt das Beispiel von @agmue verwendet und hierbei insbesondere Punkt 6 ( Anwendungsprogramm ändern): Anleitung: UNO als Human Interface Device (HID) Tastatur

Als HEX-Datei habe ich aus deinem zip-File die "Arduino-usbserial-mega.hex" hochgeladen. Jetzt wo ich grade schreibe, kommt mir der Gedanke, ob die Datei evtl. auch falsch war und es die "Arduino-usbserial-atmega16u2-Mega2560-Rev3.hex" hätte sein müssen.

Mit der Datei "Arduino-usbserial-mega.hex" tut es auch nicht. Anbei nochmal die komplette Ausgabe der Konsole im Verbose-Modus.

Arduino: 1.8.10 (Windows 10), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\ml\Documents\Arduino\libraries -fqbn=arduino:avr:mega:cpu=atmega2560 -vid-pid=0X2341_0X0042 -ide-version=10810 -build-path C:\Users\ml\AppData\Local\Temp\arduino_build_514537 -warnings=none -build-cache C:\Users\ml\AppData\Local\Temp\arduino_cache_938791 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose C:\Program Files (x86)\Arduino\examples\01.Basics\Blink\Blink.ino
C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\ml\Documents\Arduino\libraries -fqbn=arduino:avr:mega:cpu=atmega2560 -vid-pid=0X2341_0X0042 -ide-version=10810 -build-path C:\Users\ml\AppData\Local\Temp\arduino_build_514537 -warnings=none -build-cache C:\Users\ml\AppData\Local\Temp\arduino_cache_938791 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose C:\Program Files (x86)\Arduino\examples\01.Basics\Blink\Blink.ino
Using board 'mega' from platform in folder: C:\Program
Using core 'arduino' from platform in folder: C:\Program
Detecting libraries used...
"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\mega" "C:\\Users\\ml\\AppData\\Local\\Temp\\arduino_build_514537\\sketch\\Blink.ino.cpp" -o nul
Generating function prototypes...
"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\mega" "C:\\Users\\ml\\AppData\\Local\\Temp\\arduino_build_514537\\sketch\\Blink.ino.cpp" -o "C:\\Users\\ml\\AppData\\Local\\Temp\\arduino_build_514537\\preproc\\ctags_target_for_gcc_minus_e.cpp"
"C:\\Program Files (x86)\\Arduino\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\ml\\AppData\\Local\\Temp\\arduino_build_514537\\preproc\\ctags_target_for_gcc_minus_e.cpp"
Sketch wird kompiliert...
"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\mega" "C:\\Users\\ml\\AppData\\Local\\Temp\\arduino_build_514537\\sketch\\Blink.ino.cpp" -o "C:\\Users\\ml\\AppData\\Local\\Temp\\arduino_build_514537\\sketch\\Blink.ino.cpp.o"
Compiling libraries...
Compiling core...
Using precompiled core: C:\Users\ml\AppData\Local\Temp\arduino_cache_938791\core\core_arduino_avr_mega_cpu_atmega2560_0c812875ac70eb4a9b385d8fb077f54c.a
Linking everything together...
"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-gcc" -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections,--relax -mmcu=atmega2560 -o "C:\\Users\\ml\\AppData\\Local\\Temp\\arduino_build_514537/Blink.ino.elf" "C:\\Users\\ml\\AppData\\Local\\Temp\\arduino_build_514537\\sketch\\Blink.ino.cpp.o" "C:\\Users\\m\\AppData\\Local\\Temp\\arduino_build_514537/..\\arduino_cache_938791\\core\\core_arduino_avr_mega_cpu_atmega2560_0c812875ac70eb4a9b385d8fb077f54c.a" "-LC:\\Users\\ml\\AppData\\Local\\Temp\\arduino_build_514537" -lm
"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "C:\\Users\\ml\\AppData\\Local\\Temp\\arduino_build_514537/Blink.ino.elf" "C:\\Users\\ml\\AppData\\Local\\Temp\\arduino_build_514537/Blink.ino.eep"
"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-objcopy" -O ihex -R .eeprom "C:\\Users\\ml\\AppData\\Local\\Temp\\arduino_build_514537/Blink.ino.elf" "C:\\Users\\ml\\AppData\\Local\\Temp\\arduino_build_514537/Blink.ino.hex"
"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-size" -A "C:\\Users\\ml\\AppData\\Local\\Temp\\arduino_build_514537/Blink.ino.elf"
Der Sketch verwendet 1448 Bytes (0%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers, 8183 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega2560 -cwiring -PCOM22 -b115200 -D -Uflash:w:C:\Users\ml\AppData\Local\Temp\arduino_build_514537/Blink.ino.hex:i 

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM22
         Using Programmer              : wiring
         Overriding Baud Rate          : 115200
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer

avrdude done.  Thank you.

Beim Hochladen des Sketches ist ein Fehler aufgetreten

Ja!
Dann aber nicht weiter gemacht.....

Bei dem sind die Fuses schon gesetzt.
Aber du sagst ja, dass du einen neuen 16U2 verwendest.
Oder?

Drum habe ich dir ja auch schon in #4 Die Firmware Restore Hardware Definition zukommen lassen. Da ist alles drin, dran und drum, was du brauchst.

1 Like

Dann muß man nur noch die richtige Auswahl treffen:

grafik

Sorry, ich komme nicht wirklich weiter. Ich glaube ihr setzt zu viel Vorkenntnisse voraus bei mir, ich habe mich noch nie mit diesem Thema beschäftigt.

Ja, genau. Das heißt man müsste die Fuses richtig setzen. Aber auf welche Werte und wie das geht, weiß ich nicht. Bzw. könnte man es mit der Kommandozeile und avrdude versuchen, aber dazu bräuchte ich immer noch die Werte der Fuses. Ich will auch kein Risiko eingehen, da was falsch zu setzen, weil sonst der Chip wohl unbrauchbar werden kann und ich den hier nicht auslöten kann.

Das waren nur hex-Files. Ich habe zwar eins davon ("Arduino-usbserial-mega.hex") mittels Flip hochgeladen, aber so wie ich es verstehe müsssten die Fuses ja noch gesetzt werden.

So eine Auswahl habe ich in dem Menü gar nicht.

Mal noch ne Frage, wenn ich den Bootloader mit der "Arduino as ISP" Anordnung draufspiele und danach z.B. den Blinksketch, dann ist der Bootloader wieder weg?

Noch eine Frage: Sehe ich das richtig, dass das ganze Prozedere auch mit Arduino as ISP geht und ich einen Atmel ICE gar nicht benötige?

Nein!
Da ist noch eine kleine süße andere Datei...
Kann man leicht übersehen, wenn man will.

Kannst du aber herstellen, wenn du den Inhalt des hardware Orders, aus dem Zip, in deinen sketchbook/hardware Ordner wirfst.
IDE neu starten, und das Menue ist da.

Jawoll!
Wäre hier ausreichend.

Nö, ich sehe

  • hardware\ArduinoFirmwareRestore\avr\boards.txt
  • hardware\ArduinoFirmwareRestore\avr\bootloaders\*.hex

Diese Dateien müssen Teil der Arduino-IDE werden, bei mir beispielsweise c:\Program Files (x86)\Arduino-1.8.19\hardware\ArduinoFirmwareRestore\avr\boards.txt und so weiter. Es gibt andere Möglichkeiten für das Verzeichnis hardware, ich packe das eher ans Sketchbook.

Ohne Gegenmaßnahmen, ist das wohl so!