Also ein Mikrocontroller soll es sein. Aber welchen nehmen? Und wo beginnen? Es ist hier nicht eine schlechte Idee, mit der Masse zu gehen und sich an die zwei grossen Konkurrenten PIC von Microchip und AVR von Atmel zu halten. Welche Welt man betreten will/soll, hängt mehr davon ab, was der helfende Kollege und Götti schon kennt… Bei mir war so die AVR Familie gegeben, genauer wurde ich mit Arduino angesteckt.
Inhalt
Einsteigersystem: Arduino
Als ganz besonders einsteigerfreundlich ist das 2005 im italienischen Ivrea für Roboteranwendungen und Kunstprojekte konzipierte Arduino System bekannt. Das besondere am Arduino: es ist ein Komplettsystem aus aufeinander abgestimmten Komponenten und nimmt dem Benutzer einen grossen Teil der Detailarbeit am Anfang ab. Die Hardware umfasst Mikrocontrollermodule in verschiedenen Formfaktoren und Leistungsstufen mit steckbaren Zusatzmodulen, sogenannten Shields (für eigene Prototypen, für Ethernet Anbindungen, GPS etc.). Die Basis sind jeweils Prozessoren der AVR Familie (ATmega168 und andere).
Neben der reinen Hardware wurde eine Entwicklungsumgebung (IDE) in Java programmiert, die auf Windows, Linux und MAC OS lauffähig ist und die nötigen Werkzeuge mitbringt. Wichtiges Merkmal: die Werkzeuge im Hintergrund sind alle bewährt und gut bekannt – es handelt sich um die GNU Familie (Compiler GCC etc. die sog. GNU Tool Chain, unter Windows ist diese Variante auch als WinAVR bekannt). Das Arduino System legt eine zusätzliche Abstraktionsschicht zwischen den Anwender und der reinen GCC Schicht. Man muss sich nicht mit kryptischen Kommandozeilenparametern ärgern (wer grep/make Files von Hand schreibt, weiss was ich meine). Programmiert wird in einer etwas vereinfachten C/C++ Sprache. Die Übertragung eines Programms, hier Sketch genannt, auf ein Arduino Board geschieht ganz einfach über die USB Schnittstelle, sodass kein separater Programmer nötig ist. Auf den Modulen sind dazu schon ein Bootloader und ein FTDI Chip für die USB Kommunikation vorinstalliert.
Die gesamte Hardware, die Firmware auf den Mikrocontroller und die Programmierumgebung sind alle öffentlich ausgiebig dokumentiert, aufeinander abgestimmt und frei zugänglich (Open Source). Es ist daher kein Wunder, dass sich um Arduino eine richtige Szene von Anwendern und Anwendungen gebildet hat. Mit etwas Einstiegshilfe ist ein Erfolg in ein paar Stunden sicher.
Als Einstieg hat sich bei mir Arduino gut bewährt, wenn auch die Fehlermeldungen beim Übersetzen nicht sehr hilfreich sind und viele gewohnte Werkzeuge in der spartanischen IDE fehlen. Für die Eingabe des Codes verwende ich das freie Notepad++, ein flinker und recht intelligenter Editor mit Syntax-Unterstützung für C. Für ernsthaftere Projekt fehlen der IDE eine Simulation, Code Statistiken (um platzfressende Programmteile zu finden) und ein Debugger.
Processing
Ein mit Arduino verwandtes Projekt ist Processing, das teilweise die Basis vom Arduino bildete. Im Gegensatz zu Arduino läuft Processing auf einem PC (MAC, Linux) und nicht auf einem Mikrocontroller – die beiden Systeme komplementieren sich. Die Gemeinsamkeiten zwischen den Arduino und Processing Umgebungen sind aber gross, sowohl das Aussehen, die Bedienung und das Konzept der Programmierung (ebenfalls eine C++ ähnliche Sprache mit gewissen Vereinfachungen für die Anwender). Processing erlaubt es, mit wenig Aufwand grafische und interaktive Anwendungen zu erstellen – was in einer Standardhochsprache nicht ganz trivial ist und auf jeden Fall eine längere Einarbeitszeit erfordert (z.B in C++ in Visual Studio unter Windows). Nicht zufälligerweise heissen die Programme Sketch – etwas, das schnell und spontan entstehen soll. Processing bringt dazu eine umfangreiche Sammlung von Bibliotheken, Bespielen und Dokumentation mit. Es gibt auch etliche Bücher (z.B. ISBN 10:0-596-15414-3 im O’Reilly Verlag).
Mit dem folgenden Processing Sketch kann eine weisse Kreisscheibe mit der Maus in einem schwarzen Rechteck bewegt werden:
void setup() { size(200, 200); pg = createGraphics(80, 80, P2D); } void draw() { fill(0, 12); rect(0, 0, width, height); fill(255); noStroke(); ellipse(mouseX, mouseY, 60, 60); pg.beginDraw(); pg.background(102); pg.noFill(); pg.stroke(255); pg.ellipse(mouseX-60, mouseY-60, 60, 60); pg.endDraw(); image(pg, 60, 60); }
Sprachen
Heute muss nach nicht mehr unbedingt in Assembler programmieren. Für eine schnelle Prototypenentwicklung sind Sprachen wie Processing/Arduino Sketches, Pascal, Basic, C und C++ besser geeignet. Zeitkritische Teile lassen sich auch nachträglich in Assembler erstellen und in die Hochsprache einfügen. Ich bevorzuge persönlich C mit einigen Elementen von C++, wobei man die Code-Grösse und Effizienz beim Einsatz auf Mikrocontrollern im Auge behalten muss. 16KB Flash sind viel oder wenig…
Weitere Entwicklungsumgebungen
Programmieren heisst immer auch debuggen – neben einem guten Eingabeditor mit Syntax-Unterstützung sind Analyse und Debugging/Simulation das A und O. Hier ist Arduino nicht stark, andere Systeme bieten hier viel mehr – allerdings nicht zwingend gratis und Open Source. Vom Hersteller Atmel gibt es das AVR Studio als Referenzsystem. Ebenfalls auf der GCC Tool Chain basierend, erlaubt es eine gewisse Portabilität (wobei der Aufwand der Portierung nicht zu unterschätzen ist).
Eine Beschreibung aller AVR Werkzeuge würde hier aber zu weit führen und müsste von jemand anderem geschrieben werden. Das gilt noch viel mehr für die Produktpalette von Microchip, dem Hersteller der PIC Prozessoren. Die Menge von analogen und digitalen ICs, Prozessoren, Software und Werkzeugen ist erschlagend. Die Unterstützung mit Evaluation Boards und Dokumentation ist vorbildlich.
Etwas weniger bekannt ist der Hersteller Mikroelektronika [5]. Er bietet Compiler für Basic, Pascal und ANSI-C an, je für PIC und AVR Mikrocontroller, und eine umfangreiche Palette von Hardware – von einfachen Platinen bis zu grossen Entwicklungsboards wie abgebildet.
Bibliotheken
Ausser auf eine gute IDE ist man auf eine möglichst umfangreiche Sammlung von Bibliotheken und Codebeispielen angewiesen. Hier bringt Arduino die avr-libc mit. Weitere Bibliotheken und Klassen sind auf der Projekt-Seite [3] zu finden (v.a. im Teil Playground) und quer über das Internet. Erwähnenswert ist die Webseite von Lady Ada [8] und das deutsche (!) Portal [9].
Referenzen
[1] Atmel: http://www.atmel.com
[2] Microchip: http://www.microchip.com
[3] Arduino Projektseite: http://www.arduino.cc
[4] Processing Projektseite: http://www.processing.org
[5] Mikroelektronika: http://www.mikroe.com
[6] Zeitschrift c’t: http://www.heise.de/ct/projekte/machmit/processing (Hier sind auch Installationsanleitungen zu finden)
[7] Wikipedia: http://de.wikipedia.org/wiki/Arduino-Plattform
[8] Forum, Tutorium und Dinge zum Kaufen: http://www.ladyada.net/learn/arduino/
[9] Fundgrube sondergleichen: http://www.mikrocontroller.net/articles/AVR
Update: 20161218