Willkommen! Anmelden Ein neues Profil erzeugen

Erweiterte Suche

Gen7 1.5 Firmware mit LPT-Programmer aufspielen - Anleitung

geschrieben von pavloko 
Gen7 1.5 Firmware mit LPT-Programmer aufspielen - Anleitung
15. April 2014 18:01
Problemstellung:
----------------

Ich nutze ein selbstgeätztes Gen7 1.5 Board mit unbeschriebenen Atmega1284P.
Aus irgendeinem Grund lies sich die Firmware nicht mittels Arduino IDE über USB und MCP2200 auf
meinen atmega1284p hochladen. Um auzuschließen das irgendwelche hardwareseitigen Probleme vorliegen
habe ich vorher wie von Traumflug auf der wikiseite von gen7 1.4.1 beschrieben die anliegenden Spannungen geprüft.
Außerdem habe ich wie im wiki-Artikel zum gen7 1.5 unter "Troubleshooting the MCP2200" beschrieben, pin14 und 15
des Atmegasockels mittels Draht verbunden und über den "Serial Monitor" der Arduino IDE Nachrichten gesendet und
empfangen ( "Blabla" eingeben; Enter drücken; "Blabla" wird angezeigt, also empfangen.)
Der MCP2200 funktioniert demnach also. Dabei haben auch die RXT/TXT LEDs geleuchtet. Desweiteren bin ich dennoch
noch einmal alle Leiterbahnen abgegangen um nach eventuellen Überbrückungen zu suchen (Besonders beim MCP2200).
Auch dies war nicht der Fall.

Da ich für den Bootloader sowiso einen LPT-Programmer gebaut hatte, habe ich versucht
auch die Firmware darüber hochzuladen.

Eins vorweg: Es hat funktioniert und Repetier host kommuniziert nun mit meinem Reprap über USB und MCP2200 und führt auch die Befehle
richtig aus. Es scheint also irgendein Problem mit der Arduino IDE und meinem System oder irgendwas in der Richtung vorzuliegen.
Es geht also lediglich darum die Arduino IDE zu umgehen, da die später verwendete Software ja funktioniert.



Anleitung:
----------

Die Programmierung erfolgte über den lpt Port mittels DIY-Programmer (Anleitung:
[reprap.org] ).
Die Befehle wurden jedoch angepasst, wie im log zu sehen.
Als System wurde win xp eingesetzt und giveio vorher ausgeführt. Außerdem habe ich
nicht den Sanguino Bootloader verwendet, sondern den, aus dem Gen7 Arduino IDE Support Paket
von Traumflug. (http://reprap.org/wiki/Gen7_Arduino_IDE_Support)
Mit neueren Windows Versionen könnte es Probleme geben, jedoch habe ich das nicht
ausprobiert.

Für die Programmierung wurde ein Extraordner (z.B. C:/arduino_bl_inst) mit folgendem Inhalt angelegt:
--> aus dem Arduino 1.0.1 Paket
- avrdude.exe (aus dem Ordner ..\arduino-1.0.1\hardware\tools\avr\bin)
- avrdude.conf (aus dem Ordner ..\arduino-1.0.1\hardware\tools\avr\etc)
- libusb0.dll (aus dem Ordner ..\arduino-1.0.1)
--> aus dem "Gen7 IDE Support Paket 2.1" - WICHTIG: Zum Chip passenden Bootloader auswählen
- bootloader-1284P-20MHz.hex (Beispiel)
--> *
- Teacup_Firmware.cpp.hex

* Um die Firmware im .hex-Format zu bekommen, muss man die Arduino IDE öffnen, die
Teacup Firmware runterladen und entpacken. Die darin enthaltene Teacup_Firmware.pde
öffnet man nun mit der Arduino IDE und kompiliert diese (vorher noch die richtige
config.h und thermistortable.h auswählen wie in der install beschrieben). War dies
erfolgreich, klickt man auf den Startbutton und auf "Ausführen". Hier gibt man
"%temp% ein und öffnet den gefundenen Ordner. Hier sortiert man den Inhalt nach
Änderungsdatum und öffnet den zuletzt geänderten Ordner (irgendwas mit "build...").
In diesem Ordner befindet sich die Datei "Teacup_Firmware.cpp.hex". Diese nimmt man
und kopiert sie in den Ordner zu den anderen Dateien.

Nun: "Start" --> "Ausführen" --> "cmd" --> Enter
Nun in den angelegten ordner wechseln: zB bei mir --> cd c:\arduino_bl_inst --> Enter

von hier aus habe ich dann nacheinander folgende Befehle ausgeführt:

1. Fusebits setzten:
--> avrdude -C avrdude.conf -c dapa -p m1284p -P lpt1 -B 5 -U lfuse:w:0xF7:m -U hfuse:w:0xDC:m -U efuse:w:0xFC:m

2. Bootloader intallieren
--> avrdude -C avrdude.conf -c dapa -p m1284p -P lpt1 -U flash:w:bootloader-1284P-20MHz.hex

3. Firmware aufspielen
--> avrdude -C avrdude.conf -c dapa -p m1284p -P lpt1 \ -U flash:w:Teacup_Firmware.cpp.hex

Erläuterung:
- dapa --> Schnittstellenart lpt
- m1284p --> Atmega1284p (ggf. anpassen)
- lpt1 --> genaue Bezeichnung der Schnittstelle
- Tip1: Falls sich die Dateien in verschiedenen Ordnern befinden muss man nach ...:w:
den genauen Pfad angeben. Da gab es bei mir aber Probleme, weshalb ich sie alle
in einen Ordner gelegt habe. (Pfadangabe ist relativ zu avrdude.exe)
- Tip2: Funktioniert auch mit anderen Firmwares. Ich habe es zum Beispiel auch mit
Repetier probiert.

Ich habe unten noch den cmd-log mit angehängt zum Vergleich.


Probleme:
---------

Manchmal hat avrdude am ende des Teacup-Uploads einen Verification-Fehler
gemeldet. Dieser war jeweils an verschiedenen Speicherzellen. Die Lösung des
Problems, war es einfach so oft den Upload zu wiederholen, bis keine Fehler
mehr gemeldet wurden. Manchmal kann es auch helfen zwischendurch das
Board zu resetten oder alle drei Schritte erneut auszuführen

Außerdem gab es ein Problem mit den Fusebits. Nachdem ich diese gesetzt hatte
kam manchmal beim Upload des Bootloaders am Ende die Meldung, das die Fusebits geändert
wurden und ob sie wieder zurückgesetzt werden sollen. Wenn hier mit ja geant-
wortet wurde, stürzte AVRDude ab.



cmd-Log:
--------

C:\arduino_bl_inst>avrdude -C avrdude.conf -c dapa -p m1284p -P lpt1 -B 5 -U lfu
se:w:0xF7:m -U hfuse:w:0xDC:m -U efuse:w:0xFC:m

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9705
avrdude: reading input file "0xF7"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xF7:
avrdude: load data lfuse data from input file 0xF7:
avrdude: input file 0xF7 contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: reading input file "0xDC"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDC:
avrdude: load data hfuse data from input file 0xDC:
avrdude: input file 0xDC contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFC"
avrdude: writing efuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xFC:
avrdude: load data efuse data from input file 0xFC:
avrdude: input file 0xFC contains 1 bytes
avrdude: reading on-chip efuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of efuse verified

avrdude: safemode: Fuses OK

avrdude done. Thank you.


C:\arduino_bl_inst>avrdude -C avrdude.conf -c dapa -p m1284p -P lpt1 -U flash:w:
bootloader-1284P-20MHz.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9705
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed

To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "bootloader-1284P-20MHz.hex"
avrdude: input file bootloader-1284P-20MHz.hex auto detected as Intel Hex
avrdude: writing flash (130244 bytes):

Writing | ################################################## | 100% 45.90s

avrdude: 130244 bytes of flash written
avrdude: verifying flash memory against bootloader-1284P-20MHz.hex:
avrdude: load data flash data from input file bootloader-1284P-20MHz.hex:
avrdude: input file bootloader-1284P-20MHz.hex auto detected as Intel Hex
avrdude: input file bootloader-1284P-20MHz.hex contains 130244 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 41.82s

avrdude: verifying ...
avrdude: 130244 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done. Thank you.


C:\arduino_bl_inst>avrdude -C avrdude.conf -c dapa -p m1284p -P lpt1 \ -U flash:
w:Teacup_Firmware.cpp.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9705
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed

To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "Teacup_Firmware.cpp.hex"
avrdude: input file Teacup_Firmware.cpp.hex auto detected as Intel Hex
avrdude: writing flash (20228 bytes):

Writing | ################################################## | 100% 7.14s

avrdude: 20228 bytes of flash written
avrdude: verifying flash memory against Teacup_Firmware.cpp.hex:
avrdude: load data flash data from input file Teacup_Firmware.cpp.hex:
avrdude: input file Teacup_Firmware.cpp.hex auto detected as Intel Hex
avrdude: input file Teacup_Firmware.cpp.hex contains 20228 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 6.64s

avrdude: verifying ...
avrdude: 20228 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done. Thank you.


C:\arduino_bl_inst>

3-mal bearbeitet. Zuletzt am 15.04.14 18:11.
Re: Gen7 1.5 Firmware mit LPT-Programmer aufspielen - Anleitung
16. April 2014 05:20
Gut gemacht!

Die sporadischen Fehler kommen wohl daher, dass das Timing auf dem Parallelport nicht so präzise ist, wie man das gerne hätte. LinuxCNC kann da ein Lied von singen. Ist aber nicht schlimm, man braucht das ja nur ein einziges Mal.

Die Arduino IDE ist sowieso eine ziemlich sensible Sache. Fast unmöglich, die an all die möglichen Situationen anzupassen. avrdude direkt ist wesentlich einfacher (auch der, der mit Arduino kommt), doch die meisten Leute bekommen eben schon einen Horror, wenn sie nur "Kommandozeile" lesen.


Generation 7 Electronics Teacup Firmware RepRap DIY
     
In diesem Forum dürfen leider nur registrierte Teilnehmer schreiben.

Klicke hier, um Dich einzuloggen