Pages: [1]   Go Down
Author Topic: Duemilanove, bootloader für ATMEGA8-16  (Read 3225 times)
0 Members and 1 Guest are viewing this topic.
MK (D)
Offline Offline
Full Member
***
Karma: 8
Posts: 170
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Gruß Peter

Bremen / Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 140
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

MK (D)
Offline Offline
Full Member
***
Karma: 8
Posts: 170
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

Gruß Peter

MK (D)
Offline Offline
Full Member
***
Karma: 8
Posts: 170
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Gruß Peter

0
Offline Offline
God Member
*****
Karma: 0
Posts: 588
LumiNet rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


MK (D)
Offline Offline
Full Member
***
Karma: 8
Posts: 170
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: April 20, 2009, 05:30:43 am by Schwarzfuss » Logged

Gruß Peter

0
Offline Offline
God Member
*****
Karma: 0
Posts: 588
LumiNet rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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.
Logged


MK (D)
Offline Offline
Full Member
***
Karma: 8
Posts: 170
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Gruß Peter

0
Offline Offline
God Member
*****
Karma: 0
Posts: 588
LumiNet rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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.
Logged


MK (D)
Offline Offline
Full Member
***
Karma: 8
Posts: 170
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Gruß Peter

0
Offline Offline
God Member
*****
Karma: 0
Posts: 588
LumiNet rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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...
Logged


Pages: [1]   Go Up
Jump to: