Wie kommt das Programm auf den Chip?
Typischerweise wird mit C bzw. C++ programmiert. Die Entwicklungssoftware IDE (Integrated Development Environment) stellt einen Editor, Compiler und Programmiersoftware zur Verfügung.
Der Compiler (GNU-C-Compiler) übersetzt den Quellcode in Maschinensprache (Assembler, HEX-Code), der mittels eines Programiersystems auf den Chip in den nicht flüchtigen Flash-Speicher übertragen wird.
Die Werkzeuge zur Entwicklung werden auch als Tool-Chain bezeichnet: Editor -> Präprozessor, Compiler, Linker -> Progamiersoftware -> Programmer
Arduino-Umgebung
Die Arduino-Umgebung ist auch möglichst einfache Handhabung optimiert, die Entwicklungs-Software ist für alle gängigen Betriebssysteme erhältlich. Das Programmiersystem befindet sich auf der Arduino-Hardware. Der Mikrocontroller muss dazu mit einem Bootloader ausgestattet sein, eine Software, die die Programmierung auf dem Chip übernimmt. Auf dem Board ist ein Wandler von USB nach serieller Schnittstelle (TX/RX) untergebracht, der Mikrokontroller hat einen seriellen Schnittstellen-Baustein UART eingebaut und kann so über den Wandler mit dem PC kommunizieren.
Programmierablauf, Verhalten nach Reset:
- Wandler löst Reset auf Mikrocontroller aus.
- Nach Reset wird immer zuerst der Bootloader ausgeführt.
- Bootloader hört auf serieller Schnittstelle nach Programmier-Komandos.
- Falls Programmierung erfolgen soll, wird das Programm über serieller Schnittstelle empfangen und in den Flash gespeichert (hochgeladen, engl. upload).
- Wenn keine Programmierkomandos kommen verzweigt der Bootloader zur Adresse 0 und startet das normale Programm auf dem Arduino.
Vorteile:
- Einfache Handhabung für den Einsteiger
- Kein Programmiergerät erforderlich
- Durch den USB-Seriellwandler kann der Mikrocontroller auch Daten mit PC austauschen (Serieller Monitor) und es steht damit eine Anzeige für Ausgaben zur Verfügung, leichteres Debuggen.
Nachteile:
- Bootloader auf dem Chip erforderlich, nach Austausch muss neuer Chip "klassisch" mit Programmiergerät oder zweitem Arduino programmiert werden.
- Ruhestrombedarf von Arduino-Boards ist relativ hoch (schlecht für dauerhaften Batteriebetrieb)
- Durch die Kapselung ist ein direkter Zugriff auf die Chip-Funktionen eingeschränkt.
- Programmieren mit Assembler schwierig, Assembler-Unterricht nicht möglich.
Klassische Entwicklungsumgebung
Klassich verwendet man das Atmel Studio und ein Programmiergerät. Der Contoller wird dabei typischerweise seriell über die ISP (In-System-Programmierung) Schnittstelle programmiert. Die dafür notwendigen Programmierpins (Reset, SCK, MOSI, MISO) müssen in der Schaltung so belegt sein, dass dies noch elektrisch möglich ist.
Chip braucht Systemtakt (Intern, extern, Quarz), falls Takteinstellung ungeschickt verstellt wurde, ist keine serielle Programmierung mehr möglich, Ausweg parallele Programmierung, Programmer dafür ist teuer.
Hardware-Debugging Lösung ICE teuer.
Programmierschnittstelle
Serielle Programmierschnittstelle
Die seriellen Programmer verwenden die SPI (Serial Peripheral Interface) Schnittstelle. Oft sind Programmierbuchsen als Wanne mit Lücke zwecks Verpolungsschutz ausgeführt. Es gibt 10<->6 Adapter.
- MISO (Master Input, Slave Output)
- VCC (+5V) Spannungsbezeichnung
- SCK (Serial Clock) vom Master zur Synchronisation
- MOSI (Master Output, Slave Input)
- Reset (Rücksetzen) Low-Aktiv
- GND (Ground=Masse=0V)
- NC (Not Connected)
MISO | 1 | 6 Pol | 2 | VTG (VCC) | |
---|---|---|---|---|---|
SCK | 3 | 4 | MOSI | ||
Reset | 5 | 6 | GND |
MOSI | 1 | 10 Pol | 2 | VTG (VCC) | |
---|---|---|---|---|---|
NC | 3 | 4 | GND | ||
Reset | 5 | 6 | GND | ||
SCK | 7 | 8 | GND | ||
MISO | 9 | 10 | GND |
Debugging-Schnittstelle JTAG (Joint Test Action Group)
Aktuelle Programmiergeräte
Protokoll
Die Kommunikation zwischen Programmier-Software und Hardware ist in einem Protokoll festgelegt, das in der Software passend eingestellt werden muss, Beispiele:
- STK500v2
- AVR ISP 2
- USBasp
Hardware
Überblick auf mikrocontroller.net: AVR In System Programmer
USBasp, hat 10 Pin Anschluss, auch für unter 2€ gesichtet. Die Fehlermeldung "avrdude: warning: cannot set sck period. please check for usbasp firmware update." einfach ignorieren ;-)
ARDUINO ISP hat 6 Pin Anschluss
DIAMEX USB ISP-Programmer Stick für AVR hat 6 Pin Anschluss, STK500v2, ist etwas nobler.
Klassischer Mikrocontroller-Unterricht mit Arduino?
Für einen ersthaften Mikrocontroller-Unterricht, bei dem auch die Hardware des Chips beleuchtet und ein Einblick in Assembler gewährt werden soll ist die Arduinoumgebung durch die "Umverpackung" zunächst nicht geeignet. Allerdings gibt es die Möglichkeit klassiche Bibliotheken ein zu binden und damit eine ähnlich hardwarenahe Umgebung wie mit dem Atmel Studio bzw. der manuellen Tool-Chain.
Der Vorteil für die Schüler liegt in der einfachen und breit verfügbaren Software und einer kostengünstigen Programmier-Hardware.
Entwickler-Boards
Das alte STK200 [neue Version] setze ich bislang noch im Unterricht ein.
Das Zylonenlauflicht wird die neue Basis.
Alternative, manuelle Tool-Chains
GNU-C-Compiler
AVR-Dude als Programmer-Software
Übersicht der Entwicklungsumgebungen für AVR
Alte Programmier-Hardware
Sind zum Teil nicht mehr verfügbar, teilweise als Nachbau erhältlich
Atmel STK 500 nicht mehr verfügbar
Benötigte COM-Port, daher nur an der alten Windowskiste betrieben, funktionierte problemlos.
Atmel AVRISP mkII nicht mehr verfügbar
[Produktinfo] Ist nicht mehr orginal verfügbar. Nachbauten wurden bei Amazon gesichtet..
mySmartUSB MK3
Soll in Virtuallisierungsumgebungen zum Einsatz kommen können, war bei den ersten Tests zunächst frustriert, kann unglaublich viel daher bin ich auch in die RTFM-Falle getappt (hab das Manual nicht aufmerksam genug gelesen!)
Betrieb als STK500v2 funzt nun unter AVRFuses und als STK500 mit AVRStudio:
Die aktuellen Treiber für den USB-Seriell-Wandler vom Hersteller laden (hab ich gemacht): [USB to UART Bridge]
Unter Windows muss noch der Com-Port und die Übertragungsgeschwindigkeit eingestellt werden: Wird beschrieben unter (diesen Alt-Treiber hab ich nicht verwendet): [DL46: USB-Treiber für myAVR-Produkte]
Meine Hardware ist via ISP verbunden und habe nun versucht mit dem Mac und AVRFuses einen Mega16 zu programmieren. Und nun beginnt meine Odyssee...
... Schließlich kapierte ich, dass ich lange auf den Modetaster drücken muss um auf den ISP-Modus zu schalten! Weil der Programmer viel kann, muss auch die Einstellung wirklich richtig sein.
Erfolg hatte ich mit Verwendung als STK500v2 (AVRFuses) bzw. STK500 (AVRStudio) im ISP-Modus -Modetaste am Programmer drücken (Mode auch mal lang drücken!) so dass LEDs (dunkel, gelb, grün, dunkel) lies auf Seite 7: [DL125: Technische Beschreibung zum myAVR Board MK3]
Ab und an steigt kommt diese Meldung und dann muss man das AVR-Studio neu starten um wieder programmieren zu können:
Keinen rechten Erfolg hatte ich mit dem AVR ProgTool. Unter Win2000 braucht es seltsamerweise einen neueren Internet Explorer?? Und unter der Virtuallisierung mit XP konnte ich nicht die aktuelleste Firmware des Programmers aufspielen -brach ab. Vermutlich Schnittstellenproblem??
Unter nativem WinXP SP4 funktioniert es, Firmware 3-v105-b1415 aufgespielt. Zickt aber im AVRStudio bei den Fuses rum, immer wieder Fehler beim Verifizieren und Lesen.
Support des Herstellers vorhanden aber bislang unzureichend.
Fazit: Mächtiges Werkzeug, RTFM!, für Einsteiger nur mit guter Anleitung brauchbar, nicht Plug und Play, viele Einstellungen müssen begriffen und gemacht werden. Firmwareupdate des Programmers via Virtuallisierungsumgebung klappt nicht. Für meinen Einsatzzweck ungeeignet, denn die Schüler werden frustriert!
USB AVR Lab nicht mehr verfügbar
MOSI | 1 | 10 Pol | 2 | VCC | |
---|---|---|---|---|---|
USIG1 | 3 | 4 | TxD | ||
Reset | 5 | 6 | RxD | ||
SCK | 7 | 8 | |||
MISO | 9 | 10 | GND |
Lässt sich als STK500, als AVR ISP 2 Klon oder USBASP verwenden. Man spielt die gewünschte Firmware am Anfang auf. Achtung: Pin 4 des ISP-Steckers nicht auf Masse legen. Kabel frei lassen.
Problem mit STK200 und AT90S2313: Chip lässt sich nicht programmieren, Ursache dürften die zu niedrigen Pegel des Programmers sein, mit ATtiny2313 kein Problem!
Achtung mit 10-ISP-Adaptern, Leitung 4 ist normalerweise GND darf aber hier nicht sein wegen Ausgang UART.
Also das Teil als STK500v2 mit dem Windel-PC geflasht.
Damit der Programmer nun durchgereicht wird, muss bei VirtualBox ein Gerätefilter eingestellt werden.