mbed mit NXP LPC1768 (Cortec M3)

Seit nunmehr einigen Monaten arbeite ich u.a. mit dem im Folgenden vorgestellten mbed-Entwicklungsboard für LPC1768-Controller. Kürzlich legte ich mir dann auch privat meinen ersten von der Sorte zu, weil das mbed nicht nur niedlich sondern auch wirklich praktisch und vielfältig einsetzbar ist.

Einige Eigenschaften des mbed

Vorschau: mbed-Entwicklungsboard mit NXP LPC1768Das mbed ist ein kleines Entwicklungsboard, welches einen Mikrocontroller vom Typ NXP LPC1768 beherbergt und das in einem sehr handlichen Format. Das mbed hat das Format eines 40-poligen-DIP mit 2.54 mm Pinabstand. Auf dem kleinen Evalboard befinden sich außer dem LPC1768 und den herausgeführten Kotakten noch 4 LEDs, ein Resetswitch und auf der Unterseite eine Schaltung, die einen 2-MB-USB-Stick bietet, über welchen der Controller spielend einfach programmiert wird.

Der Controller selbst bietet mit bis zu 100 MHz (wegen einfacherer Taktteilung für 48 MHz USB-Takt meist bei 96 MHz betrieben), 512 kB Flash und 64 kB RAM (3 Blöcke: 1x 32kB + 2x 16kB) reichlich Leistung für embedded Systems. Die LPC17xx-Reihe ist untereinander und zu einigen älteren Reihen weitestgehend Pin-kompatibel. Gewöhnungsbedürftig ist allerdings, dass trotz 5 verschiedener GPIO-Ports kein einziger komplett herausgeführt wird. Immerhin sind bei Bedarf 16 Bit zusammenliegend möglich. Der mbed bietet hingegen mit seiner nach außen stark reduzierten PIN-Anzahl allerdings nur eine Möglichkeit, 8 Bit zusammenhängend anzusteuern und zwar auf Port 0 mit den Bits 4-11. Mit anderen Worten: Beim mbed kommt man nicht um Bitschiebereien herum. Selbstverständlich bieten viele Pins zusätzliche Funktionen wie ADC, DAC, Timer, PWM, ISP, JTAG, I²C, SPI, SSP, I²S und UART. Der LPC1768 und der von der Ausstattung identische aber mit bis zu 120 MHz taktbare LPC1769 bieten außerdem USB, Ethernet 10/100, 2x CAN und einen Quadrature encoder.

Stromverbrauch

Der Stromverbrauch der NXP LPC17xx-Reihe ist für die meisten embedded systems nach einigen Optimierunngen und Anpassungen annehmbar niedrig. Das komplette mbed-Board hingegen ist dafür absolut ungeeignet, aber mit Sicherheit das beste Produkt, um schnell und einfach zu Lösungen zu kommen. Wer die Leistung eines Cortex M3 benötigt, aber unbedingt die Stromaufnahme auf ein Minimum reduzieren muss, kommt so weit ich das überblicken kann, nicht an den neuen STM32F2-Chips vorbei. Damit habe ich bisher zwar nicht gearbeitet, aber die Datenblätter ein wenig begutachtet. Für meinen Geschmack sind diese bei STM nicht nur durch ihren Umfang abschreckend, auch sind sie irgendwie schlechter verständlich als die von NXP. Die hardwarenahe Programmierung unterscheidet sich trotz des gleichen Cortex-Kerns sogar deutlich, weshalb man sich im Vorfeld überlegen sollte, auf welches Pferd man setzen möchte. Benötigt man gar einen extrem niedrigen Verbrauch bei etwas niedrigerer Rechenleistung, kann ich derzeit nur die AVR xMega empfehlen oder wenn es auch noch etwas langsamer sein darf, dann die guten alten AVR Mega/Tiny. An deren extrem niedrige Verbrauchswerte kommt kein ARM-Controller ran.

Entwicklungsumgebungen

Ein Vorteil und zugleich Nachteil des mbed ist, dass seitens des Herstellers nur ein online-Compiler vorgesehen ist, den man dem Namen des Boards entsprechend unter mbed externerLink findet. Die Oberfläche ist sehr praktisch, der Compiler wirklich einfach zu bedienen und es werden unzählige Informationen und Beispielquelltexte zur Verfügung gestellt. Ich selbst habe den online-Compiler auch etwa zwei Tage lang gestestet und damit meine ersten Gehversuche mit dem Evalboard gemacht. Auch für einige kleine Funktionstests mit vorgefertigtem Programmcode habe ich später noch ein paar Mal den online-Compiler genutzt und mir Fummelarbeit erspart. Für ernsthafte Projekte ist das “online” aber natürlich ein Albtraum. Gerade wenn man später nur den Controller (der mbed kostet knapp 50€, die LPC17xx kosten in niedrigen Stückzahlen alle unter 10€) auf selbst erstellten Platinen verwenden möchte, muss man das Thema (spezialisierter) online-Compiler ohnehin abhaken. Auch ist man in der Regel lokal natürlich wesentlich schneller. Das größte Problem des Online-Compilers ist allerdings dessen Ressourcenverschwendung. Der Zugriff auf die Hardware ist stark abstrahiert und objektorietiert. Zwar vereinfacht dies den Einstieg und die Programmierung simpler Dinge, aber es verlangsamt auch viele Zugriffe und so dies noch kein Problem ist, so ist es letztlich oft der mit der Verlangsamung einhergehende höhere Stromverbrauch - schließlich muss der Controller länger außerhalb seiner Sleepmodes bleiben und dies auch noch bei höherem Takt. Bei einem einfachen Test mit 12 MHz Chiptakt musste ich übrigens feststellen, dass ein einfacher Pin-Toggle mit dem online-Compiler nur ca. 20kHz bringt (bei 12 MHz Chip-Takt!). Spricht man die GPIOs direkt an, schafft man die halbe Chipfrequenz, also 6 MHz. Möchte man eine schnelle Kommunikation über GPIO realisieren, scheidet der online-Compiler (aber auch alle gängigen vorgefertigten Bibliotheken) aus. Diese Liste an Nachteilen könnte man noch eine Weile fortsetzen, nichts desto trotz bietet der online-Compiler gerade für Einsteiger einen guten und einfachen Start in die ARM-Cortex-Programmierung.

Vorschau: NXP LPC1768 manuell gelötetAlso muss ein offline-Compiler für das mbed her und da gibt es neben einigen kommerziellen Lösungen auch einige sehr gute OpenSource-Möglichkeiten. Bekannte kommerzielle Produkte sind z.B. die Keil Development Tools und Sourcery G++ Lite. Auch code red bietet für die (nach meiner Erfahrung nicht empfehlenswerten LPCxpresso-Boards) mit der Red Suite eine propritäre Entwicklungsumgebung.

Die nach meiner Erfahrung beste Lösung hingegen ist eine kleine Sammlung von OpenSource:

  • Programmers Notepad externerLink - ist DIE Entwicklungsumgebung für alle gängigen Programmiersprachen. Das Programmers Notepad ist wesentlich einfacher, intuitiver und schneller als aufgeblähte Eclipse-Lösungen und bietet alle von einer zeitgemäßen Entwicklungsumgebung erwarteten Eigenschaften
  • Yagarto externerLink - die GCC-Tool-Chain mit der man seine Programme compiliert; dort findet sich auch eine gute Einführung (Treiberinstallation usw.)
  • Tollos externerLink - eine Bibliothekssammlung und eine Art mini-RTOS (Real Time Operating System) mit Nutzung des Cortex-System-Tick-Systems, mit der man grundlegende Dinge ganz schnell und einfach programmieren kann. Tollos wird für die ARM-Programmierung nicht unbedingt benötigt, ist aber gerade für den Einstieg sehr hilfreich und eine dringende Empfehlung meinerseits.
  • RealTerm externerLink - ein beliebiges HyperTerminal ist für Debugausgaben hilfreich. Debug-Ausgaben sind beim Online-Compiler und bei Tollos bereits als Befehl implementiert und es wird nur eine serielle Konsole benötigt, die über den virtuellen COM-Port (Mini-USB) des mbed mit selbigem kommuniziert. RealTerm ist das umfangreichste mir bekannte Terminalprogramm. Bis Windows XP wird das für einfache Zwecke oft ausreichende hyperterm mitgeliefert, ab Windows Vista muss man zu Alternativen greifen. Dafür bietet sich auch das von der ssh-Fernwartung bekannte putty mit der Option zur seriellen Kommunikation an. Vom Funktionsumfang her wesentlich besser und auch sehr empfehlenswert ist Docklight, was allerdings nur in einer limitierten Testversion kostenlos ist. Auch hterm ist ganz nett, aber von Weiterentwicklung/Fixing ist wie beim RealTerm leider wenig zu sehen.

Das mittels der genannten Programme offline compilierte Ergebnis kopiert man einfach in den 2-MB-Stick des mbed, drückt den Reset-Knopf und schon führt der ARM-Controller dann das eigene Programm aus. Noch zwei kleine Tipps zu den Programmen: Bei Tollos verwendet man die Datei churn.bat zum Compilieren und in diese sollte man einfach einen Kopierbefehl ergänzen (z.B. COPY /y sample.bin f: - Dateinamen und Laufwerk anpassen). Außerdem kann man im Programmers Notepad unter Tools->Options->Tools eigene Befehle ergänzen, die anschließend im Menü verfügbar sind. Ich empfehle, dort die benötigten Compilerbefehle einzutragen.

Zusammenfassend kann man also sagen, dass man für knapp 50€ ein hervorragendes ARM-Cortex-M3-Entwicklungsboard für Rapid Prototyping bekommt.

Einen Kommentar schreiben