Hallo Zusammen, ich bin noch einiger Maßen neu auf dem Gebiet.
Ich habe einen ATmega328 und möchte diesen gerne mit einem externen 4MHz Resonator betreiben, um einen Spannungsbereich von 1,8-5,5V nutzen zu können und eine Stromersparnis zu haben. Kann mir jemand sagen wie genau ich das anstelle?
Muss ich lediglich in der "boards.txt" die Fuses anpassen?
Vielen Dank schon mal für die Hilfe
Muss ich lediglich in der "boards.txt" die Fuses anpassen?
Und einen anderen Bootloader verwenden.
Oder darauf verzichten.
Du solltest einen neuen Eintrag in boards.txt machen und dort die Fuses und die CPU Frequenz (f_cpu) anpassen, sonst sind viele interne Berechnungen falsch (z.B. delay()).
Allenfalls müsstest Du einen neuen Bootloader compilieren, falls Du neue Sketches per serieller Schnittstelle raufladen willst.
Schon mal vielen Dank! ich habe jetzt einen neuen Ordner unter "hardware" erstellt. Habe im Netz ein Beispiel gefunden(allerdings für den internen Oszillator). In der "boards.txt" stehen nun folgende Anweisungen:
atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)
atmega328bb.upload.protocol=arduino
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600
atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0xFD
atmega328bb.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F
atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard
atmega328bb.bootloader.tool=arduino:avrdude
atmega328bb.upload.tool=arduino:avrdude
kann mir evtl. noch jemand helfen, welche Werte ich verändern muss?! Muss nur diese Datei angepasst werden? Und wenn ich den Bootloader per Arduino Uno (als ISP-Programmer) brenne, bzw den Code hochlade, muss dann einen 16MHz Quarz, wie im Arduino Uno gesteckt sein?
Hallo,
wie würde es sich denn mit der geforderten Ub verhalten wenn man die internen 8MHz nimmt und einen Clock Prescaler von 2 um auf 4MHz zu kommen. Dann könnte man sich den externen Quarz sparen. Bin mir nicht sicher ob dann die Ub Spec-Grenzen trotzdem für 8MHz gültig sind, weil der ja primär verwendet wird, oder vielleicht doch für 4MHz. ?
Ich kann mir vorstellen die Taktfrequenz bezieht sich auf die CPU-Speicherfrequenz und nicht auf die primäre Taktfrequenz des Oszylators.
Grüeß Uwe
Hallo,
ich habe ehrlich gesagt keine Ahnung, hatte das "nur" in den Raum gewurfen, weil ich wußte das es auch für den Systemtakt einen Prescaler gibt und nicht nur die 1/8 Fuse. Entweder weiß es wirklich jemand oder man durchforstet das Manual von vorne bis hinten, falls dieses Detail drin stehen sollte.
Also du gehst davon aus das sich alles auf den Takt bezieht mit der µC letztlich läuft. Also nach allen runterteilen am Ende auf 4MHz in dem Fall bezieht und man damit auf 1,8V runtergehen kann? Klingt erstmal logisch.
Doc_Arduino:
Hallo,wie würde es sich denn mit der geforderten Ub verhalten wenn man die internen 8MHz nimmt und einen Clock Prescaler von 2 um auf 4MHz zu kommen. Dann könnte man sich den externen Quarz sparen. Bin mir nicht sicher ob dann die Ub Spec-Grenzen trotzdem für 8MHz gültig sind, weil der ja primär verwendet wird, oder vielleicht doch für 4MHz. ?
Der Oszillator selber läuft auch bei niedrigen Spannungen.
Deinen Vorschlag müsste man etwas modifizieren.
F_CPU in der Boards.txt auf 4MHz einstellen
Fuse interner Takt setzen
CLKDIV8 Fuse setzen
So startet er auch bei 1,8V sicher mit 1MHz
Und im Init Code dann den Teiler auf 2 setzen, damit die 4MHz erreicht werden.
Ähnlich, das Vorgehen bei 4MHz Resonator
F_CPU in der Boards.txt auf 4MHz einstellen
Fuse für den Oszilator setzen
CLKDIV8 Fuse löschen
Ich muss leider gestehen, dass ich nicht ganz mitkomme. Also der externe 4MHz Resonator ist verbaut. Welche werte müsste ich denn genau anpassen, dass das Brennen und Hochladen funktioniert?
Hallo,
@ combie:
da komme ich noch nicht mit. Wenn er mit internen 8MHz läuft, dann mit CLKDIV8 Fuse hart kodiert wird auf 1MHz und ich dann noch den Teiler 2 setze, dann kann er doch nur noch mit 0,5MHz takten. Der Clock Prescaler kann nur runterteilen.
@ Matthias:
genau überlegen was du in welcher Reihenfolge machste. Du kannst nur Änderungen vornehmen, wenn er mit aktueller Beschaltung auch wirklich läuft und funktionsfähig ist. Willst du zum Bsp. den externen Takt von orignal 16 auf 4MHz ändern, dann darfst du vorher noch nichts umbauen. Erst nach dem neu fusen oder neuen Bootloader. Sonst stimmen während des neu beschreibens sämtliche Einstellungen nicht.
Achso alles klar, also wenn ich einen Chip habe, der mit einem 16MHz Bootloader geliefert wurde, muss ich diesen erst mit den neuen einstellungen brennen?! Muss dabei dann ein Quarz gesteckt sein?
da komme ich noch nicht mit. Wenn er mit internen 8MHz läuft, dann mit CLKDIV8 Fuse hart kodiert wird auf 1MHz und ich dann noch den Teiler 2 setze, dann kann er doch nur noch mit 0,5MHz takten. Der Clock Prescaler kann nur runterteilen.
Der Vorteiler ist der Vorteiler.
Es gibt keinen CLKDIV8 Vorteiler.
Das ist nur eine Fuse.
CLKDIV8 bestimmt den Startwert des Vorteilers.
Im eigenen Code kann man dann das setzen, was man will.
Achso alles klar, also wenn ich einen Chip habe, der mit einem 16MHz Bootloader geliefert wurde, muss ich diesen erst mit den neuen einstellungen brennen?! Muss dabei dann ein Quarz gesteckt sein?
1 ja, wenn du den Bootloader nutzen willst, sonst nicht.
2 ja, oder alternativ deinen 4MHz Resonator
@ Matthias:
mit neuen Fuse setzen ist immer so eine Sache, weil man schnell 0 und 1 vertauscht. Ich würde auf keinen Fall irgendwas überstürzen und vorher alles 3x kontrollieren. Das wieder zu korrigieren ist nämlich langwierig, weil man dann erstmal klären muss was man da gerade für einen Mist fused hat. Goggle mal nach atmel fuse o.ä.
Wenn der 328er einen Bootloader für Arduino mit 16MHz drauf hat, dann musste ihn erstmal mit 16MHz takten, was nur extern möglich ist. Wenn du ein UNO Board hast, steckste den einfach rein. Ansonsten musste dich darum kümmern um die externen 16MHz. In dem funktionierenden Zustand kannste ihn umprogrammieren. Danach biste wieder gezwungen ihn so zu takten/umzubauen wie du ihn gerade hoffentlich richtig programmiert hast.
Man kann ja auch nicht mit langsamen deklarierten Winterreifen Top Speed fahren. Erst Reifenwechsel auf Sommer, dann Top Speed. Wenn man den Vergleich mal so in den Raum stellen kann.
@ combie:
jetzt ist mir es klar - Danke.
atmega328bb.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
Also mit diesem Bootloader wirst Du nicht glücklich werden, wenn Du den Proz mit 4MHz betreibst. Willst Du überhaupt einen Bootloader oder lädst Du die Sketches sowieso per Programmer hoch?
Vielen Dank für die zahlreiche Unterstützung, ich habe nun beschlossen den internen Oszillator zu verwenden, dieser reicht für meinen Spannungsbereich noch aus und ich spare wahrscheinlich noch mal mehr Strom.
Trotzdem herzlichen Dank!