Saintummers Projekte

Arduiono UNO 20Mhz

Üblicherweise wird hat der UNO einen 16MHz Resonator zur Takterzeugung eingebaut. Diesen ersetze ich hier durch einen 20MHz Quarz. Dazu sollte man nur UNOs mit ein Atmega328P in DIL Ausführung verwenden. Die SMD Version ist dazu eher ungeeignet. Die Info darüber ist hier im Internet verfügbar. Danke an den Verfasser für seinen Beitrag dafür. Ich verwende nur moderne aktuelle Atmega328P CPUs, welche mit 20MHz funktionieren.

Notwendige Arbeiten:
• BOOTLOADER - Mit Arduino IDE V. 1.0.6 den Bootloader für neue Hardware erstellen
• BOARDS - In die aktuelle Ardunio IDE die boards.txt anpassen
• HEXFILE - Blink.ino mit Arduino UNO 20Mhz als HexFile mit Bootloader erstellen
• ATMEGA328P - Das erstellte Hexfile in einen Atmege328P flashen
• HARDWARE - Arduino UNO Hardware umbauen
• TEST - mit Software

HARDWARE
Der UNO wird nicht verändert, es wird nur die CPU auf zwei DIL Sockel übereinander gesteckt, welche den neuen Quarz beinhalten.
Die Grundsoftware (bootloader) des Atmega328p muss aber unbedingt, neu für 20MHz erstellt werden. Dazu später in diesem Beitrag.
Arduino UNO
Es wird ein HC49 Quarz mit 20MHz und 2 Stk 22pF Kondensatoren an Pin 9 und 10 gelötet. Zwischensockel mit Modifikation
IC Sockel
Fertige 20Mhz UNOs gibt es nicht zu kaufen, aber die Sache ist für Projekte mit eigener Platine und einem Atmega328P interessant, da man dann die maximale Takt Frequenz der CPU mit Arduino Software verwenden kann. Weiters muss die Arduino IDE diese neue Hardware dann unterstützen, damit dafür Software erstellt werden kann. Hierzu sind einige Anpassungen erforderlich.


BOOTLOADER
Für die Erstellung des Bootloaders brauchen wir einmalig die ältere Arduino IDE Version 1.06
Der neueren IDE Versionen fehlen hier einige Files um den make durchzuführen.
Die ältere IDE Version 1.0.6 kann man hier runterladen
www.arduino.cc/en/software/OldSoftwareReleases
Sollte man auf einem zweiten Rechner machen, da die Arduino Software mit der bereits installierten neueren Version kollidiert.
in

C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot
das File makefile edidieren, Die atmega328 Sektion in eine neue Sektion atmega328_20MHz kopieren und diese Einträge AVR_FREQ, DBAUD_RATE und Namen dann so abändern.
AVR_FREQ = 20000000L DBAUD_RATE=76800 atmega328_20.hex atmega328_20.lst
Die Datei makefile speichern. In einem Shell Aufruf  omake atmega328_20Mhz   ausführen. Es werden zwei Files erzeugt.
atmega328_20.hex und
atmega328_20.lst
Diese Files für später sichern, dann kann man sich zukünftig den Rückschritt zur 1.06 Version sparen.

Zum Rechner mit aktuellen Arduino Version (hier V. 1.8.15) wechseln und die Files
atmega328_20.hex und atmega328_20.lst
nach
C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\optiboot
zu kopieren.
(hier haben sich die Pfade, im Unterschied zur alten IDE, etwas verändert)

BOARDS
Ich habe die Version 1.8.15 der Arduino IDE verwendet.
In der aktueller Arduino IDE das File boards.txt anpassen
C:\Program Files (x86)\Arduino\hardware\arduino\avr
Die originale boards.txt als .bak zur Sicherheit sichern. Die boards.txt mit Administrator Rechten editieren.
und diese Zeilen einfügen.
-------------------------------------------- uno_20MHz.name=Arduino Uno 20Mhz uno_20MHz.upload.tool=avrdude uno_20MHz.upload.protocol=arduino uno_20MHz.upload.maximum_data_size=2048 uno_20MHz.upload.maximum_size=32256 uno_20MHz.upload.speed=76800 uno_20MHz.bootloader.low_fuses=0xFF uno_20MHz.bootloader.high_fuses=0xDE uno_20MHz.bootloader.extended_fuses=0x05 uno_20MHz.bootloader.file=optiboot/optiboot_atmega328_20MHz.hex uno_20MHz.bootloader.unlock_bits=0x3F uno_20MHz.bootloader.lock_bits=0x0F uno_20MHz.build.mcu=atmega328p uno_20MHz.build.f_cpu=20000000L uno_20MHz.build.board=AVR_UNO_20MHz uno_20MHz.build.core=arduino uno_20MHz.build.variant=standard ---------------------------------------------

Arduino IDE neu starten
Die neue Hardware sollte nun in der Boards Liste angeboten werden.
Arduino UNO
Der neue 20MHZ UNO wird nun als Board angeboten.

HEXFILE
Inhalt ist bootloader + Applikation (blink)
In der Arduino IDE:
Hardware board "Arduino UNO 20MHz" definieren
Neues Projekt test starten und einfaches Programm blinkende LED einfügen.
compile und
dann per "export with bootloader" ein Hexfile erzeugen
Im Verzeichnis "test" der aktuellen INO Datei (Sketch) Liegen zwei Files test.ino.standard.hex und test.ino.with_bootloader.standard.hex
Die Datei mit dem Bootloader wird benötigt. Der Bootloader ermöglicht das Flashen von Programmen aus der IDE heraus in den Speicher.

ATMEGA328P
Das erstellte Hexfile mit dem Bootloader wird mit einem Programmer in einen Atmega328P geflasht. Das muss nur einmal gemacht werden für eine neue CPU. Hier werden die Fuses eingestellt und der Bootloader in die CPU geflasht. Damit kann die CPU in einen UNO eingesetzt werden.
Die Applikation Blink.ino ist hier sekundär, da bei funktionierender Hardware nun immer über die IDE Software in den Speicher geladen wird. Siehe auch mein Artikel über das Flashen AVR
Die Fuses werden für den UNO so eingestellt.
BODLEVEL = 2V7 RSTDISBL = [ ] DWEN = [ ] SPIEN = [X] WDTON = [ ] EESAVE = [X] BOOTSZ = 256W_3F00 BOOTRST = [X] CKDIV8 = [ ] CKOUT = [ ] SUT_CKSEL = EXTXOSC_8MHZ_XX_16KCK_14CK_65MS EXTENDED = 0xFD (valid) HIGH = 0xD6 (valid) LOW = 0xFF (valid) LB = NO_LOCK BLB0 = NO_LOCK BLB1 = LPM_SPM_DISABLE
Die geflashte CPU in die umgebaute Hardware einsetzen.

ATMEGA328P
Programm mit der IDE in den Speicher laden funktioniert.
Kommunikation via Serial Monitor OK
Bei Blink.ino blinkt die LED genauso schnell wie mit 16MHz CPU.
Meine Controldemo ist ohne Änderung gelaufen.

Vorsicht: Ob alle Libraries und Funktionen die veränderte Taktrate unterstützen, kann im Vorhinein nicht gesagt werden.
Es ist eine offiziell nicht unterstütze Hardware, das soll einem bewusst sein.

H.Stummer Dateidatum: 26.08.2023


Zum Seitenanfang


Besucherzaehler