Die netten Fusebits und Co.

Hey ,

habe es geschaft, den Atmega168 auf internen Quarz umzustellen mit 8MHz, aber auch nur weil ich den Bootloader vom Lillypad rauf spielte.

Nur sobald ich CKDIV8 aktiviere, läuft der Sketch nicht mehr.
Da ich aber den Arduino mit Batterie versorge und keine großen Ansprüche besitze, würde ich gerne die Stromaufnahme stark reduzieren und ihn auf 1MHz laufen lassen.

Ich denke ich muss am Bootloader (Makefile-Datei), etwas verändern.

Bevor ich mein Arduino Schrotte, wollte ich um Rat bitten, wie ich an die Sache richtig angehen muss.

Vielen Dank.

Ich denke ich muss am Bootloader (Makefile-Datei), etwas verändern.

Ja, Du musst den Wert von AVR_FREQ anpassen, sonst wird die Baudrate für den Upload nicht stimmen.

Hey,

Danke für den Hinweis, habe ich befolgt AVR_FREQ= 8000000 ---> 1000000 gewechselt.

Leider kann ich immernoch keinem Sketch uploaden, sofern die Fuses CKDIV8 aktiv ist.

Wenn Du Bootloader flashen kannst und Fuses setzen, dann hasst Du einen ISP. Wieso brauchst Du dann überhaupt einen Bootloader? Du kannst doch einfach direkt per ISP die Sketches aufspielen.

Ich habe schnell nachgerechnet. Bei 19200 Baud würde das UBRR einen Wert von 2.25 erhalten. Da das kein Integer ist, wird 2 reingeschrieben, was fast 10% Abweichung entspricht (8.5% gemäss Datenblatt). Einen relativ guten Teiler kriegt man erst mit 4800 Baud (12). Ich würde also im Bootloader-Code die Baudrate auf 4800 ändern:

#define BAUD_RATE   4800

und das entsprechend auch im boards.txt anpassen. Damit hast Du auf 0.2% genau die richtige Baudrate.

Ja eine ISP besitze ich.
Darüber habe ich noch gar nicht nachgedacht.
Kann ich wie gewohnt den Code schreiben in Arduino1.0.1 und über die ISP übertragen, fertig?

Kann ich wie gewohnt den Code schreiben in Arduino1.0.1 und über die ISP übertragen, fertig?

Ja, "Upload mit Programmer"

So, konnte es testen.
Bekomme Problemlos die Sketche geuploadet mit der ISP.

Nebeneffekt an der Änderung der Frequenz, die Zeiten bei Delay stimmen nicht mehr.
16Mhz delay(1000)= 1s als vergleich hatte ich int.168khz /8 gestellt und diese Sekunde verging ewig.

Wie kann man sich das erklären, klar er läuft langsamer, aber gibt es da Formeln bzw. Tabellen um dies abzugleichen ?

Und ganz andere Frage, wenn das mit der ISP sogut geht, wieso machen sich viele die Arbeit mit dem Boatloader?

Wenn du einen ISP hast und es gut geht, brauchst du natürlich keinen Bootloader.

Aber eine Serielle Schnittstelle "hat jeder" ( ok, heute nur noch USB ).
Der Rest ist dann Software, incl. eines beim Arduino schon vorinstallierten Bootloaders.

Im Boards.txt kannst du zum Kompilieren auch
build.f_cpu=16000000L
passend abändern, damit 1000 millis wieder eine Sekunde sind.

Bootloader statt ISP ist für Anfänger zunächst scheinbar einfacher und billiger. Und wer noch nie einen LKW gefahren ist, der glaubt ja auch, daß man mit einem Kombi alles transportieren kann...