Go Down

Topic: Duemilanove, bootloader für ATMEGA8-16 (Read 4008 times) previous topic - next topic

Schwarzfuss

Da der ATMEGA8-16 pinkompatibel zum eingebauten ATMEGA168 ist
und ich 3 Stück davon habe,
möchte ich meine ersten bootloader-Einspiel-Experimente
mit dem mysmartusb-Programmer zunächst mal damit testen.

Nur welches Board ist in der Arduino-IDE auszuwählen?
Geht das vielleicht nur per konsole mit avrdude?
Geht das überhaupt?
Gruß Peter

Poldi

Hallo Schwarzfuss.

Über das Brennen des Bootloaders habe ich mich hier im deutschen Forum erst kürzlich unterhalten und brauchbare Informationen erhalten ;-)

Schau doch mal hier:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1237557028

Wenn Du weitere Fragen haben solltest... nur zu!

Gruß
Poldi

Schwarzfuss

Danke Poldi,
mit diesem Link habe ich den mysmartusb erst zum Funktionieren gebracht.
Nur scheint die Arduino-IDE nach Tausch des ATMEGA168 durch einen ATMEGA8-16
diesen Chip nicht programmieren zu können, Einst. 'Arduino NG or older ATMEGA8'.
Mit
Code: [Select]
avrdude -p m8 -c avr910 -e -P /dev/ttyUSB0 -b 19200 -U flash:w:ATmegaBOOT.hex
geht es, auch mit AVR8-Burn-O-Mat[1], nur nicht mit der Arduino-IDE.
So wie du den devcode (0x06 avr910) für den 168er eingetragen hast,
sollte es auch einen devcode für den 8-16er geben, nur welcher?

[1]http://www.brischalle.de/avr8_burn-o-mat_avrdude_gui/avr8_burn_o_mat_avrdude_gui.html
Gruß Peter

Schwarzfuss

Das Programmieren des ATMEGA8-16 mit der Arduino-IDE hab ich mir abgeschminkt,
es geht einfach nicht, bleib ich halt bei der Konsolenbedienung mit avrdude.

Jetzt taucht aber ein 2tes Problem auf:
Ich kann die lfuse (für den Takt zuständig?) nicht auf den Quarz setzen,
hierbei rührt sich der Chip dann nicht mehr (Prg: AnalogInput, nix blinkt),
wiederbeleben geht nur noch mit externem Takt!

Interner Takt (lfuse0x[cde][1234]) scheint alles zu gehen, ext. Quarz z.B. 'ca' geht nichts,
und muß dann wieder einen externen Takt zum Wiederbeleben des Chips anlegen.
Quarz hinüber?
Gruß Peter

bohne

Habe zwar nie mit dem mega8 gearbeitet, aber grundsätzlich sollte der sehr gut unterstützt sein und auch aus der IDE heraus nutzbar sein.

Poste mal bitte Deine Fuses und die genaue Fehlermeldung, die avrdude wirft, wenn Du aus der IDE heraus programmierst.

Welches Betriebssystem nutzt Du? Welche Arduino IDE Version?

Schau auch mal hier:
http://code.google.com/p/arduino/source/browse/trunk/hardware/boards.txt
Da stehen direkt am Anfang (atmega8.bootloader.) die Fuses und Lock Bits, die für den Mega8 benutzt werden, scheinbar passend für ein externes 16MHz Quarz.
http://www.dorkbot.de
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1236434254
http://www.luminet.cc

Schwarzfuss

#5
Apr 20, 2009, 12:28 pm Last Edit: Apr 20, 2009, 12:30 pm by Schwarzfuss Reason: 1
Danke bohne, ist für nen Einsteiger alles nicht so einfach...
Brauch ich überhaupt einen bootloader, ist der nicht bei jedem Hex-file dabei?

Nach vielen Tests funktionieren die lfuses mit [cdef]e bis [cdef]f
Fuse Rechner
Versuche mit low und medium Quarz Einstellung scheiterten,
muß ich alles noch lernen, medium=8mHz Quarz?, low=darunter?
Jedenfalls ist der Quarz nicht defekt, läuft nun mit lfuse=ff und hfuse=d9
aber auch mit allen anderen o.g. Einstellungen.

Fehlermeldung beim Übertragen mit der Arduino-IDE:
avrdude: stk500_getsync(): not in sync: resp=0x24
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0xa0

Momentan kompiliere ich die Programme mit der Arduino-IDE
und spiele sie dann per avrdude aus /tmp ein, damit komme ich klar.

Debian squeeze
Arduino 0015
Gruß Peter

bohne

Ich glaube, Du verwechselst etwas grundlegendes.
Die Fehlermeldung sieht so aus, als hättest Du versucht, ein Sketch via Bootloader auf den Chip zu spielen.
Dazu muss natürlich der Bootloader erstmal auf dem Chip sein. Das musst Du einmalig machen (mit einem ISP programmer wie diesem avr910).

Ist der Bootloader dann einmal auf dem Chip kannst Du die serielle Schnittstelle verwenden, um sketches via Bootloader auf den Chip zu laden - dazu verwendest Du also die serielle Schnittstelle an einem Pegelwandler oder USB-Wandler... und NICHT den ISP programmer.

Hängst Du noch an dem Problem, dass Du den Bootloader nicht auf den Chip kriegst? Dann flash den einmal mit avrdude drauf, das scheint ja irgendwie zu klappen. Die fuses bitte so setzen wie in meinem letzten Link angegeben.

Der Bootloader ist nicht in jedem .hex file enthalten sondern liegt im Fall eines atmega in einem reservierten Speicherbereichs. Er wird also nicht mit jedem .hex file neu hoch gespielt.

Um aus der Arduino IDE heraus den Bootloader flashen zu können musst Du (wie in dem oben verlinkten Thread diskutiert) folgende Zeilen in die Datei hardware/programmers.txt einfügen:
Code: [Select]

mySmartUSB.name=mySmartUSB
mySmartUSB.protocol=avr910


und natürlich immer den richtigen seriellen port auswählen bevor Du den bootloader hochladen möchtest.

Es könnte auch möglich sein, dass die IDE unter Linux einen Bug hat, das kann ich aber gerade nicht beurteilen. Es ist in der Tat so, dass unterschiedliche Routinen aufgerufen werden, abhängig vom Betriebssystem, ein Bug wäre also möglich.
http://www.dorkbot.de
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1236434254
http://www.luminet.cc

Schwarzfuss

Fuses stehen genauso wie in boards.txt,
bootloader geht nicht mit der IDE, vielleicht tatsächlich ein bug,
nur die beiden Zeilen mit mySmartUSB eingetragen, Fehler:
avrdude: avr910_recv(): programmer is not responding
zusätzlich: mySmartUSB.communication=usb
avrdude: ser_open(): can't open device "usb": No such file or directory
mySmartUSB.communication=/dev/ttyUSB0 oder mySmartUSB.communication=ttyUSB0
avrdude: avr910_recv(): programmer is not responding

Also den bootloader drauf mit mySmartUSB und avrdude
avrdude -p m8 -c avr910 -P /dev/ttyUSB0 -b 19200 -U flash:w:ATmegaBOOT.hex
Paßt!

Arduino direkt angeschlossen, ein Prg übertragen und es geht!
Ich denke mal, damit ist das Thema bootloader für mich zunächst erledigt.
Vielen Dank bohne für deine Hilfe und die grundlegenden Infos
Gruß Peter

bohne

Code: [Select]
mySmartUSB.communication=serial
würde ich mal noch probieren und wenn das nichts hilft, dann ganz weg lassen. Sollte aber eigentlich wirklich mit der IDE klappen.
http://www.dorkbot.de
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1236434254
http://www.luminet.cc

Schwarzfuss

Das gibts doch garnicht!
Mit dem serial -Eintrag konnte ich den bootloder brennen!
Done burning bootloader.
Prg aufspielen klappt auch, alles mit der IDE.
Irgendwie geht mein Schnittstellen-Verständnis gerade den Bach runter... ;D
Gruß Peter

bohne

Physikalisch ist es zwar ein USB port, aber der kriegt einen virtuellen seriellen port zugewiesen und eben diesen nutzt avrdude.

Deswegen musst Du da ja auch den Port angeben wenn Du in der shell avrdude aufrufst... /dev/ttyUSB0 war das glaube ich bei Dir.

also halten wir fest: folgende Einstellungen müssen für einen avr910 kompatiblen ISP Programmer in der Dateihardware/programmers.txt eingetragen werden:
Code: [Select]

mySmartUSB.name=mySmartUSB
mySmartUSB.protocol=avr910
mySmartUSB.communication=serial


und das gilt für alle Betriebssysteme, es gibt diesbezüglich keinen Bug in der Arduino IDE.

falls euch noch weitere avr910 kompatiblen ISP Programmer bekannt sind könnt ihr deren Namen ja hier im Thread posten, vielleicht hilft das dem nächsten User ja, der einen solchen mit der IDE nutzen möchte...
http://www.dorkbot.de
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1236434254
http://www.luminet.cc

Go Up