Sie sind auf Seite 1von 36

9

www.embedded-projects.net
your own projects
Meister der Herzen
Ein ghnender leichter Sonntag Nachmit-
tag. Die Stimmung passt - was will man
mehr. Anpfiff - Daumen drcken! Nie
wieder Liga 2? Bange Minuten, Bange
Zeit - Halbzeit. Kein Tor, kein Ruhm keine
Liga 1. Doch dann kurz vor dem Schluss
ein Schuss! Die Stadt tobt. Es hupt, und
jault! Wir hams geschafft!

Augsburg in der Bundesliga! Klingt ko-


misch? Ist aber so :-). In diesem Sinne wer-
den wir die nchsten Monate im Zeichen
des Fuballs genieen und freuen uns ab
August auf all die groen Stdte die uns
dank der Liga Nr 1 besuchen kommen.

Wir freuen uns ein kleiner Teil dieser


Stadt zu sein. Mehr von Augsburg gibts
im nchsten Heft.
Anzeige

Dankeschn an unsere Autoren:


Aktuell erhalten wir immer mehr zuge-
sendete Artikel! Wir freuen uns ber all
die spannenden Texte. Bitte weiter so!

Im nchsten Heft sind u.a. geplant:

Leiterplatte Teil 2

Touchbox - ein anderes Musikinstru-


ment

Ein FPGA Softcore

Benedikt Sauter
sauter@embedded-projects.net

und das embedded projects Team

2 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET


Einleitung
Nachdem ich mit meinem GPS Logger Integrierte Ladeschaltung
nun schon seit zwei Jahren erfolgreich
diverse Strecken und Touren aufzeichne, Keine Schalter/Tasten - einlegen der
wurde es Zeit fr eine Neuauflage des Ge- SD-Karte schaltet das Gert ein, her-
rtes. Vor allem die Gre war auf Rad- ausnehmen schaltet es aus
fahrten eher hinderlich, hinzu kam die
Aus Platzgrnden verzicht auf ein
stranfllige Kabelverbindung des GPS-
FAT-Dateisystem auf der SD-Karte -
Moduls, die den alltglichen Belastungen
Stattdessen Einsatz des selbstentwi-
nicht immer stand hielt. Ein weiterer As-
ckelten NoFS (No FileSystem)
pekt beim Entwurf der zweiten Version,
der mir wichtig war, ist eine leichte Nach- Kein Schutz vor Tiefentladung. In der
baumglichkeit des Loggers. Aus diesem Regel sind LiIon Akkus durch eine in-
Grund verwende ich nur Bauteile, die bei
Abb. 1: Doppelseitige Platine
terne Schaltung vor Tiefentladung ge-
den bekannten Distributoren erhltlich schtzt. Sollte dies nicht der Fall sein Eine Beispielroute, die mit dem gLog-
sind. Die Platine ist exakt auf das Gehu- bitte den Akku regelmig laden ger Mini aufgezeichnet wurde, kann auf
se abgestimmt, sodass eine stabile Konst- Google Maps betrachtet werden. Einige
ruktion gewhrleistet ist. Geschtzte Akkulaufzeit: 10 bis 15 Kurven sind dort sehr geschnitten, das
Stunden liegt an der maximal mglichen Anzahl
Nachfolgend eine Auflistung der wich-
tigsten nderungen im Vergleich zum an Koordinaten bei Google Maps [1], wes-
Doppelseitiges Layout, GPS-Modul be-
Vorgnger: wegen der Pfad dementsprechend verein-
findet sich direkt auf der Platine (hhe-
facht werden musste.
re Stabilitt)
Deutlich kleiner (Auenmae: 5cm x
5cm x 2cm)

Die Platine
Die Platine ist von den Maen her nach viel Platz zu sparen. Das GPS-Modul ist Der Schaltplan sowie das Layout wurde
den Vorgaben des Gehuses gestaltet. fest auf der Platine angebracht, lediglich mit Eagle erstellt, der Projektordner [2]
Mit Hilfe der zwei Bohrungen lsst es der Akku wird ber ein kurzes Kabel kann im Downloads-Bereich abgeru-
sich somit passgenau montieren. Ich zur Platine herangefhrt. Alle Bauteile fen werden. Ober- und Unterseite der
habe ein doppelseitiges Layout erstellt, passen ohne groe Probleme in das Ge- Platine sind in Abbildung 1,7 und 8 dar-
bei dem fast ausschlielich SMD-Bautei- huse, nheres dazu in den folgenden gestellt, der Schaltplan des gLogger Mini
le zum Einsatz kommen, um mglichst Abschnitten. in Abbildung 10.

Aus Platzgrnden wurde auf viele Ext-


ras des vorherigen GPS Loggers verzich-
tet, so wird die Akkumulatorspannung
nicht mehr kontrolliert und die unver-
bundenen Pins sind auch nicht mehr zu
Steckern herausgefhrt. Auch auf einen
klassischen ISP-Programmierstecker
habe ich verzichtet. Auf der Unterseite
der Platine sind allerdings alle 6 not-
wendigen Kontakte als groe Ltpads
freigelegt, an denen man Kabel zu einem
passenden Stecker anlten kann (siehe
Bauanleitung). Da der Mikrocontroller in
der Regel nur einmalig oder nur sehr sel-
ten umprogrammiert werden muss, halte
ich diesen Mehraufwand fr vertretbar.

Abb. 2: Bestckung der Platine

4 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET


Abb. 3: Einbau in das Gehuse

Zusammenbau
In diesem Abschnitt mchte ich eine Dis-
Bau-
Schritt fr Schritt Anleitung zum Zu- Bauteil Beschreibung Wert tribu- Preis
form
sammenbau des gLogger Mini anbie- tor
ten, sodass jeder einen Nachbau schafft.
C1 Keramik-Kondensator 1F 0805 Alle 0,07
In der Tabelle Bentigte Bauteile (Tab. C2 Keramik-Kondensator 1F 0805 Alle 0,07
1) befinden sich nicht nur die Bauteile
fr die Platine, sondern auch alle ande- C3 Keramik-Kondensator 10nF 0805 Alle 0,05
ren Bauteile, die fr den Zusammenbau C4 Keramik-Kondensator 100nF 0805 Alle 0,05
notwendig sind. Der dort aufgefhrte
Gesamtpreis entspricht somit ziemlich C5 Keramik-Kondensator 100nF 0805 Alle 0,05
genau dem, was fr einen Nachbau aus- C6 Keramik-Kondensator 22pF 0805 Alle 0,05
gegeben werden muss (zzgl. Versand-
kosten und MwSt. bei Farnell). Das Ein- C7 Keramik-Kondensator 22pF 0805 Alle 0,05
zige, was dort nicht aufgelistet ist, sind
C8 Keramik-Kondensator 100nF 0805 Alle 0,05
zwei Schrauben zum Fixieren der Platine
im Gehuse. Diese sollten sich allerdings IC1 Low-Drop Spannungs- LP2985 SOT23- F 0,56
im Haushalt oder im nchsten Baumarkt leiter 3.3V 5L

kostengnstig auftreiben lassen. Nhe- IC2 Laderegler MAX1555 SOT23- F 2,41


res dazu in der Anleitung. 5L

Als Farnell-Alternative sei hbe-shop.de IC3 Mikrocontroller ATMega88 TQFP32 F 3,56

genannt, bei dem auch von Privat be- IC4 MicroSD-Kartenslot Hirose DM3B SMD F 2,23
stellt werden kann. Der Shop nutzt die
Farnell-Bestellnummern. IC5 GPS-Modul ST22 - P 20

LED1 SMD Leuchtdiode ROT 1206 Alle 0,08


Da fast ausschlielich SMD-Bauteile ver-
wendet werden, sollten generelle Lt- LED2 SMD Leuchtdiode GRN 1206 Alle 0,08
kenntnisse vorhanden sein. Diese Anlei-
Q1 Quarz 7,3728MHz HC49/S Alle 0,18
tung ist lediglich meine Vorgehensweise
beim zusammenbau des Gerts. Es be- R1 Widerstand 470 0805 Alle 0,10
steht kein Zwang, die selbe Reihenfol-
R2 Widerstand 10k 0805 Alle 0,10
ge einzuhalten. Mit dieser Anleitung
mchte ich lediglich auf ein paar Fein- R3 Widerstand 10k 0805 Alle 0,10
heiten bei der Montage hinweisen.
R4 Widerstand 470 0805 Alle 0,10
Schritt 1: Fangen wir mit der Oberseite X1 USB Buchse Mini-B 5 pol. SMD R 0,24
der Platine an. Diese ist relativ unkri-
tisch, alle SMD Bauteile knnen schon - Akku 600mAh iPod Mini R 5,30
aufgeltet werden. Lediglich mit den - Gehuse Hammond 1551R 5x5x- C 1,67
beiden grten Bauteilen sollte man 2cm
noch warten. Dies wre zum einen der
- Platine Ich! 10
Quarz, der nach dem Verlten mit zwei
Lthgeln auf der Unterseite das Be- Gesamtpreis 47,15
festigen des Mikrocontrollers stren
knnte. Zum anderen handelt es sich um Tab. 1: Bentigte Bauteile
das GPS-Modul. Man kann es eigentlich
auch jetzt schon auflten, wenn man al- gramm fr den Mikrocontroller arbei- zwecks Debugging sehr hilfreich.
lerdings nachher noch selber am Pro- ten mchte, sind freie UART-Leitungen Aus diesem Grund habe ich mir das

2/2011 JOURNAL - EMBEDDED-PROJECTS.NET 5


Modul fr den Schluss aufgespart. decken, sodass der Ltvorgang spter Hierfr einfach das Gert per USB entwe-
vereinfacht wird (optional). Anschlieend der an den Computer oder an ein Netzteil
Tipp: Bei Bauteilen mit vielen Pins (z. B. wird das Bauteil ausgerichtet und an zwei mit USB-Buchsen-Ausgang stecken. Wenn
die USB-Buchse) kann man ruhig viel Lt- Pads (am besten gegenberliegend) fixiert alles geklappt hat, leuchtet jetzt die rote
zinn verwenden, auch wenn Ltbrcken LED, die anzeigt, dass der Akku geladen
entstehen. Das berschssige Zinn kann b) Eine Kante wird grozgig mit Zinn wird. Zeit fr eine kleine Pause:-)
man dann mit einer Entltlitze entfernen, bedeckt und verltet
anschlieend hat man sehr gut aussehen- Schritt 6: In der Zwischenzeit kann man
de Ltstellen. Das verfahren erlutere ich c) Mit einer Entltlitze wird so lange ber- sich natrlich auch den Programmierad-
allerdings gleich noch einmal mit Bildern schssiges Zinn wieder entfernt, bis keine apter basteln. Ich habe hierfr einen 2x3-
beim Mikrocontroller (siehe Abbildung 5). Zinnbrcken mehr vorhanden sind Pin Stecker auf eine Lochraster Platine
gebracht und anschlieend an jeden Pin
Tipp: Wenn man nur SMD-1206-Bauteile d) Wiederholung von Schritt b und c bei
ein Stck Draht angeltet, welcher nach-
auf Lager haben sollte, bekommt man den verbleibenden Kanten
her mit den entsprechenden Pads auf der
diese auch ganz gut auf die 0805er Pads. Platine verbunden werden muss. Das Foto
Das Ergebnis ist eine sehr gut aussehende
Ein Beispiel dafr findet sich in der Ab- Abbildung 9 zeigt meine Konstruktion. Es
Ltstelle mit optimalem Kontakt.
bildung 4 (die 22pF Kondensatoren in der gilt Pinbelegung aus Abbildung 6.
Nhe des Quarzes). Schritt 3: Die kritischsten Bauteile befin-
den sich nun auf der Platine. Was noch Schritt 7: Sobald der Akku geladen und
Schritt 2: Nun sind SD-Slot und Mikro- der Programmieradapter verbunden ist,
fehlt, sind einige Kondesatoren, ein Wi-
controller dran. Da beide sehr geringe wird es Zeit, das Gert zu programmie-
derstand sowie (falls vorhin weggelassen)
Pinabstnde besitzen, ist das Verfahren ren. Damit das Gert Strom bekommt,
der Quarz und das GPS-Modul. Nach dem
zum Verlten bei beiden Teilen sehr hn- muss whrend dieses Vorgangs eine Mi-
erfolgreichen Lten sollte die Platine wie
lich. Ich verwende die Methode mit einer croSD-Karte eingelegt sein. Neben dem
beim nebenstehenden Bild aussehen.
Entltlitze, welche im nachfolgenden Bild Programm mssen auch die Fuses richtig
(Abbildung 5) dargestellt ist. Das Verfah- Schritt 4: Nun muss noch der Akkumu- eingestellt werden. Ich verwende hierfr
ren ist relativ simpel: lator mit der Platine verbunden werden. das Programm avrdude mit folgenden
Ausgeliefert wird er mit einem Stecker - Parametern [3]:
a) Bevor das Bauteil platziert wird, zu-
eigentlich war eine passende Buchse ge-
nchst die Pads mit etwas Ltpaste be-
plant, leider haben wenige Millimeter fr -U lfuse:w:0xdc:m -U
diesen Plan gefehlt. Aus diesem Grund hfuse:w:0xdf:m
muss der Stecker behutsam entfernt wer-
den (die Kabel nicht davor abschneiden,
Ist das Gert richtig programmiert, dr-
sonst sind sie zu kurz!). Schaut man auf
fe die grne LED nach einem Initialisie-
die Unterseite der Platine (die Seite mit
rungsvorgang mit einer Frequenz von
C und SD-Slot), so sollten die Kabel von
1Hz aufblitzen (wenn man nichts an den
links an die Vias herangefhrt werden,
eingehenden NMEA-Kommandos vern-
damit alles gut in das Gehuse passt.
dert hat). Sollte dies der Fall sein, kann
Hierbei muss man ein wenig probieren,
man nun den Programmieradapter wie-
bis es passt.
der entfernen und die Platine im Gehuse
Schritt 5: Bevor der Mikrocontroller pro- verschrauben.
grammiert wird, sollte man zunchst den
Schritt 8: Leider liefert das Gehuse nur
Akkumulator vollstndig aufladen (wer
Abb. 4: Platine Schrauben mit, um den Deckel zu befes-
wei, in welchem Zustand er ankommt..).
tigen, nicht aber fr die inneren zwei Ge-
Anzeige

6 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET


Abb. 5: Auflten der Mikrocontroller

winde zur Befestigung der Platine. Diese das Modul hchstwahrscheinlich keinen auf folgende abndern:
muss man entweder zu Hause oder im GPS-Fix. Whrend der Initialisierung
nchsten Baumarkt suchen. Bei meinem der Module leuchtet die grne LED dau- g ps _
Prototypen habe ich 2x12-Holzschrau- erhaft. Wenn sie anschlieend mit einer getNmeaSentence(nmeaBuf,
ben verwendet. Diese waren minimal relativ hohen Frequenz blinkt (um genau 28);
zu lang! Ich wrde also 2x10 oder 2x8 zu sein 5Hz), so konnte entweder die nofs _ writeString(nmeaBuf);
Schrauben empfehlen. Wichtig ist, dass SD-Karte oder das GPS-Modul nicht in-
sowohl die ueren als auch die inneren itialisiert werden. Die rote LED ist nicht
und schon wird jegliches eingehende
Schrauben nicht zu fest angeschraubt mit dem Mikrocontroller verbunden
NMEA-Kommando auf die Speicherkar-
werden drfen. Ansonsten herrscht und dient nur zum Anzeigen des Lade-
te geschrieben. Es gibt noch einige ande-
ein zu groer Druck auf den Kartenslot vorgangs (leuchtet sie bei eingestecktem
re Konfigurationsoptionen fr das ST22
und die Karte verklemmt sich beim Ein- USB-Kabel, so wird der Akku momentan
GPS-Modul. Diese sind in der Applica-
legen oder Herausnehmen. Nach dem geladen. Sobald die LED erlischt, ist der
tion Note AN0003 des Skytraq Venus6
Anschrauben also immer prfen, ob die Ladevorgang beendet und der Akku auf-
Karte noch gut passt. Auf einer Seite des geladen).
Gehuses muss man etwas vom Plastik
wegschneiden, damit Zugang zum USB- Standardmig werden nur $GPGGA-
Port und zum Speicherkarten-Slot gege- Meldungen aufgezeichnet. In der Datei
ben ist (siehe Abbildung 3). modules/gps.c lsst sich dies in der Funkti-
on gps_init() allerdings leicht verndern.
Man muss lediglich die Werte der Varia-
ble commands (Z. 31) ndern:
Software AVR
Die Software fr den Mikrocontroller be- unsigned char commands[8]
steht aus mehreren einzelnen Modulen, = {
die in der Hauptdatei zusammengesetzt 0x01, //GGA 1Hz
und abgefragt werden. Der generelle Ab- 0x00, //Keine GSA
lauf des Programms sieht wie folgt aus: 0x00, //Keine GSV
0x00, //Keine GLL
NMEA-String vom GPS-Modul holen 0x00, //Keine RMC
0x00, //Keine VTG
Wenn GPS Fix, dann NMEA-String 0x00, //Keine ZDA Abb. 7: Bottom Layer
auf SD-Karte schreiben 0x00}; //In SRAM&FLASH

Einmal als optisches Feedback die


Der Wert gibt an, in welchem Zeitinter-
LED aufblitzen lassen
vall (in Sekunden) das Kommando vom
Schlafen legen, auf den nchsten Da- GPS-Modul ausgegeben werden soll. Der
tenempfang per UART warten Wert 0 deaktiviert die jeweilige Meldung.

Es ist zu beachten, dass die LED bei je- Sollten andere Kommandos gewnscht
dem eingehenden NMEA-Kommando sein, so ist es ratsam bzw. notwendig,
blinkt, und nicht etwa bei jedem Schreib- die Prfung nach einer validen Posi-
vorgang. Sollte die SD-Karte also trotz tionsmeldung abzuschalten. Hierfr
mehrfachen Blinkens leer sein, so hatte muss man folgende Codezeilen in der
Hauptschleife (gLogger.c, Z. 95-97):

if(gps _
getNmeaSentence(nmeaBuf,
128))
{ nofs _
writeString(nmeaBuf);
Abb. 6: Bentigte Bauteile Abb. 8: Top Layer
}

2/2011 JOURNAL - EMBEDDED-PROJECTS.NET 7


Chipsatzes [4] aufgelistet. Dank an Ralf Fischer fr die Erkennung 1.1. Momentan muss man Eingaben wie
und gleichzeitige Lsung des Pro- Zielverzeichnis oder Laufwerkswahl
Die Befehlsbebliothek fr das NoFS ist blems! (falls mehrere Wechselmedien ange-
sehr begrenzt - von Auen handelt es schlossen) zur Laufzeit ttigen,
sich um eine Art WOM (Write-Only- geplant ist fr die nchste Version
Memory), ohne jegliche Lesefunktion. ein Akzeptieren von Parame-
Da ich zum derzeitigen Zeitpunkt keine Software PC tern, wodurch man ein Wech-
Verwendung fr selbige Methode hatte, selmedium dann mit einem
Da beim Beschreiben
wurde erst einmal auf sie verzichtet. In Klick auslesen und leeren
der Karte auf ein
zuknftigen Versionen wird eine Metho- kann.
Dateisystem ver-
de zum Lesen allerdings hchstwahr-
zichtet wurde,
scheinlich noch folgen. Beim Schreiben Das NoFS besitzt eine recht li-
ist das Ausle-
von Zeichenketten (Funktion nofs_wri- neare Struktur und ist nach
sen der Karte
teString) werden diese zunchst in einen folgendem Schema aufge-
am PC nicht
Buffer zwischengelagert, der die Gre baut:
komplett ohne
eines Datensektors auf der Speicherkar-
Zu s at z s of t wa r e
te besitzt. Um die Schreibzugriffe auf <Header><Daten><0x03>
mglich. Unter Linux kann
die Speicherkarte gering zu halten und
man eingebaute Tools verwen-
trotzdem keinen groen Datenverlust zu Der Header besteht aus der Zei-
den (z. B. dd), fr Windows-PCs
riskieren, wird der Buffer nur dann auf chenfolge k621.de (einfallslos, ich
habe ich eine kleine Software zum Abb. 9:
die Karte geschrieben, wenn selbiger voll wei). Danach folgen fortlaufend
Auslesen und Leeren der Karte
ist, oder es sich um den n-ten Funktions- ISP-Pro- die Daten (wobei diese kein 0x03
geschrieben. Ich nenne das Tool
aufruf handelt. Die Anzahl n kann in grammer enthalten drfen). Abschlusscha-
RawRead. Es handelt sich hierbei
der Datei modules/nofs.h variiert werden rakter ist ein 0x03 (== ETX, End
um eine Kommandozeilen-Appli-
(Konstante NOFS_WRITE_BUFFER_AF- of Text). Nachfolgende Daten
kation, geschrieben in C++. Das Tool hat
TER_NTH_COMMAND). werden ignoriert. Um eine Karte zu lee-
bestimmte Erkennungsmechanismen
eingebaut, die das Auslesen und Leeren ren gengt es, in den Ersten Sektor ein
Die aktuelle Version der Software ist 1.1.
lediglich bei Wechselmedien erlauben. k621.de<0x03> zu schreiben. Der gLogger
Das AVR-Studio Projektverzeichnis kann
Durch einen bestimmten Header, der Mini sucht immer das erste Auftreten
man im Downloads-Bereich abrufen.
sich am Beginn eines NoFS-Laufwerkes eines 0x03 und beginnt an dessen Stelle
In Version 1.1 wurde ein Fehler beho- befindet, wird zudem zustzlich ge- den Schreibvorgang. Das Dateisystem
ben, durch den vorher das Schreiben warnt, wenn man ein Nicht-NoFS-Lauf- (wobei es eigentlich gar keines ist) besitzt
immer nur bei Sektor 1 angefangen hat. werk leeren mchte. durchaus seine Schwchen, ist jedoch fr
Dadurch wrden bereits existente Pfade die Zwecke des GPS-Loggings komplett
allerdings berschrieben werden. Vielen Die aktuelle Version des Programms ist ausreichend und mit Mikrocontrollern

Abb. 10:
Schaltplan

8 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET


deutlich leichter zu Handhaben als das FAT-Dateisystem.

Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten
NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit mei-
ner NMEA Toolboxzu Google-Maps Daten konvertieren. Das RawRead Tool
inklusive Quellcode befindet sich im Downloads-Bereich.

In der neuen Version des Programms (1.1) werden nun die vergangenen Daten
nach Abfrage (Karte leeren?) wirklich komplett gelscht. Davor wurde ledig-
lich der erste Sektor berschrieben. Es hat sich allerdings herausgestellt, dass
es dadurch manchmal dazu kommen kann, dass beim Auslesen Teile von l-
teren Routen an das Ende der aktuellen Route angehngt werden. Dies ist nun
nicht mehr mglich. Weiterhin bin ich von der Dev-C++ auf die MS Visual
C++ 2010 Express IDE umgestiegen, da Dev-C++ scheinbar nicht mehr ganz so
gut gepflegt wird und die IDE teilweise recht fehlerbehaftet ist.

Einzelnachweise
[1]http://maps.google.com/maps/ms?ie=UTF&msa=0&msid=102721812355516
657756.000489127e67aca05a27f

[2]Projektordner zum Download


http://www.mikrocontroller.net/wikifiles/9/9b/GLoggerMini_eagle.zip

[3]nderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet,


Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time

[4]http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_
Venus6.pdf

Downloads
Anzeige

AVR-Studio Projektordner V1.1p01 Bugfix


http://www.mikrocontroller.net/wikifiles/6/61/GLoggerMini_1_1p01_avr.
zip

AVR-Studio Projektordner V1.1


http://www.mikrocontroller.net/wikifiles/1/1a/GLoggerMini_1_1_avr.zip

AVR-Studio Projektordner V1.0


http://www.mikrocontroller.net/wikifiles/2/27/GLoggerMini_avr.zip

RawRead V1.1
http://www.mikrocontroller.net/wikifiles/b/be/GLoggerMini_raw-
read_1_1_exe.zip

MS Visual C++ 2010 Express Projektordner fr RawRead V1.1


http://www.mikrocontroller.net/wikifiles/9/99/GLoggerMini_raw-
read_1_1_msvcpp.zip

RawRead V1.0
http://www.mikrocontroller.net/wikifiles/6/6b/GLoggerMini_rawread_exe.
zip

Dev-C++ Projektordner fr RawRead V1.0


http://www.mikrocontroller.net/wikifiles/1/12/GLoggerMini_rawread_
devcpp.zip

2/2011 JOURNAL - EMBEDDED-PROJECTS.NET 9


Zur berprfung von EKG-Gerten, EKG-berwachung-
monitoren und EKG-Langzeit Recordern bentigt man ein
Simulator der Herzttigkeiten. Die kommerziell zur Verfgung stehenden
Gerte sind sehr teuer und und mit mehreren zustzlichen Funktionen aus-
gestattet. Ziel soll ein kleiner tragbarer EKG-Simulator sein, der einfach zu
bedienen ist.

Umsetzung
Ein ATTINY45 ist hier das Herzstck des ge. Damit steht an den Ausgngen das reglers ein moderner Step-Down-Regler
Systems. Das EKG ist digitalisiert in ei- EKG-Signal als R, L, F und N zur Verf- eingesetzt ist sicher eine noch lngere
nem Array im Flash abgelegt und wird gung. Die eingebaute LED blinkt im Takt Betriebsdauer mglich. Zu Bedenken ist
aller ca. 1,3msek. ausgelesen. Die EKG- der simulierten Herzfrequenz, die 90 dann aber die mgliche Strung des Aus-
Kurve wird mittels Pulsbreitenmodulati- Schlge pro Minute betrgt. Die Strom- gangssignals durch den Step-Down-Reg-
on (PWM) und nachgeschaltetem 2-fach versorgung bernimmt eine 9V-Batterie ler. Von daher habe ich mich schluend-
Tiefpass erzeugt. Die weiteren Span- mit nachgeschalteten Lngsregler 78L05. lich fr den Lngsregler entschieden.
nungsteiler dienen der Aufteilung und Die Betriebsdauer betrgt rein rechne-
unterschiedlichen Wichtung der Ausgn- risch ca. 24h.Wird anstelle des Lngs-

Mechanischer Aufbau
Die Platine ist in ein Plastikgehuse von dem dafr vorgesehene Batteriefach. In controller mit einem Programmer ber
Conrad-Elektronik (Best-Nr.: 522706) ein- der Frontplatte ist der Schalter fr ON/ die ISP-Schnittstelle steht der Simulator
gebaut (siehe Abbildung oben) und wird OFF eingebaut und die LED. Die Kontak- zur Verfgung. Die Fuse-Bits des AVR
in das Unterteil montiert. Hierfr sind tierung zu den EKG-Elektroden erfolgt bleiben auf Werkseinstellung von 8MHz
bereits die Befestiungslcher in der Pla- ber selbst gedrehte Kontaktstifte. Nach und Teiler 8, d.h. der Systemtakt betrgt
tine vorgesehen. die 9V-Batterie liegt in dem flashen der Firmware in den Mikro- 1MHz.

Abb. 1: Schaltplan

10 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET


Software
Die Software ist in C geschrieben (mit WINAVR).

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/pgmspace.h>
#include "main.h"

//Sinus-Array
const uint8 _ t PROGMEM SINUS _ ARRAY[118] =
{54, 60, 64, 67, 75, 75, 75, 75, 67, 64, 60, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 30,
30, 60, 120, 170, 171, 171, 170, 120, 43, 30, 20, 20, 25, 35, 41, 45, 49, 52, 54, 54,
54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
54, 54, 54, 54, 59, 63, 66, 70, 74, 77, 80, 82, 84, 85, 85, 85, 85, 84, 82, 80, 77, 74,
70, 65, 59, 54, 54, 54, 54, 54, 54, 54, 54, 54};

//Variablen
volatile uint8 _ t zeiger; // zum Auslesen des Arrays
volatile uint8 _ t zaehler = 3; // Zhler fr Verzgerung

//Interrupt TIMER0 aller 1.3msek


ISR (TIM0 _ OVF _ vect) {
uint8 _ t data=0;
zaehler--;
if (zaehler == 0) {
zaehler = 3; //3fach-Verzgerung Tabellenauslesens
zeiger++; //zeiger erhhen
if (zeiger > 117){
zeiger = 0; //zeiger zurcksetzen
zaehler = 130; //Nullinienverzgerung
}
data = (pgm _ read _ byte(&SINUS _ ARRAY[zeiger]));
if ((zeiger > 40) && (zeiger <= 55)) // LED einschalten
PORTB |= (1<<PB0);
else
PORTB &= ~(1<<PB0);
OCR0B = data; // Daten ins PWM Register
}
}

int main(void) {
DDRB |= ((1<<PB0) | (1<<PB1)); // PB0 und PB1 als Ausgang setzen
//TIMER0 Init fr PWM-EKG, PWM-Frequenz ~730Hz
//Berechnung 1MHz/8(Prescaler)/171(CTC)= PWM-Frequenz
OCR0A = 171; //CTC-Register mit 171 laden
TCCR0A = ((1<<COM0B1)|(1<<WGM01)|(1<<WGM00)); //Clear on Compare Match, Fast PWM
TCCR0B = ((1<<WGM02)|(1<<CS01)); //Fast PWM, Prescaler = 8
TIMSK |= (1<<TOIE0); //OVF-Interrupt freischalten
set _ sleep _ mode(SLEEP _ MODE _ IDLE); //Init Sleep-Modus auf IDLE
sei();
while(1) { //#### Main-loop ####
sleep _ mode(); //AVR schlafen legen
}
return(0);
}

2/2011 JOURNAL - EMBEDDED-PROJECTS.NET 11


[ PROJECT ] EKG-Simulator mit ATTINY45

Ausblick

Die weitere Entwicklung geht in Richtung Miniaturisierung und Umschaltung zwischen 2


Pulsfrequenzen mittels Taster. Schluendlich soll das Ganze mal in ein Schlsselanhnger-
Gehuse passen mit vielleicht einem Lithium-Akku als Versorgung. Aktuelle nderungen
und Erweiterungen sind unter [1] zu finden.

Abb. 2: Platinenlayout

Links
Anzeige

[1]http://www.avrs-at-leipzig.de

12 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET


Auf einer Platine ist jeweils eine Minusleitung di-
rekt neben einer Sensorleitung (siehe Abbildung
2). Beim Berhren wird die Sensorleitung hoch-
ohmig mit der Minusleitung verbunden. Bei den
Pullupwiderstnden gilt desto hher der Wert
desto feinfhliger reagiert der Touch. Ich wrde
hier Werte zwischen 500 Kiloohm und 2000 Kilo-
ohm nehmen je nachdem wie man die Touchpla-
tine aufgebaut hat und wo und wie man sie ein-
setzt.

Die Auswerteeinheit Aufbau des Touch


Die Auswerteeinheit ist extrem einfach: Ein 4066 CMOS-IC be- Man muss bei der Platine eigentlich nur zwei Sachen beachten:
inhaltet 4 digitale Schalter. Wenn die Steuerleitung an den Plus-
pol gelegt wird, schaltet der Schalter durch und wenn sie an 1)Der innere Kreis darf nicht direkt an den vier Sensorflchen
Masse gelegt wird, ist er geffnet. Eine Seite des Schalters ist an anliegen, da sonst der Touch sehr feuchtigkeitsempfindlich
den Mikrocontroller angeschlossen, die andere den an Minus. wird.
Die Steuerleitungen des Schalters entsprechend an den Touch.
2)Das Gehuse muss die Sensorleitungen die zu den Sen-
Ein AVR wertet die Signale des 4066 aus und sendet, wenn der
sorflchen fhren vollstndig abdecken. Man wrde sonst
Touch berhrt wurde, dem Hostcontroller seriell die Daten.
wenn man z.B. Rechts berhrt die Leitung die nach oben
fhrt auch an Masse legen.

Touchkreis mit 4 Feldern


Eine Mglichkeit ist es, einen Touchkreis zu bauen. Natrlich Abb. 2:
kann man auch andere Formen gestalten. Bei dieser Version kann Sensorlei-
Abb.
man2:scrollen
Schaltplan
(im Uhrzeigersinn oder gegen den Uhrzeigersinn tung
ber den Kreis fahren) und hat die Mglichkeit 4 Taster (Oben,
Unten, Recht,
Links) zu benut- Abb. 3: Schaltbild
zen. Durch einen
Doppelklick (wie
beim Laptop)
wird dem Touch-
controller gezeigt
,dass es sich um
ein Tasten han-
delt und nicht
um scrollen. Ich Abb. 1: Touchpad
hab hier ein AT-
tiny13 eingesetzt,
weil er die bentigten Portpins hat, sehr bekannt ist, oft einge-
setzt wird und zudem preiswert ist.

2/2011 JOURNAL - EMBEDDED-PROJECTS.NET 13


Funktionsweise der Software des AVRs

Im Hauptprogramm wird erst kontrolliert, ob zu hohe Feuch-


tigkeit herscht. Anschliessend ob die Tastensperre aktiviert Hinweis: Dieses Programm ist lediglich ein Testprogramm,
werden sollte. Schlielich werden noch alle Toucheingnge ab- welches die Berhrungen ber 3 Leds anzeigt. Wenn man den
gefragt: Wurde eine Sensorflche berhrt, wird die alte Berh- Touch in der Praxis einsetzen will, muss man das Programm
rung mit der jetzigen verglichen. Wenn ein danebenliegendes umschreiben und eventuell Funktionen wie: Tasten hinzufgen
Feld berhrt wurde, wird mit dem Uhrzeigersinn scrollen oder , etc. erweitern. Integriert werden kann die Software entweder
gegen den Uhrzeigersinn scrollen in Register 18 als Zustand ge- ber einen Timerinteruppt (im Host) oder wie oben beschrieben
speichert. Danach oder wenn ein anderes Feld berhrt wurde mittels z.B externen ATtiny, welcher ber eine Schnittstelle Da-
wird die jetzige Berhrung einfach in das Register, wo die alte ten mit dem Host bermitteln kann.
Berhrung ist, entsprechend verschoben.

;+----------------------------------------------------------------------
;| Title : Touchkreiscode
;+----------------------------------------------------------------------

;| Schaltung : Die Anschlsse PB4, PB2, PB1, PB0 sind an die 4


;| 4066 IC-Ausgnge angeschlossen. Die Anderen an
;| Minus. Die Steuereingnge des 4066 sind an die
;| 4 Touchfelder angeschlossen mit hochohmigen
;| Widerstnden zu Plus (damit die Eingnge nicht
;| wahllos an und ausschalten)
;+----------------------------------------------------------------------
;| Prozessor : ATtiny13 , ATmega8
;| Takt : egal
;| Sprache : Assembler
;| Datum : heute
;| Version : 1.1
;| Autor : Tobias Frintz, 15
;| Tobias-Frintz@web.de
;+----------------------------------------------------------------------
.include "AVR.H"
;------------------------------------------------------------------------
;Reset and Interrupt vector ;VNr. Beschreibung
rjmp main ;1 POWER ON RESET
reti ;2 Int0-Interrupt
reti ;3 Int1-Interrupt
reti ;4 TC2 Compare Match
reti ;5 TC2 Overflow
reti ;6 TC1 Capture
reti ;7 TC1 Compare Match A
reti ;8 TC1 Compare Match B
reti ;9 TC1 Overflow
reti ;10 TC0 Overflow
reti ;11 SPI, STC Serial Transfer Complete
reti ;12 UART Rx Complete
reti ;13 UART Data Register Empty
reti ;14 UART Tx Complete
reti ;15 ADC Conversion Complete
reti ;16 EEPROM Ready
reti ;17 Analog Comparator
reti ;18 TWI (IC) Serial Interface
reti ;19 Store Program Memory Ready
; r16 ist das Arbeitsregister
;
; r17 speichert die alte Berhrung:
; oben = 1
; rechts = 2
; unten = 3
; links = 4
;
; r18 ist das Register in dem das Ausgangssignal steht

14 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET


; Feuchtigkeitsfehler = 0b00000001
; Tastensperre = 0b00000111
; Gegen den Uhrzeigersinn = 0b00000010
; Mit dem Uhrzeigersinn = 0b00000100
; Obengetastet = 0b00000101
;------------------------------------------------------------------------
;Start, Power ON, Reset
main: ldi r16,lo8(RAMEND)
out SPL,r16
ldi r16,hi8(RAMEND)
out SPH,r16
sbi DDRC,0 ;Leds auf Output
sbi DDRC,1
sbi DDRC,2
sbi PORTB,0 ;Pullup einschalten fr Touch
sbi PORTB,1
sbi PORTB,2
sbi PORTB,4
ldi r18,0b00000000
clr r19
clr r20
clr r21
clr r22
;------------------------------------------------------------------------
mainloop: wdr
rcall Tastensperre
out PORTC,r18
sbis PINB,0
rjmp Obenberuehrt
sbis PINB,1
rjmp Linksberuehrt
sbis PINB,2
rjmp Untenberuehrt
sbis PINB,4
rjmp Rechtsberuehrt
rjmp mainloop
;------------------------------------------------------------------------
Obenberuehrt:
ldi r16,2
cp r17,r16
breq im _ uhrzeigersinn
ldi r16,4
cp r17,r16
breq geg _ uhrzeigersinn
ldi r17,1
rjmp mainloop
;--------------------------------------------------------------------------
Rechtsberuehrt:
ldi r16,3
cp r17,r16
breq im _ uhrzeigersinn
ldi r16,1
cp r17,r16
breq geg _ uhrzeigersinn
ldi r17,2
rjmp mainloop
;-------------------------------------------------------------------------
Untenberuehrt:
ldi r16,4
cp r17,r16
breq im _ uhrzeigersinn
ldi r16,2
cp r17,r16
breq geg _ uhrzeigersinn
ldi r17,3
rjmp mainloop

2/2011 JOURNAL - EMBEDDED-PROJECTS.NET 15


[ PROJECT ] Touchpad - do it yourself

;----------------------------------------------------------------------
Linksberuehrt:
ldi r16,1
cp r17,r16
breq im _ uhrzeigersinn
ldi r16,3
cp r17,r16
breq geg _ uhrzeigersinn
ldi r17,4
rjmp mainloop
;---------------------------------------------------------------------
Tastensperre:
sbic PINB,0
ret
sbis PINB,1
ret
sbic PINB,2
ret
sbis PINB,4
ret
;jetzt ist die tasstensperre aktiviert
ldi r18,0b00000111
out PORTC,r18
ldi r17,100

Aktiviert: wdr
rcall Feuchtigkeit
sbis PINB,0
rjmp Aktiviert
sbic PINB,1
rjmp Aktiviert
sbis PINB,2
rjmp Aktiviert
Anzeige

sbic PINB,4
rjmp Aktiviert
ldi r18,0b00000000
out PORTC,r18
ret
;---------------------------------------------------------------------
im _ uhrzeigersinn:
ldi r18,0b00000100
ldi r17,100
rjmp mainloop
;---------------------------------------------------------------------
geg _ uhrzeigersinn:
ldi r18,0b00000010
ldi r17,100
rjmp mainloop
;---------------------------------------------------------------------
Feuchtigkeit:
sbic PINB,0 ; Wenn auf dem Touchpad Wasser ist
ret ; sind alle Touchfelder "berhrt"
sbic PINB,4 ; dieses Unterprogramm ist dazu da
ret ; diesen Fehler zu erkennen und es
sbic PINB,2 ; dem Host mitzuteilen
ret ; "Reinigen sie ihr Touchfeld"
sbic PINB,1
ret
rjmp Feuchtigkeitsfehler
;---------------------------------------------------------------------
Feuchtigkeitsfehler:
ldi r18,0b00000001
out PORTC,r18
ldi r17,100
rjmp Feuchtigkeitsfehler

16 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET


Touchkreis mit mehr als 4 Feldern
Wenn man ein Touchkreis mit mehr als 4 Touchfelder bauen will, braucht man fr
jede weiteren 4 Felder zustzliche einen 4066 IC. Die ist eine platzraube-
nende und teuere Lsung. Deswegen habe ich ein Touchkreis entwickelt,
mit dem man beliebig viele Felder (Anzahl durch 3 teilbar sind) mit nur
einem IC auswerten kann. Zustzlich kann man wie bei dem einfache-
ren 4-Feld-Touchkreis Tasten einzeln auswerten. Jedoch kann man hier
nur 3 Tastfelder (mit Dioden) auswerten ohne noch einen Zustzli-
chen IC zu verwenden. Das Prinzip von diesem Touch ist sehr ein-
fach:

Wenn ein Berhrung von ...


1 nach 2 stattfand ist einmal mit dem Uhrzeigersinn
2 nach 3 stattfand ist einmal mit dem Uhrzeigersinn
3 nach 1 stattfand ist einmal mit dem Uhrzeigersinn
1 nach 3 stattfand ist einmal gegen den Uhrzeigersinn
3 nach 2 stattfand ist einmal gegen den Uhrzeigersinn
2 nach 1 stattfand ist einmal gegen den Uhrzeigersinn
... gescrollt worden.
Abb. 4:
Touchkreis
beliebig

Tasten
Wenn man auf dem Touchpad auch OK und Abrechen oder hnliche Taster zu-
stzlich zu dem scrollen integrieren knnte, wrde man kein einzigen echten
Taster mehr bentigen und htte ein extrem schickes robustes Design (wenn
man will sogar Wasserdicht). Hier die Idee zur Umsetzung:

Tasten bei dem Touch mit 4 Feldern:

mainloop: wdr
rcall Tastensperre
out PORTC,r18
sbis PINB,0
rjmp Obenberuehrt
sbis PINB,1
rjmp Linksberuehrt
sbis PINB,2
rjmp Untenberuehrt
sbis PINB,4
rjmp Rechtsberuehrt
rjmp Nichtsberuert
rjmp mainloop

Wenn man am Ende der mainloop das Unterprogramm Nichtsberuert steht wird es
immer aufgerufen falls kein Feld berhrt wurde. Inkrementiert man jedesmal den Inhalt Abb. 5:
eines Registers sobald das Unterprogramm aufgerufen wurde, lsst sich feststellen wie lange der Zustand Touchkreis 2
Nichtsberhrt angehalten hat. Wird dann z.B. oben berhrt und war die alte Berhrung auch oben muss man
das Nichtsberhrtregister berprfen. Ich wrd sagen zwischen 0,5 und 2 Sec kann man das Tasten zhlen
lassen.

Tasten bei dem Touch mit mehr als 4 Feldern:

Das Prinzip ist genau das gleiche wie bei dem Touch mit 4 ja noch ein 4066 Eingang frei. Wenn man 4 Dioden an 4 neben-
Feldern. Nur bei diesem hier kann man nicht die 3 sich imm- einanderliegende Felder anschliet hat man schon ein Tastfeld
merwiederholenden Felder als Taster nehmen weil sie an ver- in dem Kreis. Man scrollt dann durch das Men besttigt mit
schiedenen Stellen am Touch vorkommen und man so nicht fest- einem Doppelklick auf dem Touch oben und als letzten Men-
stellen kann, wo das Touch berhrt wurde.Zum Glck hat man punkt wrde ich Zurck oder Abbrechen nehmen.

2/2011 JOURNAL - EMBEDDED-PROJECTS.NET 17


[ PROJECT ] Touchpad - do it yourself

Probleme
Bei zu kleinen Touchfeldern: feuchten Rumen befindet).
Man muss darauf achten das man die Touchfelder (vorallem bei
In Handgerten:
dem Touchkreis mit mehr als 4 Feldern) nicht zu klein gestaltet
sind, denn sonst berhrt man beim darberfahren vielleicht zu- Hier hat man den Vorteil, dass man fast parallel zum Gehu-
fllig ein Feld nicht und dann kommt es zu Fehlern beim Aus- se den Touch berhrt (-> groe Auflegeflche daher kann man
werten. die Pullups vor den 4066er Eingngen ein bisschen senken) In
Handgehusen bietet sich oft nicht viel Platz. Daher wrde ich
In Standgerten: eine kleine doppelseitige Platine verwenden auf der eine Seite
Das Problem in Standgerten ist, dass man normalerweise waa- der Touch und auf der Rckseite die Auswerteelektronik kom-
gerecht tippt. Daher berhrt nur die Fingerkuppe den Touch. plett in SMD kommt.
Ich wrde hier die Sensorflchen ein bisschen nher an den
Minuskreis legen, auerdem die Pullupwiderstnde vor den
4066er Eingngen erhhen (nicht zu hoch sonst treten Proble-
me auf wenn man schwitzt, dagegen Haucht oder sich in stark

Anzeige

18 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET


Pressemitteilungen
Jetzt als mobile App fr iPhone und iPod Touch: Die PCB-Toolbox fr Leiterplat-
tenentwickler
Nach groer Resonanz zur be- Wrmemanagement mit Aluminiumleiterplatten
liebten Toolbox auf www.lei-
ton.de hat die LeitOn GmbH Leiterbahnerwrmung ber Strom
eine mobile App erstellt. Fr
Biegeradien von flexiblen Leiterplatten
nur 0,79 Euro ist diese App mit
6 verschiedenen Tools bei iTu- Spannungsabfall auf Leiterbahnen
nes erhltlich und beinhaltet
Berechnungshilfen, die sonst Impedanzbetrachtung
erheblich teurer angeboten
werden. Hier finden Entwick- Volumen- Gewichtsrechner
ler, die mit Wrmemanage-
ment von Aluminiumleiter- Mobil, online oder persnlich: LeitOn bietet Ihnen umfas-
platten, Hochfrequenzen, sende Beratung und Service
Ho c h s t r o m a nwe ndu n g e n
Leiton: http://www.leiton.de
und flexiblen Leiterplatten zu
tun haben ntzliche Werkzeu-
ge zur Berechnung kritischer
Werte, teils mit berechneten Kennlinien. Hier ein kurzer ber-
blick der enthaltenen Tools:

Pressemitteilungen im embedded Die neue Homepage ist online:


projects Journal
Im embedded projects Journal sollen ab sofort regelmig
Pressemeldungen gedruckt werden. Primr richtet sich das
Angebot an alle Beteiligten Leser und Sponsoren des Hefts.
Neue Produkte, Interessante Links, etc. knnen einfach und
unkompliziert prsentiert werden.

Fr Fragen und Pressemeldungenwendet euch bitte an


info@embedded-projects.net. Inhalte von Pressemitteilungen
knnten sein:

Neue Produkte aus dem Bereich Embedded Systeme

Wissenwertes aus der Branchen

Spannende kleine Open-Source Projekte

Ankndigungen fr Linux Tag bzw. Hardwaretreffen in


einer Region oder Stadt
http://journal.embedded-projects.net
Kontakt: info@embedded-projects.net

Das embedded projects Journal im Papierabo fr 12,99 EUR pro Jahr


Ab sofort knnen Leser das Open-Source Projekt auch finanziell soren oder Schler/Studenten die die Ausgabe in Stapeln von
untersttzen. Wie? Ganz einfach. Man kauft sich online ber die 5-20 in den Lehreinrichtungen auslegen.
Homepage http://journal.embedded-projects.net das Jahresabo
fr die Papierversion. Durch diese Einnahmen knnen Druck Fr Fragen rund um das Abo wendet euch bitte an
und Porto fr die Papierversion finanziert werden. Zu dem gibt info@embedded-projects.net.
es immer mehr sogenannte Postboten, dass sind Lehrer, Profes-

2/2011 JOURNAL - EMBEDDED-PROJECTS.NET 19


Einleitung
Wer glaubt das Internet besteht nur aus eMail, Fa-
cebook und YouTube etc, der verpasst die
aufregende Welt der embedded Ethernet Gerte. Wie wre es, wenn man
seine Gerte von berall auf der Welt kontrollieren kann? Die Solaran-
lage mit dem Smart-Phone vom Strand aus steuern, die Heizung
zum Feierabend vom Bro aus einschalten und die Rollden
automatisch steuern? Aber nicht nur fr
das Eigenheim, natrlich auch fr die
Industrie ist dies von groer Bedeu-
tung. So kann man seine Produktions-
prozesse von jedem Ort der Welt ganz einfach ber das Internet
kontrollieren. Vorausgesetzt die Steuerung hat einen Zugang
zum weltweiten Netz.

Und genau darum geht es hier...

Im Folgenden zeigen wir Schritt fr Schritt, wie man mit


geringem Aufwand innerhalb krzester Zeit zu einem vollstndigen embedded Web-
se verkommt, der einfache Steuerungsaufgaben bernehmen kann. Das Projekt ist absichtlich sehr einfach
gehalten und soll nur das Prinzip beschreiben. Deutlich komplexere Systeme sind jederzeit problemlos mglich.

Die Projektanforderungen ARM7 Webserver Kompakt


Konkret wollen wir einen kleinen embedded Webserver mit fol- Schon wieder ein neues Mikrocontroller Modul werden sich
genden Anforderungen bauen: die einen Leser denken, das ist genau die Lsung, nach der ich
schon immer gesucht habe, die anderen. Die Rede ist von einem
Wenig externe Bauteile neuen embedded Modul auf Basis einer ARM7 CPU von Atmel,
welches viel Leistung und viele I/O Schnittstellen auf kleinstem
Steuerung von 2 Relais ber ein Web-Interface
Raum bietet und sich ideal in eigene Applikation einbinden
Webseiten sollen auf Micro-SD Karte gespeichert werden lsst.
und einfach austauschbar sein
Die Idee fr die Entwicklung des Moduls ergab sich aus der Su-
Steuerung der Relais ber ein einfaches CGI Interface che nach einer kompakten Steuerung, die sich einfach in C pro-
grammieren lsst, einen Ethernet Port besitzt und in der Lage ist
Fixe Netzwerkkonfiguration (IP Adresse) auch komplexe Peripherie zu steuern sowie Messdaten direkt zu
verarbeiten und speichern.
Das Ziel ist ein einfacher Internet-Schalter. Also ein Gert, mit
dem man ber eine Webseite z.B. zwei Gerte ein und aus schal- Die zweite wichtige Voraussetzung war, dass das Modul voll-
ten knnen soll. stndig durch OpenSource Software untersttzt werden muss.
Ein echtes Multitasking Betriebssystem mit vollstndigem TCP/
IP Stack sollte zum Einsatz kommen.

So war die Idee geboren. Ein kompaktes Mikrocontroller Modul


auf Basis des AT91SAM7XC512 von Atmel wurde entwickelt
und ein Board Support Package auf Basis
Abb. 1: des OpenSource Echtzeit Betriebssystems
eNet-sam7X (RTOS) Nut/OS wurde zusammen gestellt.

20 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET


eNet-sam7X
Im Herzen ganz gro, im Platz ganz klein.

Das Herz des Boards ist eine ARM7 CPU von Atmel, der
AT91SAM7XC512. Dieser Mikrocontroller bietet alles, was
das Entwickler Herz hher schlagen lsst. Neben 512 KB
internem Flash fr eigene Programme und Daten sowie
128KB statischem RAM bietet er diverse Peripheriekom-
ponenten wie z.B. 100 MBit Ethernet, zwei vollwertige
und eine Debug UART, einen CAN-Bus, zwei SPI- und ei-
nen I2C Bus, ein I2S Interface, Timer, GPIOs, PWMs, A/D
Wandler USB 2.0 und vieles mehr. Ergnzt wird der Mi-
krocontroller auf dem Board durch einen Ethernet PHY
von Davicom, ein 4 MB Dataflash (ideal als groer Da-
tenspeicher fr logging Aufgaben, Webseiten, User Daten
usw.), einer Batterie gepufferten Echtzeituhr (RTC) sowie
einem 3.3V Schaltregler, einem Mini-USB Connector so-
wie einem Micro-SD Slot (Noch mehr Speicher fr groe
Datenmengen). Und das alles auf der Flche eines DIL64
ICs (siehe Abbildung 1 und Titelbild).

Viele Mikrocontroller Boards und Evaluations-Plattfor-


men sind als eigenstndiges Gert konzipiert und schrn-
ken die Nutzbarkeit damit auf den gegebenen Form-Fak-
tor sowie die vorhandene Peripherie ein. Das eNet-sam7X
nicht! Es ist explizit als Drop-In Lsung zur Entwicklung
eigener Steuerungssysteme und Web-Appliances gedacht
und bietet dem Entwickler daher auf seinen zwei Stecker-
leisten alle freien Signale der SAM7 CPU, das Ethernet In-
terface, USB, MMC, JTAG sowie einen Spannungsausgang
mit 3.3V, der zur Versorgung des Baseboards verwendet
werden kann. Da das Board einen eigenen Schaltregler be-
sitzt kann so die gesamte Schaltung einfach eine eine ex-
terne 5-24V Spannungsquelle angeschlossen oder z.B.
ber den USB Bus mit Strom versorgt werden. Abb. 2: Blockdiagramm
Der Schaltplan des eNet-sam7X ist unter [1] zu finden.

Die Schaltung
Wie einfach es ist, mit dem eNet-sam7X Modul zum Die Belegung dieser Stiftleiste erlaubt direkt das Aufstecken des
Beispiel einen Internet-Schalter zu bauen, zeigt Ab- Sparkfun FTDI Basic Breakout 3.3V Moduls, einem einfachen 3.3V
bildung 3. RS232 => USB Converter. Die Schaltung kann direkt mit 12V 24V be-
trieben werden, je nach der Betriebsspannung der gewhlten Relais.
Achtung: Zu beachten ist, dass diese Schaltung ledig- Die 3.3V Versorgungsspannung fr das Mikrocontroller Modul wird
lich ein Schaltungsbeispiel ist und bei der Verwen- direkt auf dem Modul mit einem Schaltregler erzeugt. Das Modul
dung von Netzspannung in eigenen Schaltungen di- stellt die 3.3V auf Pin 34 zur Verfgung, so dass weitere Hardware auf
verse Vorschriften zu beachten sind, auf die an dieser dem Baseboard gleich mit versorgt werden knnte.
Stelle nicht nher eingegangen wird.
Die beiden Relais sind ber Ansteuertransistoren an die GPIO Pins
Das Herz der Schaltung ist natrlich das eNet-sam7X PA21 und PA22 des AT91SAM7XC512 angeschlossen. Die Transistoren
Modul. Als externe Beschaltung ergibt sich lediglich werden bentigt, da die CPU nicht gengend Strom liefern kann, um
noch die Ethernet Buchse (hier eine mit Auto MDIX die Relais direkt zu schalten. Die Relais sind in diesem Beispiel als
Funktionalitt, d.h. automatischer Kreuzung des Wechsler ausgelegt und knnen ber die Ausgnge an Klemme KL2 je
Ethernet Kabels) mit den Terminierungs-Widerstn- einen Verbraucher (z.B. eine Lampe) schalten. Im Folgenden mchte ich
den, ein Reset-Taster, zwei Relais mit Ansteuertran- zeigen, wie einfach es ist diese Relais ber eine Webseite zu steuern.
sistoren sowie ein JTAG Stecker (10-polige ARM Bele-
gung) und eine Stiftleiste um zu debug Zwecken auf
die RX / TX Signale der UART0 zugreifen zu knnen.

2/2011 JOURNAL - EMBEDDED-PROJECTS.NET 21


Abb. 3: Webserver
mit Relais

Nut/OS
Ein modulares OpenSource Echtzeit-Betriebsystem mit TCP/ Nut/OS bietet echtes Multitasking und ist dabei sicher und ein-
IP Stack fr Mikrocontroller fach anzuwenden. Sein kooperatives Multitasking garantiert,
dass ein Thread die Kontrolle nur an eindeutig definierten
Eine komplexe Hardware wie diese ganz ohne Betriebssystem Punkten abgibt. In den meisten Fllen kann so ohne zustzliche
programmieren? Das ist aufwndig, kostet viel Zeit fr die Ein- Absicherung auf gemeinsam genutzte Ressourcen zugegriffen
arbeitung und bietet lauter Fehlerquellen. Warum also nicht werden. Daraus ergibt sich kleiner und einfacher Code fr die
nach einer Lsung suchen, die uns das Entwickeln von Treibern Anwendung, sowie ein geringes Risiko von Race-Conditions
weitestgehend abnimmt und ein Programmiermodell bietet, und Deadlocks. Deterministische Interrupt Latenzzeiten bieten
wie wir es vom PC her kennen? Das soll gehen? Auf einem Mi- hartes Echtzeitverhalten innerhalb festgelegter Zeitgrenzen,
krocontroller? unabhngig von aktuell verfgbaren Ressourcen.
Gesucht, gefunden! Das Ethernut Projekt [2] mit seinem Open- Aber das Beste zum Schluss, Nut/OS bring mit Nut/NET einen
Source Echtzeit-Betriebssystem Nut/OS [3] ist genau die richtige vollstndigen TCP/IP Stack mit BSD artigem Socket Interface
Lsung. Das Ethernut Projekt wurde 2001 gegrndet und seit mit. Neben TCP und UDP Sockets sind diverse High-Level Pro-
dem wurde das Nut/OS zu einem sehr modularen und leicht tokolle implementiert. z.B. ARP, ICMP, PPP, DHCP, DNS, SNTP,
konfigurierbaren Multitasking-Betriebssystem fr Mikrocont- FTP, TFTP, SYSLOG, HTTP, WINS (Subset) usw.
roller entwickelt. Ursprnglich fr 8 Bit Architekturen (in erster
Linie Atmel AVR) entwickelt, untersttzt es heute eine ganze Das gesamte API Design von Nut/OS ist an den POSIX Stan-
Reihe unterschiedlicher CPUs. Unter anderem den hier verwen- dard angelehnt und verwendet bekannte Treiberkonzepte wie
deten AT91SAM7XC512 von Atmel. Nut/OS steht unter der BSD z.B. Character- und Block-Devices, Bus-Abstraktionen und der
Lizenz und ist damit ohne Probleme fr Closed- wie auch fr gleichen mehr. Das macht den Einstieg einfach und mittels der
OpenSource Projekte verwendbar. diversen Beispiele findet sich auch der Einsteiger schnell zurecht

Das Betriebssystem skaliert hervorragend mit den Mglichkei-


ten der jeweiligen Architektur. Durch den modularen Aufbau Erste Schritte: Die Vorbereitungen
des Betriebssystem werden nur die Teile in eigene Programme
eingebunden, die von der Anwendung tatschlich bentigt wer- Damit wir loslegen knnen, braucht es natrlich noch einen
den. Das hlt den Code klein und spart Ressourcen, von denen Cross-Compiler bzw. eine Toolchain fr das Board. Das Nut/OS
man auf einem Mikrocontroller bekanntlich nie genug hat. ist auf die Verwendung der GNU ARM Compiler Suite ausge-
legt. Diese gibt es sowohl fr Windows als auch fr Linux und
Die Anpassung an das Zielsystem erfolgt in der Regel automa- den Mac. Fr Windows und Linux bietet sich zum Beispiel die
tisch. Zur Feinabstimmung steht mit dem Nut/OS Konfigurator eCross ARM Toolchain [4] oder die Yagarto Toolchain [5] an. Bei-
eine grafische Oberflche unter Linux, Windows und OS X zur de sind OpenSource und natrlich frei verfgbar. Sie enthalten
Verfgung. den GNU C Compiler, Debugger sowie die Standard C Library
22 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET
(Newlib). Um an dieser Stelle nicht auszuufern, gehe ich nicht tersttzung fr das eNet-sam7X Board in der offiziellen Ether-
weiter auf die Installation ein und mchte auf unsere Webseite nut Distribution enthalten sein. Bis dahin kann man sich ein
[6] verweisen. angepasstes Ethernut Paket auf der Webseite zum eNet-sam7X
Board Support Package [6] herunter laden. Hier findet sich auch
Neben der Toolchain bentigen wir jetzt natrlich noch das Nut/ eine entsprechende Installationsanleitung.
OS Betriebssystem. Ab der Ethernut Version 4.9.11 wird die Un-

Jetzt kann es losgehen: Der eigene Webserver


Alles ist soweit vorbereitet, jetzt kann es losgehen! Der eigene 4)CGI Funktionen registrieren und Webserver Threads star-
Webserver soll erstellt werden. Was auf den ersten Blick furcht- ten.
bar kompliziert klingen mag, ist den zweiten Blick eigentlich
ganz einfach, da das meiste bereits von den Nut/OS Bibliothe- 5)Auf eingehende Verbindungen von einem Webbrowser war-
ken abgenommen wird. ten und diese bearbeiten. Relais setzen, wenn die korrekte
Anforderung vom Webbrowser geschickt wurde.
Unser Programm muss dafr mehrere Dinge tun:
All das passt in ca. 250 Zeilen Code! Das meiste erledigen die
1)Hardware initialisieren (GPIO Pins Konfigurieren, UART Nut/OS Webserver Funktionen bereits im Hintergrund. Der
Treiber laden fr Debug-Zwecke, Netzwerktreiber initiali- bersichtlichkeit halber mchte ich an dieser Stelle den Pro-
sieren, MMC Treiber initialisieren. grammcode nur ausschnittsweise besprechen. Der vollstndige
Sourcecode kann unter [7] heruntergeladen werden.
2)Micro-SD Karte mounten (die MMC Karte dient uns als
Speicherort fr die Webseiten) Zunchst wollen jedoch kurz das Benutzer Interface unseres
Internet-Schalters vorstellen...
3)Netzwerk konfigurieren (IP Adresse einstellen)

Die Webseite
Da wir ja ein embedded Gert bauen, hat unsere Anwendung anlagen Steuerung meines Kollegen.
bzw. unser Gert natrlich kein klassisches grafisches Benutze-
rinterface. Es ist ja gerade unsere Intention ein Gert zu bauen, Die Webseite fr unseren Webserver knnte wie in Abbildung 4
welches von berall auf der Welt gesteuert werden kann. Also dargestellt aussehen.
verlagern wir unser Benutzerinterface einfach auf eine Websei-
te. Auf dieser Webseite knnen wir natrlich wie
auf einer klassischen Webseite diverse grafische
Gestaltungselemente, Info- und Hilfs-Texte unter-
bringen und zustzliche Informationen ablegen.
Das eigentlich Interessante jedoch ist, dass wir Be-
triebszustnde unseres Gertes, Messwerte und
diverses mehr darstellen knnen. Hierzu eignen
sich hervorragend die Web-2.0 Technologien. Ein
Schlagwort Ajax ist sicher jedem ein Begriff. An
dieser Stelle wollen wir jedoch bei einem einfa-
chen Beispiel bleiben und ber einfache Web-For-
mulare mit unserer Anwendung kommunizieren.
Wer jedoch selber mit Ajax und anderen Web-2.0
Technologien experimentieren mchte, dem kann
ich an dieser Stelle nur die diversen freien und
kommerziellen Javascript Bibliotheken wie z.B.
JQuery, ExtJS etc. empfehlen. Ein nettes Beispiel
fr eine hnliche Anwendung mit dynamischer Abb. 4: Webseite
Ajax Untersttzung findet man unter [9]. Es han-
delt sich dabei um die eNet-sam7X basierte Solar-
Stellenausschreibungen

2/2011 JOURNAL - EMBEDDED-PROJECTS.NET 23


Der eigentliche funktionale Kern der Seite ist hier ein einfaches Formular. Dir 4 Set und Clear Buttons (je einer pro Relais) sind
dabei als einfache Submit-Buttons mit einem eindeutigen Namen (set 1, clear1, set2, clear2) markiert.

Der HTML-Code fr das Formular sieht dabei wie folgt aus:

<table bgcolor=#E0E0E0 height=130 width=300>


<tr>
<TD height=29 width=100>Relais 1:</TD>
<TD height=29 width=100><input type = submit name=set1 value=Set
size=8></TD>
<TD height=29 width=100><input type = submit name=clear1
value=Clear size=8></TD>
</tr>
<tr>
<TD height=29 width=100>Relais 2:</TD>
<TD height=29 width=100><input type = submit name=set2 value=Set
size=8></TD>
<TD height=29 width=100><input type = submit name=clear2
value=Clear size=8></TD>
</tr>
</table>

</form>

Klickt der Benutzer nun z.B. auf den Button Set in der Zeile tet die bertragenen Parameter aus und schaltet anhand der
Relais 1, so sendet der Webbrowser einen HTTP Post Request Button-Namen das entsprechende Relais entweder ein oder aus.
an unseren Webserver und bertrgt dabei den Namen des So einfach lsst sich ein Internet-Schalter realisieren. Die oben
Buttons an die CGI Funktion (cgi-bin/relais.cgi). Diese wer- abgebildete Webseite liegt unserem Beispiel natrlich bei.

Das Programm
Nachdem wir jetzt bereits unser Benutzerinterface (die Websei- sich der Anwender jedoch nicht kmmern. Eine Besonderheit
te) vorgestellt haben, fehlt noch das eigentliche Programm, wel- gibt es dennoch: wie bereits erwhnt ist Nut/OS ein Multitas-
ches wir auf das eNet-sam7X Board laden und dort ausfhren king Betriebssystem und setzt dabei auf kooperatives Multitas-
knnen. king. Das bedeutet, dass das eigentliche Hauptprogramm (also
die main() Funktion) selbst bereits ein eigenstndiger Thread
Fangen wir also zunchst mit dem Hauptprogramm an. Natr- ist. Dies wird am Ende der main() Funktion deutlich, wo das
lich besitzt ein Nut/OS Programm auch eine main() Funktion! Programm in eine Endlosschleife luft. Zuvor wird die Prioritt
Wie bei jedem anderen Programm auch, ist dies der Einsprung- des main-Threads auf die niedrigste Stufe gesetzt. Die eigentli-
punkt und der Start der eigentlichen Anwendung. Nut/OS selbst che Arbeit erledigen spter die Webserver Threads.
erledigt zuvor bereits einiges an Initialisierung, darum muss

Das Hauptprogramm

int main(void)
{
uint32 _ t baud = 115200;
uint8 _ t i;
int rc;

uint8 _ t mac[] = DEFAULT _ MAC; /* MAC address that shall be assigned to the ethernet
device */

/* Initialize the GPIOs used to control the relais */


GpioPinConfigSet(PORT _ RELAIS, PIN _ RELAIS1, GPIO _ CFG _ OUTPUT);
GpioPinSet(PORT _ RELAIS, PIN _ RELAIS1, 0);

GpioPinConfigSet(PORT _ RELAIS, PIN _ RELAIS2, GPIO _ CFG _ OUTPUT);
GpioPinSet(PORT _ RELAIS, PIN _ RELAIS2, 0);

24 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET


Die main() Funktion unter Nut/OS bekommt keine Parameter Wenn man vor hat ein Produkt mit einem Netzwerk Interface zu
bergeben und ist daher als void deklariert. Im Folgenden wer- vertreiben, sollte man sich auf jeden Fall einen entsprechenden
den einige Variablen definiert, die spter bentigt werden. Inter- Adressraum eindeutiger MAC Adressen registrieren lassen.
essant sind hier nur die Baudrate sowie die MAC Adresse. Diese
ist im Programmkopf als Konstante hinterlegt. Dieses Beispiel Nach der Variablendefinition werden als erstes die GPIO Pins,
verwendet im brigen eine MAC Adresse, bei der das lokal die mit unseren Relais verbunden sind initialisiert und auf low-
verwaltet Flag gesetzt ist. Das bedeutet, dass diese Adresse Pegel gesetzt, so dass die Relais nach dem Einschalten zunchst
nicht weltweit eindeutig ist und wir selber sicherstellen ms- einmal abfallen. Im nchsten Schritt werden die Peripherie-
sen, dass die MAC Adresse in unserem Netzwerk eindeutig ist. Schnittstellen Initialisiert...

/*
* Initialize the uart device.
*/
NutRegisterDevice(&DEV _ UART0, 0, 0);
freopen(DEV _ UART0 _ NAME, w, stdout);
freopen(DEV _ UART0 _ NAME, r, stdin);
_ ioctl( _ fileno(stdout), UART _ SETSPEED, &baud);

printf(\n\neNet-sam7X Webserver demo... Nut/OS Version %s\r\n, NutVersionString());

/* Initialize the MMC card and mount the filesystem */


init _ mmc();

Treiber werden unter Nut/OS im Allge- /* Initialize the MMC card auf das Dateiesystem zugegriffen wer-
meinen mit der Funktion NutRegister- and mount the filesystem */ den. Auch hier bietet Nut/OS eine sehr
Device() registriert. DieseFunktion initi- komfortable API, so dass wir einfach
alisiert die Schnittstelle und stellt sicher, mit den Funktionen open / fopen / read /
dass unser Programm ber den Device init _ mmc(); write usw. auf die Dateien auf der MMC
Descriptor bzw. den Device Namen (hier Karte zugreifen knnen. Ganz so wie wir
die konstante DEV_UART0_NAME) mit Das Initialisieren der MMC Karte sowie es vom PC gewhnt sind.
der Schnittstelle kommunizieren kann. das Mounten des FAT Datei Systems er-
In diesem Fall initialisieren wir die ledigt die Funktion init_mmc(). Diese Da Nut/OS mehrere unterschiedliche
UART0, ffnen die Standard I/O File- Funktion stelle ich aus Platzgrnden an Dateisysteme gleichzeitig mounten kann,
Descriptoren auf dieser Schnittstelle und dieser Stelle nicht im Detail dar, sie ist mssen wir beim Zugriff auf eine Datei
weisen Ihr per _ioctl() noch die Baudrate natrlich im Sourcecode der Demo vor- den Pfad der Datei immer inklusive des
(hier 115200 Baud) zu. Und schon kann handen. Kurz zusammen gefasst grei- Mountpoints angeben. So ffnet ein
per printf() beliebiger Text ausgeben wer- fen hier drei Komponenten ineinander.
den. So kann man leicht per Hypertermi- Der Dateisystem Treiber fr das FAT fopen(PHAT0:/index.html,
nal (Windows) oder Minicom (Linux) die Dateisystem (im Nut/OS Jargon PHAT r+);
Ausgaben des Programms verfolgen oder Filesystem), der SPI-Bus Treiber fr den
das Programm durch Eingaben steuern. physikalischen Zugriff auf die MMC die Datei index.html Im Wurzelver-
Debugging wird so zum Kinderspiel. Karte sowie schlielich der MMC Karten zeichnis der MMC Karte.
Treiber fr den logischen Zugriff auf die
An dieser Stelle wird es Zeit die MMC Karte. Zunchst werden nun die Treiber Im nchsten Schritt wird das Ethernet In-
Karte zu initialisieren und das Dateisys- initialisiert und miteinander verknpft terface initialisiert.
tem zu mounten. so dass anschlieend das Dateisystem
gemountet werden kann. Danach kann

do {
rc = NutRegisterDevice(&DEV _ ETHER, 0, 0);
if (rc != 0) {
puts(Registering ethernet device failed! Is a cable connected? Retrying...\r\n);
}
} while (rc != 0);

printf(Configuring %s... , DEV _ ETHER _ NAME);

if (NutNetIfConfig2(DEV _ ETHER _ NAME, mac, inet _ addr(DEFAULT _ IPADDR),


inet _ addr(DEFAULT _ NETMASK), inet _ addr(DEFAULT _ GATEWAY)) == 0) {
puts(OK\r\n);
} else {
puts(Failed\r\n);
NutSleep(500);
while(1);
}
2/2011 JOURNAL - EMBEDDED-PROJECTS.NET 25
Nachdem das Ethernet Device erfolgreich Gateway: 192.168.2.254 Damit unser Webserver jetzt auch wei,
mit NutRegisterDevice() registriert wo die Webseiten zu finden sind, mssen
wurde, wird per NutNetIfConfig2() Die Einstellungen sind im Programm- wir den Webroot, also das Wurzelver-
eine statische IP Adresse, eine Subnetz- Kopf als Konstante hinterlegt und kn- zeichnis unseres Webservers registrie-
Maske sowie ein Standard Gateway fest- nen den eigenen Bedrfnisse angepasst ren. Die Konstante HTTP _ ROOT zeigt
gelegt. In unserem Beispiel verwenden werden. Natrlich knnte man die IP dabei wieder auf unsere MMC Karte:
wir folgende Einstellungen: Adresse auch dynamisch per DHCP ab- PHAT0:/
fragen. Hier sei auf die diversen Beispiele
IP: 192.168.1.200 verwiesen, die in dem Ethernut / Nut/OS
Netmask: 255.255.255.0 Paket enthalten sind.

/* Register root path. */


printf(Registering HTTP root HTTP _ ROOT ...);
if (NutRegisterHttpRoot(HTTP _ ROOT)) {
puts(failed);
for (;;);
}
puts(OK);

Damit das Programm auf Eingaben / Steueranweisungen durch vom Webserver aufgerufen, wenn der User die entsprechende
den Webbrowser des Benutzers reagieren kann, bedarf es noch URL des CGIs im Webbrowser eingibt oder der Webbrowser
einer Kommunikations-Schnittstelle mit dem Benutzer. In der Formulardaten an ein CGI schickt. Diese CGI Funktion muss vor
Welt der Web- Anwendungen wird dies im Allgemeinen ber Verwendung ebenfalls registriert werden. Registrieren bedeutet
CGI Funktionen erledigt. Auch unser Programm enthlt ein CGI hier, dass der Funktion ein virtueller Name bzw. eine URL zu-
welches die beiden an das eNet-sam7X Modul angeschlossenen gewiesen wird. Zuvor wird jedoch noch festgelegt, in welchem
Relais steuert. unter-Ordner des Webroots dieses CGI zur Verfgung gestellt
werden soll.
Im Gegensatz zu einem PC Webserver stellt ein CGI hier jedoch
kein eigenes Programm dar sondern eine Funktion. Diese wird

/*
* Register the path where CGIs shall be located. This is a virtual path only
* as CGIs are virtual files too
*/

NutRegisterCgiBinPath(cgi-bin/);

/*
* Register some CGI samples, which display interesting
* system informations.
*/

NutRegisterCgi(relais.cgi, CGI _ Relais);

Anzeige

26 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET


Unser CGI lsst sich jetzt also ber die URL Eine einfache Endlosschleife wrde die Programmausfhrung
http://192.168.1.200/cgi-bin/relais.cgi ansprechen. einfangen und die CPU nie wieder fr andere Threads frei-
geben. Ein einfaches NutSleep() hilft hier weiter und legt den
Als letztes bleibt nur noch den eigentlichen Webserver zu star- Haupt-Thread an dieser Stelle schlafen.
ten und anschlieend das Hauptprogramm in einer Endlos-
schleife enden zu lassen. Aber Achtung: Wie bereits erwhnt Aber zurck zur eigentlichen Webserver Funktion. Diese ist als
nutzt Nut/OS ein kooperatives Multitasking. Beim kooperativen Thread implementiert. Damit wir mehrere HTTP Verbindungen
Multitasking findet ein Thread-Wechsel immer nur an definier- auf einmal bearbeiten knnen starten wir diesen Thread gleich
ten Punkten statt und es muss jederzeit sichergestellt sein, dass mehrfach.
die CPU an einen anderen Thread abgegeben werden kann.

/*
* Start the server threads.
*/
for (i = 0; i <= 8; i++) {
char thname[] = httpd0;

thname[5] = 0 + i;
NutThreadCreate(thname, Service, (void *) (uintptr _ t) i, 4096);
}

printf(Web server on %s:80 ready\r\n, DEFAULT _ IPADDR);

/*
* We could do something useful here. In this case we are just setting
* the main thread to the lowest priority and are just waiting.
*/
NutThreadSetPriority(254);
for (;;) {
NutSleep(60000);
}
return 0;
}

Der Server-Thread
Der eigentliche Webserver besteht aus dem Server-Thread. Die- Funktion NutHttpProcessRequest() bergeben wird.
ser sorgt dafr, dass ein TCP Socket geffnet wird und auf Port
80 auf eine eingehende Verbindung wartet. Dabei schlft der Diese Funktion ist das eigentliche Herzstck unseres Webser-
Thread so lange, bis der Webbrowser eine entsprechende Anfra- vers. Sie ist eine fertig implementierte API Funktion von Nut/
ge an den Webserver sendet. OS und sorgt dafr, dass die HTTP Anforderungen des Webb-
rowsers ausgewertet und die angeforderten Daten (Dateien oder
Sobald eine Verbindung zustande gekommen ist, unser Web- dynamische Inhalte) an den Webbrowser ausgeliefert werden.
server also ein accept auf dem Socket ausgefhrt hat, wird
dem Socket ein Filedescriptor zugewiesen, der anschlieend der Zusammengefasst sieht der Code dazu wie folgt aus:

THREAD(Service, arg)
{
TCPSOCKET *sock;
FILE *stream;
uint8 _ t id = (uint8 _ t) ((uintptr _ t) arg);

for (;;) {
if ((sock = NutTcpCreateSocket()) == 0) {
...
}

NutTcpAccept(sock, 80);
...
if ((stream = _ fdopen((int) ((uintptr _ t) sock), r+b)) == 0) {
printf([%u] Creating stream device failed\n, id);
}

2/2011 JOURNAL - EMBEDDED-PROJECTS.NET 27


else {
NutHttpProcessRequest(stream);
fclose(stream);
}
NutTcpCloseSocket(sock);
}
}

Aber wie kommen jetzt die Steueranweisungen des Benutzers Hat der Webbrowser nun einen GET oder POST Request mit die-
zu den Relais? ser URL an unseren Webserver gesendet, so erkennt die Funk-
tion NutHttpProcessRequest(), dass es sich dabei um unser CGI
Wir erinnern uns, dass im Hauptprogramm ein CGI registriert handelt und ruft dieses auf. Dieses braucht die Anfrage dann
wurde. Dieses CGI wurde der URL /cgi-bin/relais.cgi zu- nur noch auszuwerten und die Relais entsprechend zu setzen.
gewiesen. Die URL ist relativ zum Webroot des Servers zu lesen. So schliet sich der Kreis...

Das Relais CGI


Bei einem Webserver wird immer zwischen statischem Inhalt Ausschnitt sehen, wird trotzdem mindestens ein HTTP Header
(HTML Dateien, Bildern etc.) sowie dynamischen Inhalt unter- zurck an den Webbrowser geschickt. Normalerweise mit dem
schieden. Ein CGI stellt die einfachste Form von dynamischem Status Code 200 OK. In unserem Fall senden wir jedoch ein
Inhalt dar. Es kann dabei entweder nur auf Eingaben reagie- 204 No content und signalisieren dem Browser damit, dass er
ren oder eben auch vollstndige HTML Seiten dynamisch ge- auf keine Antwort vom CGI warten (und diese ggf. darstellen)
nerieren und an den Webbrowser ausliefern. In unserem Bei- soll.
spiel wollen wir jedoch nur auf Benutzereingaben reagieren
und keine Ausgaben produzieren. Wie wir im folgenden Code Das CGI sieht (in gekrzter Form) wie folgt aus:

int CGI _ Relais(FILE * stream, REQUEST * req)


{
NutHttpSendHeaderTop(stream, req, 204, No content);
NutHttpSendHeaderBottom(stream, req, , -1);

if (req->req _ method == METHOD _ POST) {


char *name;
char *value;
int i;
int count;

NutHttpProcessPostQuery(stream, req);
count = NutHttpGetParameterCount(req);
/* Extract count parameters. */
for (i = 0; i < count; i++) {
name = NutHttpGetParameterName(req, i);
value = NutHttpGetParameterValue(req, i);

if (strcmp(name, set1) == 0) {
GpioPinSet(PORT _ RELAIS, PIN _ RELAIS1, 1);
printf(=> Set relais 1\n);
} else
if (strcmp(name, clear1) == 0) {
GpioPinSet(PORT _ RELAIS, PIN _ RELAIS1, 0);
printf(=> Clear relais 1\n);
} else

...

}
}

fflush(stream);

return 0;
}

28 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET


Zunchst wird der HTTP Header zurck an den Browser ge- so wird der Parameter set1 bertragen. Ein Einfacher strcmp()
schickt. Anschlieend berprfen wir, ob es sich bei der An- reicht zur Auswertung aus. Anschlieend wird das entspre-
frage um einen POST Request handelt (GET Requests werden chende GPIO Pin entweder auf high (set) oder auf low (clear)
ignoriert) und werten ggf. die bergeben Parameter aus. Dabei gesetzt.
wird nur der Parameter Name betrachtet. Klickt der Benutzer
auf der Webseite zum Beispiel auf den Set Button von Relais 1, Und fertig ist unser Internet-Schalter!

Compilieren / Installieren
Jetzt bleibt nur noch brig das Programm zu compilieren und Tool OpenOCD hervorragend. Passende JTAG Adapter sind
anschlieend auf das Board zu bertragen. Dem zum Down- gnstig (ab ca. 30 EUR) z.B. von Olimex (z.B. ARM-USB-Tiny)
load bereit stehenden Code liegt neben den Webseiten natrlich oder Egnite (Turtelizer 2) zu bekommen. Alternativ kann man
auch ein passendes Makefile bereit. Die Pfade im Makefile ms- natrlich auch das SAM-BA Tool von Atmel zum Programmie-
sen ggf. der eigenen Nut/OS Installation angepasst werden. An- ren des eNet-sam7X Boards ber den USB Port dafr verwen-
schlieend reicht jedoch ein den. Beide Methoden werden im eNet-sam7X Handbuch [8] de-
tailliert anhand von Beispielen erklrt.
make
Zur Inbetriebnahme muss man nur noch eine Micro-SD Karte
(Max 2GB, Fat formatiert) mit der Webseite und den zugehri-
auf der Kommandozeile um das Programm zu bersetzen. Es
gen Dateien bespielen und in den Sockel auf dem eNet-sam7X
wird eine Datei webserver.bin erzeugt, die anschlieend z.B.
Modul einlegen, und schon ist der Internet-Schalter bereit sei-
per JTAG in das Flash des Mikrocontrollers geschrieben wer-
ne Arbeit aufzunehmen.
den kann. Hierfr eignet sich das OpenSource JTAG Debugging

Fazit / Ausblick
Im Rahmen dieses Artikels konnten wir natrlich nur ein ganz Mein Kollege hat zum Beispiel mit einer nur unwesentlich kom-
einfaches Beispiel konstruieren. Nichts desto trotz ist schon die- plexeren Schaltung sowie ein wenig Software eine vollstndige
ses einfache Beispiel eine vollstndige und benutzbare Applika- Web-Basierte Regelung und Steuerung fr eine Solar-Thermie
tion. Ein ber das Internet steuerbarer Schalter mit zwei eigen- Anlage gebaut. Nhere Infos inklusive Live-Anzeige der aktu-
stndigen Umschaltern... ellen Betriebsdaten knnen finden sich auf folgender Webseite:

Eine realistische Applikation knnte leicht ein deutlich um- http://solar.thermotemp.de/


fangreicheres Benutzer Interface bieten, dynamische Websei-
teninhalte einbinden und natrlich komplexe Steuerungs- und Ein guter Startpunkt um vielleicht Ideen fr eigene Projekte
Regelungsanwendungen implementieren. Die Webserver Funk- rund um das eNet-sam7X Modul zu entwickeln.
tionalitt alleine lastet die AT91SAM7XC512 CPU nicht einmal
Eine weitere Idee wre die Einbindung von Lua als embedded
annhernd aus. Die meiste Zeit wartet das Programm ja schlie-
Scriptsprache. Da embedded Lua bereits Bestandteil der Nut/OS
lich auf Anfragen aus dem Internet. So bleibt hinreichend Re-
Umgebung ist lsst sich ein einfaches webbasiertes Program-
chenkapazitt fr eigene Ideen und Regelungs-Algorithmen
mier-Modell entwickeln, so dass auch Anwender Programme
brig.
fr das eNet-sam7X Modul entwickeln knnen, die bislang we-
Ideen fr weitere und ggf. komplexere Applikationen finden nig Erfahrungen in der Mikrocontroller Welt haben und trotz-
sich schnell und bleiben der Kreativitt der Leser berlassen ;-) dem alle Vorzge eines embedded Systems nutzen wollen.

Quellenverzeichnis
[1]http://www.embedded-it.de/pdf_free/eNet-sam7X- [6]http://www.embedded-it.de/bsp/eNet-sam7X_bsp.php
schematic.pdf
[7]http://www.embedded-it.de/bsp/demos/webserver_relais_
[2]http://www.ethernut.de/ demo.tar.gz

[3]htt p://www.ethernut.de/ de /firmware/index.html [8]http://www.embedded-it.de/pdf_free/eNet-sam7X-


hardware-manual.pdf
[4]http://www.embedded-it.de/bsp/eCross.php
[9]http://solar.thermotemp.de/
[5]http://www.yagarto.de

2/2011 JOURNAL - EMBEDDED-PROJECTS.NET 29


[ PROJECT ] Wir bauen einen Rechner Teil 2

Wir bauen einen Rechner Teil 2


Vom Schaltplan bers Linux zum Ltofen
Hubert Hgl <hubert.hoegl@hs-augsburg.de>

Die Platine
Im letzten Heft schrieb ich Vermutlich daneben war. Das Routen der Platine fast alle auf einer Seite, so dass die Best-
knnte im Mrz der Platinenplan fertig stellte sich als schwierig heraus, weil wir ckung einfacher wird (vor allem wenn
sein., was aus heutiger Sicht ziemlich zum einen alle Anschlsse des i.MX auf wir, wie angestrebt, unsere eigenen
Steckerleisten haben Ltversuche machen). Die Befestigungs-
wollten und zum ande- lcher sind nun weiter nach aussen ge-
ren ziemlich viele Vor- wandert, damit die Bahnen besser Platz
gaben gemacht haben, haben.
wo die Bauteile und
Steckverbinder sitzen Ziemlich viel Zeit hat auch das probe-
sollen, ohne genau zu weise Routen mit dem Freerouter [2]
beachten, wo sich die gekostet. Diese Anwendung ist in Java
Anschlsse in der BGA programmiert und luft deshalb deutlich
Matrix des i.MX befin- langsamer als kommerzielle Router wie
den. Deswegen gab es Specctra oder Electra. Am Anfang haben
Ende April ein Treffen, wir darauf spekuliert, dass das Routen
bei dem wir die ur- mit einem schnellen PC mit mehreren
sprngliche Grsse der Kernen skaliert, das hat jedoch nicht
Platine (7 x 7 cm) und funktioniert. Unser schnellster Testrech-
Platzierung der Bautei- ner war ein Core i7 960 mit 3,6 GHz, der
le (J1-J3 oben, J4-J6 un- jedoch beim Routen nur um den Faktor
ten) ber den Haufen 1,3 schneller war als ein deutlich langsa-
geworfen haben. merer Core i3. Als ungefhre Zeit zum
Routen haben wir eine bis zwei Wochen
Nun wird die Platine veranschlagt. Die folgende Abbildung ist
vermutlich 8 x 8 cm ein Screenshot eines Versuches des nun
gross, oben sind zwei verworfenen Entwurfes mit dem Free-
Stecker und unten vier. router.
Abb. 1: KiCad Platine Die Bauteile sitzen nun

Aufbau der Prototypen


Angenommen, wir htten bereits ein prft werden soll. Der AP7000 hat 16 x zen. Der i.MX28 hat 17 x 17 Ltkugeln
paar leere Platinen vom Platinenherstel- 16 Ltkugeln mit 1 mm Abstand. Mittler- mit 0.8 mm Abstand. Schwierig wird
ler, dann wrden wir in etwa so vorge- weile hat er schon die BGA Testplatinen bei dieser Technik sicher auch die Plat-
hen: bekommen. Im nchsten Heft wird ber zierung der Bauteile sein, da
diese Versuche ein Erfahrungsbericht
Die Bauteile mit BGA Gehuse (i.MX und stehen.
SDRAM) wrden wir am Anfang drau-
flten. Ob das mit dem simplen Piz- Falls das klappen sollte, wrden
zaofen geht, mit dem man gewhnliche wir dieses preiswerte Ltverfah-
SMD Bauteile drauflten kann, werden ren auch beim Gnublin Board
wir sehen. Benedikt hat mit dem Ofen, einset-
den man in der Abbildung sieht schon Abb.
ein paar Monate Erfahrung im Auflten 2:
von normalen SMD Bauteilen. Lt-
ofen
Er plant nun gerade einen Versuch, bei
dem ein paar alte AVR32AP7000 Con-
troller im BGA Gehuse damit geltet
werden und danach die Qualitt der
Ltung mittels JTAG/Boundary Scan ge-
30 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET
wir kein optisches Platziergert haben. die Gerte unter dem angegebenen Link. nen Mglichkeiten gbe es auch noch
Falls das Lten mit diesen einfachen Nachdem die BGA Gehuse aufgeltet eine dritte Mglichkeit: Es haben sich ein
Mitteln nicht funktioniert, dann wrden wren, wrden wir die restlichen SMD paar Leute gemeldet, die uns gerne mit
wir es mit einer aufwendigeren Anlage Bauteile entweder im Pizzaofen oder von kommerzieller Fertigungstechnik unter-
probieren. An unserer Hochschule gibt Hand auflten. Wenn das Lten in zwei sttzen wrden. Ich wrde es gut finden,
es bei Professor Villain ein Labor fr Phasen gemacht wird, dann bruchten wenn auch andere unabhngig von uns
Lttechnik (siehe [5]). Die fr uns we- wir auch zwei Schablonen fr die Lt- Prototypen aufbauen und testen wr-
sentlichen Gerte wren ein optischer paste, eine fr die BGA Bausteine, die an- den, natrlich aber auf eigenes Risiko
Fineplacer und eine Dampfphasen dere fr die restlichen Bauteile. Wie gut und Kosten.
Ltanlage. Daneben gibt es auch noch das funktioniert, wissen wir noch nicht.
einen Siebdruckautomaten. Man sieht Neben diesen zwei gerade beschriebe-

Linux auf dem i.MX28 EVK


Wir haben in der Zwischenzeit das Root Filesystem ber NFS mounten. Wer Experimente mit dem Board am Ser-
i.MX28 EVK von Freescale (das Ge- Der Server sieht so aus: Abb. 3. ver machen mchte, dem gebe ich gerne
schenk) in Betrieb genommen. Es ist ber die ntigen Daten zum Login. Zur Zeit
RS-232 und Ethernet an einen kleinen Wie man aus Erfahrung weiss, hngt sich arbeiten nur zwei Studenten (siehe fol-
Serverrechner angeschlossen (ein alter der Embedded Linux Rechner gende Punk) und ge-
Transmeta Efficeon TM8000 mit 1 GHz), beim Entwickeln gelegentlich legentlich ich mit dem
so dass man auch von aussen ber SSH auf, so dass nur noch das Dr- EVK.
mit dem Board arbeiten kann. Dieser cken der Reset Taste hilft. Um
Rechner ist natrlich viel zu langsam um auch diesen Vorgang fernsteuern
die aufwendigen Kompilierarbeiten fr zu knnen, habe ich eine Schal-
Kernel und Root-Filesystem zu erledi- tung mit einem Atmel
gen. Man sollte daher die Kompilierung AVR Mega32 aufge-
auf dem eigenen Rechner erledigen und baut, die durch eine
dann nur noch die Resultate per scp auf V-USB [3] Firmware
den Server bertragen. ber USB zum An-
steuern der Reset
Als Boot-Quelle habe ich die SD/MMC Leitung verwen-
Karte ausgewhlt, so dass nach dem det werden kann.
Einschalten oder Reset sofort das U- Man sieht die kleine
Boot startet. Alle weiteren Aktiviten Lochrasterplatine in
kann man dann von U-Boot aus er- der Abbildung 4.
ledigen. Zum Beispiel kann man Li- Abb. 3: Server mit EVK
nux ber das Netzwerk holen und das

Welches Linux htten Sie denn gerne?


Standardmssig gibt es von Freescale die beiten (kompilieren) knnen. Durch die Da mich der native Betrieb bei der ARM
LTIB Distribution, die zwar das Board weite Verbreitung von Gerten mit ARM Plattform stark interessiert, beschftigen
unter Linux zum Leben erweckt, die aber Controllern untersttzen nun auch fast sich in diesem Sommersemester auch
von den meisten Embedded Linux Gu- alle grossen Distributionen die ARM Ar- zwei Studen-
rus eher skeptisch beugt wird. Die An- chitektur. Hier sind drei davon: ten mit dieser Abb. 4: Board mit
wendergemeinde um LTIB scheint nicht Reset
besonders gross zu sein, so dass manche Debian GNU/Linux auf ARM
Pakete sehr alt sind. Der Python Inter- http://www.debian.org/
preter, mit dem wir einiges vor haben, ports/arm/in- dex.
hat zum Beispiel die sehr alte Version 2.4. de.html

Neben LTIB gibt es auch noch andere Gen-


Cross-Bauumgebungen fr Embedded too
Linux, etwa OpenEmbedded (OE) [6]. Li-
Andreas Mller hat OpenEmbedded fr nux
den i.MX28 angepasst, die Details findet
man in der Mailingliste. OE wre sicher
die bessere Wahl im Vergleich zu LTIB,
das Rahmenwerk ist sehr mchtig, jedoch ARM
auch schwieriger zu verstehen. Project
http://
Wenn man die Rechenleistung des www.
i.MX28 betrachtet, dann wrde auch gentoo.org/
nichts im Wege stehen, nativ auf dem proj/en/base/arm/
Board zu arbeiten. Das heisst, man kom- index.xml
piliert Programme mit dem GCC direkt
auf dem i.MX28 Controller. Mit 450 MHz Fedora/ARM
Takt sollte man sogar relativ zgig ar- http://fedoraproject.org/wiki/Ar-
chitectures/ARM
2/2011 JOURNAL - EMBEDDED-PROJECTS.NET 31
Thematik. Ich hoffe durch diese Unter- eignen. Ein vergleichbares Board, das
sttzung bald zeigen zu knnen, wie gut auch diesen Weg geht, ist das FOX G20
sich die grossen Distibutionen fr ARM [7]. Es verwendet Debian/ARM.

Weitere Baustellen
Ein wesentliches Ziel des Projektes ist sehr elementar sind, zum Beispiel die
es, Anfngern ein preiswertes Board in liegende Acht mit Plus und Minus beim
die Hand zu geben, um Experimente mit Arduino Projekt. Wer von Logos was ver-
Embedded Linux zu machen. Natrlich steht darf sich gerne bei mir melden!
muss es dazu auch einen Platz im World
Wide Web geben, an dem Anleitungen zu Vielleicht sollten wir uns auch von der
finden sind in denen steht wie man mit neuen Mode anstecken lassen und Tier-
dem Board umgeht. Vermutlich hngt es namen verwenden, so wie das mit Beag-
ganz stark von der Qualitt dieser Anlei- le, Panda und Hawk schon gemacht wird.
tungen ab, wie gross die Akzeptanz des Welches Tier wrde zu uns passen?
Boards ist.
Michael Ilg hat brigens StuBux vor-
Damit sich das Ganze zu Lehrzwecken geschlagen, ausgeschrieben Studenten-
eignet, stelle ich mir vor, dass es eine Board fr Embedded-Linux.
Reihe von Versuchen gibt, die man ohne
Ich freue mich auch weiterhin ber Eure
grosse Probleme nachvollziehen kann. Information darber, was Vorschlge.
Jeder Versuch soll genau die Pins der hervorzuheben ist, wird
Gnublin Erweiterungsstecker zeigen, an Abb. 5: vom Webserver ber eine
denen man einfache externe Schaltungen GPIO Boa rd-Repr s e nt at ion
anschliessen kann, die man auch selber geliefert, die in Python Links
im Labor aufbauen kann. geschrieben ist. Sogar das Zeichnen des
SVG Grundrisses kann man mit Python [1] EPJ Nr. 8, Wir bauen einen
Hier sind einige Beispiele: erledigen (mit dem pysvg Modul). Aktu- Rechner fr Embedded Linux!
ell beschftigen sich ein paar Studenten http://journal.embedded-projects.net
Taster und LED an GPIO Pins an-
schliessen und ber gpio/sysfs an- mit dieser Technik
[2] Freerouter
steuern. Die Abbildung 5 zeigt eine http://www.freerouting.net
mit Kupferlackdraht verdrahtete
Lochrasterplatine. Auch die Flug- Name und Logo [3] V-USB
drhte sind mit Einzelkontakten und http://www.obdev.at/products/vusb
Schrumpfschlauch selbst gemacht: Obwohl es nicht so wichtig ist, beschf-
tigt mich immer noch die Suche nach ei- [4] Bcontrol
PWM Ausgang ansteuern und damit nem passenden Namen und einem Logo. http://elk.informatik.fh-augsburg.de/
LED dimmen. Zur Zeit verwenden wir Benedikts ers- gnublin-cdrom/bcontrol/
ten Vorschlag Gnublin.
Analogeingang einlesen. [5] Professor Villain an der Hoch-
schule Augsburg (Bereich Lttechnik)
Einen freien UART in Betrieb nehmen http://www.hs-augsburg.de/~villain/
und per Programm mit einer Gegen- Laborzimmer/Loettechnik/Loettechnik.
seite kommunizieren, z.B. einem PC html
mit USB-zu-UART Adapter.
[6] OpenEmbedded
SPI Schnittstelle in Betrieb nehmen http://www.openembedded.org
(MISO und MOSI verbinden).
[7] FOX G20
DOG Display (16x2 LCD) ber SPI http://www.acmesystems.it
ansteuern.
[8] Anand Santhanam and Vishal Kul-
Diese (und weitere) Experimente mache kami, Linux system development
ich bereits in meiner Embedded Linux on an embedded device. Tinkering
Veranstaltung an der Hochschule Augs- with PDAs for fun and profit, 2002.
Abb. 6: Logo Vorschlag
burg, allerdings auf dem NGW100. Wer http://www.ibm.com/developerworks/
hier gute Ideen fr weitere Versuche hat, library/l-embdev/index.html
kann das gerne schreiben. Mir kam vor einiger Zeit auch noch die
Idee TinkerTux oder TinkerBoard, nach-
Um die bei den meisten Versuchen er- dem ich den Artikel [8] las. Das Lexikon
forderlichen Anschlsse der Erweite- dict.leo.org sagt, dass to tinker herum-
rungsstecker deutlich zu zeigen, schwebt basteln bedeutet. Ich habe mal eine Skiz-
mir eine dynamische Technik vor, bei ze fr ein Logo aufgemalt, TUX soll
der man den Platinengrundriss im SVG aus Ltkolben, Pinzette und Zange sein:
Format im Browser anzeigt und je nach
Versuch bestimmte Stecker und Pins Wahrscheinlich ist der Vorschlag voll-
ber JavaScript farblich hervorhebt. Die kommen ungeeignet, da gute Logos oft
32 2/2011 JOURNAL - EMBEDDED-PROJECTS.NET
Ansprechpartner:
embedded projects GmbH
Holzbachstrae 4
D-86152 Augsburg
Tel. +49(0)821 / 279599-0
Fax: +49(0)821 / 279599-20
Mail: journal@embedded-projects.net

A01: 1/3 Seite A02: Bundle A03: Jahressponsor A04: Wrfel


210 mm 210 mm 210 mm 210 mm 210 mm
69 mm 69 mm

35 mm

85 mm
90 mm

+
297mm

297mm

297mm

297mm
DIN-A4 90 mm

A01 A02 A02 A03 A04

embedded projects Journal: Anzeigenformate und Preisliste:


Das embedded projects Journal ist eine Zeit-
Bezeich- Format in mm Erschei-
schrift, die unter einer Open-Source Lizenz Bezeichnung Preis*
steht. Alle Artikel und die Zeitschrift knnen so nung Breite x Hhe nung in
unter Einhaltung dieser Lizenz weiter verarbeitet A01 1/3 Seite 69 x 297 mm 150 1 Ausgabe
werden. Das besondere an dem Open-Source
Projekt Journal ist, dass die Zeitschrift nicht nur Bundle 69 x 299 mm +
A02 400 1 Ausgabe
frei als PDF-Version verfgbar ist, sondern von 210 x 297 mm
den Lesern kostenlos abonniert werden kann. A03 Jahressponsor ** 90 x 35 mm 100 4 Ausgaben
Druck und Porto werden durch Anzeigen von
Sponsoren finanziert. A04 Wrfel 90 x 85 mm 100 1 Ausgabe

Aktuell wird jede Ausgabe ca. 8000 mal online * Alle Preise zzgl. Ust.
und ca. 2000 mal als Papierversion gelesen. ** Im Angebot inbegriffen: 1. Frei Haus Lieferung jeder Ausgabe.
2. Ihre Anzeigen wir zustzlich auf unserer Homepage unter:
http://www.ep-journal.de im Firmenverzeichnis verffentlicht.

Ausgabe Anzeigenschluss Erscheinungsmonat


03 / 2011 15.08.2011 September
04 / 2011 15.11.2011 Dezember
01 / 2012 15.02.2012 Mrz
02 / 2012 15.05.2012 Juni
03 / 2012 15.08.2012 September
04 / 2012 15.11.2012 Dezember

Bestellfax an +49(0)821 / 279599-20


Anzeige in nchster Ausgabe verffentlichen
A01 A02 A03 A04
Anzeige verffentlichen in / ab Ausgabe ___ / ____
Firma:
Vor- / Nachname:
Anschrift:

Tel. / E-Mail:
Interesse an einer
Anzeige?
info@embedded-projects.net
embedded projects GmbH
machen
Bitte
frei

D - 86152 Augsburg
embedded - projects.net

Holzbachstrae 4
JOURNAL
OPEN SOURCE SOFT-AND HARDWARE PROJECTS

Werdet aktiv!
Das Motto: Von der Community fr die Community !

Wir mchten als Hochschule / Ausbildungs-

te schicken Sie mir Infomaterial, Preisliste etc.


betrieb jede weitere Ausgabe bekommen.
Bitte gewnschte Anzahl der Hefte pro Ausgabe

Ich mchten im embedded projects Journal


werben oder eine Stellenanzeige aufgeben. Bit-
Ich mchte jede zuknftige Ausgabe erhalten
Das Magazin ist ein Open Source Projekt.

Falls du Lust hast, Dich an der Zeitschrift durch einen Beitrag


zu beteiligen, wrden wir uns darber sehr freuen. Schreibe
deine Idee an:

sauter@embedded-projects.net

10
Regelmig

5
Strae / Hausnummer

Email / Telefon / Fax


Die Zeitschrift wird ber mehrere Kanle verteilt. Der erste

ankreuzen.
Kanal ist der Download als PDF - Datei. Alle Ausgaben sind Name / Firma
auf der Internetseite [1] verfgbar. Diejenigen, die lieber eine

PLZ / Ort
Papierversion erhalten mchten, knnen den zweiten Kanal

zu.
whlen. Man kann sich dort auf einer Internetseite [1] in eine
Liste fr die gesponserten Abos eintragen. Beim Erscheinen ei-
ner neuen Ausgabe wird dank Sponsorengeldern an jeden auf
der Liste eine Ausgabe des aktuellen Journal versendet. Falls
man den Versandtermin verpasst hat, kann man das Heft auch
zum Preis von einem Euro ber einen Online - Shop [2] bezie-
hen.
[1] Internetseite (Anmeldeformular gesponserte Abos): http://
journal.embedded-projects.net

[2] Online - Shop fr Journal:


http://www.embedded-projects.net

Sponsoren gesucht!
Damit wir weiterhin diese Zeitschrift fr jeden frei bereitstel-
len knnen, suchen wir dringend Sponsoren fr Werbe- und
Stellenanzeigen. Bei Interesse meldet Euch bitte unter folgen-
der Telefonnummer: 0821 / 2795990 oder sendet eine E-Mail an
die oben genannte Adresse.

Impressum
embedded projects GmbH Verffentlichung: 4x / Jahr Alle Artikel in diesem Journal stehen Dies ist ein Open Source
Holzbachstrae 4 Ausgabenformat: PDF / Print unter der freien Creativ Commons Li- Projekt.
D-86152 Augsburg Auflagen Print: 2500 Stk. zenz. Die Texte drfen, wie bekannt
Telefon: +49(0)821 / 279599-0 Einzelverkaufspreis: 1 von Open Source, modifiziert und in Except where otherwise no-
Telefax: +49(0)821 / 279599-20 die eigene Arbeit mit aufgenommen ted, this work is licensed un-
Layout / Satz: EP werden. Die einzige Bedingung ist, der http://creativecommons.
Titelfoto: Claudia Sauter dass der neue Text ebenfalls wieder org/licenses/by/3.0
unter der gleichen Lizenz, unter der
dieses Heft steht verffentlicht wer-
den muss und zustzlich auf den
originalen Autor verwiesen werden
muss. Ausgenommen Firmen- und
Eigenwerbung.