|
|
Entscheidung MikrocontrollerDie meisten Anfänger stellen sich die Frage, welchen Mikrocontroller sie verwenden sollen. Es gibt Dutzende Hersteller, und jeder davon hat unzählige Varianten im Angebot. Stellt man die Frage in einem Diskussionsforum, dann bekommt man viele verschiedene (sich teilweise widersprechende) Antworten. Bei der Entscheidung sollten u.a. die unten stehenden Kriterien beachtet werden. Dieser Artikel ist primär für Hobbyisten gedacht, da im professionellen Einsatz oftmals völlig andere Kriterien beachtet werden müssen. Weitere vergleichende Informationen über verschiedene Controllerfamilien gibt der Artikel: AVR_PIC_51-Vergleich
[Bearbeiten] Verfügbarkeit
[Bearbeiten] PreisEinerseits kann es lästig sein, wenn man durch die Verwendung eines kleineren Modells 2 Euro gespart hat und dann mit dessen Unzulänglichkeiten kämpft, andererseits ist ein versehentlich zerstörter Chip für 30 Euro ziemlich ärgerlich. Auch ist es oft ganz praktisch, wenn man einige Controller auf Vorrat hat. Zum Preis eines einzelnen Mikrocontrollers kommen noch die Kosten für die Entwicklungswerkzeuge, wie Compiler, Programmübertragung und Debugging hinzu (s.u. Programmiersprache und Programmübertragung). [Bearbeiten] DokumentationDie wichtigste Informationsquelle zu einem Mikrocontroller ist das Datenblatt. Diese gibt es heutzutage aber fast ausschließlich in Englisch. Wer damit nicht zurecht kommt, muss vorher schauen, ob es irgendwelche Tutorials oder Bücher in seiner Lieblingssprache gibt. Je mehr Funktionen ein Mikrocontroller beherrscht, desto umfangreicher wird auch das Datenblatt. Das führt dazu, dass bei manchen Mikrocontrollern das Datenblatt über 1000 Seiten hat. Da ist die Gefahr groß, dass ein Anfänger den Überblick verliert. [Bearbeiten] Unterstützung/CommunityGerade als Anfänger ist man oft auf die Hilfe anderer angewiesen. Da empfiehlt es sich, der Masse hinterherzulaufen und keine exotischen Typen zu verwenden. Im Bastlerbereich populäre Mikrocontroller-Familien sind die AVRs von Atmel und die PICs von Microchip. Für diese Architekturen gibt es z. B. im Forum dieser Internet-Seite gute und meist auch schnelle Hilfestellung bei Problemen. [Bearbeiten] BauformenNeben den klassischen (bedrahteten) Bauformen setzt sich heutzutage SMD immer mehr durch. Manche Mikrocontroller sind nur noch in SMD-Bauformen erhältlich. Für SMD benutzt man üblicherweise geätzte Platinen oder Adapter/Sockel (die aber wieder extra kosten). Will man mit Lochrasterplatinen oder Breadboards arbeiten, dann braucht man die klassischen Bauformen, z. B. PDIP. Zu beachten ist dabei, dass es PDIP oft nur bis DIP40 (also mit 40 Pins) gibt, d.h. einen Mikrocontroller mit 50 I/O-Pins kann es dann nur als SMD geben. Viele Mikrocontroller sind in verschiedenen Bauformen verfügbar. Nur in SMD verfügbar sind:
In der klassischen (wenn auch in der Anzahl der verfügbaren IO-Pins limitiert) PDIP Bauform gibt es unter anderem:
[Bearbeiten] SpannungWährend früher die meisten Mikrocontroller und die gesamte Peripherie mit 5V liefen, so gibt es heute auch alle möglichen anderen Varianten. Zu beachten ist:
[Bearbeiten] StromverbrauchIm Vergleich zu PC-Prozessoren (Pentium, Athlon usw.) brauchen Mikrocontroller relativ wenig Strom. Will man sie allerdings mit Batterien betreiben, dann wird der Stromverbrauch plötzlich doch wichtig. Die meisten Mikrocontroller besitzen hierfür Stromsparmodi, mit denen man den Controller teilweise abschalten kann. Für einen extrem geringen Stromverbrauch sind z. B. die MSP430-Controller optimiert. Der Stromverbrauch hängt auch stark vom Takt und der Versorgungsspannung ab.
[*] Abweichende Taktangabe für PIC16*F84A, da hier keine entsprechenden Werte für die Frequenzen des ATmega8 im Datenblatt (PIC16F84A Data Sheet, Microchip 2001, 35007b.pdf) vorliegen. [**] Angaben sind in der Folge Idle/Active (Quelle: Atmel, ATmega8/L, doc2486.pdf). [Bearbeiten] Takt/GeschwindigkeitEinerseits wünscht man sich oft einen möglichst schnellen Controller, insbesondere als Anfänger, wenn man effiziente Lösungen noch nicht so kennt, andererseits schlägt sich ein hoher Takt auch im Stromverbrauch und im Preis nieder. Man sollte sich dabei nicht von den hohen Taktraten der PC-Prozessoren irritieren lassen. Für viele Anwendungen reicht 1-MHz-Takt völlig aus. Bei einem Geschwindigkeitsvergleich sollte man beachten, dass man nicht einfach den Takt vergleichen kann:
[Bearbeiten] SpeicherWährend früher oft nur die Register im Mikrocontroller waren, und der gesamte restliche Speicher extern angebunden werden musste, so sind heute die Speicher oft komplett im Mikrocontroller integriert. Das bedeutet aber teilweise auch, dass man sie nicht erweitern kann. Wichtig ist dabei u.a. die Größe des Programmspeichers (meist ein Flash-ROM) und das SRAM. Fehlt letzteres, dann kann es mit der Compilerunterstützung schwierig werden. Zu unterscheiden sind hier außerdem Controller in Von-Neumann-Architektur und Harvard-Architektur. Bei letzterer liegen Programmspeicher (ROM) und Datenspeicher (RAM) in getrennten Speicherbereichen; dies hat den Nachteil, dass für den Zugriff auf den Programmspeicher spezielle Befehle notwendig sind (was die Verwendung von im ROM abgelegten Daten in C-Compilern ziemlich umständlich macht), und dass man keine Programmteile direkt aus dem Datenspeicher ausführen kann. [Bearbeiten] Onboard-PeripherieMikrocontroller haben meist eine ganze Menge Funktionen integriert, z. B. AD-Wandler, I²C-Bus, SPI, PWM, RS-232 usw. usf. Der Vorteil liegt darin, dass der Controller damit mehrere Dinge gleichzeitig machen kann. Dadurch steigt zum einen die Gesamtleistung des Controllers, zum anderen sind viele Dinge zeitkritisch, und die Programmierung ist deutlich einfacher, wenn man zehn zeitkritische Dinge gleichzeitig erledigen muss. [Bearbeiten] StörfestigkeitEigentlich ein wichtiges Thema, andererseits findet man dazu nur sehr wenig Informationen. Bekannt ist beispielsweise, dass bei der AVR-Familie die ATmegas deutlich störfester sind als die alten AT90S. [Bearbeiten] ProgrammiersprachenDen direktesten Zugriff auf die "Innereien" eines Prozessors hat man mit Assembler. Dies ist jedoch gleichzeitig - zumindest auf den ersten Blick - die "abschreckendste" Sprache, denn sie erfordert einen hohen Lernaufwand. Aufgrund stark unterschiedlicher Befehlssätze verschiedener Controllerfamilien ist das Gelernte nie 1-zu-1 übertragbar und meist nur direkt auf einen einzigen Prozessor oder allenfalls auf eine Familie "verwandter" Produkte anwendbar. Dennoch kann man sich mit einiger Erfahrung recht schnell in einen anderen Befehlssatz einarbeiten. In bestimmten Bereichen oder Teilen eines Projekts wird die Verwendung von Assembler dennoch unabdingbar sein. (Diese Teile mögen projektabhängig zwischen 100% oder auch nur deutlich unter 1% umfassen.) Die Auswahl der richtigen Programmiersprache hängt auch stark vom geplanten Einsatzzweck ab. Ein Elektrotechnik-Student, der sich für sein späteres Berufsleben vorbereiten möchte, sollte sich mit C und Assembler befassen. Wer dagegen gar nicht vorhat sich allzu tief einzuarbeiten und sowieso schon Basic oder Pascal kann, der sollte zu diesen Sprachen greifen. Für einige Controllerfamilien (z. B. AVR, ARM, MSP430) gibt es eine Portierung des kostenlosen GNU-C-Compilers, wodurch C auch im Hobby-Bereich stark vertreten ist und es auch viele Programmierbeispiele dafür gibt. [Bearbeiten] DebuggingBei der Fehlerbeseitigung trennen sich Profi von Amateur, und es kann richtig teuer werden. Genau hier haben die Hersteller von Mikrocontrollern und/oder Compilern eine Möglichkeit gefunden, den Gelegenheitsprogrammierer abzuweisen und nur den zahlenden Profi vorzulassen. Die preisgünstigste, aber auch unkomfortabelste Art des Debuggings ist der Einbau von Testcode in das Programm. Dieser Testcode informiert den Programmierer über erreichte Programmpunkte und dabei aufgetretene Datenwerte. Die Ausgabe erfolgt per optisch/akustischer Anzeige oder serieller Schnittstelle. Der Nachteil dieser Methode liegt in ihrem Zeitaufwand. Für jedes Problem muss ein kurzes Stück Testcode erdacht und in das Programm eingefügt werden. Danach wird das Programm kompiliert/assembliert und in den Flashspeicher des Mikrocontrollers gebrannt. Zuguterletzt muss das Programm von Beginn an durchlaufen und mit etwas Glück liefert der Testcode Informationen über das Problem. Deutlich effektiver ist die Fehlersuche mittels einer in die PC-Entwicklungsumgebung integrierten Debugger-Software. Üblicherweise besteht diese Software aus mehreren Fenstern zur Anzeige folgender Informationen:
Ausgehend vom Quellcode/Assembler-Fenster kann man den Programmcode auf das Zielsystem laden, den Programmlauf starten und an beliebigen Stellen stoppen, das Programm zeilenweise oder wiederholend abarbeiten, Variablen/Speicher/Register anzeigen und auch verändern. Diese Vorgänge werden bei modernen Debuggern mit wenigen Funktionstasten und Kontextmenü gesteuert. Angemerkt sei, Debugging einer Hochsprache wie C funktioniert nur richtig, wenn die Codeoptimierung des Compilers deaktiviert ist. Diese Bedingung bringt es mit sich, dass für die Entwicklungsphase bis zu 30% mehr Programmspeicher benötigt werden. Der Programmlauf kann in einem Software-Simulator oder direkt auf dem Mikrocontroller erfolgen. Leider können Simulatoren weder die Signale der Controllerumgebung, noch Interrupts realistisch nachahmen. Hier hilft nur In-System-Debugging direkt auf dem Zielsystem. Für das In-System-Debugging wird der Ziel-Mikrocontroller mit seiner In-Circuit-Debugging-Hardware benutzt. Diese integrierte Hardware kommuniziert über teils genormte Schnittstellen mit der Debuggersoftware auf dem PC. Als Verbindungsglied dient ein Kabel mit mehr oder weniger komplexer Elektronik. Diese Elektronik, das fehlende Wissen um ihre Funktion und die teils eingebaute Donglefunktion verhindern preisgünstigen Nachbau und machen ihren Hersteller sicher vor unautorisierter Benutzung der Entwicklungsumgebung. Bei der Vielzahl von Controller- und Compiler-Herstellen ist es kaum möglich, einen Überblick über die Debugger-Hardware/Software zu geben. Hier nur einige Beispiele: [Bearbeiten] Atmel
AVR32 Controller (32-Bit) können mit Atmels freiem AVR32 Studio, basierend auf der Eclipse IDE, programmiert und debugt werden. Die IDE bedient sich dabei der AVR32 GNU Toolchain. Der Debugger für AVR 8-Bit RISC Controller ist in Atmels freie AVR Studio IDE integriert. In Verbindung mit dem GNU C++ Compiler für AVR (WinAVR) und der integrierten Bibliothek AVR Libc ist Hochsprach-Entwicklung und -Debugging möglich. Der AVR JTAG ICE Clone kann nur nachfolgende ältere ATmega Controller debuggen: ATmega16, ATmega16L, ATmega162, ATmega162L, ATmega162V, ATmega165, ATmega165V, ATmega169, ATmega169L, ATmega169V, ATmega32, ATmega32L, ATmega323, ATmega323L, ATmega64, ATmega64L, ATmega128, ATmega128L, AT90CAN128. Trotzdem ist er ein sehr wertvolles, weil günstiges Werkzeug, wenn man die Typbeschränkung akzeptieren kann. Atmel AVR Dragon kann ATtiny, ATmega, XMega, AT32UC3x und AP7xxx programmieren und debuggen. Die drei letzt genanneten MCUs werden seit AVR Studio Version 4.18 SP1 unterstützt. AVR JTAG ICE MKII – CN ist ein Produkt aus China mit der versprochenen Funktionalität eines originalen AVR JTAG ICE MKII von Atmel. Es besitzt eigenständige Elektronik und auch die aktualisierbare Firmware ist vom Original verschieden. Oftmals ist dieses Produkt beim nicht unbekannten Online-Auktionshaus zu finden. [Bearbeiten] Microchip
Alle Typen von Microchip Debugger Hardware werden von Microchips freier MPLAB IDE unterstützt. Diese IDE kann mit C-Compilern verschiedener Hersteller zusammenarbeiten. Das Setup installiert keine Microchip C-Compiler sondern bietet als Option die C-Compiler von CCS und HI-TECH. Der CCS Compiler für PIC18F45k20 ist auf 2kWord Programmcode begrenzt. Die HI-TECH Compiler für PIC10/12/16, PIC18 und PIC32 haben, wenn sie als Freeware im ‚Lite mode’ arbeiten, eingeschränkte Codeoptimierung. Microchips C-Compiler für PIC18, PIC24, dsPIC DSCs und/oder PIC32 können zusätzlich installiert werden. In der zum freien Download bereitstehenden ‚Student Edition’ stellen sie nach 60 Tagen einen Teil der Codeoptimierung ein. Das MPLAB Setup bietet optional die Installation der, im nächsten Absatz behandelten, HI-TECH IDE ‚HI-TIDE 3’ an. Die Debugger Hardware ICD 2 von Microchip wird auch von der freien, auf Eclipse basierenden, HI-TECH IDE ‚HI-TIDE 3’ unterstützt. Diese moderne IDE kann zusammen mit Microchips MPLAB oder separat installiert werden. Zusätzlich zu installieren sind HI-TECHs C-Compiler für die Microchip Reihen PIC10/12/16, PIC18 und/oder PIC32. Ihre im ‚Lite mode’ bestehende Einschränkung wurde bereits erwähnt. Die beiden für PICs vorhandenen IDEs von Microchip und HI-TECH bilden zusammen mit den freien C-Compilern und den preisgünstigen ICD 2 Clones eine kostengünstige Möglichkeit, PIC-Code zu erstellen und zu debuggen. Die eingeschränkte Codeoptimierung ist für Amateure verschmerzbar. Einige kleine PICs haben leider keine In-Circuit-Debugging-Hardware eingebaut. Diese PICs sind nur mit Hilfe eines kostspieligen Header Boards debugbar. [Bearbeiten] TI MSP430
Programmierung und Debugging der MSP430 erfolgt über JTAG-Schnittstelle und in neusten Varianten (MSP430F20xx, F21x2, F22xx) über ‚Spy-Bi-Wire’ (2-wire JTAG). Die ursprüngliche JTAG-Schnittstelle benötigt 4 Signalleitungen plus Reset. Bei ‚Spy-Bi-Wire’ sind die Signalleitungen auf 2 reduziert. Jeder anwenderprogrammierbare MSP430 enthält einen Bootloader. Bei den Typenreihen MSP430F1xx, F2xx und F4xx befindet er sich im ROM. Bei den MSP430F6xx im Flash-Speicher. TI bezeichnet die Programmier- und Debugging-Hardware als Flash Emulation Tool (FET). Es existieren die Varianten ‚Parallel Port’ und USB. Die preisgünstigen parallelen Systeme beherrschen nur JTAG. Bei den USB-Systemen ist zusätzlich ‚Spy-Bi-Wire’ implementiert, und man kann damit die Codeschutzsicherung des Mikrocontrollers auslösen. Die Olimex Produkte entsprechen in ihrer Funktion weitestgehend den TI-Vorbildern und können mit jeder Software verwendet werden, die TI-Werkzeuge unterstützt. Kleine Abweichungen bestehen bei der Olimex Implementierung der ‚Spy-Bi-Wire’ Verbindung des MSP430-JTAG-TINY. Das ‚MSP430 USB Stick Development Tool’ ist eine eigenständige Debugging-Hardware mit aufgestecktem eZ430-F2013 Zielsystem. Der Stick beherrscht aber nur ‚Spy-Bi-Wire’, wodurch die Anzahl der unterstützten Controller begrenzt ist. Als Entwicklungsumgebung stellt TI den auf der Eclipse IDE aufbauenden ‚Code Compose Essentials’ bereit. In der freien Version ‚CCE Core Edition’ ist dieses Paket auf 16kB Code begrenzt. Mit der freien IDE Eclipse, dem GNU C-Compiler für MSP430, einigen Zutaten und dem Olimex Parallelport-Adapter kann man die wohl preiswerteste, unbeschränkte Entwicklungsumgebung für Mikrocontroller zusammenstellen. Es ist keine perfekte Kombination, und die Installation macht einige Mühe; im Ergebnis hat man aber eine Arbeitsplattform, einschließlich Debugger, ohne unverständliche Skripte oder kryptischen Make-Files. Über diese beiden Links
findet man zwei verschiedenartige Lösungen der Installation unter Windows. Obwohl beide Varianten auf teils verschiedene Werkzeuge zurückgreifen, sind sie kombinierbar und ergeben damit Spielraum für persönliche Vorlieben. [Bearbeiten] Zilog
Die Zilog Entwicklungssysteme ZDS II (C/ASM) für Z8 Encore!®, Z8 Encore! XP®, Z8 Encore! MC™ sowie ZNEO™ Z16F Controller haben keine Beschränkungen sind aber ganz zu Unrecht in Europa kaum bekannt oder erhältlich. [Bearbeiten] ProgrammübertragungIm Idealfall stellt sich die Frage, wie das Programm in den Mikrocontroller kommt, für den Programm-Entwickler nicht. Die Debugging-Hardware erledigt diese Aufgabe ganz unauffällig mit. Da die Umstände aber nicht immer ideal sind, muss der Entwickler manchmal auf andere Methoden zurückgreifen. Früher wurden überwiegend teure und umständlich zu handhabende Programmiergeräte verwendet, mit deren Hilfe der Programmspeicher außerhalb des Zielsystems gefüllt wurde. Heute sind die meisten Mikrocontroller über verschiedene ISP-Schnittstellen oder über das UART ‚In-System’-programmierbar. Die ISP-Schnittstelle ist entweder als universelle Debugging- und Programmier-Schnittstelle, z. B. JTAG, oder als dedizierte Programmier-Schnittstelle realisiert. Für den zweiten Fall benötigt man einen speziellen Programmier-Adapter den man, meistens in verschiedenen Ausführungen, kaufen oder selber bauen kann. Dazugehörig ist ein passendes Programmier-Programm für den PC. Spezialisierte Programmier-Adapter und –Programme werden auch gern in der laufenden Produktion eingesetzt. Mikrocontroller mit integriertem Bootloader können mit der entsprechenden PC-Software direkt über den seriellen Port programmiert werden. |