Auf manchen Platinen, die ich für meine Heimautomatisierung einsetze, befindet sich ein ATMega328P Mikrocontroller. Dieser kann entweder über die ISP-Schnittstelle oder deutlich einfacher über die serielle Schnittstelle programmiert werden.
Für die Programmierung über die serielle Schnittstelle muss vorher einmalig ein Bootloader auf den ATMega328P geflasht (programmiert) werden. Ich verwende hier den sehr verbreiteten Optiboot, welcher auch standardmäßig bei fast allen Arduinos zum Einsatz kommt.
Zum Flashen des Bootloaders und gleichzeitigen Setzen der richtigen Fuse- und Lockbits kommt ein Arduino Nano zusammen mit dem Atmega Board Programmer aus den arduino_sketches zum Einsatz.
Verkabelung
Die Verkabelung zwischen dem Arduino Nano und dem zu flashenden ATMega328P erfolgt wie bereits im Beitrag Arduino als ISP-Programmer und unten in der Tabelle beschrieben.
Am SPI-Bus des ATMega328P sollten beim Flashen möglichst keine weiteren ICs angeschlossen oder aktiv sein, da dies den Flashvorgang stören könnte.
Arduino Pin | ATMega328P Pin |
---|---|
D10 | Reset |
D11 | MOSI |
D12 | MISO |
D13 | SCK |
GND | GND |
+5V | VCC (nur wenn keine externe Spannung vorhanden) |
Atmega Board Programmer
Auf den Arduino Nano muss zunächst der Atmega Board Programmer geflasht werden.
Hierzu laden wir die aktuelle Version direkt aus dem arduino_sketches GitHub Repository herunter und öffnen davon das Verzeichnis Atmega_Board_Programmer in der Arduino IDE. Anschließend öffnen wir den Seriellen Monitor und stellen die Baudrate auf 115200 ein. Nun folgt der Upload des Programms auf den Arduino über den Hochladen-Button.
Nach dem erfolgreichen Hochladen sollte dann folgendes im Monitor erscheinen:
Flashen des Bootloaders
Zum Flashen des Bootloaders auf den ATMega328P tippen wir nun U
für 16 MHz ein und bestätigen mit Enter. Anschließend folgt ein G
zum Programmieren des Bootloaders.
Damit ist der Optiboot Bootloader auf den ATMega328P geflasht und die Fuse- und Lockbits sind automatisch richtig gesetzt.
Überprüfen des Bootloaders
Zum Überprüfen des Bootloaders öffnen wir das Verzeichnis Atmega_Board_Detector aus den arduino_sketches und laden dieses Programm auf den Arduino hoch.
Die Ausgaben im Seriellen Monitor sollten dann wie folgt aussehen:
1 | Atmega chip detector. |
Hochladen eines Programms auf den ATMega328P über den Bootloader
Ist der Bootloader auf den ATMega328P geflasht, dann kann ein beliebiges Programm über die serielle Schnittstelle auf den Mikrocontroller hochgeladen werden.
In der Arduino IDE muss dafür als Board dann Arduino/Genuino Uno (ATMega328, 16 Mhz) ausgewählt werden.
Anschließend sollte ein Hochladen über einen USB-TTL-Adapter problemlos funktionieren.