Kategorien:

Tags

mbed NXP LPC1768

Heute traf bei uns ein neuer Spielkandidat ein, das Rapid Prototyping Board mbed NXP LPC 1768.

Bei dem Board handelt es sich um ein kleines Experimentierboard mit einer NXP ARM CPU, welcher bereits mit etwas Hardware ausgestattet ist und direkt über USB mit dem PC verbunden wird. Das besondere an der mbed Plattform ist die komplett online befindliche Entwicklungsumgebung. So benötigt das Board keine lokale Installation von Software und die Projekte werden ebenfalls online gespeichert und kompiliert. Darüber hinaus sind, dank der online Plattform, eine Vielzahl von bereits lauffähigen Libraries für diverse Funktionen und Bauteile vorhanden, welche von anderen Entwicklern erstellt wurden und für andere User freigegeben wurden. Der LPC1768 von NXP ist eine 32bit ARM Cortex-M3 CPU mit 512kb Flash und bis zu 100MHz Taktung. Mit an Board sind neben acht General Purpose DMA Controllern ein Ethernet Interface, USB 2.0 full-speed Controller, vier UARTs, CAN2.0B und und und… Für die komplette Liste sollte man einfach mal bei NXP auf der Produktseite vorbei schauen.

Kommen wir nun zum Auspacken, nachdem das Board erfolgreich den Weg auf unseren Schreibtisch gefunden hat 🙂

mbed NXP lpc1768

mbed NXP lpc1768

Rein äußerlich ein kleiner unscheinbarer Karton, der mit recht kleinen Abmessungen daher kommt. Aber gleich vorne Aufgedruckt ein paar Highlights, wie USB Drag’n’Drop Programming und Online Compiler.

Inside mbed NXP LPC1768

Inside mbed NXP LPC1768

Inhalt mbed NXP LPC1768

Inhalt mbed NXP LPC1768

In dem Karton befindet sich dann ein DIN-A5 mini Setup Guide, das Pinout des Entwicklungsboard, ein entsprechendes USB Kabel und natürlich das Board selber:

mbed LPC1768 Board

mbed LPC1768 Board

Ziemlich klein und kompakt kommt das mbed Board daher. Auf der einen Seite der CPU liegt der Reset Button, auf der anderen 4 LEDs.

Als nächstes, nachdem alles ausgepackt ist, muss ein Account bei mbed erstellt werden. Dazu muss zunächst das Board mit dem beiliegenden USB Kabel an den PC verbunden werden.

mbed powered

mbed powered

Mit dem PC verbunden leuchtet das Board schön und es poppt folgendes Fenster auf:

mbed first connect

mbed first connect

Als Inhalt findet sich eine MBED.HTM, welche nach anklicken auf die Webseite zum Erstellen eines Kontos führt:

mbed sign up

mbed sign up

Natürlich wollen wir einen Account erstellen, sonst hätten wir das Board ja nicht 🙂

Also fix SignUp geklickt und das folgende Formular ausgefüllt:

mbed sign up form

mbed sign up form

Danach gelangt man dann zur nächsten Seite, die einen Herzlich Willkommen heisst und bei den ersten Schritten helfen will.

mbed login

mbed login

Kurz den Anweisungen gefolgt und auf „HelloWorld.bin“ geklickt, es öffnet sich ein „Speichern unter“ Dialog und man legt die „HelloWorld_LPC1768.bin“ einfach auf das Wechsellaufwerk, als welches sich das mbed Board am PC angemeldet hat. Ein kurzer Druck auf Reset und schon blinkt die erste LED des Boards.

Das war einfach 🙂

Versuchen wir nun einmal ein eigenes Programm zu erstellen. Dazu klicken wir auf  „Compiler“ oben rechts in der Leiste, worauf hin sich das nächste Fenster öffnet:

mbed compiler

mbed compiler

Der Klick auf „New“ scheint einleuchtend, kurz ein Name eingegeben und schon haben wir das erste Projekt erstellt.

mbed compiler first project

mbed compiler first project

In dem ersten Projekt befinden sich gleich eine main.cpp und die mbed Library.

Die main.cpp enthält ein kurzes LED blink Program, welches mit einem Klick auf „Compile“ kompiliert werden kann. Drückt man die Taste, dann öffnet sich wieder der „Speichern unter“ Dialog, in welchem wir die Datei wieder auf das Wechsellaufwerk des mbed speichern, und dann Reset drücken. Schon ist das neue Programm aktiv. Kurze Versuche haben gezeigt, dass immer die neuste Firmware geladen wird, unabhängig von dem Namen und der alphabetischen Reihenfolge. Allerdings ist es auch nicht unsinnig, jeweils nur eine Firmware Datei auf dem mbed Board liegen zu haben 🙂

Ein kurzer Ausflug durch die online Libraries und Tutorials hat gezeigt, dass es mit mit dem mbed Board in der Tat möglich ist, sehr schnell ein Programm zu entwickeln. Viele gebräuchliche Sensoren, Displays oder andere Sachen sind schon vorhanden und können ganz einfach per Rechtsklick->Import Library eingebunden werden. So haben wir in nichtmal 5 Minuten ein Programm erstellt, welches eine TXT-Datei mit einer Nachricht auf dem Speicher des Boards ablegt und sich danach in Windows direkt vom Wechsellaufwerk öffnen und lesen lässt.

Der erste Eindruck ist also durchweg positiv und wir werden sicher noch öfter auf diese Plattform zu sprechen kommen.

Mikrocontroller Thermometer – Schaltplan

Der Schaltplan für dies Projekt baut auf dem Schaltplan des Artikels Minimalbeschaltung ATmega8 auf. Die Grundlegenden Elemente sind weiterhin vorhanden und nur ein bisschen umsortiert worden. Neu hinzugekommen sind natürlich der Temperatur Sensor LM75 von National Semiconductors. Als Schnittstelle zwischen dem Sensor und dem Mikrocontroller dient der I²C (Inter-Integrated-Circuit) Bus, welcher bei Atmel TWI (Two-Wire-Interface) genannt wird. Dieser besteht aus einer Daten- und einer Clockleitung, welche über einen Pull-Up Widerstand auf Vcc Level gebracht werden. Der Widerstand ist von der Übertragungsrate und den Leitungskapazitäten abhängig. Zur genauen Berechnung der Pull-Ups sei hier auf die I²C-Specification verwiesen. Da wir nicht mit maximaler Geschwindigkeit kommunizieren wollen reicht hier ein gängiger Wert von 4,7 kOhm.

Das ausgewählte Display kann sowohl mit einem 8Bit breiten Datenbus, als auch mit einem nur 4Bit breiten Bus angesteuert werden. Um Pins am Mikrocontroller zu sparen wird meist die 4Bit Variante verwendet, so lässt sich das gesamte Display mit 7 Pins ansteuern. Theoretisch würden auch sechs ausreichen, wenn man nicht vom Display lesen möchte. Dann könnte die RW Leitung auf einen festen Pegel eingestellt werden. Für die Einstellung des Kontrast wird an dem CONTR Pin des LCD ein Variabler Spannungsteiler geschaltet.

Die Kommunikation zum PC wird über die Serielle Schnittstelle realisiert. Da die Pegel vom Microkontroller nicht mit den PC Pegeln kompatibel sind, wird der Pegelwandlerbaustein MAX232 eingesetzt. Dieser kann theoretisch zwei Serielle Pegel anpassen, wovon wir allerdings nur einen verwenden. Als einzige Beschaltung des Chips sind 4 Elektrolytkondensatoren notwendig, abgesehen von Versorgung und der Buchse für das Kabel.

Zu guter Letzt haben wir noch 3 Status LEDs verbunden, mit denen wir später die Funktion der Schaltschwellen des LM75 darstellen wollen. Die gesamte Schaltung sieht nun wie folgt aus:

Schaltplan für das LM75 µC Thermometer Projekt

LM75-Schematic

Mikrocontroller Thermometer

In diesem kleinen Projekt wollen wir mit unserem AtMega8 ein simples Thermometer bauen. Das klingt relativ einfach, beinhaltet allerdings einige verschiedene Techniken, die einem bei der Verwendung von Mikrocontrollern immer wieder über den Weg laufen. Zuerst einmal benötigen wir, um mit dem AtMega8 die Temperatur messen zu können, ein Temperatursensor. Die Entscheidung fiel hier auf einen gängigen Sensor von National Semiconductor, den LM75.

Dieser Sensor verfügt über eine I²C Schnittstelle, über welche zum einen die Temperatur abgefragt werden kann und zusätzlich die Möglichkeit besteht einige Konfigurationen vorzunehmen. So lassen sich zum Beispiel zwei Schwellwerte einer Hysterese festlegen, mit der sich etwa die Regelung eines Lüfters realisieren lässt, die bei Übertemperatur anfängt zu kühlen und ab einer bestimmten Temperatur wieder abschaltet. Damit wir also mit dem LM75 kommunizieren können, werden wir zunächst auf das Two-Wire-Interface (TWI) des AtMegas eingehen. Dieses Interface ist eigentlich nichts anderes als das normale I²C von Philips Semiconductor (I²C-Specification 3.0).

Damit die ermittelte Temperatur auch sichtbar wird, geben wir die Temperatur im nächsten Schritt auf einem LC-Display aus. Hierbei greifen wir ebenfalls auf ein Display mit dem am weitesten verbreiteten Controller für einfache Dot-Matrix Diplays HD44780U von Toshiba zurück. Dieser kann wahlweise mit einem 4- oder 8-Bit Datenbus angesprochen werden und ist auf fast allen 2×16 oder 4×16 Displays zu finden.

Zu guter Letzt werden wir die gemessene Temperatur auch über den Com-Port an eine Windows Anwendung übermitteln und anzeigen. Das gesamte Projekt sieht dann wie folgt aus:

Damit dieser Artikel nicht zu lang wird und damit wir auch schon vorzeitig fertige Abschnitte freigeben können, wird das Projekt schrittweise realisiert und in einzelnen Artikeln veröffentlicht:

1. Schaltungsentwurf

2. LM75 Auslesen und Steuern über TWI/I²C

3. Daten auf HD44780U Display ausgeben

4. AtMega Kommunikation mit Windows

Minimalbeschaltung ATmega8

Damit wir unserem Mikrocontroller Leben einhauchen und mit ihm arbeiten können, müssen wir ihn vorher mit ein paar Kleinigkeiten beschalten. Wir beschränken uns hierbei auf das Minimum, auf welches später aufgebaut werden kann.

Das wichtigste für elektronische Schaltungen ist natürlich die Versorgung mit Strom. Für die Versorgung unseres ATmega8 haben wir eine Spannungsversorgung mit einem LM78M05 aufgebaut. Das hat den Vorteil, dass wir unseren Controller mit einer Spannungsquelle zwischen 5 und 18 Volt betreiben können.

Damit der Mikrocontroller seine Arbeiten verrichten kann, muss er getaktet werden. Das kann entweder mit der internen oder einer externen Clock geschehen. Wir wollen mit einem Kristalloszillator die externe Clock erzeugen und beschalten dafür den Controller gemäß Datenblatt.

Jetzt brauchen wir noch eine Schnittstelle, um dem Controller eine Firmware einzuspielen. Der Atmel Controller ist „In System Programmable“ (ISP), das heisst wir können ihn über die ISP-Schnittstelle direkt im eingebauten Zustand programmieren, was gerade bei der Software Entwicklung sehr angenehm ist. Es hat sich die Belegung des hier verwendeten 10-poligen Anschluss durchgesetzt, so dass wir damit kompatibel zu vielen erhältlichen Programmieradaptern sind. Die LED am der ISP-Buchse gehört zwar nicht ganz zur Minimalbeschaltung, ist aber ein nützlicher Indikator für die Aktivitäten der Schnittstelle.

Zu guter letzt muss noch der Reset Pin auf VCC gelegt werden, denn dieser ist aktiv-low, also Reset ist aktiviert, wenn keine Spannung anliegt. Damit der Programmer am Controller einen Reset auslösen kann, muss er ebenfalls mit dem Reset verbunden werden und durch den Widerstand gegen Kurzschluss geschützt werden.

Fügt man alle Elemente zusammen haben wir unser Ergebnis:

AVR ATmega Minimalbeschaltung

AVR ATmega Minimalbeschaltung