"UNO" Bootloader im ATMEGA8 / 168 ???

Hallo,

hat eigentlch schon mal jemand probiert einen UNO Bootloader in einen der älteren Chips zu laden? Gedade bei den kleinen ATMEGA8 oder etwa einem Pro Mini mit ATMEGA168 wäre das Mehr an freiem Speicher wirklich sehr angenehm!

Gibt es dazu irgendwo eine übersichtliche Anleitung, so eine Art Kochrezept. Ich habe bin jetzt herausgefunden das es wohl prinzipell gehen sollte, aber wohl einiges an Handarbeit bedeuted...

Danke im Voraus,
Christian

Hallo Christian,
wo solllt der mehr freie Speicher herkommen? 168 hat nur die Hälfte an Speicher, der Atmega8 lediglich 1/4 an Flash Speicher. Des weiteren wird der Pro Mini seit langen nicht mehr mit einem 168 ausgeliefert. Standard ist hier der 328.

elektron_:
Gibt es dazu irgendwo eine übersichtliche Anleitung, so eine Art Kochrezept. Ich habe bin jetzt herausgefunden das es wohl prinzipell gehen sollte, aber wohl einiges an Handarbeit bedeuted...

Die beiden Bootloader "optiboot_atmega168.hex" und "optiboot_atmega8.hex" sollte Deine Arduino-Software bereits mitbringen, und zwar im Verzeichnis:
hardware\arduino\bootloaders\optiboot

Du brauchst Dir also nur für die "boards.txt" Boarddatei zwei neue Einträge für zwei neue Boards zu machen (oder zu googlen), die diesen Bootloader verwenden.

sschultewolter:
Hallo Christian,
wo solllt der mehr freie Speicher herkommen? 168 hat nur die Hälfte an Speicher, der Atmega8 lediglich 1/4 an Flash Speicher. Des weiteren wird der Pro Mini seit langen nicht mehr mit einem 168 ausgeliefert. Standard ist hier der 328.

Er meint daß der Bootloader des UNO halb so groß ist als der des Arduino 2009 mit ATmega168. Dadurch hat man ca 500 Byte Flashspeicher mehr zur Verfügung.
Grüße Uwe

elektron_:
Gibt es dazu irgendwo eine übersichtliche Anleitung, so eine Art Kochrezept. Ich habe bin jetzt herausgefunden das es wohl prinzipell gehen sollte, aber wohl einiges an Handarbeit bedeuted...

Hallo,

falls Du den hier verwendeten Bootloader meinst, wäre dass das Rezept: elektronik-bastelkeller.de

Gruß,
Ralf

uwefed:

sschultewolter:
Hallo Christian,
wo solllt der mehr freie Speicher herkommen? 168 hat nur die Hälfte an Speicher, der Atmega8 lediglich 1/4 an Flash Speicher. Des weiteren wird der Pro Mini seit langen nicht mehr mit einem 168 ausgeliefert. Standard ist hier der 328.

Er meint daß der Bootloader des UNO halb so groß ist als der des Arduino 2009 mit ATmega168. Dadurch aht an 500 Byte Flashspeicher mehr zur Verfügung.
Grüße Uwe

So war das also gemeint. Dachte der TE wollte auf den gesamt nutzbaren Speicher hinaus. Warum nicht komplett ohne Bootloader?

hi,

ich hab' schon mal gefragt, und weil das hier wirklich dorthin passen würde, nochmal:
es gab' früher im playground ein wiki, sogar mit einem deutschen teil. ich hab' damals einen testartikel angelegt, aber dann das wiki nicht wiedergefunden. weiß jemand, wo es geblieben ist und wie man dorthin kommt?
ich lehn' mich mal raus und behaupte, daß es schon noch vorhanden sein wird, aber ich finde den link nicht. dort könnte man doch solche dinge schön finden, für die frage hier zb unter bootloader oder/und atmega8.

gruß stefan

Hallo,

vielen dank für die Infos. Klar, mir geht es um die 512 zusätzlichen freien Bytes und nicht um den Gesamtspeicher :roll_eyes:

Ich habe jetzt mal probiert in der Boards.ini folgenden Eintrag anzufügen:

opti8.name=Arduino ATmega8 Optiboot

opti8.upload.protocol=arduino
opti8.upload.maximum_size=7680
opti8.upload.speed=115200

opti8.bootloader.low_fuses=0xdf
opti8.bootloader.high_fuses=0xca
opti8.bootloader.path=optiboot
opti8.bootloader.file=optiboot_atmega8.hex
opti8.bootloader.unlock_bits=0x3F
opti8.bootloader.lock_bits=0x0F

opti8.build.mcu=atmega8
opti8.build.f_cpu=16000000L
opti8.build.core=arduino
optia8.build.variant=standard

Bootloader läßt sich dann sofort wie gewünscht flashen :slight_smile:

Das Ergebnis beim Upload ist dann aber z.B.:

In file included from BlinkWithoutDelay.ino:26:
C:\Users\User\Desktop\arduino-1.0.5-r2\hardware\arduino\cores\arduino/Arduino.h:213:26: error: pins_arduino.h: No such file or directory

Interessanterweise geht es sobald ich die pins_arduino.h in das Verzeichnis ...\cores\arduino kopiere
Wo liegt das Problem? Mit einem "normalen" Uno oder was auch immer findet er die Datei auch an ihrem ursprünglichen Ort.

Christian

elektron_:
Wo liegt das Problem?

Wahrscheinlich wolltest Du in der boards.txt statt:

optia8.build.variant=standard

eher schreiben

opti8.build.variant=standard

Meine Güte...

so ein blöder Tippfehler ]:slight_smile: - und ich such einen "richtigen" Fehler im System...

Moch mal kurz zum Speicherplatz in Bezug auf Optiboot ??
Ist das so richtig??

ATMEGA8: 8192-512 = 7680 freie Bytes
ATMEGA168: 16384-512 = 15872 freie Bytes

Christian

hi,

aufpassen, der atmega8 ist nicht wirklich kompatibel, ist aus der vorgängerserie. der atmega88 sollte kompatibel sein (alle angaben ohne gewähr).

gruß stefan

Eisebaer:
...der atmega8 ist nicht wirklich kompatibel...

Hmmm,

was genau soll nicht kompatibel sein? Klar hat der ATMEGA8 weniger RAM, Flash u.s.w. - ist aber etwa als Arduino NG doch ein echter Arduino. Ich würde erwarten daß die IDE dann eine Fehlermeldung bringt wenn ich eine der Hardwaregrenzen überschreite...
Oder übersehe ich etwas und es tritt ein Problem nur in Verbindung mit einem neueren Bootloader auf ???

Cristian

hi,

nein, die kompatibilität hat nichts mit dem speicher zu tun. probleme gibt es bei hardwarenaher programmierung.
ich wollte atmega8er als ersatz für 328er nehmen, weil ich kaum speicher brauche, die sollten nur 4 shiftregister steuern, aber die bibliothek shiftPWM will nicht mit den atmega8. ist natürlich in assembler geschrieben und da gibts dann die wickel…

C:\Program Files (x86)\arduino-1.0.5\libraries\ShiftPWM\CShiftPWM.cpp:473: error: ‘OCIE2A’ was not declared in this scope
C:\Program Files (x86)\arduino-1.0.5\libraries\ShiftPWM\CShiftPWM.cpp:494: error: ‘TIMSK1’ was not declared in this scope
C:\Program Files (x86)\arduino-1.0.5\libraries\ShiftPWM\CShiftPWM.cpp:502: error: ‘TIMSK2’ was not declared in this scope
C:\Program Files (x86)\arduino-1.0.5\libraries\ShiftPWM\CShiftPWM.cpp:502: error: ‘OCIE2A’ was not declared in this scope
C:\Program Files (x86)\arduino-1.0.5\libraries\ShiftPWM\CShiftPWM.cpp:526: error: ‘OCR2A’ was not declared in this scope

die namen der register und der ports stimmen anscheinend nicht überein. es kommt also immer drauf an, was Du machen willst.

später bin ich dann draufgekommen, daß die shiftPWM drüber hinaus mehr speicher braucht, als der mega8 hat.
muß man halt probieren…

gruß stefan

Ein Unterschied ist, dass der Atmega8 ein TIMSK Register für alle Timer hat. Auf den höheren Prozessoren hat jeder Timer sein eigenes TIMSK Register. Das gleiche mit TIFR (Timer Interrupt Flag Register), wobei man das nicht per Hand anfassen muss.

Es gibt aber generell große Unterschiede bei den Timern. Timer0 hat keine Ausgänge und macht kein Hardware PWM. Und Timer2 hat nur einen Ausgang, statt zwei. Deshalb gibt es da keine A/B Bits.