Erstmal noch ein frohes neues Jahr 2016! Es ist lange nichts mehr passiert hier in diesem Blog. Gründe, oder besser Ausreden dafür fallen mir genug ein. Ein Grund ist der Selbstbau einer Garage im letzten Sommer bzw. Herbst. Das hat mich einiges an Zeit und Nerven gekostet. Jetzt steht aber alles und das Auto im trockenen und somit ist wieder Zeit für andere Dinge. Daher heute etwas zum Thema Arduino und des darin benötigte Bootloader und wie man einen Arduino als AVR ISP zum Brennen des Bootloader nutzt. (ISP: In-System-Programmer).
An einem der letzten Wochenenden habe ich mit zwei Bekannten ein Wortuhr-Bau-Wochenende gemacht. Dabei sind an zwei Tagen 3 Wortuhren entstanden. Nach dem Bestücken der Platinen, dem Erstellen der LED-Matrix und der Verkabelung sollte der Sketch auf den Mikrocontroller geladen werden.
Bei dem Versuch wehrte sich die Arduino IDE allerdings den Sketch auf den Mikrocontroller zu spielen. Grund dafür war ein fehlender Bootloader. Da hatte ich bei der Bestellung der Platinen und der Bauteile wohl das entsprechende Häkchen für einen bereits vorprogrammierten Atmel vergessen.
Warum ein Bootloader?
Der Bootloader auf dem Atmel AVR wird benötigt um den Arduino mittels serieller Schnittstelle einfach mit Programmen (Sketch) z.B. mit der Arduino IDE programmieren zu können. Hierbei übernimmt der Bootloader zwei Dinge:
- Der Bootloader versucht beim Start festzustellen, ob ein neuer Sketch vom PC auf den Mikrocontroller geladen werden soll. Ist das der Fall, wird das Programm vom PC auf den Mikrocontroller geladen. Daher wird der Mikrocontroller beim Versuch neuen Code hoch zu laden, vorher immer durch die Arduino IDE resetet.
- Wenn nicht mittels PC versucht wird ein Sketch auf den Mikrocontroller zu laden, wird der der bereits installierte Code ausgeführt.
Eine Möglichkeit um den Bootloader auf den Atmel zu laden, ist einen anderen Arduino als Programmer zu nutzen. Da ich noch einen Arduino Nano hier rumliegen hatte, musste der dafür herhalten.
Einen Arduino Nano als AVR ISP (In-System Programmer)
Folgende Schritte sind zu befolgen um den Bootloader auf einen Atmel AVR zu spielen:
1. ArduinoISP-Sketch auf Arduino laden
In der Arduino IDE das Beispiel “ArduinoISP” öffnen. Eine aktuelle Version ist auch auf GitHub zu finden.
Den Arduino Nano mittels USB an den Rechner anschliessen und ggf. unter “Werkzeuge->Port” den entsprechenden Port einstellen. Den geladenen Sketch anschließend mit der “Pfeiltaste” auf den Arduino Nano laden.
Den Arduino Nano wieder vom Rechner trennen.
2. Arduino Nano mit dem Mikrocontroller verbinden auf den der Bootloader aufgespielt werden soll
Auf dem Arduino Nano müssen die Pins 10 (SS/RST), Pin 11 (MOSI), Pin 12 (MISO), Pin 13 (SCK), GND und VTG (5V) mit den entsprechenden ISP-Pins der Platine, auf die der Bootloader gebrannt werden soll, verbunden werden.
3. Den Bootloader aufspielen
Der PC kann nun wieder mittels USB mit dem Arduino Nano verbunden werden. Durch die Verbindung des Arduino Nano und dem Ziel-Mikrocontroller (was in meinem Fall die Platine für eine Wortuhr ist), sollten nun jeweils die Power LEDs leuchten.
Jetzt in der Arduino IDE unter “Werkzeuge->Platine” das Board auswählen auf den der Bootloader gebrannt werden soll. Im Fall der Platine für die Wortuhr ist das ein “ARDUINO Duemilanove or Diecimila”
Dann unter “Werkzeuge->Programmer” den Eintrag “Arduino as ISP” auswählen.
Im letzten Schritt den Bootloader mit Klick auf “Werkzeuge->Bootloader brennen” auf den Ziel-Atmel übertragen.
Im Ergebnis sollte in der Arduino IDE die folgende oder eine ähnliche Ausgabe mit dem Erfolg der Installation des Bootloaders zu sehen sein.
Während des Brennvorganges blinken die LEDs auf den Arduino Nano. Bei mir brauchte es, warum auch immer, ab und an einen zweiten Klick auf “Bootloader brennen“.
Die detailierte Ausgabe beim Hochladen des Bootloaders oder auch eines Sketches kann übrigens unter “Datei->Voreinstellungen” eingestellt werden.
Viel Spaß beim Bootloader-Brennen!
Gruß
Chris