Vous êtes sur la page 1sur 36

13 WWW.EMBEDDED-PROJECTS.

NET ISSUE 13 I JUL 2012 I OPEN SOURCE


embedded projects
JOURNAL
OPEN SOURCE SOFT-AND HARDWARE PROJECTS
www.embedded-proj ects.net
your own projects
[PROJECTS]
Eine Open-Source Zeitschrift
zum Mitmachen!
MOUNT SMDrest
Embedded Linux mit GNUBLIN
Legal Software Engineering
USBtin
Die elektronische Zigarette
GNUBLIN Installer
Finite State Machine
GNUBLIN ADC und PWM
2
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
A
n
z
e
i
g
e
[ Editorial ] Benedikt Sauter
Einleitung
Ausgabe 02/2012
Embedded Projects Journal - Ausgabe No. 13
Einleitung
Trotz scnster Sonnentage haben wir
die Ausgabe 13 fertig gebract.
Viele feiige Helfer haben wieder mitge-
arbeitet Danke!
Wir freuen uns diesmal einen Rectstext
ber Urheberrect, Sofwarelizenzen und
Open-Source etc. zum ersten Mal im Hef
prsentieren zu knnen. Dieses Thema
soll in ein paar weiteren Artikel beleuc-
tet werden.
Wenn jemand noc spannende Ideen oder
Anregungen zu diesem Bereic hat freu-
en wir uns natrlic ber jede E-Mail.
Ziel ist es diese Themen mal mehr aus
Bastler oder Entwiclersict zu betrac-
ten. Ein hcst spannender Versuc.
Noc kurz was in eigener Sace:
Wir stellen bei ElektorLive! 2012 aus. Dies
ist ein Seminar- und Ausstellungstag fr
die Elektronik Entwiclung. Das ganze
fndet in der Westfalenhalle in Dortmund
am 20.Oktober 2012 stat. Selbst haben wir
an diesem Tag einen Stand und zustz-
lic darf ic ein Seminar ber Embedded
Linux halten. Wir freuen uns ber euer
kommen.
htp://www.elektor-live.com
Euer embedded projects Team
und Benedikt Sauter
sauter@embedded-projects.net
4
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
Die Hardware
[ PROJECT ] GNUBLIN
GNUBLIN
Embedded Linux mit Gnublin - Erfahrungen und Projekte
Hubert Hgl <Hubert.Hoegl@hs-augsburg.de>
Erste Erfahrungen mit Gnublin
Dieser Text gibt einige Erfahrungen wieder, die ic als Veran-
stalter eines Embedded Linux Kurses seit Mite Mrz mit dem
Gnublin Board gemact habe. Am Scluss bescreibe ic kurz
die Versuce, die wir mit dem Gnublin Board gemact haben.
Die Gnublin 1.3 Platine funktioniert meist problemlos. Die Gr-
e und der Funktionsumfang sind gut fr eine Vielzahl von
Experimenten geeignet. Vor allem die Erweiterbarkeit ber die
USB OTG Scnitstelle hat sic als sehr praktisc herausgestellt,
so dass man gezielt die fr ein Experiment notwendigen Peri-
pheriebausteine anscliessen kann, z.B. WLAN, Bluetooth, eine
Sound Codec oder ein GPS Modul. Auc die MicroSD Karte als
Speicerort fr Bootloader, Kernel und Root Filesystem ist eine
einface und praktisce Lsung. Durc den geringen Stromver-
brauc von unter 100 mA eignet sic das Board auc gut fr
bateriebetriebene Gerte.
Es gibt trotzdem ein paar Verbesserungspunkte:
Man wnsct sic gelegentlic an den Scraubansclssen
eine 5V Spannung fr Erweiterungen. Findige Leute haben
sic deshalb eine Spezial-Jumper gebaut, der alle drei Pins
des Power-Supply Pfostenleiste berbrct.
Mit den 8 MByte Hauptspeicer kommt man zwar erstaunlic
weit, mance Aufgaben sind aber deswegen nict mglic.
Ein paar Beispiele sind: (1) Der GNU C Compiler luf mit 8
MByte leider nict. (2) Mance Linux Distributionen legen am
Anfang ein paar Megabyte temporre Dateien als tempfs
ab, das ist bei 8 MByte nict mglic. (3) Mance einfac er-
sceinenden Dienstprogramme, z.B. apt-get braucen so
viel Speicer, dass sie in 8 MByte nict ausfhrbar sind. (4)
Programme aus dem Multimedia-Bereic, z.B. ogg123 oder
mpg123 braucen zum Entkomprimieren viel Hauptspei-
cer, so dass die erzielbare Datenrate bei 8 MByte deutlic
sinkt. (5) Grere Interpreter wie Python passen nur knapp
in den freien Speicer, dadurc brauct der Start dieser Inter-
preter inakzeptabel viel Zeit (5 bis 10 Sekunden). 32 MByte
Speicer sind aber bereits in Sict (Version 1.5). Damit sollten
die fnf genannten Beispiele dann kein Problem mehr sein.
Hinweis: Es gibt jetzt eine 32 MB GNUBLIN Version.
Fast alle neuen Anwender macen die Erfahrung, dass nac
der ersten Sitzung mit dem Board verstrkt Fehler beim Boo-
ten aufreten. Das liegt meist daran, dass das ext2 Filesys-
tem auf der MicroSD Karte pltzlic Fehler hat, die durc
spontanes Abbrecen des Linux Kernels verursact werden.
Seit jeher wird Linux geordnet mit Kommandos wie shut-
down oder halt heruntergefahren, nict einfac durc
Ziehen des Stecers abrupt beendet. Hier ist meist der Punkt,
an dem man sic mit der Installation von Linux auf dem Ent-
wiclungsrecner anfreunden muss, nur damit scaf man
es, die Karte in einem fle system cec (fsc) wieder zu
reparieren. Eine Verbesserung wre es, die Karte mit dem
ext3 Filesystem auszustaten, das auf Fehler gutmtiger
reagiert. Aber auc damit kann ein fsc ntig sein. Bei weni-
gen Teilnehmern war die MicroSD Karte gleic am Anfang
durc unkontrollierte nderungen (wahrsceinlic durc
wildes Herumklicen) in einem Zustand, dass der Inhalt
komplet wiederhergestellt werden musste. Das ist mit dem
grafscen gnublin-installer relativ einfac. Es ist ausser-
dem ntzlic, wenn man sic gelegentlic ein Image der
Karte mact, z.B. mit dem Werkzeug dd, vor allem, wenn
man nderungen an der Karte vorgenommen hat. Dieses
Image kann man bei einem spteren Crash zur Rekonst-
ruktion verwenden.
Eine zweite serielle Scnitstelle (UART) wre an der Pfos-
tenfeldleiste fr Erweiterungen mancmal wnscenswert.
Der LPC3131 hat aber leider nur einen UART, der scon fr
die Konsole verwendet wird.
Der Kernel- die Kernelversion
Gnublin verwendet den LPC3131 Mikrocontroller von NXP, das
ist auc der Grund, warum wir (leider) ziemlic stark auf den
Kernel mit der Version 2.6.33 festgelegt sind. Mitarbeiter von
NXP haben damals (2010) bei der Anpassung diesen Kernel ver-
wendet und leider bis jetzt keinen Update mehr fr eine neuere
Kernel-Version gemact. Fr vieles was man mit Gnublin ma-
cen kann strt das berhaupt nict, aber gelegentlic wre ein
neuerer Kernel ganz praktisc, zum Beispiel wenn man:
neue Peripheriegerte anscliessen mcte, die es zur Zeit
der Version 2.6.33 noc nict gab. Ein Beispiel: Vor ein paar
Tagen habe ic mir einen D-Link Go DWA-123 WiFi Adapter
gekauf (USB), der den Treiber rt2800usb verwendet. Diesen
Treiber gibt es zwar im Gnublin Kernel, allerdings kennt
Abb. 1: Beim Projekt
Debian fr Gnublin wurde
auch eine Real-Time Clock
DS1307 ber I2C ange-
schlossen.
5
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] GNUBLIN
Den Kernel kompilieren
sie noc nict den RT3370 Chip, der in diesem Adapter ver-
wendet wird. Aus diesem Grund kann man beim Gnublin
Kernel tendenziell nur ein wenig reifere Peripheriegerte
verwenden, z.B. die Asus WL-167G WiFi Adapter V1 und V2.
Damit die Version V3 dieses Adapters funktioniert, muss-
te aber bereits aus dem 2.6.39 Kernel der Treiber staging/
rtl8712/ in den Gnublin Kernel 2.6.33 eingebaut werden. Es
ist sicer wnscenswert, dass man diese Vorgehensweise
nur ganz selten anwendet.
aus der Weiterentwiclung des Kernels allgemein Nutzen
ziehen mcte. Die meisten Neuerungen sind sicer fr
Gnublin nict von Bedeutung, allerdings gibt es gelegent-
lic Verbesserungen in den Frameworks fr die Peripherie,
z.B. GPIO, PWM und I2C.
Mglice Auswege aus der Festlegung auf 2.6.33 wren, sic die
Mhe zu macen, selber die Anpassung fr LPC3131 auf einen
neueren Kernel 3.x zu macen (das erfordert aber scon sehr
fortgescritene Kenntnisse), oder gleic auf einen anderen Con-
troller umzusteigen, der in Linux Mainline untersttzt wird.
Ein mglicer Kandidat wre der LPC3250.
Mit ein wenig Anleitung scafen es die Kursteilnehmer relativ
scnell, einen neuen Kernel und die dazugehrigen Module zu
kompilieren. Auc die Auswahl der gewnscten (einfacen)
Kernel-Features durc make menuconfg ist mit ein wenig
bung zu bewltigen. Hier ist vor allem die hohe Zahl und die
tiefe Verscactelung der Meneintrge am Anfang scwierig.
Die Frustration steigt auc durc die vielen Eintrge, deren
Bedeutung sic nur dem professionellen Kernel-Entwicler er-
scliessen.
Beim Umgang mit dem Kernel merkt man scnell, dass man sic
auc um die *Organisation* von Quelltexten und Daten km-
mern muss. Es fngt an mit dem riesigen Quelltextbaum des
Kernels, an dessen oberster Stelle auc die Konfgurationsdatei
.confg sitzt. Nac erfolgreicer Konfguration/Kompilierung
erhlt man als Ergebnis einen neuen Kernel arc/arm/boot/
zImage und einen Satz an Modulen, die man mit make modu-
les_install INSTALL_MOD_PATH=... an einen geeigneten Ort
zusammen mit dem Kernel und der aktuellen Konfgurations-
datei auf dem Entwiclungsrecner ablegt. Von hier muessen
die Kerneldateien auf die MicroSD Karte bertragen werden, so
dass sie von Gnublin beim ncsten Booten verwendet werden.
Wenn man nun mit mehreren Kernelkonfgurationen Expe-
rimente mact und vielleict sogar auc am Quelltext nde-
rungen mact, muss man sic bereits einen ordnenden Plan
macen, um nict die bersict zu verlieren, welce Features
in welcer Version verwendet werden. Auc kann es passieren,
dass ein neu komplierter Kernel nict bootet, so dass man wie-
der auf den letzten funktionierenden Kernel zurcgehen muss.
Der Anfnger kann sic an diesem Punkt scnell verheddern,
so dass nur ein kompleter Neuanfang wieder Ordnung und
bersict bringt. Hilfreic wre ein einfaces Kommandozei-
lenwerkzeug, das den Anfnger bei der Erstellung eines neuen
Kernels strker fhrt und die Ergebnisse reproduzierbar spei-
cert.
Stark verbesserungsfhig ist die Art und Weise, wie der Kernel-
code zur Zeit auf gnublin.org verwaltet wird. Es ist momentan
eine Miscung aus Git Repository und klassiscen Patces, bei
deren Anwendung auc viel sciefgehen kann. Als provisori-
sce Lsung habe ic ein eigenes git Repository mit dem Branc
gnublin fr den Gnublin Kernel eingerictet, siehe
http://elk.informatik.fh-augsburg.de/hhwiki/EmbeddedLi-
nux2012
Nacdem man nderungen am Kernel gemact hat, stellt sic
scnell die Frage, ob alle gewnscten Kernel-Features noc
funktionieren, auc die, bei denen man gar keine nderungen
gemact hat. Eigentlic msste man nun in der Gnublin Konso-
le viele Punkte berprfen, z.B. ob die gewnscten Netzwerk-
treiber vorhanden sind, ob das sysfs vorhanden ist, ob sic die
PWM und ADC Treiber laden lassen, ob ext3 im Kernel aktiviert
ist und so weiter. Hier wre ein kleines Testsystem von Vorteil,
das Konsoleneingaben automatisiert ablaufen lassen kann, z.B.
mit dem Werkzeug expect.
Das Root Filesystem
Das momentan mit Gnublin ausgelieferte Root Filesystem ba-
siert auf dem ELDK 5.0 (siehe htp://www.denx.de). Mitlerweile
gibt es die Version 5.2, das zwei fr Gnublin scne Verbesse-
rungen gegenber 5.0 hat:
Es gibt kleinere Varianten, die nur noc die wirklic ge-
braucten Programme dabei haben, zum Beispiel braucen
wir gar keine grafscen X-Window Programme. Somit
scrumpf das Root Filesystem von derzeit ber 600 MByte
(5.0) auf 100 bis 200 MByte. Das wirkt sic deutlic aus auf
alle Operationen, die mit Download, Kopieren, Sicern und
Bescreiben des Root Filesystems zu tun haben.
Die zweite Verbesserung betrif das Paketmanagement. Die
Version 5.2 kommt mit dem ipkg Paketmangager, der Binr-
pakete aus dem Netz holen und installieren kann. Ein ei-
genes Paketrepository wre fr Gnublin ideal, da sic fast
jeder, der intensiv mit dem Board arbeitet, eigene Zustze fr
sein Root Filesystem zusammenbaut, diese aber of nur auf
der lokalen MicroSD Karte gespeicert werden. Diese Zust-
ze kommen of aus dem Debian/ARM (armel) Projekt, man
kann die vorkompilierten Programme direkt bei Gnublin
bernehmen, oder sie kommen durc selber crosskompilier-
te Programme. Die Reproduzierbarkeit von nderungen am
Root Filesystem ist also, hnlic wie scon im Abscnit ber
den Kernel angesprocen, mangehaf. Die Anpassung von
ELDK 5.2 fr Gnublin wird also immer dringender.
Alternativ gibt es mitlerweile ein fr Gnublin angepassstes
Debian 6 (siehe Projekte weiter unten). Damit hat man dann
den dpkg Paketmanager, der allerdings nur einzelne .deb
Pakete installieren kann. Das Holen aus dem Netz und die
Aufsung von Abhngigkeiten muss man manuell erledi-
gen. Mit den apt Utilities knnte man das zwar komforta-
bel erledigen, sie laufen aber leider nict mit 8 MByte Spei-
cer (mit 32 MByte vielleict scon).
6
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
Arbeiten auf dem Ent-
wicklungsrechner
Ein deutlicer Wohlfhlfaktor im Um-
gang mit dem Gnublin Board ist die F-
higkeit, sic auf dem Entwiclungsrec-
ner unter Linux zurectzufnden. Einige
Aufgaben, fr die man diesen Recner
verwendet, sind:
1)Betracten der Gnublin Konsole (Ter-
minalemulation mit picocom o..)
2)Austausc von Dateien mit Gnublin
(XYZModem oder scp)
3)File System Chec der MicroSD Karte
4)Crosskompilieren von Programmen
fr Gnublin
5)Test von Web-Anwendungen auf
Gnublin mit einem Browser
6)Arbeiten mit dem Kernel
- Kernelquelltext ndern
- Quelltext hinzufgen, z.B. ein neues
Modul
- Sucen von Quelltexteilen
- nderungen herausfnden (dif)
- Konfguieren
- Kompilieren
- Kernel u. Module auf MicroSD
Karte bertragen
- Versionsverwaltung mit git
7)Root Filesystem fr Gnublin
- Pakete hinzufgen/lscen
- ELDK kompilieren
- Andere Distributionen fr Gnublin
anpassen
Viele Anfnger sind geneigt, ausscliess-
lic mit grafscen Klic-Werkzeugen
zu arbeiten. Ist das bei 1, 2 und 3 noc in
Ordnung, gibt es bei 4, 5, 6 und 7 damit
ernste Probleme, da alle verwendeten
Programme auf der Kommandozeile an-
gewendet werden. Es sieht frustrierend
aus, wenn Anfnger lediglic mit einem
grafscen Dateimanager ausgerstet im
Kernel Verzeicnisbaum verloren herum-
klicen. Um produktiv
arbeiten zu knnen, lohnt
es sic daher, zuncst
zu lernen, wie man auf
einem UNIX-hnlicen
Recner efektiv auf der
Kommandozeile arbeitet.
Einige freie Literaturan-
gaben dazu habe ic un-
ter [1] gesammelt.
[ PROJECT ] GNUBLIN
Abb. 2: Auf der linken Seite sieht man das Tiefpasslter aus zwei RC-Gliedern. Dar-
ber kann man Audio-Signale bis etwa 1 kHz aus einem per Software erzeugten PWM
Signal rekonstruieren. Unten links sieht man auch den DCF77 Empfnger der an
einen GPIO Pin angeschlossen ist.
Abb. 3: Auf dem Bild sieht man das
9 DoF Beschleunigungssensor-
Board von Sparkfun, das ber einen
USB-UART an Gnublin angeschlos-
sen ist. Auf dem Notebook sieht
man die Web-Schnittstelle des Sen-
sors. Zwischen Gnublinund dem
Notebook besteht eine Ethernet-
Verbindung.
Die Dokumentation der Gruppe ndet man ebenfalls hier: http://elk.informatik.fh-
augsburg.de/hhwiki/EL12-Beschleunigung
7
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] GNUBLIN
Literatur
[1] H. Hgl, Freie Literatur zu GNU/Linux und UNIX
htp://elk.informatik.f-augsburg.de/hhweb/doc/linuxbib.html
Die Projekte
1. Debian als Alternative zum ELDK
htp://forum.gnublin.org/viewtopic.php?f=4&t=45
2. I2C Real-Time Cloc DS1307 zum Setzen der
Systemzeit (Teil von 1.)
3. DCF77 Empfnger an GPIO Pin zum Setzen der
Systemzeit
4. Spracausgabe mit Sof-PWM + Tiefpassflter an
GPIO Pin
In einem Kernelmodul wird eine PWM Frequenz von
etwa 10 kHz erzeugt. ber eine Gertedatei kann das
PWM Puls- zu Pausenverhltnis gendert werden.
Spracsignale knnen aus einer Binrdatei mit 8-Bit
Amplitudenwerten direkt durc cat auf die Gerteda-
tei ausgegeben. Die maximale Spracfrequenz ist etwa
1 kHz.
5. Treiber fr NEC Infrarot Protokoll
6. Mehrere LM75 Sensoren (I2C) an Gnublin
7. IMU 9 DoF (Sparkfun) an Gnublin mit interaktivem
Web-Interface
htp://elk.informatik.f-augsburg.de/hhwiki/EL12-Be-
scleunigung
8. Feucte- und Temperatursensor SHT15 (I2C) an
Gnublin
Mit Hilfe des Sensors SHT15 (I2C) von Sensirion soll
ein kombiniertes Feucte- und Temperaturmessgert
entstehen.
9. 1-Wire
Mit Hilfe eines DS2482 I2C auf 1-Wire Adapters soll
Gnublin mit dem 1-Wire Bus sprecen.
10. GPS Modul GlobalTop GMS-D1
Das GPS Modul aus dem Shop von Embedded Projects
GmbH kostet nur etwa 15 Euro. Man kann es ber ei-
nen UART oder ber die Signale D+ und D- an USB
anscliessen. Eine genauere Bescreibung der Projekte
wird es im Gnublin Wiki ab Mite Juli geben.
Abb. 4: Die grne LED auf dem Board beleuchtet einen Fototransistor,
der mit seinem Ausgang wieder an einen GPIO Pin angeschlossen ist.
Interessant wird sein, ob man daraus mit Hilfe eines Kernel-Moduls ei-
nen Oszillator machen kann, der mglichst schnell schwingt. Daraus
wird man auch Rckschlsse ziehen knnen, wie lang die Interrupt-
Latenzzeit ist.
Die Gruppe die den Feuchtigkeitssensor anschliesst hat noch kein Bild.
Das Sensor Board ist das von Watterott: http://www.watterott.com/de/
Feuchtigkeits-und-Temperatur-Sensor-SHT15-Breakout
Hier ndet man eine kurze Beschreibung:
http://elk.informatik.fh-augsburg.de/hhwiki/EW12-Feuchtesensor
Ausserdem experimentiert diese Gruppe mit einem Helligkeitssensor
mit I2C Anschluss, siehe
http://www.watterott.com/de/TSL2561-Lichtsensor
Insgesamt soll es eine Wetterstation werden.
Hinweis Kernel 3.3 + Debian:
Mittlerweile ist es mglich, den Kernel in der Version 3.3 zu verwenden.
Zudem kann man anstelle des ELDK ein Debian System einsetzen.
8
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Legal Software Engineering
Legal Software Engineering
Urheberrecht, Patentrecht & Lizenzmodelle
Bernd Suchomski, LL.M [1]
Die groen Sofwarefrmen wie Red Hat und Google haben es
bereits vorgemact: Neben der Entwiclung einer intelligenten
Sofware beruht der gescflice Erfolg einer Sofware-Scmie-
de auc auf dem rectssiceren Umgang mit dem Produkt. Die
wictigsten rectlicen Aspekte der Sofware-Entwiclung be-
wegen sic regelmig innerhalb von drei Ecpunkten:
1. Die Frage, ob und inwieweit ein Code berhaupt scutzfhig
ist,
2. unter welcen Bedingungen ein scutzfhiger Code erhltlic
ist (Lizenz) und
3. wie sic diese Lizenzbedingungen mit der eigenen Sofware-
Strategie vereinbaren lassen (Lizenzkompatibilitt).
Hinter all diesen Punkten befndet sic eine Vielzahl von rect-
licen Herausforderungen bei der Sacverhaltsrecerce und
-analyse. Wer sie meistert, dem winkt der gescflice Erfolg
als Ausgleic fr all die Mhe und Aufwendung, die bisher un-
ternommen wurden, um das eigene Business aufzubauen.
Durc die rictige Herangehensweise erfnet sic die Mglic-
keit, eine Idee scneller und besser umzusetzen als die Konkur-
renz. So knnen ansclieend die verdiente Reputation und die
ntigen Gelder erwirtscafet werden, um die eigene Erfolgsge-
scicte fortzusetzen. Andererseits drohen erheblice Einbuen
und Scadensersatzprozesse, wenn man mit den rectlicen
Aspekten der Sofwareentwiclung zu naclssig umgeht. So
knnen vor allem Mitentwicler Recte an der Sofware geltend
macen und dadurc den Vertrieb erheblic stren.
1. Der rechtliche Schutz von Software
a. Urheberrecht
Computerprogramme sind sowohl in Form des Objekt- als auc in Form des Quellcodes nac den Sonderregelungen der 69a f.
UrhG gesctzt. Der Scutz entsteht bereits in allen 165 Lndern der Berner bereinkunf (RB) automatisc mit der Formulierung
des Codes. Ein Anmelde- oder Registrierungsverfahren wie z.B. beim Pa-
tent ist nict mehr ntig.
Die inhaltlicen Anforderungen, die ein Sofwarecode fr den Scutz
erfllen muss, sind daneben weitaus geringer als bei Patenten und den
brigen urheberrectlic gesctzten Werken. Nict scutzfhig sind nur
einfacste Trivialprogramme (Sticwort: Hello World) und die abstrakte
Idee, die hinter dem Algorithmus steht. [2]
Problematisc ist allerdings die Frage, wem das Urheberrect
zusteht, wenn mehrere Entwicler an einem Projekt gearbeitet
haben. Zwar mag die Hilfe von Freunden und Studienkolle-
gen sehr willkommen sein. Sie ist jedoc regelmig mit Rec-
ten der Autoren am Endprodukt verbunden. Diese sollten auf
jeden Fall vor dem Publishing oder dem Gang zum Investor
vertraglic gebndelt werden, damit die harte
Arbeit Frcte trgt.
Wenn die Mitentwicler nict gerade auf Anwei-
sungen, d.h. als Gehilfen ttig geworden sind
und keinen scpferiscen Beitrag geleis-
tet haben, ist damit zu recnen, dass ih-
nen ein Urheberrect am Endprodukt zu-
steht. Soweit das aber der Fall ist, kann die
eigene Entwiclung nur noc ungehindert
vertrieben werden, wenn sie von der Ar-
beit Driter getrennt verwertbar ist. In
jedem Fall bleibt damit der wertvolle Bei-
trag ungenutzt und man muss statdessen
zu einer lteren Vorversion greifen es
sei denn, es lassen sic Hinweise auf eine
Zwecgemeinscaf oder
eine Bindung der Helfer
nac den Grundstzen von
Treu und Glauben fnden.
Beitrag getrennt
verwertbar?
Gesamtidee der
die Entwickler
folgen
Gehilfe
Urheber verbunde-
ner Werke
Keine Abstimmung
ntig
Abstimmung ntig
Mglw. Klage auf
Zustimmung zur
Verwertung
Mglw. Gesellschaf t
brgerlichen Rechts,
die auf gemeinsame
Verwertung ausge-
legt ist
Miturheber
Abstimmung ntig
Mglw. Zustimmungs-
Glauben
Be-/Umarbeiter
Abstimmung ntig
Umsetzung der Informationen im gewnsch-
ten Entwicklungs- bzw. Lizenzvertrag
Geplante Verwertung eigener und fremder
Software-Entwicklungsleistungen
Schpferischer Beitrag
des Mitentwickler s
nein ja
ja nein
nein ja
Abb. Leistungsverwertung
(Suchomski 2012)
9
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
b. Patentrecht
Sofwarepatente knnen in Form von Verfahrens- oder Erzeug-
nispatenten gesctzt werden, 9 PatG. Eine dafr ntige Er-
fndung muss stets eine neuheitlice Lsung fr ein tecnisces
Problem darstellen und gewerblic anwendbar sein, vgl. 1
PatG.
Mit einem Verfahrenspatent wird ein neues Computerpro-
gramm als Ersatz fr die Hardware beanspruct [3] - man denke
an Smartphone-Toucscreens, welce die analoge Handy-Tasta-
tur ersetzen. Mit Erzeugnispatenten ist es dagegen mglic, fr
eine feste Hardware-Sofware-Kombination[4] Scutz zu erlan-
gen. Auc fest installierte Programme (sog. Embedded-Systeme)
fallen unter diese Kategorie. [5] Sclielic knnen damit auc
Patente fr Computerprogrammprodukte erteilt werden. Das
sind Programme auf Speicermedien, die sic wiederum auf ein
patentiertes Verfahren beziehen. [6]
Das Patentrect besteht dabei unabhngig zum Urheberrect,
vgl. 69g Abs. 1 UrhG. [7] Doc auc hier gibt es die Mglic-
keit, dass Mitentwicler als Miterfnder zhlen knnten. In ei-
nem solcen Fall ist es wiederum ntig, sic mit allen Miterfn-
dern hinsictlic der Verwertung eines Patents abzustimmen,
vgl. 6 S. 2 PatG.
Doc der Grif nac Sofwarepatenten ist mit Risiken verbun-
den. Einerseits sind Umfang und Kosten der Patentrecerce
abhngig von der Komplexitt des Programms. Selbst danac
kann die Patentanmeldung vom Deutscen Patent- und Mar-
kenamt (DPMA) zurcgewiesen oder im Rahmen eines Ein-
sprucsverfahrens zu Fall gebract werden. Weiterhin existiert
die Mglickeit, dass ein bereits erteiltes Patent durc einen
Nictigkeitsprozess erfolgreic angegrifen wird.
Sclielic sind Sofwarepatente vor allem der Kritik von freien
Entwiclern ausgesetzt, da diese die Sofware-Innovationsmg-
lickeiten gefhrdet sehen. Denn selbst wenn eine Patentscrif
eine Anleitung zur Umsetzung einer tecniscen Lsungsidee
liefern mag, so liegt ihr nict notwendigerweise ein Quellcode
bei, mit dem die Entwicler ihre Sofware vergleicen knnten.
Ob der eigene Quellcode ein Patent verletzt oder nict, ist of-
mals scwer zu erkennen. In solcen Fllen wird selbst ein Ge-
rict zustzlice Gutacten einholen mssen. Freie Entwicler
organisieren sic daher of in Internet-Registrierungssystemen
um Sofwarepatenten scon im Entstehen oder wenigstens
nactrglic im Rahmen eines Nictigkeitsverfahrens zu begeg-
nen. [8]
2. Bezug und Verwendung geschtzter Codes
Urheberrectlic oder patentrectlic gesctzter Code kann danac unter bestimmten Konditionen (Lizenzen) der fentlickeit
bzw. einem ausgewhlten Kundenkreis angeboten werden. Ebenso kann ein solcer Sofwarecode zur Weiterverarbeitung bezogen
werden, um sic einen Teil der Entwiclungsarbeit zu sparen. Hier einige Beispiele:
a. Kommerzielle Lizenzen
Kommerzielle Lizenzen bilden den klassiscen Kern des Sofware-Vertriebs. Mit ihnen wird das Programm gegen Entgelt auf Dauer
oder auf Zeit berlassen. Der Sofware-Einsatz kann beim Kunden hinsictlic der Nutzung im Netzwerk oder auf versciedenen
Computern, bezglic der gewerblicen Ausrictung der Verwendung und im Hinblic auf Vervielfltigungs- und Verbreitungs-
handlungen eingescrnkt sein. Hinzu kommen sog. Audit-Klauseln, die dem Urheber die Kontrolle darber ermglicen sollen,
ob die gemacten Vorgaben auc durc den Lizenznehmer eingehalten werden. Soweit sie nict individuell mit den Abnehmern
ausgehandelt werden, mssen sie den Grundstzen der Allgemeinen Gescfsbedingungen nac 305 f. BGB entsprecen.
b. Open Source
Open Source Sofware (OS) stellt ein Gegenmodell zu kom-
merziellen Lizenzen dar. Solce Lizenzen stellen Quell- und
Objektcode frei von jeglicen Lizenzgebhren und zu jedwe-
dem Zwec zur Verfgung. Der Code darf kopiert, bearbeitet
und verbreitet werden. Die Benutzung ist trotzdem nict frei
von Aufagen. Grundstzlic sind bei der Weiterverbreitung
den Abnehmern die gleicen Recte an der ursprnglicen
Sofware zuzugestehen, die man selbst in Anspruc nehmen
konnte.
Wurden bestimmte Vernderungen am Code vorgenommen
oder Code-Fragmente in eigene Programme berfhrt, so kann
eine OS-Lizenz versciedene Folgen anordnen. Mglicerwei-
se ist dann ein Weitervertrieb des vernderten Codes nur ge-
trennt d.h. Form von Originalprogramm und Patc-Dateien
erlaubt. Falls eine OS-Lizenz einen Copylef-Efekt vorsieht,
ist es auc mglic, dass das Endprodukt ebenfalls nur noc un-
ter den Bedingungen der OS-Lizenz vertrieben werden darf.
Ob der eigene Entwiclungsbeitrag infziert wurde, kann
anhand der rectlicen Begutactung der Programmierscrite
und der Systemarcitektur nacvollzogen werden.
Open Source kann aber auc kommerziell vorteilhaf genutzt
werden. Der Urheber bzw. Erfnder kann nac dem sogenann-
ten Dual-Licensing-Modell seine Sofware sowohl unter einer
OS-Lizenz als auc unter einer kommerziellen Lizenz anbie-
ten. Die Verfgbarkeit unter einer unkommerziellen OS-Li-
zenz hat den Vorteil, dass sic eine Sofware scneller verbrei-
tet und somit ein Markt-Standard gescafen wird. Denjenigen
Weiterentwiclern, die ansclieend auf diesem Standard auf-
setzen aber gleiczeitig kommerziell agieren mcten, kann der
Urheber bzw. Erfnder ansclieend seine kommerzielle Lizenz
verkaufen.
Selbst wenn Weiterentwicler ihren Quellcode lizenzgebh-
renfrei anbieten mssen, so gilt dies nict fr das Angebot
zustzlicer Dienstleistungen oder Hardware. [9] Beispiele
wie Red Hat, SuSE oder Google-Android zeigen, dass es auc
mglic ist, sic auf den Nebenmrkten erfolgreic zu bewe-
gen. Die Sofware kann daneben scneller und efzienter den
Kundenwnscen und Hardware-spezifkationen angepasst
werden. Hersteller von Embedded-Systemen proftieren von
Open Source Sofware, weil sie eine zeitnahe und strungsfreie
[ PROJECT ] Legal Software Engineering
10
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
Gertenutzung ermglict. [10] Unabhngig von dem Vertrieb
von OS-Produkten kann ein nict unwesentlicer Umsatz mit
dem Angebot von Support, Beratung und Weiterbildung erzielt
werden. [11] Allerdings wurde auc in der Vergangenheit der
Versuc unternommen, die freien Weiterentwicler durc das
Angebot zustzlicer Dienstleistungen zu kdern und ihnen in
der Folge den Vertrieb von Open Source Sofware zu erscwe-
ren. So hat Oracle die Zertifzierung freier Java-Entwiclungen
innerhalb seines Tecnology Compatibility Kits (TCK) zwar ge-
statet. Dessen Lizenz sah jedoc teilweise vor, dass die danac
zertifzierten Produkte nict mehr auf Embedded-Systemen zu
Einsatz kommen durfen, [12] sog. Field of Use Restriction oder
Java-Trap. [13]
c. Public Domain Software
Das US-amerikanisce Rect hat den Begrif der Public Domain Sofware geprgt. Danac kann der Urheber auf alle Recte an
seiner Sofware verzicten. Sein Programm kann somit von jeder Person vllig ohne Einscrnkungen verwendet werden. [14] In
Deutscland gibt es keine vergleicbare Mglickeit, sic seiner Urheberrecte zu entledigen. Zwar gibt es das rectlice Phnomen
der gemeinfreien Werke. Allerdings entsteht dieser Zustand erst mit Ablauf des urheberrectlicen Scutzes, d.h. 70 Jahre nacdem
der Autor verstorben ist. [15]
d. Freeware und Shareware
Bei einer Freeware-Lizenz wird die Sofware zuncst lizenzgebhrenfrei im Binrcode angeboten. Allerdings scrnkt eine solce
Lizenz Vernderungen an der Sofware oder deren weiteren Vertrieb ein. Der Quellcode ist dabei ebenfalls nict erhltlic. [16] Eine
Shareware-Lizenz untersceidet sic davon ofmals nur durc eine zeitlice Begrenzung der Nutzungsrecte. Mit ihnen soll dem
Benutzer eine Demonstration des Programms vorgefhrt werden, um ihn zum Kauf zu animieren. [17]
e. Shared Source Software
Lizenzen nac dem Modell der Shared Source Sofware gelten mitlerweile als berholt. Sie sind der Open Source Sofware zwar
hnlic, weil sie den Quelltext zur Verfgung stellen und dessen Bearbeitung erlauben. Allerdings waren solce Befugnisse nur zu
Testzwecen erlaubt. [18] Microsof verteilte solce Lizenzen um sein Betriebssystem Windows CE weiterentwiceln zu lassen. Woll-
ten andere diese Weiterentwiclungen aber verkaufen, bedurfe es einer zustzlicen Microsof-Lizenz, die entgeltpfictig war. [19]
3. Lizenzkompatibilitt
Hat man danac die Urheberscaf und die Bedingungen der
zur Verfgung stehenden Sofwarelizenzen geklrt, gilt es die-
se Elemente zu vereinen, um das Projekt erfolgreic zum Ab-
scluss zu bringen. Einige Lizenzen gestaten dabei, dass der
bergebene Quellcode be- oder umgearbeitet werden darf.
Ausgehend von der verfolgten Programm-Arcitektur muss zu-
ncst geprf werden, ob berhaupt auf den Quellcode eines
Programmes Bezug genommen wird oder ob das Programm
nur zu Hilfszwecen, z.B. zum Compiling, ausgefhrt wird.
Sollte in den Quellcode derart eingegrifen werden, dass Teile
von ihm mit Teilen anderer Quellcodes verbunden werden oder
wird ein Programm zur Interaktion mit einem lizenzierten Pro-
dukt gescrieben, so sollte untersuct werden, ob die rectlice
Zukunf des neu entstandenen Codes von einer oder mehreren
daran beteiligten Lizenzen geregelt wird.
Falls mehrere Lizenzen der beteiligten Codes das Ergebnis ei-
ner Be- oder Umarbeitung regeln, ist es ratsam zu klren, ob die
Defnition des Ergebnisses bestimmt genug ist, um einer AGB-
Prfung standzuhalten. Sollten danac die Bestimmungen der
Lizenzen hinsictlic des entstandenen Ergebnisses identisc
sein, steht einer Verwertung der Sofware nicts mehr entgegen.
Weicen sie voneinander ab, besteht die Mglickeit, dass man
eine Lizenzvertrags- oder gar eine Urheberrectsverletzung
beim weiteren Umgang mit dem Entwiclungsergebnis begeht.
Gerade bei Open Source dreht sic dieser Aspekt um die Frage,
ob Copylef-Lizenzen wie die GPLv2 oder GPLv3 an dem Ent-
wiclungsergebnis beteiligt waren. Das Entwiclungsergebnis
wird dabei meist als work based on the program[20] oder
abgeleitetes Werk bescrieben ein Zustand, der regelmig
nur ber die konkrete Verwendung des Programms bestimmt
werden kann. Dieser kann mit dem Aspekt der anderweitigen
Verwertbarkeit einer Systemkomponente einhergehen. Damit
versciebt sic die Diskussion auf die tecniscen Aspekte der
einzelnen Komponentengruppen. Fr Plugins und Shared Lib-
raries gelten danac andere Standards als bei Middleware und
Modul-Verknpfungen via User Interfaces. Besonders proble-
matisc ist darber hinaus die Implementierung von System-
modulen ber den Kernel. Um die Eigenentwiclung nict dem
Regime einer bereits existierenden OS-Lizenz unterwerfen zu
mssen, ist es u.a. ratsam, peinlic darauf zu acten, dass die Ei-
genentwiclung nict aussclielic von den verwendeten OS-
Produkten abhngig und statdessen dynamisc implementiert
ist.
4. Zusammenfassung
Die heutige Sofware-Lizenzierung bietet den Entwiclern
zahlreice Verbesserungsmglickeiten fr das eigene Produkt
oder das eigene Unternehmen. Um das eigene Sofwareprodukt
selbst berhaupt wirksam verwerten zu knnen, ist es notwen-
dig, sic zuvor der Zustimmung aller Miturheber und Miter-
fnder zu vergewissern. Flankierend dazu ist es ratsam, seine
freien Mitentwicler vertraglic anzuhalten, den gemacten
Entwiclungsbeitrag exklusiv zur Verfgung zu stellen. ber
einen etwaigen Anteil an den Erlsen knnen individuelle Ver-
einbarungen getrofen werden.
[ PROJECT ] Legal Software Engineering
11
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
Literatur
[1]Der Autor ist Rectsanwalt und auf das Sofware- und
Contentrect ausgerictet. Der Text ist z.T. seiner
Verfentlicung in der MIR-Scrifenreihe entlehnt
(Proprietres Patentrect beim Einsatz von Open Source
Sofware, tgramedia, Bonn 2011)
E-Mail: sucomski@sonntag-partner.de
[2]Jaeger/Metzger, Open Source Sofware, 3. Aufage,
Mncen 2011, Rn. 120; Spindler, Rectsfragen bei Open
Source, Kln 2004, S. 21 f., Rn. C 2; sehr detailliert mit
gescictlicem Hintergrund: Scifner, Open Source
Sofware, Mncen 2003, S. 41 f., m. w. N.
[3]Vgl. Sedlmaier, Patentierbarkeit von Computerprogrammen
und ihre Folgeprobleme, Mncen 2004, S. 144, 146; Ohly,
CR 2001, 809, 815.
[4]Spindler, Rectsfragen bei open source, Kln 2003, S. 248,
Rn. F 50.
[5]Vgl. Sedlmaier, S. 199, 144, Fn. 17, 18 verweist auf EPA-
Bescwerde-Entsceidung 25.07.1997 T 410/96: data-
processing system comprising means adapted to carry out
[...]
[6]Vgl. Sedlmaier, S. 144 f., 151 f.
[7]Dogmatisc ergnzend: Sedlmaier, S. 23 f.
[8]Z. B. System der FFII: htp://eupat.fi.org/purci/index.
de.html], erwhnt bei: Jaeger/Metzger, Rn. 288; Sedlmaier,
S. 96 a. E.
[9]Dazu: Jaeger/Metzger, Rn. 115.
[10]Jaeger/Metzger, Rn. 20.
[11]Jaeger/Metzger, Rn. 21.
[12]TCK Stand Alone License, Zifern 1.6, 1.12 und 2.1 (b)
(v), Exhibit A II: htp://jcp.org/aboutJava/communityprocess/
licenses/STANDaloneTCK7Final.docx.
[13]Vgl. Stallman, Free Sofware Free Society, FSF 2010, S. 215
f.
[14]Jaeger/Metzger, Rn. 8; Spindler, S. 17 f., Rn. B 13.
[15]Jaeger/Metzger, Rn. 8; Spindler, S. 17 f., Rn. 13, Fn. 28.
[16]Jaeger/Metzger, Rn. 9; Spindler, S. 18, Rn. 14.
[17]Jaeger/Metzger, Rn. 10.
[18]Spindler, S. 18, Rn. 15.
[19]Jaeger/Metzger, Rn. 11.
[20]Zifer 2 Abs. 1 GPLv2; Zifer 0 Abs. 5 GPLv3.
Weitere Informationen zum Thema
Lizenzierung
[1]htp://www.sonntag-partner.de/
[2]htp://www.groklaw.net/
[3]htp://opensource.org/osd.html/
[4]htp://www.gnu.org/licenses/licenses
[5]htp://gpl-violations.org/
Soweit bereits vorhandene Programme bezogen werden, sollten
zuvor deren Lizenzbedingungen dahingehend berprf wer-
den, ob das angestrebte Projekt auc rectlic realisierbar ist.
Sptestens bei Open Source gilt es, sic darber hinaus der Fol-
gen fr die Recte an der entstandenen Entwiclung bewusst
zu werden. In diesem Fall muss eine strategisce Entsceidung
getrofen werden: Entweder das Dual Licensing nutzen und das
Gescfsmodell efektiv auf Open Source ausricten oder die
eigene Entwiclung so gescict gestalten, dass man den rectli-
cen Copylef-Efekt umgeht und die Sofware auc selbst kom-
merziell verwerten kann.
Anzeige
Sicherheit?
Unser neues
Open-Source-Projekt
www.picosafe.de
[ PROJECT ] Legal Software Engineering
12
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
CAN steht fr Controller Area Net-
work und ist ein Bussystem, welces
ursprnglic fr die Vernetzung
von Fahrzeugkomponenten konzi-
piert wurde. Es handelt sic um ein
serielles Bussystem, welces
Informationen diferenzi-
ell ber zwei Datenleitun-
gen (CAN_HIGH, CAN_
LOW) bermitelt. Hufg
wird auc eine drite Leitung,
eine Erdungsleitung, mitgefhrt.
Beim CAN-Bus gibt es keine festgelegten
Master/Slave-Gerte. Alle Bus-Teilneh-
mer horcen auf dem Bus mit. Will ein
Gert senden, wartet es, bis eine gerade
laufende bertragung abgesclossen ist,
und versuct dann seine Daten zu ber-
miteln. Auf dem Bus gibt es zwei mg-
lice Signalpegel: den rezessiven und
den dominanten Pegel. Wie der Name
bereits vermuten lsst, berscreibt der
dominante Pegel den rezessiven. Wol-
len gleiczeitig mehrere Bus-Teilnehmer
senden, entsteht dadurc eine Priori-
sierung. Derjenige, der in der bertra-
gung als erstes einen dominanten Pegel
auf den Bus setzt, gewinnt und sendet
weiter. Der Verlierer erkennt dies und
brict die bermitlung ab. Erst wenn
der Bus wieder frei ist, wird ein erneu-
ter Versuc unter-
nommen. Daten
werden innerhalb
von sogenann-
ten Frames bertragen. Die eigent-
licen Daten werden dabei von
Steueri nformat ionen
umrahmt. Zu Beginn
eines Frames wird
eine Message-ID ge-
sendet. Diese erlaubt
den Busteilnehmern
zu entsceiden, ob das
Paket fr sie interessant ist.
Zugleic priorisiert diese ID
die Nacricten bei gleic-
zeitigem Zugrif gewinnt die
CAN-Nacrict mit dem ersten
dominaten Bit. Die ID ist entweder 11Bit
(Standard) oder 29Bit (Extended) lang.
Nac der ID folgen Flags, die Lnge des
Datenfeldes und sclielic die eigent-
licen Nutzdaten. Hiervon knnen je
Frame bis zu act gesendet werden.
CAN-Bus
[ PROJECT ] USBtin
USBtin
Ein einfacher USB-nach-CAN Adapter
Thomas Fischl <thomas@schl.de>
Ursprnglic fr Fahrzeuge entwicelt, fndet sic der CAN-Bus
mitlerweile in vielen anderen Bereicen wieder. Die Robustheit,
das defnierte Zugrifsverhalten, die vorgegebene Framestruk-
tur und nict zuletzt die Verfgbarkeit von Mikrocontrollern
mit integrierter CAN-Einheit, macen den Einsatz auc fr ei-
gene Projekte interessant. Um die Eigenbauten zu testen, stellt
ein PC zum berwacen und Absetzen von CAN-Nacricten
eine unverzictbare Hilfe dar. Die Brce zwiscen Recner
und dem CAN-Bus scaf der hier vorgestellte USBtin.
Einleitung
Abb. 1: Versuchs-
aufbau
Schaltung
Die Scaltung (siehe Abb. 2) besteht im
Wesentlicen aus dem Mikrocontroller,
dem CAN-Controller und dem CAN-
Transceiver. Bei dem Mikrocontroller
handelt es sic um einen Microcip
PIC18F14K50 mit integriertem USB-
Client-Modul. Da dieser Chip keine
CAN-Peripherie integriert hat, wird die
CAN-Funktionalitt ber einen exter-
nen Controller zur Verfgung gestellt:
dem MCP2515. Dieser ist ber den SPI-
Bus an den Mikrocontroller angebun-
den. Zustzlic sind drei Steuerleitungen
verdrahtet, ber die Ereignisse an den
PIC gemeldet werden. Um die digitalen
Signale in ein CANgerectes diferen-
zielles Signal zu wandeln, ist zustz-
lic ein Transceiver notwendig. Hierfr
wurde der MCP2551 gewhlt, der ber-
tragungsraten von bis zu 1MBaud und
bis zu 112 Busteilnehmer erlaubt. Alle
drei Bausteine sind im DIP-Gehuse
verfgbar und damit mit Bastlerausrs-
tung ohne Probleme zu lten. Die Span-
nungsversorgung erfolgt direkt ber die
+5V-USB-Spannung. Eine galvanisce
Trennung zwiscen dem PC und dem
CAN-Bus besteht damit keine! Um den
Betriebszustand optisc zu signalisieren,
wurde eine LED vorgesehen, die direkt
vom PIC gesteuert wird. Der Jumper JP1
aktiviert den Bootloader und hngt an
Pin RA3 des Controllers (MCLR ist per
Konfgurationsbit deaktiviert). JP2 termi-
niert die Busleitung mit einem 120 Ohm-
Widerstand.
Aufbau
Ein erster Versucsaufau (siehe Abb. 1)
wurde mithilfe des PIC Entwiclungs-
boards USBnub realisiert. Dieses Board
besitzt bereits die erforderlice Grund-
scaltung zum PIC18F14K50, um ohne
Zusatzaufwand die USB-Anbindung
nutzen zu knnen. Der MCP2515 war
scnell auf eine Locrasterplatine gel-
tet und an den Verbinder des USBnub
angebunden. Mit diesem Aufau wur-
de die erste Scaltungsidee auf Mac-
barkeit berprf und eine erste Basis-
13
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
Abb. 2: Schaltplan
[ PROJECT ] USBtin
Bootloader
Um Firmware-Updates direkt ber USB
ohne extra Programmieradapter zu er-
mglicen, wurde ein Bootloader integ-
riert. Der Bootloader sitzt am Anfang des
Programmspeicers und wird bei jedem
Anstecen des Gertes zuerst gestartet:
Es wird geprf, ob der Jumper zum Ver-
weilen im Bootloader-Modus gesetzt ist.
Ist dies nict der Fall, wird unmitelbar
zum Startpunkt der eigentlicen Appli-
kation gesprungen (in diesem Fall zu
Adresse 0x1000 im Flash). Als Bootloader
wurde der HID Bootloader aus der Mi-
crocip Application Library (MAL v2011-
10- 18) verwendet und fr den USBtin an-
gepasst. Die Mglickeit, das EEPROM
ber den Bootloader zu lesen und zu be-
screiben wurde abgescaltet, um Platz
im Flash fr die notwendige Initialisie-
rung des CAN-Controllers MCP2515 zu
scafen. Dieser stellt nmlic den Takt
fr den Mikrocontroller bereit. Nac An-
legen der Versorgungsspannung ist zwar
der Taktausgang des CANControllers
standardmig an, wird aber um den
Faktor 8 heruntergeteilt. Um im PIC die
USBFunktionalitt nutzen zu knnen,
wird ein Taktsignal von 12Mhz genutzt.
ber die interne 4fac PLL werden da-
raus die fr die USB-Peripherie ntigen
48Mhz erzeugt. Somit mssen die am
CANController anliegenden 24Mhz hal-
biert werden. Die entsprecende Konf-
guration gescieht nacm Initialisierung
der SPI-Scnitstelle, nac einem Reset-
Kommando und durc Setzen eines Kon-
fgurationregisters im MCP2515. Um den
PIC sicer zu starten, ist der sogenannte
Fail-Safe Cloc Monitor aktiviert. Dieser
scaltet automatisc auf den internen Os-
zillator um, falls die externe Taktversor-
gung aussetzt. Sobald der Taktausgang
des MCP2515 rictig eingestellt ist, wird
der PIC per Firmware-Befehl (wieder)
auf externe Taktversorgung umgescal-
tet. Als Entwiclungsumgebung wurde
MPLAB X mit dem C18 Compiler unter
Ubuntu eingesetzt. Beide stehen als kos-
tenfreie Downloads auf der Microcip-
Webseite zur Verfgung. Der Bootloader
wurde ber einen Adapter (ICSP-Leitun-
gen auf USB-Bucse und JP1) mithilfe des
Programmiergertes PicKit3 in den PIC
gescrieben. PC-seitig wird das Open
Source Programm MPHidFlash einge-
setzt, um Programmcodes im HEXFor-
mat an den Bootloader zu bermiteln.
Firmware entwicelt. Daraus haben sic
einige Scaltungsoptierungen ergeben:
So konnte beispielsweise ein Quarz eli-
miniert werden, indem der CLKOUT-Pin
des CAN-Controllers verwendet wird.
Mit diesen Verbesserungen konnte der
Scaltplan fertig gestellt und das Plati-
nenlayout erstellt werden.
Firmware
Der USBtin sollte mglicst einfac un-
ter den versciedenen Betriebssyste-
men zu nutzen sein. Als sinnvolle Mg-
lickeit wurde das SLCAN-Protokoll
identifziert. Dieses Protokoll hat ihren
Ursprung bei CAN-Adaptern fr die se-
rielle Scnitstelle und wurde von der
Firma Lawicel entwicelt (daher wird
es auc Lawicel-Protokoll genannt). Um
dieses Protokoll umzusetzen, wurde in
die Firmware die USB-Klasse CDC inte-
griert. Damit meldet sic der USBtin als
serielle Scnitstelle am PC und kann
einfac ber ein beliebiges Terminal-
programm bedient werden. Der USB-
Stac wurde fr den PIC18F14K50 neu
gescrieben und unterliegt damit nict
den Einscrnkungen zum Verteilen des
14
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] USBtin
Software
Prinzipiell kann jedes Terminalprogramm einge-
setzt werden, um Kommandos an den USBtin zu
senden und empfangene CAN-Nacricten darzu-
stellen. Abbildung 3 zeigt das Programm HTerm
von Tobias Hammer in Aktion. Dieses ist sowohl
fr Windows als auc fr Linux kostenlos verfg-
bar und bietet die Mglickeit, Sequenzen in einer
eigenen XML-Datei abzuspeicern. Damit sind die
wictigsten Kommandos auf Mausklic abrufar.
Praktisc ist auc die Funktion Send on enter
CR; damit lassen sic eingetippte Befehle einfac
absetzen. Das Bildscirmfoto (Abb. 3) zeigt eine
typisce Befehlsabfolge: Zuerst wird per V[CR]
die Versionsnummer des USBtin abgerufen. Die
erfolgreice Antwort besttigt, dass die Kommu-
nikation zwiscen PC und USBtin funktioniert.
Ansclieend wird mit S0[CR] die Baudrate auf
10KBaud eingestellt und der CAN-Kanal gefnet
(O[CR]). Mit t1233456789[CR] wird eine CAN-
Nacrict mit der Standard-ID 0x123 und den Da-
tenbytes 0x45, 0x67, 0x89 abgesetzt (die 0x3 nac
der ID gibt die Lnge der Nutzdaten an).
Abb. 3: HTerm in Aktion
Erweiterungen
Die aktuelle Firmware bietet Erweiterungsmglickeiten: gut 30% des Flashspeicers
stehen noc zur Verfgung. Eine mglice Ergnzung betrif die Filterfunktionen des
MCP2515, mit deren Hilfe nur bestimmte CAN-Nacricten empfangen werden. Denk-
bar wre auc eine alternative Firmware, die nict per virtuellem Comport und per
ASCII-Kommandos kommuniziert und damit hhere bertragungsgescwindigkeiten
ermglict. Auerdem knnte die Einfhrung von zustzlicen Fifos in der Firmware
kurzzeitig erhhtes Datenaufommen besser pufern. Mglic wre auc eine Funkti-
on, um direkt aus der Firmware periodisc CAN-Nacricten abzusetzen. Sicerlic
gibt es noc viele weitere Ideen, um die Firmware um eigene Funktionen zu erweitern.
Der Bootloader vereinfact das Einspielen eigener Firmwarevarianten.
Alle bentigten Bauteile sind fr Bast-
ler im Versandhandel erhltlic. Ein
Kompletbausatz inklusive Platine und
programmiertem PIC wird angeboten.
Bestellmglickeit sowie Firmware-
Downloads sind auf folgender Seite zu
fnden:
htp://www.fscl.de/usbtin/
Bezugsquellen
Links
[1]Microcip Chiphersteller htp://www.microcip.com
[2]MPHidFlash Programm fr HID-Bootloader htp://code.google.com/p/mphidfash/
[3]USBnub USB-Entwiclungsboard htp://www.fundf.net/usbnub/
[4]HTerm Terminalprogramm htp://www.der-hammer.info/terminal/
Quellcodes, wie dies bei der Microcip-
Bibliothek der Fall ist. Die Kommandos
werden zeilenweise (abgesclossen mit
CR) an das Gert bermitelt. Der erste
Bucstabe identifziert das Kommando.
Dann folgen eventuelle Parameter. Hier
die wictigsten Befehle:
Sx[CR] Setzen der CAN-Bau-
drate
x: 0..8 entspricht 10, 20,
50, 100, 125, 250, 500, 800,
1000 Kbaud
O[CR] CAN-Kanal ffnen
C[CR] CAN-Kanal schlieen
tiiildd...[CR] Sendet eine
CAN-Nachricht
iii: Identif er in Hex-
Schreibweise
l: Anzahl Datenbytes in Hex-
Schreibweise
dd: Datenbytes
Da das Protokoll teilweise sehr hard-
warenah ausgelegt ist und ursprnglic
den alternativen CANController SJA1000
von NXP adressierte, konnten nict alle
Kommandos (z.B. manuelles Setzen der
Bitiming-Register) exakt umgesetzt wer-
den. Ein Nacteil bei der Nutzung des
virtuellen Comports ber die Standard-
treiber ist die begrenzte bertragungs-
gescwindigkeit zwiscen PC und USB-
tin. Um den Datendurcsatz zu erhhen,
wre eine modifzierte Firmware denk-
bar. Der Quellcode ist frei verfgbar ein
Makefle zum Erzeugen und bertragen
der Hex-Datei wird mitgeliefert. Als
Compiler wurde der HI-TECH C PRO
for the PIC18 MCU Family (Lite) V9.65
eingesetzt.
15
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Die elektronische Zigarette
Die elektronische Zigarette
Tobias Zuber
Ein moderner Mensch nutzt Elektronik um sein Leben unterhaltsamer und efzienter zu gestalten. So sind die rauchlosen Zigaretten
schon seit einiger Zeit auf dem Markt. Grund genug um sich ein Modell mal genauer anzuschauen.
Allgemeiner Aufbau
Im Wesentlicen besteht die E-Zigarete
aus drei Teilen, dem Akku mit der Pla-
tine, dem Verdampfer und dem Tank
fr die Flssigkeit, of auc Liquid ge-
nannt. Das Liquid gibt es in
unzhligen Gescmacsrictungen, mit
und ohne Nikotin in untersciedlicer
Konzentration. Im Verdampfer ist eine
Heizspirale, die ber einen Doct mit
Flssigkeit versorgt wird. Der 650 mAh
Litium-Ionen Akku soll bei kontinuier-
licer intensiver Nutzung mindestens 6
Stunden halten.
Innenleben
Das Gehuse zu fnen gestaltete sic doc nict so einfac wie gedact. Da half nur rohe Gewalt, wie Abb. 4 zu sehen. Neben den
oben bescriebenen Komponenten ist das wictigste natrlic die Platine. Nac der Befreiung aus dem Gehuse (Abb. 1 li.) erkennt
man auf der Oberseite den Taster sowie 2 LED und Widerstnde (Abb. 2). Auf der enger bestcten Unterseite liegen ein paar Wider-
stnde, Kondensatoren sowie 3 Halbleiter (Abb. 3, Q1 und Q2 bereits abmontiert). Das Herzstc der Scaltung ist ein(e) MCU mit
8-Pins im TSOP8 Gehuse. Die Suce nac der Aufscrif FD2005 ergab erstmal kein passendes Datenblat. Da, wie fast alles heut-
zutage, auc die E-Zigarete in China hergestellt wird, wurde ic auf einer cinesiscen Seite fndig. Dank Google-translate ist selbst
Chinesisc lesbar. Leider gibt es auc hier kein rictiges Datenblat, z.B. mit Pinbelegung etc., sondern nur eine Funktionsbescrei-
bung. Der Chip sceint extra fr E-Zigareten gemact zu sein. Ob ein Standartcip dahinter stect habe ic nict herausgefunden.
Um mir einen groben berblic der
Scaltung zu verscafen, habe ic ver-
suct einen Scaltplan zu erstellen (siehe
Abb. 5). Die zwei Halbleiter im SOT23
Gehuse lieen sic durc den aufge-
dructen SMD-Code nict so eindeutig
identifzieren. Ein kleiner, leider nict
von mir, selbst gebauter Tester half bei
einem Bauteil weiter. Ansceinend ist
es ein p-MOS FET. Hauptaufgaben des
Mikrocontrollers sind die Regelung
des Stroms und der Spannung fr den
Heizdraht, sowie die Ansteuerung der
LEDs. Laut Funktionsbescreibung wird
die Spannung bei 3,2V mit konstantem
Strom gehalten. Eine weitere Funkti-
on ist die Erkennung von zu niedriger
Bateriespannung, die mit blinken der
LEDs signalisiert wird, gefolgt von einer
Abscaltung. Der Controller hngt di-
rekt an der Versorgungsspannung, wird
also nict erst durc den Taster einge-
scaltet. Um die damit verbundene
stndige Entladung der Baterie so
gering wie mglic zu halten, darf
der Mikrocontroller nur sehr wenig
Strom verbraucen oder muss sic
in einen Sparmodus scalten. Beim
Layout wurde eine doppelseitige
Platine benutzt, die auc auf beiden
Seiten bestct ist. Das ist zwar nor-
malerweise aufwndiger und damit
teurer, lsst sic aber hier wegen der
bescrnkten Platinengre nict
vermeiden. Was sic noc erkennen
lsst ist, dass die stromfhrenden
Leiterbahnen von der Spannungs-
quelle zur Heizwendel etwas breiter
angelegt sind.
A
1
8
V
1
8
0
R
0
R
4
,
7
k
4
,
7
k
1
M
+
V
GND
GND
GND
V
V
GND
V
V
G
N
D
+
GND
GND
V
V
FD2005
?
Q2
1
P$1
2
P$2
3
P$3
4
P$4
5
P$5
6
P$6
7
P$7
8
P$8
Q
1
R
1
R
2
R
3
R
4
R
5
C1
C2
L
E
D
1
L
E
D
2
1 2
3 4
S1
3
3
Abb. 1:
Bestandteile der elektronischen Zigarette; Akku mit Platine (li.), Verdampfereinheit (m.), Mundstck mit Tank (re.)
Abb. 2: Taster und LEDs
Abb. 3:
Steuerung mit
TSSOP8
Abb. 4:
Platine im
Gehuse
Stckliste
Halbleiter Q1, A18V, SOT23
Q2, C633, SOT23
FD2005, TSSOP8
2 LEDs
Widerstnde R1 180; R2 0;
R3, R4 4,7k;
Kondensatoren C1, C2
Taster
Abb. 5: Schaltung (herausgemessen)
16
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
Stckliste
Halbleiter 1AM, SOT23
431, SOT23
UTC324E Y1A58C,
14-SOP-225
Die Einheit (siehe Abb. 6) dient im Wesentlicen
dazu aus den 5V USB Spannung 4.2 V Ladespan-
nung zu erzeugen. Bei 420mA Ladestrom ist ein
normaler USB Anscluss noc ausreicend. Kurz
gerecnet: 650mAh durc 420mA, also msste der
Akku mindestens 1,5 Stunden laden, wenn er leer
ist und keine Verluste aufreten. Der groe Chip
auf der Platine ist, anders als vielleict zu erwar-
ten, kein Mikrocontroller, sondern im Gehuse befnden ledig-
lic 4 einzelne OPVs. Die Scaltung ist also nur eine Operati-
onsvertrkerscaltung mit ein paar zustzlicen Bauteilen. Auf
der recten Seite sieht man noc den ber zwei Kabel verbunde-
nen praktiscen Scraubanscluss.
USB Ladegert
Unglaublic, was so alles in einer E-Zigraete stect, obwohl
doc ein Kondensator auc so scn raucen kann :-).
Fazit Links / Download
[1] htp://de.wikipedia.org/wiki/Elektronisce_Zigarete
[2] Bescreibung FD2005 htp://www.eemcu.com/
admin%5Cdown/20086413302691776.rar
[3] Datenblat UTC324
Erste Versuche
Zuerst wollte ic das fr diesen Zwec zur Verfgung gestellte Py-
thon Script verwenden. Doc nacdem ic mir den Sourcecode
durcgesehen hate, kam ic zu dem Entscluss, dass ic es doc
lieber manuell macen wrde. Das funktionierte auc rect gut, war jedoc sehr zeitaufwendig. Darum
bescloss ic, mein eigenes, benutzerfreundlices Programm zu entwiceln (siehe Abb. 1).
Abb. 6: Platine
Ladegert
[ PROJECT ] GNUBLIN Installer
GNUBLIN Installer
Michael Schwarz <michael.schwarz91@gmail.com>
Als das GNUBLIN Board herauskam, war ich sofort begeistert da-
von, da ich nun endlich eine kostengnstige Variante gefunden hatte,
um mich in Embedded Linux einzuarbeiten. Nachdem ich ein wenig
mit dem Board experimentiert hatte, wollte ich endlich meinen ersten
eigenen Kernel und Bootloader kompilieren. Das klappte dank des
Wikis auch ganz gut, doch dann kam die grte Schwierigkeit: den
Kernel, Bootloader und das Root Filesystem auf eine neue Karte zu
bringen.
[ PROJECT ] Die elektronische Zigarette
Abb. 1: Oberche
des Tools
Planung
Am Anfang stand, wie bei den meisten Programmen, die Planung und die berlegung, welce Features das Programm haben sollte
und fr welce Zielgruppe es geeignet sein sollte. Nac einigen Entwrfen bescloss ic, einen Installer zu screiben, der fr abso-
17
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
Anzeige
Preisbeispiel: 34,93
zzgl. USt. / Versand
Individuelle Frontplatten knnen mit dem
Frontplatten Designer mhelos gestaltet werden.
Der Frontplatten Designer wird kostenlos im
Internet oder auf CD zur Verfgung gestellt.
Automatische Preisberechnung
Lieferung innerhalb von
5 8 Tagen
24-Stunden-Service bei Bedarf
FRONTPLATTEN & GEHUSE
Kostengnstige Einzelstcke und Kleinserien
Schaeffer AG Nahmitzer Damm 32 D 12277 Berlin Tel + 49 (0)30 8 05 86 95 - 0 Fax + 49 (0)30 8 05 86 95 - 33 Web info@schaeffer-ag.de www.schaeffer-ag.de
Das Backend
Das Partitionieren der Karte erfolgt mit Hilfe von libparted, der
Bibliothek die auc von parted verwendet wird. Die Dokumen-
tation dazu war zwar etwas sprlic, doc Trial-and-Error und
das Studieren des parted Quelltexts haben sclussendlic doc
noc zum Erfolg gefhrt. Das Downloa-
den der Dateien erledigt libcurl und das Entpacen des Root
Dateisystems gescieht durc libarcive, welce viele verbrei-
tete Arcivformate entpacen kann, darunter tar.gz und tar.bz.
lute Neulinge auf dem Gebiet Embedded Linux geeignet ist und nur die grundlegen-
den Funktionen beinhaltet - das Installieren des Grundsystems aus zwei Quellen:
den of ziellen GNUBLIN Quellen von htp://www.gnublin.org und der eigenen Fest-
plate. Die ncste Entsceidung war, in welcer Sprace das Programm entstehen
sollte. Da doc rect viele platformabhngige Vorgnge durcgefhrt werden, wie
der direkte Zugrif auf die Karte oder das Erstellen der Partitionen entscied ic mic
gegen Java und fr C++. Im Endefekt wurde das Programm eine Miscung aus C und
C++. Low-Level Funktionien wurden in C implementiert und das GUI mit Hilfe von
wxWidgets in C++.
Das GUI
Das GUI ist in C++ mit dem wxWidgets Framework programmiert, die Oberfce selbst wurde im wxFormBuilder entworfen. Das
mact es einfac, die Elemente der Oberfce neu anzuordnen und neue Elemente hinzuzufgen.
Installation
[ PROJECT ] GNUBLIIN Installer
Abb. 2: Einstel-
lungen
Fr Ubuntu gestaltet sic die Installation einfac, hierfr gibt es
scon fertige Pakete, die einfac ber einen Klic installiert wer-
den knnen. Aufhren kann man den Installer mit Alt+F2 und
danac gksu gnublin-installer (Ubuntu) bzw. kdesu gnublin-
installer (Kubuntu).
Wer das Programm allerdings selbst kompilieren muss oder
mcte, hier eine kurze Anleitung. Als Voraussetzung werden
libparted, libcurl, libarcive und libwxwidgets jeweils als Deve-
lopment Version bentigt. Diese kann man mit
$ sudo apt-get install libparted0-dev lib-
curl4-openssl-dev libwxgtk2.8-dev libarchive-
dev
installieren.
Den Sourcecode kann man von der Projektseite mit
$ svn checkout http://gnublin-installer.
googlecode.com/svn/trunk/ gnublin-installer-
read-only
downloaden.
Kompiliert wird das Programm mit einem Aufruf von make
und kann danac mit
$ sudo ./gnublin-installer
ausgefhrt werden. Wenn das Programm verscoben wird,
muss unbedingt die setings.xml im gleicen Ordner liegen, da
das Programm sonst nict funktioniert.
18
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
Links / Download
[1] Projektseite: htp://code.google.com/p/gnublin-installer/
[2] Doku zur libparted: htp://www.gnu.org/sofware/parted/
api/index.html
[3] Projektseite der libarcive: htp://code.google.com/p/libarci-
ve/
[3] Projektseite des wxFormBuilders: htp://wxformbuilder.org/
Das Programm
Das Programm selbst sollte rect selbst-
erklrend sein. Es wird eine Liste von
Gerten angezeigt, auf denen GNUBLIN
installiert werden kann (mehr dazu sp-
ter). Sobald ein Gert ausgewhlt wurde,
werden die anderen Punkte aktiviert.
Nun whlt man aus, welcer Bootloa-
der, Kernel und welces Root Filesystem
verwendet werden soll. Will man nur
ein laufhiges System haben, whlt
man einfac berall fetc from htp://
gnublin.org aus.
Die Option Re-Partition gibt an, ob
die Speicerkarte formatiert und die
notwendigen Partitionen angelegt wer-
den sollen. Das ist nur dann erforder-
lic, wenn das GNUBLIN System zum
ersten Mal auf dieser Speicerkarte in-
stalliert wird.
Der Installationsprozess dauert zwi-
scen einigen Sekunden bis zu meh-
reren Minuten, je nacdem wie scnell
die Internetverbindung ist, ob die Kar-
te partitioniert
wird und ob ein
Root Filesystem
entpact wer-
den muss. Bei einer erstmaligen Ins-
tallation, bei der alle Dateien von den
GNUBLIN Quellen heruntergeladen
werden mssen,
kann die Instal-
lation scon eine
Stunde dauern.
Zusammenfassung
Der GNUBLIN Installer ist mit dem Ziel entstanden, eine ein-
face und zuverlssige Mglickeit zu scafen das GNUBLIN
System zu installieren, um auc Anfngern die Mglickeit
zu geben, sic ihr eigenes System zusammenzustellen. Fr die
ncste Version ist ein Kommandozeilen Front-End geplant, um
den Installer auc in Scripts verwenden zu knnen.
Wer selber daran weiterarbeiten mcte, kann dies gerne tun,
der Quelltext steht unter der GPL v3 und ist auf der Projektseite
zum Download verfgbar.
Backup
Hat man ein laufhiges System erzeugt,
bietet es sic an, davon ein Bacup zu
erstellen. Seit Version 1.2 gibt es den
Menpunkt Bacup mit dem man sehr
einfac ein Bacup erstellen und wieder
einspielen kann. Das Bacup ist ein 1:1
Dump der Speicerkarte, das Einspielen
eines Bacups sollte also nur auf jene
Karte erfolgen, von
welcer das Bacup
erstellt wurde.
Einstellungen
Fr fortgescritene Benutzer gibt es noc die Einstellungen.
Dort kann der Filter angepasst werden, welce Gerte angezeigt
werden. Standardmig werden nur Gerte angezeigt, die eine
Kapazitt unter 16GB haben, damit man GNUBLIN nict ver-
sehentlic auf eine Festplate installiert. Weiters kann noc die
Gre der Partition verndert werden, auf die der Bootloader
installiert wird.
Abb. 5: Backup
erstellen
Abb. 3: SD-Karte
beschreiben
Abb. 4: wxForm-
Builder
[ PROJECT ] GNUBLIIN Installer
19
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Finite State Machine
Implementierung einer Finite State Machine
Philipp Klin <kaelinphilipp@gmail.com>
Einleitung
Dieser Artikel hat zum Ziel, eine Mg-
lickeit zu zeigen wie kleinere bis mit-
lere endlice Automaten einfac im-
plementiert werden knnen. Folgende
Sacverhalte werden in diesem Artikel
bescrieben:
Grundlagen was ein endlicer Auto-
mat ist und wie er funktioniert.
Notation von Endlicen Automaten in
UML1
Praktisces Beispiel, anhand dessen
die Funktionsweise eines Toasters er-
klrt wird. Dazu wird die Notation in
UML verwendet.
Implementation des Beispiels in C++
auf einem AVR-Controller.
Allgemeines ber Endli-
che Automaten
Ein endlicer Automat bescreibt eine
Mascine oder eine Sofware welce eine
defnierte Anzahl Zustnde hat, in denen
sie sic befnden kann. Wozu brauct
man nun so etwas?
Mit endlicen Automaten ist es sehr ein-
fac das Verhalten von Systemen zu be-
screiben.
Funktionsweise eines Moore Automaten
Mit endlicen Automaten kann man auf
abstrakter Ebene das Verhalten von Sys-
temen bescreiben, insbesondere auc
das von Digitalen Scaltwerken. Endli-
ce Automaten werden jedoc nict nur
in der Digitaltecnik verwendet, sondern
werden auc in der Sofwareentwiclung
angewendet. Wobei in der Sofwareent-
wiclung vor allem der Moore-Automat
zur Anwendung kommt. In diesem Ka-
pitel wird das grundstzlice Verhalten
eines solcen Moore-Automaten erklrt,
zu einem spteren Zeitpunkt folgt dann
die Umsetzung in einer Programmier-
sprace.
Ein Moore Automat besteht im wesent-
licen aus drei Teilen. Der wictigste ist
der Zustandsspeicer. Dieser speicert
den aktuellen Zustand s[n]. Der ncste
Zustand s[n + 1] wird von der Zustands-
logik berecnet. Sobald ein Cloc c auf-
trit wird der Zustand s[n + 1] als aktuel-
ler Zustand s[n] bernommen.
Die Ausgangslogik berecnet gleiczeitig
aufgrund des neuen Zustandes s[n] den
neuen Ausgnge yi. Der neue Zustand
s[n + 1] wird jeweils aufgrund des aktu-
ellen Zustandes s[n] und den Eingngen
xi berecnet. Dieses Modell kann fast
identisc in der Sofwareentwiclung an-
gewendet werden. Die Eingnge werden
dabei zu Events, welce von verscie-
denen Quellen z.B. Taster, Timer oder
auc Scnitstellen kommen. Der Cloc
entsprict
einem Verarbeitungsaufruf der State Ma-
cine. Dabei ist es nict zwingend, dass
dieser Aufruf in einem festen zeitlicen
Abstand erfolgt. Der Aufruf kann auc
so of wie mglic erfolgen. Die Ausgn-
ge knnen wiederum Hardware, Anzei-
gen, Kommunikation oder IO sein, oder
auc nur Funktionsaufrufe.
UML Notation von Endlichen Automaten
Die UML ist eine graphisce Modellierungssprace zur standardisierten Bescreibung von Sofwaresystemen. Der hier bescrie-
bene Teil ist nur ein kleiner Ausscnit aus der ganzen UML, der jedoc fr die Bescreibung von Endlicen Automaten ausreict.
Abb. 1: Schematische Darstellung
eines Moore-Automaten
Auswahl einiger Elemente in UML:
Die Abbildung 2 zeigt die wictigsten
Elemente die zur Bescreibung eines
Endlicen Automaten ntig sind. Zur
Verdeutlicung soll ein kleines Beispiel
helfen. Nac dem Start befndet sic der
Zhler im Zustand Start. Dies ist durc
den orangen Kreis, welcer mit dem
Zustand verbunden ist, signalisiert. Bei
Start wird durc die entry-Action ge-
kennzeicnet, dass der Zhler auf eine
nict nher spezifzierte Anzeige ausge-
geben wird. Ist die Bedingung der Tran-
sition zum Zustand Sekunden zhlen
erfllt, also die Start Taste gedrct, so
fndet ein Zustandswecsel stat. Im Zu-
stand Sekunden zhlen wird zu Beginn
die Zhlervariable auf 0 zurcgesetzt.
Die do-Action zeigt an, dass die Zhler-
variable bei jedem Tic um 1 erhht wird
und die Anzeige mit dem neuen Wert ak-
tualisiert wird. Aus dem Diagramm ist
nict ersictlic um welce Periodenzeit
Ausgangs-
logik
Zustands-
speicher
Zustands-
logik
Ausgnge
Eingnge xi
s[n+1] s[n]
Clock c
y[n]i
20
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
es sic bei der tic-Action handelt. Dies
muss gesondert angegeben werden.
Im UML-Diagramm spielt es keine Rol-
le ob die Bescreibungen in Deutsc
oder Pseudocode hingescrieben wer-
den. Grundstzlic sollte ein UML-
Diagramm aber unabhngig von der
Programmiersprace sein, wieweit
man das jedoc durcziehen mcte
ist ebenfalls frei. Ob im Diagramm alle
Actions gezeicnet werden, so
wie in Abbildung 2, oder ob
die nict verwendeten wegge-
lassen werden wie in Abbil-
dung 3 ist Gescmacssace.
Bei der spter bescriebenen
Implementation wird es jedoc
so sein, dass alle Actions vor-
handen sein mssen und gege-
benenfalls leer bleiben, da es
efzienter ist, eine leere Action
aufzurufen als zu prfen, ob
diese berhaupt vorhanden ist.
Zustnde
Die Zustnde werden in einem Rectec
mit abgerundeten (siehe Originaldoku-
ment des Autors) Ecen gezeicnet. Der
Name sollte bescreiben, was das System
in diesem Zustand mact. Was der Zu-
stand mact wird mit drei versciedenen
Action-Atributen dargestellt.
Die Entry Action bescreibt, was beim
Eintreten in einen Zustand gemact
wird. Also dann wenn von einem ande-
ren Zustand in diesen gewecselt wird.
Die Do-Action bescreibt, was passiert
wenn ein Event eintrit, der aktuelle Zu-
stand aber nict gewecselt wird. Ein
Beispiel dafr ist ein Tic Event welcer
in bestimmten Zeitabstnden aufrit.
Daher wird zum Teil auc der Name
Tic-Action verwendet.
Die Exit Action bescreibt, was beim
Austreten aus einem Zustand gescieht.
Also dann wenn man den aktuallen
Zustand verlsst und in einen anderen
wecselt.
Der Start eines endlicen Automaten
wird mit einem orangen Kreis markiert,
welcer durc eine Transition zum Start-
zustand verbunden ist.
Transitionen
Ein endlicer Automat mact natrlic nur wenig Sinn wenn er
immer im gleicen Zustand bleibt. bergnge von einem zum
ncsten Zustand nennt man Transitionen. Transitionen wer-
den grundstzlic immer von einem Event ausgelst. Ein Event
kann z.B. sein, dass eine Taste gedrct wird. Optional an ei-
ner Transition ist die [Bedingung] welce zustzlic erfllt sein
muss, damit eine Transition ausgefhrt wird. Optional kann
bei einer Transition auc eine zustzlice \Aktion stehen wel-
ce whrend des bergangs ausgefhrt wird. Fr einfacere
Zustandsautomaten rect es jedoc aus, nur den Event zu de-
fnieren.
Events
Events sind Ereignisse welce dem endlicen Automaten mit-
geteilt werden, damit dieser gegebenenfalls darauf reagieren
kann. Dabei wird grundstzlic zwiscen zwei Arten von
Events unterscieden:
User-Events sind Events welce von der Umwelt um das Sys-
tem ausgelst werden. Beispiele hierfr sind Tasten, Sensoren
etc.
System Events sind Events welce vom System selber gene-
riert werden. Das knnen z.B. zeitlic gebundene Events sein,
Timer Tics, Fehlermeldungen oder Timeouts etc.
Alle Events die aufreten werden an den Endlicen Automaten
bergeben. Ob auf ein Event reagiert wird ist durc die Tran-
sitionen des aktuellen Zustandes zu den anderen Zustnden
festgelegt.
[ PROJECT ] Finite State Machine
Toaster als Beispiel fr einen endlichen Automaten
Als anscaulices Beispiel soll ein futuristiscer Toaster verwendet werden. Der Toaster besitzt zwei Tasten, eine Start und eine
Fertig Taste, mit denen der Toastvorgang gestartet und beendet werden kann. Um die Sace Komfortabler zu macen hat der Toas-
ter eine automatisce Brotscublade hnlic einem CD-Laufwerk. Um zu erkennen ob die Scublade ganz ein- oder ausgefahren
ist, sind zustzlic zwei Endscalter (Endscalter drinnen und Endscalter leer ) vorhanden. Zur Bereitscafsanzeige ist eine LED
Ready vorhanden. Ist die Heizung eingescaltet leuctet die LED Heating. Sollte ein Fehler aufreten, z.B. wenn die Brotscublade
verklemmt ist, so leuctet die LED Error.
Zustand A
entry/Entry-Action
do/Do-Action
exit/
Zustand B
entry/
do/
exit/Exit-Action
Event/Action
[Bedingung]
Start
entry/ Zhler auf Anzeige ausgeben
Stopp Taste gedrckt
Sekunden zhlen
entry/ Zhler auf 0
do/ Zhler++ / Anzeige aktualisieren
Start Taste gedrckt
Abb. 3: Beispiel
eines einfachen
Zhlers
Abb. 2: UML-
Elemente eines
Endlichen Auto-
maten
21
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Finite State Machine
UML-Diagramm des Toasters Funktionsbeschreibung
Der Startzustand ist Bereit. Die Entry und
Exit Action bewirken, dass die LED Ready
nur leuctet wenn sic der Toaster im Zu-
stand Bereit befndet. Sobald man im Zu-
stand Bereit die Start Taste drct wecselt
der Toaster in den Zustand Toast einziehen.
Um den Toast einzuziehen muss der Mo-
tor fr die Scublade drehen, im Beispiel
Linkslauf. Wenn alles funktioniert, sollte die
Scublade innert ntzlicer Zeit eingezogen
sein. Wenn die Scublade eingezogen ist
wird der Endscalter drinnen gedrct und
der Toaster wecselt in den Zustand Toasten.
Im Zustand Toasten muss natrlic die Hei-
zung eingescaltet werden. Ebenfalls soll die
Heating LED leucten. Um den Toastvorgang
zu beenden gibt es zwei Mglickeiten. Ent-
weder man drct die Fertig Taste oder die
45 Sekunden Maximaldauer sind abgelaufen.
In beiden Fllen wird in den Zustand Toast
auswerfen gewecselt. Bein ein- und ausfah-
ren der Scublade kann ein Fehler aufreten,
wenn die Scublade verklemmt ist. Ist dies
der Fall, so kann die Scublade nict ganz
ein- oder ausgefahren werden, demzufolge
sprict der entsprecende Endscalter nict
an. Nac dem verstricenen Timeout, wel-
ces mit afer 15s angegeben ist, wird in den
Zustand Fehler gewecselt. Beim Toast aus-
werfen gibt es wieder die zwei Flle wie beim
einziehen. Entweder der Toast wird korrekt
ausgeworfen und der Toaster ist wieder im
Zustand Bereit, oder es wird in den Fehler
Zustand gewecselt.
Implementierung mittels einer Case Struktur
Fr die Implementierung gibt es mehrere Mglickeiten. Die meist verbreitete ist wahrsceinlic die Case-Struktur. Ein Beispiel
einer solcen Case Struktur ist in Listing gezeigt. Eine solce Case Struktur ist gut geeignet um kleinere endlice Automaten ab-
zubilden. Fr das Toasterbeispiel gibt es
zwei Merkmale, die einem das Leben bei
einer solcen Case Struktur scwer ma-
cen. Zum einen sind dies die Entry und
Exit Actions, wenn in der Case Struktur
also in einen Zustand gewecselt wird,
so msste immer abgefragt werden, ob
dies der erste Eintrit ist oder nict. Als
zweite Hrde sind die Timeout Bedin-
gungen welce nict so einfac Realisiert
werden knnen.
enum {
Bereit ,
ToastEinziehen ,
...
} ToasterState ;

ToasterState state; // Variable um den aktuellen Zustand zu
speichern

switch (state) {
case Bereit :
... // Etwas im Zustand machen
state = ToastEinziehen ; // Aktueller Zustand wechseln
break;

case ToastEinziehen :
...
state = Toasten ;
break;

...
}
Implementierung mittels
einer Tabelle
Das UML-Diagramm kann direkt in
eine Tabelle bernommen werden
welce die gleicen Informationen
enthlt wie das Diagramm. Die Dar-
stellung mitels Tabellen hat fr die
Implementation zwei Vorteile, vergli-
cen mit dem UML-Diaramm. Erstens
ist nun eine klare Trennung zwiscen
Transitionen und Actions sictbar, und
zweitens kann eine solce Tabelle ohne
Bereit
entry/Ready LED On
exit/Ready LED Off
Toast einziehen
entry/Motor linkslauf
exit/Motor Off
Toasten
entry/Heizung einschalten / Heating LED On
exit/Heizung ausschalten / Heating LED Off
Endschalter Leer
after 15s
after
15s
Start Taste gedrckt
Einschalter drinnen
Fertig gedrckt after 45s
Toast auswerfen
entry/Motor rechtslauf
exit/Motor aus
Abb. 4: Modellie-
rung eines Toas-
ters in UML
Fehler beim
einziehen oder
auswerfen
entry/ LED Error On
22
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Finite State Machine
Implementation des
Toaster Beispiels auf
einem AVR
Die Implementation auf einem Atmel ATmega128
in C++ ist so ausgelegt, dass diese gut im AVR-
Studio mit dem Simulator nacvollzogen werden
kann. Als Sprace kommt C++ zum Einsatz, da
erstens die Implementation bersictlicer und
besser nacvollziehbar ist als in C, zweitens sind
heute C++ Compiler so gut dass diese durcaus
auf auf Embedded Systemen zum Einsatz kom-
men. Als Compiler fr das Beispiel kommt avr-
g++ zum Zuge.
Denition der Zustnde
Denition der Transitionen
Aktueller Zustand Event Timeout [s] Nchster Zustand
Bereit Taster Start Toast einziehen
Toast einziehen
Toast einziehen
Endschalter drinnen
Tick

15
Toasten
Fehler
Toasten
Toasten
Taster Fertig
Tick

45
Toast auswerfen
Toast auswerfen
Toast auswerfen
Toast auswerfen
Endschalter Leer
Tick

15
Bereit
Fehler
Fr jeden Zustand wird eine eigene Klasse verwendet. Jeder Zu-
stand wird von der abstrakten Klasse State abgeleitet.
class State {
public :
virtual void entryAction () = 0;
virtual void exitAction () = 0;
virtual void tickAcktion () = 0;
};
Fr jeden Zustand mssen nun die Informationen aus der Ta-
belle implementiert werden. Als Beispiel soll hier der Zustand
Bereit verwendet werden. Dazu wird die Klasse StateBereit von
der Klasse State abgeleitet, und die drei Actions implementiert.
class StateBereit : public State {
public :
void entryAction ();
void exitAction ();
void tickAcktion ();
};

// -------------------------------------------
----------------------------------
void StateBereit :: entryAction () {
Led :: ready(true );
}

// -------------------------------------------
----------------------------------

void StateBereit :: exitAction () {
Led :: ready( false);
}

// -------------------------------------------
----------------------------------
void StateBereit :: tickAcktion () { }
Eine Transition verbindet zwei Zustnde und muss daher
zwei Pointer auf die Zustnde haben. Ausserdem ist die In-
formation wictig, bei welcem Event die Transition ausge-
lst wird. Die letzte Angabe wird fr das Timeout verwen-
det und besagt wie lange sic der endlice Automat in einem
Zustand befnden darf, bevor die Transition ausgelst wird.
struct Transition {
State* currentState ;
Event event;
uint16 _ t maxTimeBeforeTransition;
State* nextState ;
};
grossen Aufwand in Code umge-
setzt werden. Die Variante mit der
Case Struktur wie oben gezeigt
hat allgemein das Problem, dass
die Inteligenz zur Umscaltung
zwiscen den Zustnden verteilt
ist und nict an einem Zentralen
Ort. Dieses Problem soll mit der
Tabellenversion gelst werden.
Abbildung der Tabelle in C++
Nun sind alle Einzelteile bekannt um diese in einer Tabelle abzubilden und somit den identiscen Informationsgehalt wie in Abbil-
dung 4 zu erhalten. In C++ umgesetzt sieht das folgendermassen aus:
Entry Action Exit Action
Bereit Ready LED On Ready LED Off
Toast einziehen Motor Linkslauf Motor Off
Toast auswerfen Motor Rechtslauf Motor Off
Toasten Heizung einschalten
Heating LED On
Heizung ausschalten
Heating LED Off
Fehler LED Error On
Tabelle 2: Actions der Zustnde in einer Tabelle dargestellt
Tabelle 1: Transisionen des Toasters in einer Tabelle dargestellt
23
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
bool Toaster :: process () {
if ( evQueueIsEmpty ()) {
return false;
}
Event e = evQueue [ evQueueHead ];
evQueueHead = ( evQueueHead + 1) & ( evQueueSize - 1)
for ( uint8 _ t i=0; i< sizeof( fsmApp)/ sizeof( Transition );
i++ ) {
if ( ( ( currentState == fsmApp[i]. currentState ) && (e ==
fsmApp[i]. event) ) || ( fsmApp[i]. event == 0) )
{
if (e == Tick ) {
fsmApp [i]. currentState -> tickAcktion (); // System Tick
timeInState ++;
if ( ( fsmApp [i]. maxTimeBeforeTransition != 0)
&& ( timeInState < fsmApp[i]. maxTimeBeforeTransition) )
{
fsmApp[i]. currentState -> tickAcktion (); // Normal Tick
} else {
// Force Transition because of an Timeout
fsmApp[i]. currentState -> exitAction ();
currentState = fsmApp[i]. nextState ;
currentState -> entryAction ();
timeInState = 0;
}
} else {
timeInState = 0;
fsmApp [i]. currentState -> exitAction ();
currentState = fsmApp [i]. nextState ;
currentState -> entryAction ();
}
break;
}
}
return true ;
}
[ PROJECT ] Finite State Machine
Toaster :: Transition fsmApp [] = {
// actualState MaxTimeBeforeTransition
// Event Next State
{& bereit , TasterStart , 0, & einziehen },

{& einziehen , EndschalterDrinnen , 0, & toasten },
{& einziehen , Tick , Seconds (15) , & fehler },

{& toasten , TasterFertig , 0, & auswerfen },
{& toasten , Tick , Seconds (45) , & auswerfen },

{& auswerfen , EndschalterLeer , 0, & bereit },
{& auswerfen , Tick , Seconds (15) , & fehler },
};
Verarbeitung der Events
Wie oben erwhnt werden die Events in einer Queue
gesammelt und mit einem process() verarbeitet. Die
Funktion process durcsuct dabei die Tabelle nac
einer Zeile, in welcer der aktuelle Zustand und der
Event bereinstimmen. Wird eine solce Zeile gefun-
den, wird ein Wecsel des Zustandes vorgenommen.
Der groe Vorteil dieser Tabellen Methode gegenber
des bereits genannten Case Konstrukts ist, dass die
gesamte Intelligenz des endlicen Automaten in einer
Funktion stect.
Verwendung des endli-
chen Automaten
Links/Lizenzen
Die Verwendung des endlicen Automa-
ten kann in zwei Jobs unterteilt werden.
Zum Einen mssen natrlic die aufre-
tenden Events gesendet werden. Da es
vorkommen kann, dass mehrere Events
aufreten bevor diese abgearbeitet wer-
den, werden die Events in eine Queue ein-
gereiht, deren Lnge mit EventQueueSize
festgelegt werden kann.
1 Toaster :: sendEvent (
Toaster :: EndschalterDrin-
nen );
Falls Timeouts verwendet werden, so kn-
nen Tic Events ganz einfac innerhalb ei-
nes Timer-Interrupt gesendet werden.
ISR( TIMER0 _ OVF _ vect ) {
Toaster :: sendEvent ( Toas-
ter :: Tick );
}
Die Verarbeitung der Events erfolgt am
besten im Hauptprogramm in einer End-
losscleife und wird so of wie mglic
aufgerufen.
1 Toaster :: process ();
Schlusswort
Die bescriebene Variante ist in einem kompleten Beispiel
implementiert welces von [1] heruntergeladen werden
kann. Das Beispiel ist so ausgefhrt, dass es im Simulator
des AVR-Studio 4 nacvollzogen werden kann. Als C++
Compiler wird avr-g++ verwendet, welcer unter anderem
in WinAVR vorhanden ist. Die Idee der Tabellenvariante
kann natrlic auc in C umgesetzt werden. Dazu wird in
der Tabelle jeweils der Pointer auf das Objekt durc drei
Funktionspointer ersetzt, welce jeweils direkt auf die
Action-Funktionen zeigen. Die gezeigte Mglickeit bzw.
das Beispiel sollte als Denkanstoss verstanden werden und
nict als Referenzimplementation. Es wurden bewusst be-
stimmte Feinheiten von endlicen Automaten verzictet,
um das Beispiel auf verstndlicem Niveau zu halten.
[1]www.mikrocontroller.net/articles/Statemacine
[2]Dokumentation: Namensnennung-Weitergabe unter gleicen
Bedingungen 2.5 Scweiz (CC BY-SA 2.5)
htp://creativecommons.org/licenses/by-sa/2.5/c/
[3]Programmcode: GNU GENERAL PUBLIC LICENSE Version 2
htp://www.gnu.org/licenses/old-licenses/gpl-2.0
[4]Titelbild: Das Tielbild ist von jiangyi 99
htp://openclipart.org/people/jiangyi_99/jiangyi_99_toaster.svgz
[5]und steht unter einer Public Domain Lizenz
htp://creativecommons.org/licenses/publicdomain/
Ausfhlichere Infor-
mationen und den
Source dieses Arti-
kels sind unter http://
www.mikrocontroller.
net/articles/Imple-
mentierung_einer_Fi-
nite_State_Machine
zu nden.
24
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Finite State Machine
[ PROJECT ] Reif fr den Hive?
[ PROJECT ] Gnublin ADC und PWM
Gnublin ADC und PWM
Nils Stec <nils.stec@gmail.com>
Einleitung
Der AD-Wandler im LPC3131 hat folgen-
de Eigenscafen: Frei einstellbare Auf-
sung von 2 Bit bis 10 Bit 4 Channels, von
denen 3 auf die Gnublin-Stifleiste ge-
fhrt sind von 400k Samples pro Sekun-
de (@10Bit Aufsung) bis zu 1500kSps/s
(@2Bit Aufsung) Analog Input Ran-
ge von 0V bis 3.3V single shot- sowie
continuous conversion-Mode. Um die
versciedenen Mglickeiten des ADC
optimal zu nutzen, werde ic ihn hier
erklren, das Anpassen auf die eigene
Anwendung bleibt dem User berlassen.
Mehrere Module oder Teile davon im
Quellcode hier abzudrucen, wrde den
Rahmen sprengen. Als Ausgangspunkt
fr Vernderungen, kann man sic das
ADC-Modul anpassen.
Nachdem das Gnublin Board luft und die ersten Kunden und freiwilligen Helfer das Board in ihren Hnden halten, braucht man na-
trlich auch Mglichkeiten, mit der Aussenwelt zu kommunizieren. Das GPIO-sysfs-Interface sowie SPI funktionieren bereits mit dem
Standard-Kernel, der bei der Auslieferung von der SD-Karte bootet, fehlen also noch ADC und PWM. So sind zwei Linux-Kernelmo-
dule entstanden, wovon jeweiles eines den AD-Wandler und eines die PWM-Einheit des LPC3131-Prozessors steuert.
Funktionsbeschreibung
Der ADC des LPC3131 hat 4 gemultiplexte Channels. Bei jedem
Durclauf einer Wandlung, werden alle Channels naceinan-
der eingelesen, fr die die Aufsung festgelegt wurde. Die
Ergebnisse dieser Wandlung(en) liegen in den Registern ADC_
Rx_REG, wobei x fr den jeweiligen Channel von 0 bis 3 steht.
Startet man eine Wandlung, gescieht das Multiplexing, das
Wandeln und das bertragen des Ergebnisses/der Ergebnisse
in die jeweiligen Register ganz automatisc. Das Ergebnis einer
Wandlung ist gltig ab dem Moment, ab dem ein Flag gesetzt
wurde bzw. der Interrupt ausgelst wurde.
Vorbereitungen am Kernel
Da dem Kernel-Quellcode ein paar Register-Defnitionen im
Header arc/arm/mac-lpc313x/include/mac/registers.h feh-
len, mssen wir uns darum kmmern, diese nactrglic hin-
zuzufgen. Ein User auf mikrocontroller.net (misc) hat einen
Patc gescrieben, der das fr uns mact. Dieser Patc hat den
Dateinamen adc-registers.patc. Zu fnden ist er im mikrocon-
troller.net-Forum oder auc direkt hier:
*** a/arch/arm/mach-lpc313x/include/mach/
registers.h 2011-12-14 14:35:49.560517000
+0100
--- b/arch/arm/mach-lpc313x/include/mach/
registers.h 2011-12-19 13:25:13.630011000
+0100
***************
*** 276,281 ****
--- 276,289 ----
* ADC _ REG register defnitions
*********************************************
*************************/
#defne ADC _ CON _ REG _ _ REG
(ADC _ PHYS + 0x20)
+ #defne ADC _ R0 _ REG _ _ REG
(ADC _ PHYS + 0x00)
+ #defne ADC _ R1 _ REG _ _ REG
(ADC _ PHYS + 0x04)
+ #defne ADC _ R2 _ REG _ _ REG
(ADC _ PHYS + 0x08)
+ #defne ADC _ R3 _ REG _ _ REG
(ADC _ PHYS + 0x0C)
+ #defne ADC _ CSEL _ REG _ _ REG
(ADC _ PHYS + 0x24)
+ #defne ADC _ INT _ ENABLE _ REG _ _ REG
(ADC _ PHYS + 0x28)
+ #defne ADC _ INT _ STATUS _ REG _ _ REG
(ADC _ PHYS + 0x2C)
+ #defne ADC _ INT _ CLEAR _ REG _ _ REG
(ADC _ PHYS + 0x30)
/*********************************************
**************************
* SYS _ REG register defnitions
Wer den Patc so einspielen mcte, legt die Datei adc-regis-
ters.patc im Kernelverzeicnis ab und wendet den Patc an:
$ patch -p1 < adc _ registers.patch
25
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Gnublin ADC und PWM
Lesen und Schreiben der Register
Einstellen der Channels und der Ausung
Wie weiter oben scon gescrieben, werden alle Kanle fr die
eine Aufsung gesetzt wurde, gesampelt, sobald die Wandlung
gestartet wurde. Der zulssige Bereic fr die Aufsung liegt
zwiscen 2 Bit und 10 Bit. Umso niedriger die Aufsung, desto
scneller wird die Wandlung von staten gehen. Channels, bei
denen 0 im Register fr die Aufsung steht, werden von der
Wandlung ausgenommen. Dadurc, dass auc mehrere Kanle
mit untersciedlicen Aufsungen gesampelt werden knnen,
liegt die Dauer fr eine AD-Wandlung immer so hoc, wie fr
den Kanal mit der hcsten Aufsung. Die Formel zum Berec-
nen der Dauer aus dem LPC3131-User-Manual:
samples/ s=
F
CLOCK
RESOLUTION 1

Bei einer Cloc-Frequenz von 31.25kHz und einer Aufsung
von 10 Bit, kommt man auf ca. 2.84k Samples/s.
Das zustndige Register ist das ADC_CSEL_RES_REG.
Um nun z.B. alle 4 Channel auf 10 Bit Aufsung einzustellen,
muss man 0xAAAA in die unteren 16 Bit des Registers screi-
ben.
Wurden fr eine Wandlung mehrere Channels ausgewhlt und
bei der folgenden Wandlung einer dieser Channels nict, steht
in den Registern fr die Wandlungsergebnisse (ADC_Rx_REG)
immer noc das Ergebnis der letzten Wandlung.
Eine berprfung des ADC_CSEL_RES_REG auf die eingestell-
ten Channels und damit auf die Gltigkeit der Wandlungser-
gebnisse ist daher sinnvoll.
Der Kernel stellt uns eine rect einface Methode zur Verf-
gung, um Register-Inhalte zu verndern bzw. zu lesen. Durc
den angewandten Patc haben wir nun die Mglickeit, auc
ohne die jeweilige Registeradresse genau zu kennen, darauf zu-
zugreifen.
ADC _ CON _ REG = 0xA0B1C2D3; //
write into register
uint32 _ t temp = ADC _ CON _ REG; //
read from register into temp
Die Register liegen im Speicerbereic des lpc3131 und sind im
Datenblat immer mit Base Address und Ofset angegeben.
Die Base Address ist in unserem Fall 0x13002000. Das Ofset
ist 0x20. Die Resultierende Adresse fr das ADC_CON_REG ist
demnac 0x13002020.
Auszug aus dem adc-registers Patc:
#defne ADC _ CON _ REG _ _ REG
(ADC _ PHYS + 0x20)
Diese Defnition sagt, dass wir Zugrif auf ein Register haben
wollen, welces an der Adresse ADC_PHYS+0x20 liegt.
ADC_PHYS ist im Kernel-Quellcode mit 0x13002000 defniert,
die Basis-Adresse des AD-Wandlers.
Clock
Die MCU-Eigene CGU (cloc generation unit) stellt einen Takt
fr den AD-Wandler bereit. Dieser Takt ist standardmig auf
31.25kHz gestellt. Ebenfalls muss der APB-Takt (AMBA Pe-
ripherial Bus) aktiviert werden. Dieser Bus verbindet die Peri-
pherie-Gerte wie den ADC mit dem Controller-Kern.
cgu _ clk _ en _ dis(CGU _ SB _ ADC _ CLK _ ID, 1);
// enable ADC clock
cgu _ clk _ en _ dis(CGU _ SB _ ADC _ PCLK _ ID,
1); // enable bus-clock for ADC
Diese zwei Zeilen Code scalten zuerst den ADC-Takt ein, dann
den Bus-Takt.
Bit Symbol Beschreibung
0-3 CSEL0 Ausung Channel 0
4-7 CSEL1 Ausung Channel 1
8-11 CSEL2 Ausung Channel 2
12-15 CSEL3 Ausung Channel 3
Interrupt oder Polling?
Die Frage, die sic wohl jeder stellen wird,
ist, ob Aufgabe XY nun besser mit dem
ADC-Interrupt oder ohne gelst wird.
Ein normaler Kernel-Treiber fr den
AD-Wandler, der seine Ergebnisse ein-
fac nur in den Userspace weiterreict,
brauct keinen Interrupt, dort ist er eher
hinderlic. Wir knnen im Interrupt-
Handler keine Daten in den Userspace
scicen, somit mssten wir im Handler
das Ergebnis holen, in einer temporren
Variable ablegen und ein Flag setzen, so-
dass das Hauptprogramm den Inhalt
der temporren Variable weitergeben
kann. Eine selbststndige Akku-/Versor-
gungsberwacung knnte ein Fall fr
einen Interrupt-Handler sein.
Das LPC3131-User Manual sagt, dass das
Ergebnis einer AD-Wandlung gltig ist,
sobald das ADC_INT_STATUS-Bit im
ADC_INT_STATUS_REG gesetzt ist.
Es lsst allerdings ofen, ob dafr das
Erzeugen eines Interrupts ntig ist,
auc wenn dieser nict behandelt wird
(UM10314 Revision 1.03 27 May 2010,
Seite 313, Kap. 5.1).
Im ADC_CON_REG gibt es das ADC_
STATUS-Bit, welces zum Auslesen des
Status des ADCs verwendet werden
knnte, wenn der ADC ohne IRQ luf.
Leider zeigt das Board bzw. der LPC3131
ein unerklrlices Verhalten, wenn ic
die Abfrage nur ber das ADC_STA-
TUS-Bit mace. Das ussert sic darin,
dass das ADC-Ergebnis scon vor dem
26
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
ADC_INT_ENABLE_REG
Ofset: 0x28
Bescreibung: IRQ Erzeugung aktivieren/deaktivieren
ADC_INT_STATUS_REG
Ofset: 0x2C
Bescreibung: IRQ Status abfragen
ADC_INT_CLEAR_REG
Ofset: 0x2C
Bescreibung: IRQ Status lscen
ADC_Rx_REG
Ofset: 0x00, 0x04, 0x08, 0x0C
Bescreibung: ADC-Ergebnisse, 4 Register (ADC_R0_DATA -
ADC_R3_DATA)
ADC_CON_REG
Ofset: 0x20
Bescreibung: ADC Konfguration
ADC_CSEL_REG
Ofset: 0x24
Bescreibung: Channel-/Aufsungskonfguration
Zusammenfassung der Register
#include <linux/module.h>
#include <asm/io.h>
#defne ADC _ INT _ STATUS (1 << 0)
#defne ADC _ INT _ ENABLE 1
#defne ADC _ ENABLE (1 << 1)
#defne ADC _ START (1 << 3)
#defne ADC _ STATUS (1 << 4)
#defne ADC _ SSCAN (~(1<<2)) /* single scan */
#defne ADC _ STOP (~ADC _ START)
int init _ module(void) {
uint16 _ t r0, r1, r2, r3;
SYS _ ADC _ PD = 0; /* ADC powerdown mode off */
cgu _ clk _ en _ dis(CGU _ SB _ ADC _ CLK _ ID, 1); /* enable clock for ADC */
cgu _ clk _ en _ dis(CGU _ SB _ ADC _ PCLK _ ID, 1);
[ PROJECT ] Gnublin ADC und PWM
Beenden der Wandlung abgerufen wird und somit beim ersten
Mal 0 ist und alle weiteren Male, das der letzten Wandlung.
Ic aktiviere deshalb den ADC-Interrupt und warte auf das
ADC-Interrupt Flag, ohne jedoc einen Handler installiert zu
haben. So wird der IRQ gnzlic vom Linux-Kernel ignoriert.
Wird das ADC_INT_ENABLE-Bit im ADC_INT_ENABLE_REG
gesetzt, dann wird ein ADC Interrupt ausgelst, sobald die
Wandlung fertig ist.
Nac einem Reset sind smtlice Bits, die die Einstellungen be-
trefen auf 0 gesetzt. Bits, welce nict in diesen Tabellen auf-
taucen, sind im Datenblat als reserved markiert und drfen
nict mit 1 bescrieben werden.
Basis-Adresse fr alle ADC-Register: 0x13002000.
Bit Symbol R/W Beschreibung
0-9 ADC_Rx_DATA Read Only ADC-Ergebnis
Bit Symbol R/W Beschreibung
4 ADC_STATUS Read Only 1 = Wandlung luft
3 ADC_START Read/Write 1 = Starte Wandlung
2 ADC_CSCAN Read/Write 0 = Single Conv.
1 = Continuous Conv.
1 ADC_ENABLE Read/Write 1 = ADC aktiv
Bit Symbol R/W Beschreibung
0-3 CSEL0 Read/Write Ausung Channel 0
4-7 CSEL1 Read/Write Ausung Channel 1
8-11 CSEL2 Read/Write Ausung Channel 2
12-15 CSEL3 Read/Write Ausung Channel 3
Bit Symbol R/W Beschreibung
0 ADC_INT_ENA-
BLE
Read/Write 1 = IRQ aktiviert
Bit Symbol R/W Beschreibung
0 ADC_INT_
CLEAR
Write Only 1 = ADC_INT_STATUS
lschen
Beispiel fr eine Wandlung Polling
Bit Symbol R/W Beschreibung
0 ADC_INT_STA-
TUS
Read Only 1 = IRQ anstehend
27
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
Anzeige
[ PROJECT ] Gnublin ADC und PWM

ADC _ CON _ REG = ADC _ CSEL _ REG = 0; /* reset registers to default */
ADC _ INT _ ENABLE _ REG = ADC _ INT _ ENABLE; /* enable interrupt */
ADC _ CON _ REG |= ADC _ ENABLE; /* power up ADC */
ADC _ CSEL _ REG = 0x0000AAAA; /* select channel and resolution */
ADC _ CON _ REG &= ADC _ SSCAN; /* single conversion mode */
ADC _ CON _ REG |= ADC _ START; /* start conversion */
while(!(ADC _ INT _ STATUS _ REG & ADC _ INT _ STATUS)); /* wait until conversion done */
r0 = (uint16 _ t)ADC _ R0 _ REG;
r1 = (uint16 _ t)ADC _ R1 _ REG;
r2 = (uint16 _ t)ADC _ R2 _ REG;
r3 = (uint16 _ t)ADC _ R3 _ REG;
ADC _ CON _ REG &= ADC _ STOP;
printk(KERN _ INFO adc testing module: %03x %03x %03x %03x\n, r0, r1, r2, r3);
return 0;
}
void cleanup _ module(void) {
ADC _ CON _ REG &= ~(ADC _ ENABLE); /* disable ADC */
ADC _ CON _ REG = 0; /* set ADC to default state */
ADC _ CSEL _ REG = 0;
ADC _ INT _ ENABLE _ REG = 0;
ADC _ INT _ CLEAR _ REG = 0;
cgu _ clk _ en _ dis(CGU _ SB _ ADC _ CLK _ ID, 0); /* disable clock signals */
cgu _ clk _ en _ dis(CGU _ SB _ ADC _ PCLK _ ID, 0);
printk(KERN _ INFO adc testing module removed\n);
return;
}
28
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Gnublin ADC und PWM
Beispiel IRQ
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/interrupt.h>
#include <asm/io.h>
#defne ADC _ ENABLE (1 << 1)
#defne ADC _ START (1 << 3)
#defne ADC _ STATUS (1 << 4)
#defne ADC _ CSCAN (1 << 2) /* continuous scan */
#defne ADC _ SSCAN (~ADC _ CSCAN) /* single scan */
#defne ADC _ STOP (~ADC _ START)
#defne ADC _ INT _ ENABLE 1
#defne ADC _ INT _ DISABLE 0
#defne ADC _ IRQ _ PENDING 1
#defne ADC _ IRQ _ CLEAR 1
#defne ADC _ IRQ 9 /* interrupt vector 9 is ADC */
irqreturn _ t adc _ irq _ handler(int irq, void *dev _ id) {
uint16 _ t r0, r1, r2, r3;
static uint8 _ t runs; /* we will report ad values only 8 times to syslog */
while(ADC _ INT _ STATUS _ REG == ADC _ IRQ _ PENDING) ADC _ INT _ CLEAR _ REG = ADC _ IRQ _ CLEAR;
/* clear IRQ status */
if(runs < 8) {
r0 = (uint16 _ t)ADC _ R0 _ REG;
r1 = (uint16 _ t)ADC _ R1 _ REG;
r2 = (uint16 _ t)ADC _ R2 _ REG;
r3 = (uint16 _ t)ADC _ R3 _ REG;
printk(KERN _ INFO adc values: $%03x $%03x $%03x $%03x\n, r0, r1, r2, r3);
/* this is very bad programming practice, NEVER EVER
* use printk() in interrupt handlers in a real module
*/
runs++;
}
return IRQ _ HANDLED;
}

int init _ module(void) {
int32 _ t retval;
SYS _ ADC _ PD = 0; /* ADC powerdown mode off */
cgu _ clk _ en _ dis(CGU _ SB _ ADC _ CLK _ ID, 1); /* enable ADC clock */
cgu _ clk _ en _ dis(CGU _ SB _ ADC _ PCLK _ ID, 1);
ADC _ CON _ REG = ADC _ CSEL _ REG = 0; /* reset registers to default */

ADC _ CON _ REG |= ADC _ ENABLE; /* power up ADC */
29
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Gnublin ADC und PWM
ADC _ CSEL _ REG = 0x0000AAAA; /* select channel and resolution */
ADC _ CON _ REG |= ADC _ CSCAN; /* continuous conversion mode */
/* add an interrupt handler */
retval = request _ irq(ADC _ IRQ, adc _ irq _ handler, IRQF _ SHARED, lpc313x adc irq, (void *)
(adc _ irq _ handler));
ADC _ INT _ ENABLE _ REG = ADC _ INT _ ENABLE; /* enable ADC irq */
printk(KERN _ INFO adc irq testing module, we will spam to your syslog!!!\n);
ADC _ CON _ REG |= ADC _ START; /* start conversion */
return retval;
}
void cleanup _ module(void) {
ADC _ INT _ ENABLE _ REG = ADC _ INT _ DISABLE; /* disable ADC interrupt */
ADC _ CON _ REG &= ADC _ STOP; /* stop ADC */
ADC _ CON _ REG &= ~(ADC _ ENABLE); /* disable ADC */
cgu _ clk _ en _ dis(CGU _ SB _ ADC _ CLK _ ID, 0); /* disable clock signals */
cgu _ clk _ en _ dis(CGU _ SB _ ADC _ PCLK _ ID, 0);
free _ irq(ADC _ IRQ, (void *)(adc _ irq _ handler)); /* remove interrupt handler */
printk(KERN _ INFO adc testing module removed\n);
return;
}
Hardware
Da die maximale Eingangsspannung des AD-Wandlers bei 3.3V
liegt, muss der User dafr sorgen, dass nie mehr angelegt wird.
Eine einface Methode hierfr wre ein 10k Widerstand um den
Strom zu Begrenzen und eine 3,3V Zener Diode.
Eine Auswahl an 3,3V Zener-Dioden:
1N476 (0.4W)
1N5226, 1N4620 (0.5W)
Auf dem Gnublin-Board sind die 3 ADC-Kanle auf J5 als GPA0,
GPA1 und GPA3 zu fnden. Kanal 2 wurde nict herausgeroutet.
Beispielmodule
Im Anhang an diesen Artikel gibt es zwei Beispielmodule zum
herunterladen. Das eine zeigt die Verwendung des ADCs im
Polling-Mode, das andere im IRQ-Mode. Ebenfalls habe ic
ein Beispielmodul bei den Links angehngt, welces im Inter-
rupt den Wert von AD-Kanal 0 ausliest und diesen als PWM
Wert wieder am PWM-Pin ausgibt. Den Makefles muss die Ziel-
Arcitektur, das Cross Compiler-Prefx und das Verzeicnis mit
den Kernelquellen mitgegeben werden, hier ein Beispielaufruf:
$ ARCH=arm CROSS _ COMPILE=arm-linux-gnueabi-
KDIR=/path/to/kernelsource/ make
PWM
Die PWM-Einheit des LPC3131 ist im Vergleic zum AD-Wand-
ler sehr einfac, die komplete Konfguration luf ber zwei
Register. Die Grundfunktionen sind Pulsweitenmodulation
und PDM (Pulse Density Modulation). Fr ein 100%-Signal
kann der Ausgang fest auf 1 gesetzt werden und die Frequenz
kann ber 4 versciedene Vorteiler beinfusst werden
Abb. 1: disrek-
ter DA-Wandler
30
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Gnublin ADC und PWM
Im PWM-Modus wird ein 12 Bit-Counter kontinuierlic mit dem
PWM-Wert im Register PWM_TMR verglicen. Der Ausgang-
spin ist solange HIGH, wie der Counter-Wert kleiner ist, als der
Wert im Register PWM_TMR, andernfalls ist der Ausgangspin
LOW. Solange noc kein PWM_TMR-Wert gesetzt wurde ist der
Ausgangspin tristated, sobald der PWM_TMR-Wert das erste
mal gesetzt wird, wird der Ausgang aktiviert. Im PDM-Modus
gibt der Wert im PWM_TMR-Register an, wieviele Cloc-Cycles
vergehen mssen, bevor ein PWM-Puls ausgegeben wird. Die
Gesamtzahl der auszugebenden Pulse wird demnac mit dem
Wert im PWM_TMR-Register angegeben. In beiden Modi kann
das LOOP-Bit im PWM_CNTL-Register (Control Register) dazu
verwendet werden um den Ausgangspin nac einer bestimm-
ten Anzahl von Cloc-Cycles zu toggeln. Die Anzahl der Cloc-
Cycles hierfr wird durc die obersten 4 Bits im PWM_TMR-
Register vorgegeben.
Die PWM-Einheit verlangt drei versciedene Cloc-Signale von
der CGU:
PWM_PCLK APB Bus Cloc
PWM_PCLK_REGS APB Bus Cloc fr Zugrif auf Register
PWM_CLK PWM Cloc, wird fr die PWM-Ausgabe verwen-
det
Die PWM_CLK-Frequenz liegt per Default bei 1.465kHz. Durc
die verfgbaren Vorteiler von 1, 2, 4 und 8 lsst sic dieser Takt
weiter herunterteilen.
Der Duty-Cycle lsst sic mit folgender Formel berecnen:
DutyCycle=
TMR
4095
100
Bei einem Wert von z.B. 2047 ergibt das ein Duty Cycle von
~49.99%.
Das Abfragen der PWM_CLK-Frequenz lsst sic leict in einer
Zeile erledigen:
uint32 _ t pwm _ clk _ freq = cgu _ get _ clk _
freq(CGU _ SB _ PWM _ CLK _ ID) / 4095;
Beispiel:
/* enable clock for PWM */
cgu _ clk _ en _ dis(CGU _ SB _ PWM _ PCLK _ ID,
1);
cgu _ clk _ en _ dis(CGU _ SB _ PWM _ PCLK _ REGS _
ID, 1);
cgu _ clk _ en _ dis(CGU _ SB _ PWM _ CLK _ ID, 1);
PWM _ CNTL _ REG = 0; /* PWM Mode */
PWM _ TMR _ REG = 2047; /* Duty Cycle
~49.99% */
Nac einem Reset sind smtlice Bits, die die Einstellungen be-
trefen auf 0 gesetzt. Bits, welce nict in diesen Tabellen auf-
taucen, sind im Datenblat als reserved markiert und drfen
nict mit 1 bescrieben werden.
Basis-Adresse fr alle PWM-Register: 0x13009000.
PWM_TMR_REG
Ofset: 0x00
Bescreibung: PWM Timer Register
PWM_CNTL_REG
Ofset: 0x04
Bescreibung: PWM Konfguration
Hardware
Der PWM-Pin wurde auf die Stifleiste J5 auf Pin 4 geroutet
(PWM). ber ein RC-Glied lsst sic hiermit ein rect einfa-
cer DA-Wandler aufauen, der z.B. fr die Kontrast-Einstellung
von Displays verwendet werden kann. ber einen entsprecen-
den Operationsverstrker knnen durc den DA-Wandler auc
hhere Strme getrieben werden, z.B. zum Ansteuern eines
Transistors. Zum Steuern von induktiven Lasten wie Motoren,
Spulen usw. brauct man am PWM-Pin natrlic einen passen-
den Leistungstransistor und auc die Freilaufdioden nict ver-
gessen! Der maximale Strom, der jedem digitalen I/O entnom-
men werden kann ist im Datenblat mit 4mA bei den limiting
values angegeben. Leider steht jedoc bei den static caracte-
ristics unter IO pin confgured as output nur tbd (to be dis-
closured). Fr Lasten, die mehr als 2mA bentigen wrde ic
deshalb dringend Transistoren/Treiber vorsclagen. Eine 2mA-
Low-Current LED mit entsprecendem Vorwiderstand funktio-
niert bei mir tadellos direkt am Pin. Um das Board vor induzier-
ten berspannungen 100%ig zu sctzen, sollte der PWM-Pin
ber einen Optopkoppler galvanisc von der Scaltung getrennt
werden - ein Controller im 180-Pin-BGA-Gehuse ist nict so
leict gewecselt wie ein DIP-AVR ;)ber ein RC-Glied kann
mit der PWM-Einheit natrlic auc eine analoge Spannung
erzeugt werden.
Dieser disrek-
te DA-Wandler
hat jedoc den
Nacteil, dass er
Bit Symbol R/W Beschreibung
0-11 MR Read/Write 12 Bit Timer Wert fr
PWM
Bit Symbol R/W Beschreibung
0-1 CLK Read/Write Vorteiler fr PWM_
CLK
00 = PWM_CLK
01 = PWM_CLK / 2
10 = PWM_CLK / 4
11 = PWM_CLK / 8
4
HI Read/Write 1 = PWM-Pin dauer-
haf HIGH
6
LOOP Read/Write 1 = Loop-Mode ein
7
PDM Read/Write 1 = PDM-Mode ein
0 = PWM-Mode ein
Clock, PWM-Frequenz und Duty-Cycle
Zusammenfassung der Register
Funktionsbeschreibung
Abb. 2:
RC Glied
31
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
Auf Jobsuche?
Dann besuchen Sie unseren Online-Stellenmarkt
journal.embedded-projects.net/stellenmarkt
?
Stellenausschreibungen
Links, Quellen und Danke
nict fhig ist, grosse Strme zu treiben.
Der Kondensator C1 ist mit 47F relativ gross. So entsteht eine
sehr saubere Gleicspannung am Ausgang, jedoc dauert das
Umscalten zwiscen zwei PWM-Werten einige Zeit. Fr ei-
nen Wecsel von 0 auf 100 brauct dieser DA-Wandler, unbelas-
tet, etwa 3 Sekunden. In dieser Zeit sieht man am Oszilloskop
scn, wie die Spannung langsam ansteigt. Wenn man scnelle-
re Reaktionszeiten brauct, muss man den Kondensator C1 und
die Widerstnde ver-
kleinern. Je kleiner
dieser jedoc wird,
desto unsauberer wird das Ausgangssignal. Mit einem 100nF-
Kondensator erreict man sehr scnelle Reaktionszeiten, doc
das Ausgangssignal ist im mitleren Bereic (Duty Cycle von
ca. 20% bis 80%) mehr ein Sgezahn als sonst etwas. Die beiden
Widerstnde R1 und R2 sind natrlic auc fr das Timing-Ver-
halten mitverantwortlic. R1 bestimmt die Zeit, die gebrauct
wird um den Kondensator aufzuladen, R2 um ihn zu entladen.
Durc den 1:10 Spannungsteiler, der sic aus R1 und R2 bildet
ist es nict mglic komplet an die 100%/3,3V heranzukom-
men. Der Spannungsbereic liegt bei etwa 0-3V. Brauct man
grere Strme kann man z.B. einen Operationsverstrker als
Spannungsfolger einsetzen. Ein LM324 lsst so Strme bis ca.
20mA zu.
Und hier noc ein Ausscnit vom Oszilloskopbild bei einem
Duty-Cycle von 25%, die analoge Spannung nur durc das RC-
Glied hergestellt, keinen OP-Bufer dahinter. Die analoge Span-
nung liegt bei etwa
0.75V (Gelb), die Rote
Linie ist das PWM-
Signal.
Dokumentation:
Die erste Anlaufstelle fr Dokumentation zur Hardware
sollten das einfacer LPC313x Datasheet sein, sowie das
sehr ausfhrlice LPC313x User Manual.
Die Linux- und Gnublin-spezifsce Dokumentation fndet
sic auf htp://www.gnublin.org.
Ebenfalls ist das Gnublin-Thema auf mikrocontroller.net
sehr informativ.
Quellen:
Die Quellen zu diesem Artikel stellen im Groen und Gan-
zen die Kernel-Module von mir und dem User misc dar,
Linux Device Drivers und Linux Kernel Module Pro-
gramming Guide.
Danke:
Bedanken mcte ic mic ganz herzlic beim Gnublin-
Team, die mir eines ihrer Boards im Gegenzug fr Code und
Hilfe kostenlos zur Verfgung gestellt haben sowie beim
User misc von mikrocontroller.net, der sic als erster um
ADC und PWM gekmmert hat, sowie einen grafscen Ins-
taller fr die SD-Karte gescrieben hat.
Ebenso hat er mic scon auf ein paar (bse) Bugs aufmerk-
sam gemact bzw. geholfen diese zu fnden.
[ PROJECT ] Gnublin ADC und PWM
Abb. 3: Operati-
onsverstrker
Abb. 4: Duty-
Cycle 25%
32
2/2012 JOURNAL - EMBEDDED-PROJECTS.NET
Das GNUBLIN embedded GNU/Linux Board
gibt es jetzt auc als DIP-Modul zum
aufstecen. Auf GNUBLIN in der Ver-
sion mit dem ARM9 Prozessor LPC3131
von NXP luf ein vorinstalliertes Linux,
welces von einer SD-Karte gebootet wird.
Wesentlice Scnitstellen zum Mikroprozessor
wie Digitale Ein- Ausgnge, Analoge Eingnge, I2C,
SPI oder eine PWM-Leitung sind nac auen
gefhrt:
ARM9 Prozessor mit 180 MHz (LPC3131)
32 MB SDRAM (Jetzt neu mit 32 MB RAM!)
vorinstalliertes GNU/Linux
microSD Karten Stecplatz fr Bootloader, Kernel, Dateisystem und Swap-
Bereic
USB-Device oder USB-Host Anscluss an Ansclussleisten
15 x GPIO, 4 x AD auf Ansclussleiste
UART,SPI und I2C an Ansclussleisten
5V ca. 100mA Stromversorgung (internen Spannungen werden selbst erzeugt)
54.0 mm x 18.3 mm
Standard DIP40 Gehuse inkl. Przesions Pin-Leisten
[ PROJECT ] Marktplatz - Die Ecke fr Neuigkeiten und verschiedene Produkte
Marktplatz / Neuigkeiten
Die Ecke fr Neuigkeiten und verschiedene Produkte
GNUBLIN DIP GNUBLIN Extended
Zhlerplatine fr Standard-LCD
Diese kleine Platine verwandelt ein Standard LCD in ein
Zhlermodul. Je nac eingestectem uC erhalten Sie: ei-
nen sehr genauen Frequenzzhler 0.5Hz..5MHz, gleic-
bleibende Aufsung von 5 Stellen ber den gesamten
Bereic, mit eingebauter Abgleicroutine. Versciedene
Vorteilerverhltnisse whlbar; einen Ereigniszhler mit
Triggerkontakt/TTL-Triggersignal. Versciedene Ent-
prellzeiten whlbar. Eine Stoppuhr mit Triggerkontakt/
TTL-Triggersignal. Anzeigeformat ss:msms:usus oder
hh:mm:ss
Dies ist ein Produkt
prsentiert im Experten-
Wegweiser Find your
engineer: http://www.
nd-your-engineer.de
Nac langer Wartezeit endlic die groe
GNUBLIN Version mit allen Pins nac au-
en gefhrt, perfekt um Aufstecboards
zu entwiceln:
32 MB SDRAM (Jetzt neu mit 32 MB RAM!)
Alle Pins nac auen gefhrt
Haben Sie interessante Produk-
te oder Neuigkeiten?
Dann senden Sie uns ein Foto,
3-4 Zeilen Text und einen Link
mit Betreff Marktplatz an:
journal@embedded-projects.net
Mehr Infos gibts auf der GNUBLIN Projektseite:
http://www.gnublin.org
A
l
l
e

e
i
n
g
e
t
r
a
g
e
n
e
n

W
a
r
e
n
z
e
i
c
h
e
n

s
i
n
d

e
i
n
g
e
t
r
a
g
e
n
e

W
a
r
e
n
z
e
i
c
h
e
n

d
e
r

j
e
w
e
i
l
i
g
e
n

H
e
r
s
t
e
l
l
e
r
!
www.pcb-pool.com
P
C
B
-
P
O
O
L


i
s
t

e
i
n
e

e
i
n
g
e
t
r
a
g
e
n
e

M
a
r
k
e

d
e
r

B
e
t
a

L
A
Y
O
U
T

G
m
b
H
www.beta-eSTORE.com
FREE Stencil
bei jeder PCB Prototyp-Bestellung
Easy-going
17 akzeptierte Layoutformate
Entwickeln, Lten und Bestcken
Big Beta-Reflow-Kit

129,
00
*
Reflow-Controller

129,
00
*

6,
00
*
Tool-Kit Extended

149,
00
*
Arduino Mega (ATMega 1280-16AU)
kompatibel

36,
50
*
* inkl. MwSt. und zzgl. Versandkosten
LED Wechselblinker
SMD-Bausatz
[ STELLENMARKT / ANZEIGEN ]

Interesse an einer Anzeige?
info@embedded-projects.net
ElektronIk / SoftwareentwIcklung
Layout
E|70IenstleIster
8estucker / E|S0IenstleIster
|echatronIk
FIndYourEngIneer
Ist eIn personlIches
Empfehlungsnetzwerk.
FIrmen dIe ElektronIk
Experten suchen,
wenden sIch bItte
dIrekt an:

|arkus Kessler
kontakt@ndyourengIneer.de
#
J
0
4
6
Kleinrechner mit FPGA
www.bomerenzprojekt.de
Impressum
embedded - projects.net
JOURNAL
OPEN SOURCE SOFT- AND HARDWARE PROJECTS
embedded projects GmbH
Holzbachstrae 4
D-86152 Augsburg
Telefon: +49(0)821 / 279599-0
Telefax: +49(0)821 / 279599-20
Verffentlichung: 4x / Jahr
Ausgabenformat: PDF / Print
Auagen Print: 2500 Stk.
Einzelverkaufspreis: 1
Layout / Satz: EP
Druck: yeralarm GmbH
Titelfoto: Claudia Sauter
Alle Artikel in diesem Journal stehen
unter der freien Creativ Commons Li-
zenz. Die Texte drfen, wie bekannt
von Open Source, modiziert und in
die eigene Arbeit mit aufgenommen
werden. Die einzige Bedingung ist,
dass der neue Text ebenfalls wieder
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.
Dies ist ein Open Source
Projekt.
Except where otherwise no-
ted, this work is licensed un-
der http://creativecommons.
org/licenses/by/3.0
Werdet aktiv!
Das Moto: Von der Community fr die Community !
Das Magazin ist ein Open Source Projekt.
Falls Du Lust hast, Dic an der Zeitscrif durc einen Beitrag
zu beteiligen, wrden wir uns darber sehr freuen. Screibe
deine Idee an:
journal@embedded-projects.net
Regelmig
Die Zeitscrif wird ber mehrere Kanle verteilt. Der erste
Kanal ist der Download als PDF - Datei. Alle Ausgaben sind
auf der Internetseite [1] verfgbar. Diejenigen, die lieber eine
Papierversion erhalten mcten, knnen den zweiten Kanal
whlen. Man kann sic dort auf einer Internetseite [2] in eine
Liste fr die gesponserten Abos oder ein Spendenabo eintra-
gen. Beim Ersceinen einer neuen Ausgabe wird dank Sponso-
rengeldern an jeden auf der Liste eine Ausgabe des aktuellen
Journal versendet. Falls man den Versandtermin verpasst hat,
kann man das Hef auc ber einen Online - Shop [2] beziehen.
[1] Internetseite (Anmeldeformular gesponserte Abos): htp://
journal.embedded-projects.net
[2] Online - Shop fr Journal:
htp://www.embedded-projects.net
Sponsoren gesucht!
Damit wir weiterhin diese Zeitscrif fr jeden frei bereitstel-
len knnen, sucen wir dringend Sponsoren fr Werbe- und
Stellenanzeigen. Bei Interesse meldet Euc bite unter folgen-
der Telefonnummer: 0821 / 2795990 oder sendet eine E-Mail an
die oben genannte Adresse.
N
a
m
e

/

F
i
r
m
a
S
t
r
a

e

/

H
a
u
s
n
u
m
m
e
r
P
L
Z

/

O
r
t
E
m
a
i
l

/

T
e
l
e
f
o
n

/

F
a
x
W
i
r

m

c
h
t
e
n

a
l
s

H
o
c
h
s
c
h
u
l
e

/

A
u
s
b
i
l
d
u
n
g
s
-
b
e
t
r
i
e
b

j
e
d
e

w
e
i
t
e
r
e

A
u
s
g
a
b
e

b
e
k
o
m
m
e
n
.
B
i
t
t
e

g
e
w

n
s
c
h
t
e

A
n
z
a
h
l

d
e
r

H
e
f
t
e

p
r
o

A
u
s
g
a
b
e

a
n
k
r
e
u
z
e
n
.
I
c
h

m

c
h
t
e
n

i
m

e
m
b
e
d
d
e
d

p
r
o
j
e
c
t
s

J
o
u
r
n
a
l

w
e
r
b
e
n

o
d
e
r

e
i
n
e

S
t
e
l
l
e
n
a
n
z
e
i
g
e

a
u
f
g
e
b
e
n
.

B
i
t
-
t
e

s
c
h
i
c
k
e
n

S
i
e

m
i
r

I
n
f
o
m
a
t
e
r
i
a
l
,

P
r
e
i
s
l
i
s
t
e

e
t
c
.

z
u
.
I
c
h

m

c
h
t
e

j
e
d
e

z
u
k

n
f
t
i
g
e

A
u
s
g
a
b
e

e
r
h
a
l
t
e
n
B
i
t
t
e

f
r
e
i

m
a
c
h
e
n
e
m
b
e
d
d
e
d

p
r
o
j
e
c
t
s

G
m
b
H
H
o
l
z
b
a
c
h
s
t
r
a

e

4
D

-

8
6
1
5
2

A
u
g
s
b
u
r
g
5
1
0

Vous aimerez peut-être aussi