Da hat man ihn nun vor sich liegen, einen brandneuen ATmega328p. Was braucht ihr nun, damit er auch was sinnvolles tut?
Auf den ATmega müssen 2 Teile Software:
- ein Bootloader
- ein Sketch
Der Bootloader
Damit der ATmega irgendwelchen Programmcode ausführen kann, muss zuerst ein Bootloader installiert werden. Da gibt es mehrere Möglichkeiten:
- den internen Taktgeber benutzen
- einen externen Quarz benutzen
- einen externen Oszillator benutzen
Abhängig von der gewählten Bootloaderart, müssen die sogenannten Fuses eingestellt werden. Beschreibt man den ATmega mit den falschen Fuses reagiert er unter Umständen nicht mehr und es ist schwierig ihn wiederzubeleben. Ich hab leider auch diese Erfahrung machen müssen. Weiter unten verlinke ich auf ein paar Seiten, die weitere Hinweise dazu geben. Das werde ich leider auch ausprobieren müssen.
Für mein erstes Projekt, den Universalsensor von Dirk musste ich den ATmega mit einem Bootloader für den internen Takt beschreiben. Diese Bootloader sind besonders energiesparend und ein ähnlicher wird z.B. auch bei diesem MySensors Projekt eingesetzt.
Der Universalsensor ist bereits am Laufen und ich hab mich ins nächste Projekt gestützt: Einen MySensor der nur mit 2 AA-Batterien auskommen soll: Slim 2AA Battery Node
Ich habe 3 Varianten des Schreibens ausprobiert:
- Mit einem Arduino Uno als ISP
- Mit einem Raspberry Pi
- Mit einem USBasp Programmer
Alle 3 Varianten nutzen das gleiche Prinzip:
- MOSI -> PIN 17
- MISO -> PIN 18
- SCK -> PIN 19
- RESET -> PIN 1
- VCC (5V) -> PIN 7
- GND -> PIN 8
I
Variante 1: Arduino als ISP
Arduino als ISP
Zum Flashen des Bootloaders wird die Arduino IDE etwas erweitert.
Sucht im Arduino Verzeichnis die Datei boards.txt im Pfad hardware/arduino und öffnet sie und ergänzt folgendes:
##############################################################
apm96.name=APM Optiboot internal 1MHz noBOD 9600baud
apm96.upload.tool=avrdude
apm96.upload.protocol=arduino
apm96.upload.maximum_size=32256
apm96.upload.speed=9600
apm96.bootloader.tool=avrdude
apm96.bootloader.low_fuses=0x62
apm96.bootloader.high_fuses=0xde
apm96.bootloader.extended_fuses=0x07
apm96.bootloader.path=optiboot_v50
apm96.bootloader.file=atmega328_1a.hex
apm96.bootloader.unlock_bits=0x3F
apm96.bootloader.lock_bits=0x2F
apm96.build.mcu=atmega328p
apm96.build.f_cpu=1000000L
apm96.build.core=arduino
apm96.build.variant=standard
##############################################################
Die Zeile
apm96.bootloader.file=atmega328_1a.hex
beschreibt den Namen des Bootloader-Files. Das File und die Fuses (low, high, extendet) müssen zusammen passen.
Die oben genannte Kombination wird z.B. für das MySensors Projekt verwendet. Den Bootloader bekommt ihr aus dem MySensors Forum. Ihr kopiert das hex-File in den bootloader-Ordner im Arduino Verzeichnis.
In der Arduino IDE taucht dann ein neuer Eintrag unter den Boards auf. Danach wird der Arduino (z.B. ein UNO) mit dem Sketch „ArduinoISP“ aus den Beispielen bespielt.
Wählt dann das neue Board „APM Optiboot internal 1MHz noBOD 9600baud“ aus und betätigt: „Bootloader Brennen“ aus dem Werkzeug-Menu.
Hat es geklappt ist der ATmega bereit für den ersten Sketch.
Variante 2: Rasperry Pi und avrdude
Weiterlesen →