In fast allen ARDUINO Projekten müssen die erstellten Programme irgendwie zum Arduino übertragen werden, um diesen zu programmieren und die neue Software auf dem ARDUINO zur Ausführung zu bringen.
Dazu besitzt das ARDUINO-Board bei Auslieferung bereits einen sogenannten „BOOTLOADER“ im Speicher. Mit diesem Bootloader ist es möglich, dass der Arduino bei Start auf der USB-Schnittstelle lauscht und schaut ob eine PC-Software per USB ein neues Programm übertragen möchte. Für die Übertragung dieser neuen Software wurde von ATMEL, dem ehemaligen Hersteller der AVR-Prozessoren, ein Protokoll festgelegt, dass sowohl der Bootloader versteht, als auch die PC-Software verwendet. Auf der Seite des PC wird hier sehr häufig die Entwicklungsumgebung ArduinoIDE verwendet. Hier ist die Softwareentwicklung mit Compiler und USB-Uploader in einem Tool integriert. Es geht aber auch mit reinen Uploader Programmen wie XLoader oder ähnlichem.
Auf der Seite des ARDUINO-Boards gab es in den ganzen Jahren auch viele verschiedene Bootloader. Letztendlich hat sich der Bootloader mit dem Namen „OPTIBOOT“ durchgesetzt. Optiboot wurde hoch effizient programmiert. Er ist daher sehr schnell, kann variable Übertragungsraten erkennen und ist dabei nur 512 Byte groß. Damit braucht er nur 1/4 des Platzes von vorherigen Bootloadern. Die Meisten aller ausgelieferten ARDUINOS- und ARDUINO-CLONE Boards werden mit dem OPTIBOOT Bootloader vorinstalliert ausgeliefert.
Normal befindet sich der Bootloader in einem gegen Überschreiben geschützten Speicherbereich, so dass bedenkenlos immer wieder neue Anwendungs-Programme per USB zum Arduino übertragen werden können, ohne den Bootloader zu tangieren.
Was anderes ist die Programmierung des Bootloaders selber. Um überhaupt erst einmal einen Bootloader in den Prozessor zu bekommen, wird die Programmierung mit einem Programmieradapter über die sogenannte JTAG- oder auch ISP-Schnittstelle notwendig. Dabei werden die Pins der Schnittstelle direkt an den Prozessor geführt, und der FLASH-Speicher des Prozessor mit ganz speziellen Signalfolgen direkt programmiert. Weiterhin können so spezielle Konfigurationsregister die sogenannten FUSES programmiert werden.
Auf der Seite des PCs wird hier in nahezu 100% der Fälle auf das alte und bewährte (DOS-)Programm AVRDUDE zurückgegriffen. Dieses wurde in den über 10 Jahren seines Bestehens immer wieder an neue Prozessoren angepasst. Um die „umständliche“ Bedienung des Kommandozeilenprogramms irgend wie zu vereinfachen wurden viele unterschiedliche Windows-Programme erstellt, die über eine komfortable Fensteroberfläche zu bedienen sind und im Hintergrund dann das Programm AVRDUDE mit den entsprechenen Kommandozeilenparametern auf zu rufen. Oft wird die Ausgabe der Konsole auch im Programm angezeigt. Beim herunterladen einer solchen Software wird in der Regel auch gleich das Programm AVRDUDE im Installationspaket mitgeleifert. Eine getrennte Installation ist meist nicht nötig.
Was aber nötig ist, ist ein Treiber für einen Programmier-DONGLE. Auch als Programmier-Hardware wurden in den Jahren viele unterscheidliche Tools/Boards entwickelt. Sehr verbreitet, da meist günstig zu bekommen, hat sich der USBasp-Programmer. Hierbei wurde selber ein AVR-Prozessor verwendet um über USB (in diesem Fall sogar eine Software-USB Schnittstelle) Daten zu empfangen und dann die entsprechenden Programmiersignale für die JTAG-Schnittstelle zu erzeugen. Das Board ist deshalb so günstig, da auf jede überflüssige Hardware, wie z.B. einem USB-Wandler oder Spannungswandlern, verzichtet wurde. Für diesen Adapter mit Software USB-Empfänger ist allerdings ein ganz spezieller Treiber auf der PC-Seite notwenig. Dieser nennt sich libUSB! Der libUSB-Treiber verwendet dabei keine virtuelle Serielle-Schnittselle, wie das z.B. bei der Programmierung von normalen Anwendungsprogrammen für den Arduino der Fall ist, sondern eine eigene Schnittstelle, die sehr Tief auf Hardwareebene statt findet. (wer mehr über die USB-Softwareschnittstelle lesen möchte, kann das unter www.fischl.de)
Bei uns im Shop wird auch ein DONGLE zum Programmieren eines ARDUINO angeboten. Dieser Dongle ist wie die anderen üblichen auch auf Basis eines AVR-Prozessors aufgebaut. Er wird in die USB-Schnittstelle des PC gesteckt und hat auf der anderen Seite eine 10-pol. Buchse. Das ist die normale JTAG-Schnittstelle. Mit einem Adapter auf 6-pol. kann der Adapter dann auch für eine vereinfachte ISP-Schnittstelle benutzt werden. Hierfür gibt es entweder Adapterkabel oder Adapter als Platine. Dieser Adapter wird für die nächsten Schritte benötigt.
Die Einrichtung des libUSB Treibers war bisher eigentlich einfach, hat sich aber mit WIN10 verschärft. Daher habe ich im Internet recherchiert und einen Programmierer gefunden, der sich erbahmt hat und einen Installer für die verschiedenen USB-Treiber geschrieben. Für unterschiedliche Programme werden nämlich unterschiedliche USB-Treiber benötigt. Auf dieser Website des Programmierers kann der Installer heruntergeladen werden. Das Programm nennet sich Zadig und ist zur Zeit in der Version 2.4 verfügbar. Nach dem Download des Installers wird dieser gestartet. Ist das Programm installiert wird es gestartet. In folgenden einzigen Dialog kann man links erkennen ob und welcher USB-Dongle eingesteckt ist. Wenn Sie jetzt den Dongle in eine USB-Schnittstelle einstecken, sollte sich bei USB-ID was tun. Bitte dann auf der rechten Seite den libUSB-Treiber einstellen. Nach klick auf den Installer Button wird der Treiber installiert. Mit eingestecktem USB-Dongle sollte sich dann im Gerätemanger von Windows der USB-Dongle als USB-Device zu erkennen sein.
Auch bei der Programmier Software gibt es natürlich endlos viele Programme. Standard wäre hier natürlich das original AVR-Studio mit dem dazugehörigen STK500 Programmier-Adapter. Das haben aber wohl die wenigsten. Ich habe mich abermals im Internet umgeschaut, und finde den AVRDUDESS sehr gelungen. Die Software ist intuitiv und hat bei mir sehr gut funktioniert. Sie bietet auch super Funktionen wie die autom. Device Erkennung anhand der Signatur und Einstellungen für Presets und die Unterstützung von wirklich sehr vielen Programmieradaptern. Nun ja, dass ist natürlich die Funktionalität des darunter liegenden AVRDUDE Anwendung. Es scheint für mich aber alles sehr stabil, transparent und die Software wird aktuell immer noch weiter entwickelt. Auch die Fuse-Bits lassen sich komfortabel programmieren. AVRDUDE ist natürlich Bestandteil des Downloadfiles und muss nicht extra installiert werden. Nach dem Download und der Installation meldet sich das Programm wie folgt.
Als Programmieradapter muss oben dann "USBasp, http://www.fischl.de/usbasp/" eingestellt werden. Die richtige Einstellung der Fuse-Bits kann man auf der rechten Seite sehen. Das sind die Einstellungen für unser Board mit dem ATMega328PB Prozessor. Wenn man die Fusebits in diesem Programm mit dem beinhalteten Editor verändern will, dann muss noch eine Konfigurationsdatei erweitert werden. Hier sind die Fusebits für den 328PB noch nicht aktuell gepflegt. (Ich werde die geänderte Datei noch hier reinstellen.)
Als letztes wird noch das Image des Bootloader selbst benötigt. Auch der Bootloader „Optiboot“ ist in unterschiedlichen Varianten verfügbar. Eigentlich ist der Bootloader speziell dafür geschrieben und veröffentlicht worden, damit Hersteller ev. noch benötigten eigenen Code einfach dazu programmieren können, und so individuell angepasste Bootloader auf ihre Boards installieren können. Von Optiboot gibt es eine Varianten, den MiniCore, der für die meisten „normalen“ AVR-Prozessoren, wie sie in dem Ardunio UNO, NANO, Millenium usw. verwendet werden, funktioniert. Auch der neue, von uns verwendete Prozessor ATMega328PB wird von diesem Bootloader unterstützt.
Der Bootloader Optiboot kann auch sehr einfach in der ArduinoIDE installiert werden. Dafür wird die JSON Zeile benotigt, um das Installationspaket in der ArduinoIDE zu finden und zu installieren. Eine Anleitung dazu befindet sich auch auf der github Seite von Optiboot.
Ist alles eingerichtet, das Board richtig eingesteckt und wurde der Prozessor von der Software richtig erkannt, dann muss nur noch der Pfad zum Optiboot-Image bei „Flash“ gesetzt werden und die Fusebits eingestellt werden. Es kann sein, dass die Fusebits beim vorherigen Lesen bereits richtig gesetzt waren?! Jetzt sollte der Prozessor auf dem Arduino Board neu mit dem Optiboot Bootloader programmiert werden. Das ganze dauert keine 30 sec.! Die Meldungen des AVRDUDE kann man in dem schwarzen Bildschirmbereich in der Software sehen.