Sie sind auf Seite 1von 36

19 WWW.EMBEDDED-PROJECTS.

NET ISSUE 19 I DEZ 2013 I OPEN SOURCE


embedded projects
JOURNAL
OPEN SOURCE SOFT-AND HARDWARE PROJECTS
www.embedded-proj ects.net
your own projects
Eine Open-Source Zeitschrift zum Mitmachen!
Embedded Linux Fieber
[PROJECTS]
irCube - Infrarot per GPIO
3D-Drucker mit Gnublin
NFC mit Gnublin
C++ API fr Gnublin mit Phyton
Interrupt mehrer GPIOs
Jgermeister-Uhr
Gnublin fr die Automatisierung
Gnublin-Case
GNUBLIN
SPEZIAL
2
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
A
n
z
e
i
g
e
[ Editorial ] Benedikt Sauter
Einleitung
Ausgabe 04/2013
Embedded Projects Journal - Ausgabe No. 19
Einleitung
Hallo liebe Leser,
die Idee zu einem Gnublin Sonderhef kam uns, nacdem im vergangenen Sommerse-
mester wieder einige interessante Projekte im Fac Embedded Linux an der Hoc-
scule Augsburg zustande kamen. Ein paar dieser Projekte knnt Ihr Euc in diesem
Hef genauer anscauen (neben ein paar externen Artikeln).
Dass wir mal so weit kommen wrden, war nict von Anfang an klar. Ic kann mic
noc gut an meinen Wunsc erinnern, mal ein eigenes Board zu haben, das preiswert
(maximal 50 Euro), stromsparend und mit einer vernnfigen - also nict unntig hohen
- Recenpower fr eine breite Palete von nict-grafscen Anwendungen ausgestatet
sein sollte. Daneben sollte das Ganze auc noc relativ leict selbst herstellbar sein, viel-
leict sogar mit nur einer zweilagigen Platine. Im Sommer vor zwei Jahren war der erste
Prototyp dann da, im Herbst lief endlic das erste Linux drauf (ELDK).
Kurz darauf, im Februar 2012, haben wir das Board auf der Embedded World in Nrn-
berg eher nebenbei auf dem Stand des OSADL (www.osadl.org) vorgestellt. Zufllig
wurde zur gleicen Zeit auf dem Nacbarstand eines grossen Distributors ein anderes
Board mit vollem Marketingeinsatz vorgestellt - Ihr wisst scon, das mit der Himbeere
im Logo - das viel mehr kann und dabei sogar noc deutlic preisgnstiger als unseres
war. Seit diesem Zeitpunkt hat Embedded Linux auf preiswerten Community-Boards
einen extremen Scub erfahren. Als Gnublin-Bastler kann einen scon mal das Gefhl
bescleicen, von der Entwiclung komplet berrollt zu werden, zumal bei den gros-
sen Mainstream-Boards auc eine riesige Gemeinscaf an Entwiclern und Anwen-
dern dahinter steht. Man zhle nur mal die 2013 gescriebenen Himbeer-Bcer, bei gut
ber 20 habe ic aufgehrt zu zhlen.
Das Scne am Gnublin-Projekt ist dabei, dass es eine unaufgeregte Nisce an Hard-
ware-Eigenscafen belegt, in der ic gerne noc weitere hnlice Projekte ansiedeln
wrde. Wictig sind uns die geringe Leistungsaufnahme von hcstens einem halben
Wat, auc wictig ist der minimalistisce Hardware-Entwurf, der sogar ohne festes
Netzwerk-Interface auskommt und nac dem Prinzip funktioniert: was Du sonst noc
braucst, stecst Du ber USB an. berhaupt nict wictig ist fr uns die relativ niedri-
ge Takfrequenz (180 MHz), mit denen der Prozessor luf und auc die 32 MByte Spei-
cer reicen auc locer fr speicerintensive Interpreterspracen wie Python (ic gebs
ja zu - Node.js brauct mehr, um vernnfig zu laufen).
So, nac diesem kurzen Ausfug kann ic nur noc die Lektre der Artikel empfehlen.
Vielleict gibt es auc noc andere Projekte da draussen, die irgendwas mit Gnublin
gemact haben und von denen man bisher noc nicts gehrt hat. Ic freue mic immer
ber Rcmeldungen an <Hubert.Hoegl@hs-augsburg.de>.
Viel Freude beim Lesen,
Hubert Hgl
Vielen Dank an Hubert Hgl fr diese neten einleitenden Worte zu unserem GNUBLIN-
Projekt!
Benedikt Sauter
und das embedded projects Team!
[1] htp://shop.embedded-projects.net
www.eurocircuits.de
Die europische Referenz
fr PCB Prototypen und
Kleinserien
IMS pool
Aluminiumkern-Leiterplatten fr hohe
Wrmeableitung (z.B. LED-Anwendung)
Leiterplatten mit einlagig isoliertem Metallsubstrat
weisser/schwarzer Ltstopplack/Bestckungsdruck
oder umgekehrt
ab 3 AT
RF pool
alle Pooling-Vorzge mit
Hochfrequenz-Material
Material: Isola I-TERA und Rogers 4000 Serie
2-4 Lagen, bis 100m Technologie
ab 3 AT
STANDARD pool
die grte Auswahl an Eurocircuits Pooling
Optionen
FR-4, fr bleifreies Lten geeignet, bis 16 Lagen
Layout-Technologie bis 90m
ab 2 AT
PCB proto
spezieller Prototypen-Service fr Entwickler,
preiswert und schnell
1, 2 oder 5 LP in 2, 3, 5 oder 7 Arbeitstagen
2 und 4 Lagen
DRC-geprft, prof. Ausfhrung,
inkl. 2 x Ltstopplack, 1 x Bestckungsdruck,
150m Technologie
Kostensenkung durch Online-Pooling
Keine Einrichtkosten
Keine Mindestbestellwerte - ab der 1. Platine
Sofort-Bestellung Online - ohne Vorkasse
Zeitgewinn durch neue Online-Daten-Dienste
PCB Visualizer Sofort Design-Rule-Check
PCB Checker sofortige Anzeige von DRC Fehlern
im Layout
PCB Congurator kalkulieren und prfen
von Layout-Parametern, Anzeige von Preis-Optionen
www.eurocircuits.de
Die europische Referenz
fr PCB Prototypen und
Kleinserien
IMS pool
Aluminiumkern-Leiterplatten fr hohe
Wrmeableitung (z.B. LED-Anwendung)
Leiterplatten mit einlagig isoliertem Metallsubstrat
weisser/schwarzer Ltstopplack/Bestckungsdruck
oder umgekehrt
ab 3 AT
RF pool
alle Pooling-Vorzge mit
Hochfrequenz-Material
Material: Isola I-TERA und Rogers 4000 Serie
2-4 Lagen, bis 100m Technologie
ab 3 AT
STANDARD pool
die grte Auswahl an Eurocircuits Pooling
Optionen
FR-4, fr bleifreies Lten geeignet, bis 16 Lagen
Layout-Technologie bis 90m
ab 2 AT
PCB proto
spezieller Prototypen-Service fr Entwickler,
preiswert und schnell
1, 2 oder 5 LP in 2, 3, 5 oder 7 Arbeitstagen
2 und 4 Lagen
DRC-geprft, prof. Ausfhrung,
inkl. 2 x Ltstopplack, 1 x Bestckungsdruck,
150m Technologie
Kostensenkung durch Online-Pooling
Keine Einrichtkosten
Keine Mindestbestellwerte - ab der 1. Platine
Sofort-Bestellung Online - ohne Vorkasse
Zeitgewinn durch neue Online-Daten-Dienste
PCB Visualizer Sofort Design-Rule-Check
PCB Checker sofortige Anzeige von DRC Fehlern
im Layout
PCB Congurator kalkulieren und prfen
von Layout-Parametern, Anzeige von Preis-Optionen
HOLEN SIE SICH
DIE NEUESTE
VERSION!
Neue Funktionen der Version 6.4:
- Slmulatlon |hres LAGLL Schaltplans ln LTsplce |v
- Anzelge und Suchfunktlon fur Attrlbute lm ADD- und PL-
PLACL-Dlalog
- |mport von Deslgndaten aus P-CAD, Altlum und Protel uber
das Zwlschenformat ACCLL ASC||
- verbesserte 8enutzerfuhrung und vorelnstellungen (Tool-
tlpps, Shortcuts)
www.cadsoft.de
6
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
Warum das NEC-Protokoll? Ein groer Teil aller heimiscen Elektronik-
gerte mit einer Infrarotfernbedienung verwenden das NEC-Protokoll
(Abb. 3). So auc in unserem eigenen Fall. TV, SAT Receiver, AV-Receiver,
Subwoofer etc.
Der NEC-Code wird durc die Pulsdauermodulation (PDM) bescrie-
ben. Wie in Abbildung 2 zu sehen ist, bestehen die Merkmale der PDM
aus einer konstanten Pulslnge und zwei untersciedlicen Pausenln-
gen.
Die logisce 1 besteht aus einem 560s anstehenden High-Pegel und
einem darauf folgenden 1690s langen Low-Pegel. Die logisce 0 be-
steht aus einem 560s anstehenden High-Pegel und einem
darauf folgenden 560s langen Low-Pegel. Jeder High-Pegel
muss mit einer Trgerfrequenz von 38kHz 2kHz getaktet
sein, was auc die Darstellung der High-Pegel in Abb. 2 er-
ahnen lsst. Anhand der hohen, gleicmig getakteten Tr-
gerfrequenz knnen uere Streinfsse, durc unterscied-
lice Lictquellen, beseitigt werden.
Wie in Abb.3 zu erkennen ist, besteht das NEC-Protokoll aus
34-Bit, eine genauere Bescreibung des Protokolls liefern Ta-
belle 1 und 2.
[ PROJECT ] irCube
irCube - Infrarot per GPIO
Tobias Theile <Tobias.Theile@hs-augsburg.de>
Alexander Koch <Alexander.Koch@hs-augsburg.de>
Allgemeine Projektbeschreibung
irCube
Abb. 1: Allgemeine Funk-
tionsbersicht
Das Projekt trgt den Namen irCube, da sic Gnublin-
Board und Infrarotsenderplatine in einem kubiscen Gehuse aus LEGO befnden.
Mikrocontroller-Board: Gnublin Standard V1.5
Betriebssystem: Gnublindistribution mit Kernel 2.6.33
Infrarotsenderplatine: Locrasterplatine mit Transistor-
scaltung zum Treiben der Infrarot-LED. (Abb. 4)
ber ein Webinterface sollen eine oder mehrere Fernbedienun-
gen grafsc simuliert werden. Die Webdarstellung soll auf die
vorwiegende Benutzung eines Smartphone optimiert sein, kann
jedoc mit jedem Browser aufgerufen werden, vorausgesetzt das
Gert verfgt ber eine TCP/IP-Verbindung zum irCube.
Via Tastendruc soll ein Befehl vom Webserver aus abgesen-
det werden. Auf dem Gnublin soll anhand der Aufrufparameter
der passende Code aus einer Konfgurationsdatei ausgelesen, an-
sclieend synthetisiert und via GPIO an die Infrarotsenderplatine
bergeben werden, welce die Infrarot-LED treiben und somit das zu
bedienende Gert steuern soll (Abb. 1).
NEC-Kodierung und NEC-Protokoll
Abb. 2: Die NEC-Kodierung der logischen 0 und 1
Die Motivation besteht darin, das Gnublin Mikrocontrollerboard mit embedded Linux so zu programmieren, dass eine Infrarotsender-
platine damit angesteuert werden kann, um Infrarotcodes einer Fernbedienung zu synthetisieren. Zustzlich sollen ber ein Webin-
terface eine grasche Fernbedienungen simuliert werden, um z.B. den heimischen Fernseher oder anderweitige Peripherie bequem
steuern zu knnen. Das Gnublin-Board und die Senderplatine sollen in einem Gehuse untergebracht werden, um es fr den tglichen
Einsatz im Wohnzimmer attraktiv zu machen.
Frame 34 Bits (1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit)
Start-Bit 9000s Puls, 4500s Pause
Daten-Bits 8 Adress-Bits + 8 invertierte Adress-Bits + 8 Kom-
mando-Bits + 8 invertierte Kommando-Bits
Stop-Bit 560s Puls
Logische 0 560s Puls, 560s Pause
Logische 1 560s Puls, 1690s Pause
Tabelle 1: Das NEC-Protokoll
7
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
Die Realisierung einer Infrarotsenderplatine
sollte keine groe Herausforderung darstellen.
Wer lten kann und wei wo er sic die ben-
tigten Bauteile zu besorgen hat, kann innerhalb
krzester Zeit die Treiberstufe fr eine Infrarot-
LED realisieren.
Bits Beschreibung
Start-Bit Diese Abfolge markiert den Beginn des Infrarotcodes.
8 Adress-Bits Beschreiben eindeutig das zu steuernde Gert.
8 Adress-Bits invertiert Dienen zur Fehlerberprfung der 8 Adress-Bits.
8 Kommando-Bits Beschreiben den Knopfdruck der Fernbedienung.
8 Kommando-Bits invertiert Dienen zur Fehlerberprfung der 8 Kommando-Bits.
Stop-Bit Ein einziger High-Pegel mit 560s markiert das Ende.
Vorbereitung und Grundlagentests
[ PROJECT ] irCube
Tabelle 2: Nhere Beschreibung der Start-, Stop-, Daten-Bits
Um dem irCube WLAN-Fhigkeit zu verleihen wurde der
USB-WLAN-Stic ASUS WL-167g v3 verwendet. Auf eine de-
taillierte Bescreibung der Inbetriebnahme wird an dieser
Stelle verzictet, da dies ausreicend im Gnublin-Wiki [1] be-
scrieben ist.
Anhand von Grundlagentests, gescrieben in C, soll heraus-
gefunden werden ob es prinzipiell mglic ist eine 38kHz
Trgerfrequenz, stabil und zeitkonstant ber mind. 560s zu
generieren.
Im ncsten Scrit muss sicergestellt werden, dass dies auc
fr 9ms der Fall ist, da das Start-Bit 9ms High-Pegel bentigt,
welcer mit der Trgerfrequenz getaktet sein muss.
Des Weiteren mssen Tests an den GPIO-Ports durcgefhrt
werden, um absctzen zu knnen, ob eine Taktung der GPIO-
Ports mit einem Intervall von 13s On und 13s Of stabil und
zeitkonstant mglic ist.
Smtlice Versuce wurden mit einem digitalen Oszilloskop
vom Typ Aten Instruments ADS- Series 1000 aufgezeic-
net und berprf.
Unter Linux kann ber sysfs direkt auf den GPIO-Port ber die
Konsole zugegrifen werden und via simplen Dateinderun-
gen der GPIO-Port gesetzt werden. Siehe hierzu den Artikel im
Gnublin-Wiki GPIO per Konsole[2].
Da dies fr den irCube von Anfang an nict in Frage kam, wurde das gleice Verfahren in C angewandt.
Die ersten Versuce wurden mit einer gpio.h API gemact, welce von einem User im Gnublin-Forum stammt. Diese beinhaltet
lediglic das fnen eines Filestreams auf den gewnscten GPIO-Port und ermglict das Setzen des Ausgangswertes und der
Rictung (IN / OUT) ber sysfs.
Um absctzen zu knnen, ob es mit dieser Methode aus dem Userspace mglic ist einen GPIO-Port in der bentigten Frequenz
anzusteuern, wurde eine kleine Simulationsroutine gescrieben. Wie in Listing 1 zu sehen ist, wird die gpio.h API verwendet um
den GPIO-Port 11 anzusteuern.
Der GPIO-Port wird auf High gesetzt und danac der Programmablauf fr die umgerecnete Frequenz in Mikrosekunden durc
die Funktion usleep() sclafen gelegt. Danac wird der GPIO- Port auf Low gesetzt und dieselbe Zeit gesclafen. Anhand des Test-
codes kann mit einer eingegebenen Frequenz der GPIO-Port aus dem Userspace angesteuert werden. Allerdings sind hierbei sehr
scnell die Grenzen erreict.
Scon bei einer Frequenz von 1kHz (Erwartungshaltung: Periode mit 1ms) kann das System nict genauer als ca. 7ms aufsen, siehe
Abb. 5. Erst bei Frequenzen kleiner 250Hz (4ms) konnten die eingestellten Frequenzen zeitgenau gemessen werden.
void IrfreqGen()
{
double erg = 0;
double sek = 0;
double frq = 0.0;
int long msek = 0;
MakeGpio( Gpio11 );
DirectionGpio( Gpio11, GpioOut );
SetValueGpio( Gpio11, GpioClear );
printf( Bitte Frequenz in Hz eingeben:\n );
scanf( %lf, &frq );
erg = ( 1 / frq );
sek = ( erg * 1000000 );
msek = ((( int long )sec) / 2);
for ( ; ; ) {
SetValueGpio( Gpio11, GpioSet );
usleep(msek);
SetValueGpio( Gpio11, GpioClear );
usleep(msek);
}
}
Listing 1: Funktion zum Testen des GPIO aus dem Userspace
Abb. 4: Infrarot Treiberstufe
Abb. 3: Das NEC-Protokoll
Frame 34 Bits (1 Start-Bit + 32 Daten-Bits + 1 Stop-Bit)
Start-Bit 9000s Puls, 4500s Pause
Daten-Bits 8 Adress-Bits + 8 invertierte Adress-Bits + 8 Kom-
mando-Bits + 8 invertierte Kommando-Bits
Stop-Bit 560s Puls
Logische 0 560s Puls, 560s Pause
Logische 1 560s Puls, 1690s Pause
8
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
Dies liegt zum einen an den sogenannten Jif s, das
Unix-Standardzeitintervall, welces im Kernel ver-
ankert ist und bei der aktuellen Gnublindistribu-
tion auf 250Hz (4ms) eingestellt ist. Zum anderen
sind die zustzlicen ca. 2ms durc das fnen des
Filestreams und Setzen der Wert ber das Datei-
system gegeben, wobei auc der Sceduler seinen
Teil dazu beitrgt, da er jedem Prozess nur eine ge-
wisse Zeitsceibe zur Verfgung stellt, und nac
Ablauf dieser einen Kontextwecsel einleitet.
Generell ist mglic den GPIO-Port direkt ber
MemoryMapping anzusteuern, was das fnen
eines Filestreams und Bescreiben von Dateien
umgeht und somit Zeit sparen msste. Dies wur-
de auc getestet und tatsclic werden die ca. 2ms
Latenz durc das fnen des Filestreams umgan-
gen, aber dennoc kann nict genauer als 1 Jify
(4ms) aufgelst werden.
Die Problematik gestaltet sic dahingehend, dass es
sic als weitaus scwieriger erweist ein Zeitkons-
tantes Signal mit hoher Aufsung aus dem User-
space zu generieren, als wir anfnglic gedact
haten. Um eine hhere Aufsung zu erreicen gibt
es ein paar Mglickeiten die im Folgenden getestet
wurden.
High-Resolution-Timer oder kurz HR-Timer, sind
seit einigen Jahren fester Bestandteil des Mainline-
Kernels. Um sie verwenden zu knnen muss beim
Kompilieren gegen die Realtime-Library gelinkt
werden. Dazu muss beim gcc-Aufruf der Parameter
-lrt mit angegeben werden. Somit knnen usleep()
und nanosleep()genauer als 1 Jify aufsen. Aller-
dings sind auc den HR-Timern Grenzen gesetzt.
Um dies zu verifzieren wurde im ncsten Scrit
ein kleines C Programm gescrieben, welces mit
der Funktion clo_getres() die Aufsung von us-
leep() und nanosleep() fr 500s misst, und ausgibt.
Um zu berprfen, wie stark die eingestellte Zeit
jitert, wurde mit einer simplen while-Scleife die
Nanosleepmessung ausgegeben. Wie in Abbil-
dung 6 zu erkennen ist, scafen die HR-Timer es
deutlic unter einem Jify aufzulsen, jedoc jit-
tern die Werte extrem.
Da Userspaceprogramme eine wesentlic niedri-
gere Prioritt als Kerneltasks besitzen, wurde ein
Sceduler eingebunden, welcer die Prioritt auf
RT (Realtime) setzt. Die Hofnung besteht darin,
die Zeit noc genauer aufsen zu knnen und den
Jiter zu minimieren. Der Code aus Listing 2 wur-
de durc den Code aus Listing 3 erweitert, um dem
Userspaceprozess RT-Prioritt ber einen FIFO-
Sceduler zu geben.
Wie Abb. 7 zeigt, verbessert der RT-Sceduler die
Aufsung ein wenig. Auc das Jitern wirkt nict
mehr so extrem. Allerdings ist es auc unter diesen Bedingungen nict mglic 38kHz zu simulieren. Da bei eingestellten 500s die
Werte von ca. 750s 1900s jitern. 500s konnten unter keinen Umstnden aus dem Userspace erreict werden.
Fazit: Es ist auc mit HR-Timern und RT-Sceduler nict mglic eine zeitkonstante Trgerfrequenz von 38kHz aus dem Userspace
zu simulieren.
[ PROJECT ] irCube
struct timespec ts _ res, ts _ start, ts _ end;
clock _ getres( CLOCK _ MONOTONIC, &ts _ res );
struct timespec ts = { .tv _ sec = 0, .tv _ nsec = NANO };
clock _ gettime( CLOCK _ MONOTONIC, &ts _ start );
nanosleep( &ts, ( struct timespec * ) NULL );
clock _ gettime( CLOCK _ MONOTONIC, &ts _ end );
printf(%lu\n, (ts _ end.tv _ sec ts _ start.tv _ sec) *
1000000000 + ts _ end.tv _ nsec ts _ start.tv _ nsec);
#include <sched.h>
struct sched _ param param;
param.sched _ priority = 99;
if ( sched _ setscheduler(0, SCHED _ FIFO, & param) != 0 ) {
perror( sched _ setscheduler );
exit(EXIT _ FAILURE);
}
Abb. 5: Messung bei theoretischer Ausgabe von 1 kHz
Abb. 7: Zeitmessung mit RT-Scheduler
Abb. 6: Ausfhren der Funktion mit HR-Timern
Listing 3: FIFO-Scheduler, Prioritt 99 (RT)
Listing 2: Funktion zum Testen des GPIO mit HR-Timern
9
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
Nacdem im vorherigen Kapitel bewiesen wurde, dass eine Trgerfrequenz mit 38kHz im Kernelspace synthetisiert werden kann,
mssen nun Applikationen und das Kernelmodul gescrie-
ben werden.
Die Zusammenhnge der einzelnen Programmteile, Module
und Funktionen werden in Abb. 9 scematisc bescrieben.
Von der Kommandozeile soll es
mglic sein ber den Aufruf ir-
send <Gertename> <Kommando-
name> den vollstndigen NEC-
Code fr einen Tastendruc der
Fernbedienung zu synthetisieren.
Anhand von untersciedlicen Konfgurationsdateien sollen
untersciedlice Fernbedienungen bescrieben werden kn-
nen. Diese sind unter /etc/ircube zu fnden und tragen den
Namen Gertename.conf,.
In diesen Konfgurationsdateien wird der zu synthetisie-
rende Code der spezifscen Fernbedienung bescrieben.
Adress-Bits und Kommando-Bits mssenv als 16 Bit Hexade-
zimalcode vorhanden sein (8Bit + 8 invertierte Bits).
Die Bescreibung des Start- und Stop-Bits wird ber die tat-
sclice Puls- und Pausenzeit in Mikrosekunden bescrie-
ben.
Listing 6 zeigt als Beispiel den Inhalt der sat.conf welce meinen Humax-Satreceiver bescreibt.
struct timespec ts _ res, ts _ start, ts _ end;
clock _ getres( CLOCK _ MONOTONIC, &ts _ res );
struct timespec ts = { .tv _ sec = 0, .tv _ nsec = NANO };
clock _ gettime( CLOCK _ MONOTONIC, &ts _ start );
nanosleep( &ts, ( struct timespec * ) NULL );
clock _ gettime( CLOCK _ MONOTONIC, &ts _ end );
printf(%lu\n, (ts _ end.tv _ sec ts _ start.tv _ sec) *
1000000000 + ts _ end.tv _ nsec ts _ start.tv _ nsec);
[ PROJECT ] irCube
Wie aufgezeigt ist es mit den gegebenen Voraussetzungen nict
mglic eine Trgerfrequenz von 38kHz aus dem Userspace zu
simulieren. Deshalb war scnell die Entsceidung getrofen ei-
nen eigenstndigen Treiber im Kernelspace zu screiben. Da bis
zu diesem Zeitpunkt niemand von uns je ein Kernelmodul ge-
scrieben hat, war eine neue Herausforderung geboren.
Das Buc Linux Device Drivers vom OReilly Verlag [3] hat
uns hierbei sehr geholfen. Das Buc ist frei im Web verfgbar,
da es unter der Creative Commons Lizenz verfentlict wurde.
Nac Einarbeitung in das komplexe Thema der Linux-Treiber-
Programmierung konnte das erste Kernelmodul gescrieben
werden.
Das Kernelmodul soll beim Einhngen ins System eine Tr-
gerfrequenz mit einer Pulsweite von 26s erstellen und am
GPIO-Port 11 ausgeben. Dieser Test soll zeigen ob es ber-
haupt mglic ist eine Trgerfrequenz von 38kHz im Gnublin
zu simulieren. Beim Laden des Moduls mit dem Befehl ins-
mod wird in einer while-Scleife 1000mal die Funktion pul-
se_send() aufgerufen. Der bergabeparameter (unsigned int
length) fr diese Funktionen ist 560s, um den High-Pegel des
NEC- Protokolls mit 560s und einer Trgerfrequenz von 38kHz
zu simulieren. Unter Listing 4 ist der Code fr die Funktion
pulse_send() zu sehen.
Diese Funktion durcluf eine while-Scleife so lange bis sie den
bergabewert von 560 erreict hat. In dieser Zeit wird der GPIO-
Port alternierend ein und ausgescaltet.
Abbildung 8 zeigt das erfolgreice Ergebnis unseres ersten Ker-
nelmoduls. Im Kernelspace ist mglic die Trgerfrequenz von
38kHz zeitkonstant zu erzeugen. Somit muss nun ein Kernelmo-
dul gescrieben werden, welces als Treiber funktioniert und an-
hand einer Userspaceapplikation mit der passenden Logik bedient wird um das NEC-Protokoll synthetisieren zu knnen.
Zeitmodulation im Kernelspace
void pulse _ send(unsigned int lenght) {
int f ag;
unsigned long t, act;
t = PULSE / 2;
f ag = 1;
act = 0;
while ( act <= lenght ) {
gpio _ set _ value( GPIO _ GPIO11, f ag );
udelay(t);
act += t;
f ag = !f ag;
}
}
Listing 4: Kernelmodul zur Simulation der Frequenz
Abb. 8: Trgerfrequenz aus Kernelmodul
irCube Software, Kernel- und Userspace
Abb. 9: Schema-
tische Beschrei-
bung der irCube
Software
10
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
Die irsend.c [3] ist die Userspace Kernelspace Scnitstelle. Sie beinhaltet die gesamte
Logik um einen Struct mit den bentigten Werten aus der confg-Datei aufzubauen und an
das Kernelmodul weiterzuleiten.
Ein Teil der irsend.c ist die parser.c und parser.h. Der zu fllende Struct fr den ircode
wird in der parser.h erstellt und somit in irsend.c und parser.c eingebunden.
Der ircstruct ist so konstruiert, dass er die zur Bescreibung des NEC-Protokolls wictigen
Parameter in unsigned Integern speicert, um diese dann als Paket an das Kernelmodul
weiter zu reicen.
Aus der irsend.c wird der Parser aufgerufen. Anhand des Konsolenbefehls irsend sat
MUTE mcte ic kurz die Vorgehensweise der Userspaceapplikation bescreiben.
Die beiden argv-Parameter sat und MUTE werden beim Parseraufruf bermitelt. An-
hand des argv Parameters sat wird die sat.conf unter /etc/ircube gefnet. Diese Datei
wird Zeilenweise nac den bentigten Parametern durcsuct und passende Zeilen tempo-
rr gepufert. Bedingt durc den argv-Parameter MUTE wird nur die Zeile mit dem Inhalt
MUTE ausgelesen und temporr gepufert.
Die gepuferten Zeilen werden nac den bentigten Werten geparst und in den Struct ge-
scrieben. Der fertige Struct wird nun aus der irsend.c mit Hilfe von ioctl() dem Kernel-
space zugnglic gemact.
Das Kernelmodul kopiert via ioctl() den Inhalt des erstellten Structs und moduliert den fer-
tigen Infrarotcode.
Der Quellcode des Kernelmoduls ist im Git-Repository[3] einsehbar, und wird in diesem Ar-
tikel aus Platzgrnden nict gelistet.
Allerdings mcte ic noc kurz auf die Probleme eingehen die
uns bei der Codemodulation immer wieder bescfigt haben
und es eine geraume Zeit verhindert haben den SAT-Receiver
zu muten.
Obwohl der Kerneltreiber fr die Modulation der Trgerfre-
quenz funktioniert, war es nict mglic eine komplete Infra-
rotcodeabfolge zu synthetisieren um den SAT-Receiver tatsc-
lic zu muten.
Dies lag daran, dass der Kernel den Befehl udelay() zwar nict
unterbrecen kann, aber der komplete Code aus untersciedli-
cen pulse_send() und space_send() aufrufen besteht, und der
Sceduler zwiscen den Funktionssprngen die Mglickeit hat
den auszufhrenden Code zu unterbrecen.
Durc das Verhalten des Scedulers wurde der Infrarotcode
zerhact und stellenweise Latenzen von mehreren Millisekun-
den im Code erzeugt, welce den Empfnger daran hinderten den Infrarotcode als Ganzes zu erkennen.
Deshalb wurde mit einem Spinloc gearbeitet, um den Kernel samt Sceduler whrend der Erzeugung
des Infrarotcodes zu blocieren, damit die Codeabfolge nict durc Interrupts zerhact werden kann.
Des Weiteren wird im Struct das Datenwort (32-Bit) in seine Bestandteile Adress-Bit (16 Bit) und Komman-
do-Bit (16 Bit) zerlegt. Der Versuc den Hexadezimalcode in 2 for-Scleifen a 16-Bit zu generieren hat nict
funktioniert, da durc die beiden einzelnen for-Scleifen eine Latenz in der Codegenerierung aufrit,
welce dazu fhrt das der Code nict vom Gert erkannt wird. Deshalb wird im Kernelmodul aus beiden
16 Bit Werten ein einzelner 32 Bit Wert erstellt, der in einer einzelnen for-Scleife ausgegeben wird.
Auc der Durclauf der while-Scleife in der pulse_send() hat pro Durclauf (GPIO ON OFF) ca. 1s
an zustzlicer Latenz erzeugt. Wurde das Start-Bit mit 9000s synthetisiert, so muss die while-Scleife
750-Mal durclaufen werden. Nac
Beendigung war das erzeugte Start-
Bit aber nict 9000s andauernd, son-
dern ca. 9750s. Wie in Listing 5 zu se-
hen, wird dies nun abgefangen, wobei
lenght der Signaldauer entsprict
(z.B. 9000s) und t der halben Perio-
de der Trgerfrequenz (12s).
[ PROJECT ] irCube
sb _ pulse = 9000
sb _ space = 4500
adress = 0x0008
command:
MUTE = 0x18E7
PUP = 0x08F7
PDOWN = 0xF00F
BACK = 0x827D
INFO = 0xC23D
EXIT = 0x6897
VDOWN = 0x02FD
VUP = 0xF807
ONE = 0xC03F
TWO = 0x20DF
THREE = 0xA05F
FOUR = 0x609F
FIVE = 0xE01F
SIX = 0x10EF
SEVEN = 0x906F
EIGHT = 0x50AF
NINE = 0xD02F
ZERO = 0x30CF
POWER = 0x00FF
stop = 560
Listing 6: sat.conf
while ( act <= ( lenght - (lenght / t) ) ) {
gpio _ set _ value( GPIO _ GPIO11, f ag );
udelay( t );
act += t;
f ag = !f ag;
}
Listing 5: Korrektur des systematischen Synthesefehlers
Abb. 10: Komplette Codeabfolge des Infrarotcodes der Mute-
Taste fr den Humax-Receiver
Abb. 11: sat.php
11
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] irCube
Nun war es endlic mglic einen kompleten Infrarotcode zu synthetisieren, der auc vom
Gert empfangen und interpretiert werden kann. Die Sofware funktioniert und es knnen
Infrarotcodes mit NEC-Kodierung synthetisiert werden. Abbildung 10 zeigt die komplete
Codeabfolge des Infrarotcodes der Mute-Taste fr den Humax-Receiver. Mit dem Webserver
lightpd wird im irCube ein eigener Webserver in Betrieb genommen. Via PHP soll der Be-
fehl irsend <confg> <command> generiert werden, sobald man auf den passenden graf-
scen Buton drct.
Alle Grafken wurden von Tobias Theile in Gimp kreiert. Wird der Webserver ber die IP-
Adresse des irCube angesprocen, so ersceint die Startseite mit den konfgurierten Ger-
ten. In Abbildung 11 ist meine aktuelle Konfguration mit der Fernbedienung fr den Hu-
max Sat-Reciever dargestellt.
Anhand des PHP-Codes kann jeder passende irsend-Befehl generiert werden. $_
POST[one_x] wird bentigt um den Buton in X-Rictung auszuwerten. Sobald der Buton
Gedrct wird entsteht hier ein Event welces ausgewertet wird (Listing 7). Anhand des
Events wird der irsend-Befehl zusammengebaut und abgesendet.
sb _ pulse = 9000
sb _ space = 4500
adress = 0x0008
command:
MUTE = 0x18E7
PUP = 0x08F7
PDOWN = 0xF00F
BACK = 0x827D
INFO = 0xC23D
EXIT = 0x6897
VDOWN = 0x02FD
VUP = 0xF807
ONE = 0xC03F
TWO = 0x20DF
THREE = 0xA05F
FOUR = 0x609F
FIVE = 0xE01F
SIX = 0x10EF
SEVEN = 0x906F
EIGHT = 0x50AF
NINE = 0xD02F
ZERO = 0x30CF
POWER = 0x00FF
stop = 560
$remote = sat;
if(isset($ _ POST[power _ x] )) {
$output = <pre>.shell _ exec(irsend $remote POWER).</pre>; echo
$output;
}
Listing 7: HTML/PHP: Beschreibung der SAT-Fernbedienung
Literatur und Links
[1]htp://wiki.gnublin.org/index.php/WLAN
[2]htp://wiki.gnublin.org/index.php/GPIO
[3]htp://lwn.net/Kernel/LDD3/
[4]htps://bitbucet.org/PeterZosh/ircube
PCB-Prototypen in nur einem
Tag mit LPKF ProtoMaten. Noch
einfacher und automatisch
produzieren.
www.lpkf.de/prototyping
Schneller fertig
als gedacht
A
n
z
e
i
g
e Es ist erstaunlic wie genau man Zeit im Kernel aufsen kann. Ein 12s genaues Signal zu
generieren erledigt an sic die Funktion udelay(), jedoc ist der Aufwand weit aus grer
wenn man ein Signal mit einer Laufzeit von knapp 70ms generieren mcte, welces nict
durc den Sceduler zerstcelt werden darf.
Das Sofwarepacet des irCubes ist noc lange nict vollendet. Es fehlt noc ein Mo-
dul welces die Infrartocodes einer Fernbedienung einlesen kann, und diese auto-
matisc in die confg-Datei einbindet. Auc sollte die statisce HTML-Seite der Fern-
bedienung durc einen Prozess dynamisc aus der confg-Datei erstellt werden.
Diese und weitere Features werden wir versucen im Laufe der Zeit zu erweitern, aus Spa
an der Freude. Denn derartige Projekte erweitern den Horizont und das Verstndnis fr
Betriebssysteme immens.
Fazit
12
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
Als ncstes wurde die neue Hardware montiert
und verkabelt (Abb. 2).
1x Gnublin-LAN [1]
1x Module-Extension (Statusanzeige, Taster und
Buzzer) [2]
4x Module-Step (Scritmotor) [3]
Die Hardware der Heizung ist sehr einfac aufgebaut. Im Druckopf ist ein PT1000 integriert. ber einen Spannungsteiler aus ei-
nem Festwiderstand und dem Temperaturabhnigen PT1000 im Druckopf konnte somit sehr einfac durc den ADC-Eingang am
Gnublin der Spannungsabfall ber dem PT1000 bestimmt und dadurc die Temperatur berecnet werden.
Ist die Temperatur zu niedrig, wird ber das Relais auf dem Gnublin-LAN der Stromkreis der Heizung im Druckopf gesclossen.
Ist die Temperatur wider hoc genug, wird das Relais wieder gefnet.
Grundgerst
Hardware
Die Grundlage war bereits Vorhanden. Der 3D-Drucer wurde frher
direkt ber die parallelle Scnitstelle mit dem PC verbunden
und steuerte ber eine spezielle Sofware die Scritmotoren
an. Zuerst wurde die alten Steuerplatinen auf Abb. 1 zu
sehen entfernt.
Abb. 1: Die alte Hardware wurde aus dem 3D-Drucker entfernt
[ PROJECT ] 3D-Drucker mit Gnublin
3D-Drucker mit Gnublin
Manuel Liebert <Manuel.Liebert@hs-augsburg.de>
Software
Die verwendeten Gnublin Module-Step werden ber den I2C
Bus angesteuert. Fr die komfortable Ansteuerung der Module
in der Drucer Sofware wurde zuerst eine Klasse gnublin_mo-
dule_step [4] fr die Gnublin-API erstellt.
Die Sofware fr den 3D-Drucer baut komplet auf die Gnublin-
API auf. Es werden die Objekte der Scritmotor-Klasse erzeugt.
gnublin _ module _ step Motor _ x;
gnublin _ module _ step Motor _ z;
gnublin _ module _ step Motor _ y;
gnublin _ module _ step Motor _ p;
Auf die dann bei der Initialisierung der Motoren und dem rest-
licen Programmablauf zugegrifen wird.
Motor _ x.setVmax(4);
Motor _ x.setIrun(15);
Motor _ x.setMotorParam();
Motor _ x.getFullStatus1(); //before operating
Motor _ x.runInit(); //before Operating
Die Temperatur- und Heizungssteuerung wurde in einem extra
Programm implementiert. Auc das Auslesen der ADC-Werte
wurde duc die API realisiert. Der nacfolgende Code zeigt das
einlesen der Spannung und das Berecnen der Temperatur.
f oat get _ temperature() {
int voltage = 0;
f oat resistance = 0;
f oat temperature = 0;
if((voltage = adc.getVoltage(1)) == -1) {
return -1;
} else {
resistance=(voltage*330)/(3300voltage);
temperature=((resistance/100)1)*259.74;
}
return temperature;
}
Der folgend gezeigte Code wird in einer Endlosscleife ausge-
fhrt und berpf nac jeder Sekunde die Ist-Temperatur und
scaltet evtl. die Heizung ein oder aus. Am Display wird der
Status der Heizung und die Temperatur ausgegeben. Beim ers-
ten Erreicen der gewnscten Temperatur von 240C wird ein
Piep-Ton ausgegeben, um zu signalisieren, dass jetzt gedruct
werden kann.
Listing 1: Objekte Druckerdentfernt
Listing 2: Init Drucker
Listing 3: Berechnung der Temperatur
13
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
Ausblick
[ PROJECT ] 3D-Drucker mit Gnublin
Die Sofware fr die Initialisierung inkl. Einer Initialisie-
rungsfahrt jeder Acse des Drucers und ansclieendem
Anfahren eines bestimmten Punktes ber der Drucf-
ce funktioniert einwandfrei. Leider wurde jedoc der 3D-Drucer aus Zeitmangel nict fertiggestellt. Momentan ist nur ein einfa-
ces Programm vorhanden, welces kleine Trme drucen kann (siehe Abb. 3). Ein ncstes Projekt in Zukunf knnte sein, einen G-
Code Interpreter fr das Gnublin zu implementieren, wodurc dann 3D-Formen aus einer G-Code Datei gedruct werden knnen.
Literatur
[1]htp://wiki.gnublin.org/index.php/GNUBLIN-LAN
[2]htp://wiki.gnublin.org/index.php/GNUBLIN_Module-Extension
[3]htp://wiki.gnublin.org/index.php/GNUBLIN_Module-Step
[4]htp://gnublin.org/gnublin-api/doc/html_de/classgnublin__module__step.html
temperature = get _ temperature();
if((temperature < 900) & (temperature > -100))
{
sprintf(tempchar,Temp: %.2f,temperature);
display.clear();
display.controlDisplay(1, 0, 0);
display.print(tempchar);
if(temperature < 230) {
gpio.digitalWrite(18, HIGH);
heating = 1;
} else {
if(temperature > 240) {
if(initial) {
initial = 0;
system(gnublin-pwm -v 0x400);
sleep(1);
system(gnublin-pwm -v 0x000);
}
gpio.digitalWrite(18, LOW);
heating=0;
}
}
if(heating) {
display.print((char*)Heizung: ein, 2);
} else {
display.print((char*)Heizung: aus, 2);
}
}
sleep(1);
Abb. 2: Die Hardware montiert und verkabelt
Abb. 3: Das Druckergebnis
Bachelorarbeit
Aktuell wird im Rahmen einer Bacelorarbeit ein fertiges Sofwarepaket fr den Drucer gescnrt. Per Konsole oder Browser kann
man G-Code Dateien direkt ber Linux auf Gnublin ausdrucen.
14
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
Abb. 1: Aufbau des kompletten Systems
[ PROJECT ] NFC mit Gnublin
NFC mit Gnublin
Christopher Proske <christopher.proske@hs-augsburg.de>
Das Gnublin Board ist
ein sehr kompaktes und
leistungsstarkes Ent-
wiclungsboard der Fir-
ma embedded projects
GmbH. Es ist mit einem
ARM9 mit 180 MHz und
32 MB RAM ausgestatet.
Ebenfalls ist ein USB zu
seriell Adapter mit einem
miniUSB Anscluss ver-
baut. Als Hauptspeicer
wird eine MicroSDHC
Karte verwendet. Als weitere Scnitstellen sind GPIO, I2C, SPI, UART
und eine miniUSB Device oder Host Scnitstelle welce auc OTG ver-
wendet werden kann verbaut.
Als Ethernet-Scnitstelle wurde ein einfacer und preiswerter No-
Name Adapter verwendet (Abb. 2). Der Adapter hat einen USB 1.1 Ein-
gang und einen RJ-45
Ethernet Ausgang. Der Stic beherrsct den IEEE802.3 Ethernet & Fast Ethernet mit
10/100 MBit/s. Im Stic ist der dm9601 Chipsatz verbaut.
Der NFC-Stic (Abb. 3) kann als Reader und Writer fr NFC Tags verwendet wer-
den. Er untersttzt den NFC P2P Modus zum Datenaustausc zwiscen Gerten.
Der Stic wird von der Firma Sensor ID hergestellt und ist mit dem NXP PN533
Chipsatz ausgerstet und dect damit die volle Funkionsbandbreite des NFC
Standrads ab. Der Stic wird vollstndiG von der LibNFC untersttzt.
Ziel war es, dass das System einen NFC-Tag einlesen und mit der verknpften Information einen GPIO-Port steuern. Die Logdaten und
die Verwaltung der IDs sollen ber ein Webinterface erfolgen. Grundlage hierfr war das Gnublin Board, ein Ethernet zu USB-Adapter
und ein NFC-Stick wie es in Abbildung 1 zu sehen ist. Ebenfalls verwendet wurden NFC-Tags, ein USB zu miniUSB Adapter und ein
USB-Hub. Mit den Komponenten soll die LED des Boards ber den NFC-Stick getoggelt werden. Zum schreiben der IDs wird eine
Weboberche mit CGI verwendet. Ebenso fr das lesen der IDs und der Logdaten.
Hardware
Abb. 3: Der NFC-Stick
Abb. 2: Der Ethernet-to-USB Adapter
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
15
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
Zur Durcfhrung des Projekts muss
der USB-Hub mit dem Board verbunden
werden, hierfr ist ein Adapter von mi-
niUSB auf UBS ntig. Am Hub werden
der Ethernet-Stic und der NFC-Stic
eingestect. Um den Ethernet-Stic mit
dem dm9601 Chipsatz in Betrieb zu neh-
men muss das Kernelmodul angepasst
werden. Fr den Betrieb des NFC-Stic
muss die LibNFC installiert werden. Als
Betriebssystem wird eine Debian Dis-
tribution mit einem 2.6.33 Linux-Kernel
verwendet. Als Bootloader wird der
Apex Bootloader verwendet.
Durchfhrung
Bereitstellen der Entwicklungsumgebung
Listing 1: Inhalt der der /opt/eldk-5.2.1/set.sh
Da der Hersteller des dm9601 Chips Vernderungen bezglic
der USB-Lizenzen vorgenommen hat, kann es beim Betrieb zu
Problemen kommen. Diese knnen whrend des Betriebs be-
hoben werden. Um dies zu bewerkstelligen muss zuncst die
ID des verwendeten Stics bekannt sein. Die ID kann mit dem
dmesg Kommando heraus gefunden werden, welces nac dem
ersten Einstecen des Stics erfolgen muss. Hierbei ist noc die
Option |tail -20 empfehlenswert.
dmesg |tail -20
usb2-2: New USB device found,
<strong>idVendor</strong>=XXXX,<strong>
idProduct</strong>=XXXX
Die wictigen Informationen sind in den XXXX bei idVendor
und idProduct enthalten. Sobald diese Informationen verfgbar
sind kann ein fr das Gnublin Board passender Kernel herun-
tergeladen werden. Hierfr steht ein git Repository bereit.
git clone https://github.com/embeddedprojects/
gnublin-lpc3131-2.6.33.git
cd gnublin-lpc3131-2.6.33/linux-2.6.33-lpc313x
In diesem Repository ist bereits eine angepasste Makestruktur
vorhanden. Mit dieser knnen der Kernel und die passenden
Module scnell und einfac erzeugt werden.
make gnublin _ defconfg
make menuconfg

In der menuconfg muss das dm9601 Modul eingebunden wer-
den, da es in der Standardkonfguration nict enthalten ist.
Wenn dies passiert ist muss die dm9601.c Datei um die oben
ermitelten Daten erweitert werden. Die Datei befndet sic im
Ordner ../driver/net/usb und muss mit einem Texteditor um fol-
gende Passage erweitert werden.
{
USB _ DEVICE(<strong>0xXXXX</
strong>,<strong>0xXXXX</strong>),
.driver _ info = (unsigned long)&amp;dm9601 _
info,
}
Installation des dm9601
[ PROJECT ] NFC mit Gnublin
Um Sofware fr das Gnublin Board auf dem Host-Recner kompilieren zu knnen muss eine Toolcain installiert werden. Hierfr
habe ic die von ELDK verwendet. Als ersten Scrit mssen die ntigen Daten heruntergeladen und endpact werden. Dazu wec-
selt man in einen beliebigen Ordner und fhrt folgende Befehle aus:
wget http://gnublin.org/downloads/eldk-eglibc-i686-arm-toolchain-qte-5.2.1.tar.bz2
sudo tar xjf eldk-eglibc-u686-arm-toolchain-qte-5.2.1.tar.bz2 -C /
Ansclieend wird im Ordner /opt/eldk-5.2.1 ein Skript erstellt.
cd /opt/eldk-5.2.1
sudo vim set.sh
Stat vim kann auc jeder andere Texteditor verwendet werden. Die Datei set.sh muss folgenden Inhalt haben:
P1=/opt/eldk-5.2.1/armv5te/sysroots/i686-eldk-linux/usr/bin/armv5te-linux-gnueabi/
P2=/opt/eldk-5.2.1/armv5te/sysroots/i686-eldk-linux/bin/armv5te-linux-gnueabi/
export ARCH=arm
export CROSS _ COMPILE=arm-linux-gnueabi-
export PATH=$P1:$P2:$PAT
Das Skript muss absclieend noc gesourced werden:
. /opt/eldk-5.2.1/set.sh
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
16
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
Fr die Benutzeroberfce (Abb. 4) wurden ein Textfeld und drei
Butons implementiert. Das Textfeld dient zur Eingabe der IDs
und die Butons sind jeweils zum senden der ID, zum betracten
der eingetragenen IDs und zum betracten der Logdatei. Fr das
Screiben der IDs wurde die Methode pos verwendet und zum
lesen jeweils die Methode get.
Fr die drei bescriebenen Funktionen mussten drei Anwendun-
gen implementiert werden. Dies wurde mit der Programmierspra-
ce C durcgefhrt. Fr die put Anwendung musste eine Funk-
tion fr die Umrecnung der eingegebenen Zeicen verwendet
werden. Dieser ist in der Funktion unencode() enthalten [1]. Der
main Teil umfasste das Lesen der eingegebenen Daten und das
fnen des angegebenen Files und das ansclieende Screiben der gelesenen
Daten. Die put Anwendungen sind einfacer strukturiert und umfassen ledig-
lic das fnen und Ausgeben der Datei (Abb. 5). Die Anwendungen mssen mit
gcc mit der Dateiendung .cgi kompiliert werden und in den Ordner /var/www/
cgi-bin kopiert werden. Absclieend muss die put Anwendung noc root-Rec-
te erhalten.
chmod u+s print.cgi
[ PROJECT ] NFC mit Gnublin
Umsetzung des CGI Servers
Hierbei mssen die XXXX durc die ermitelten Zeicen ersetzt
werden. Danac knnen der Kernel und die Module kompiliert
werden.
make zImage
make modules
make modules _ install
Wenn das erfolgreic abgesclossen ist kann der neue Kernel
und die Module auf die SD-Karte bertragen werden. Ansclie-
end muss das System gebootet werden und der Stic kann an-
gestect werden. Um diesen nun in Betrieb zu nehmen muss nur
das Modul eingebunden werden.
modprobe dm9601
Nun kann die Ethernetscnitstelle konfguriert werden. Fr die
Zuweisung der IP mit DHCP wird der dhclient bentigt.
dhclient eth0
Eine manuelle IP kann mit ifconifg zugewiesen werden.
ifconfg eth0 192.168.0.1 netmask 255.255.255.0 up
Um den NFC-Stic ansprecen zu knnen muss die LibNFC ins-
talliert werden. Hierfr mssen zwei weitere Librarys Installiert
werden. LibUSB und LibPSCS. Dies kann mit apt-get erfolgen.
apt-get install libusb-dev libpcsclite-dev
Ebenfalls wird die pkg-confg bentigt. Diese kann auc mit apt-
get installiert werden.
apt-get install pkg-confg
Nun kann die LibNFC installiert werden. Diese steht zum
Download bereit.
wget http://libnfc.googlecode.com/fles/libnfc-
1.7.0-rc7.tar.gz
tar -xvzf libnfc-1.7.0-rc7.tar.gz
cd libnfc-1.7.0-rc7
In diesem Ordner ist alles was fr die Installation bentigt wird.
Die Installation erfolgt ber ./confgure und make.
./confgure
make
make install
Absclieend muss noc der Pfad zur Lib dem System berge-
ben werden.
sh -c echo /usr/local/lib > /etc/ld.so.
conf.d/usr-local-lib.conf
Die Installation kann einfac getestet werden, indem man eines
der mit installierten Programme verwendet.
nfc-list
Installation der LibNFC
Abb. 4: Benutzeroberche des CGI Servers
Abb. 5: Anwendung zum Lesen der Logdatei
17
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] NFC mit Gnublin
Das Startskript
Um das Board mit der rictigen Konfguration zu starten
musste ein Startskript (Listing 2) verwendet werden. Dieses
wurde in die Runlevel integriert.
Das Skript umfasst das Starten der NFC-Anwendung, das
Laden des dm9601 Moduls und das konfgurieren der IP-
Adresse. Die IP-Adresse kann statisc oder per DHCP-Ser-
ver vergeben werden. Um nun das Skript zu nutzen muss es
ausfhrbar gemact und verlinkt werden.
update-rc.d name _ of _ skript defaults
Danac wird es beim booten verwendet.
Programmierung des C Code
Um die gewnscte Funktionalitt der
Steuerung der LED mit Authentifzie-
rung ber NFC zu realisieren mssen
primr zwei Funktionen implementiert
werden. Zum einen die Steuerung der
LED und zum anderen das Auslesen des
NFC Tags und das abgleicen mit einer
Liste. Ebenfalls wurde eine Log Funkti-
on integriert. Die Initialisierung der NFC
Hardware wird in der main() Funktion
bernommen. Die Ausgaben mit printf()
wurden fr den Betrieb im Hintergrund
auskommentiert. Fr das Logging wurde
eine Textdatei angelegt und das aktuelle
Datum und die ID des gelesenen Tags in
die Datei gescrieben. Um die gelesene
ID zu vergleicen muss zuncst eine
Datei mit den eingetragenen IDs gef-
net werden. Diese Datei wird byteweise
eingelesen und mit der NFC-ID vergli-
cen. Wenn alle Bytes bereinstimmen
wird eine 1 zurcgegeben. Das Tog-
geln der LED ist mit C vergleicsweise
komplex. Hierfr muss ein Pointer auf
den Memory-Ordner generiert werden.
Dieser Bereic wird ansclieend in den
Arbeitsspeicer gemapt, wo die einzel-
nen Register ausgelesen und mit Bitope-
rationen manipuliert werden knnen. Zu
Ausgabe der ID des gelesenen Tags wur-
de zustzlic noc eine Funktion imple-
mentiert. Diese durcluf das gelesene
Array und gibt es zeicenweise aus.
Um das gegebene Programm mit gcc
zu kompilieren muss zuncst ermitelt
werden wo die nfc.h Datei liegt. Auf dem
von mir verwendeten System befand sic
sic im Ordner /include/nfc/. Dieser Pfad
muss dem Linker bergeben werden.
Ebenfalls muss die libnfc verwendet
werden.
gcc -o nfc foo.c -I /include
-lnfc
Mit der aufgefhrten Konfguration
muss im Ordner /etc der Ordner nfc
angelegt werden in welcem auc die
Anwendung nfc liegen sollte. Die CGI-
Anwendungen mssen im Ordner/var/
www/cgi-bin liegen. Ergnzend knnen
im Ordner /etc/nfc die Dateien log.txt
und id.txt angelegt werden. Dieses kann
auc whrend des Betriebs von den An-
wendungen bernommen werden. In die
Datei id.txt knnten von hand IDs einge-
tragen werden, dieses sollte aber von der
CGI Anwendung durcgefhrt werden.
Alle Dateien zum Projekt sind hier [1] zu
fnden.
#! /bin/sh
echo Starting autstartskript
./etc/nfc/nfc &
echo NFC started
modprobe dm9601
echo dm9601 loaded
#for use of static IP
ifconfg eth0 192.168.0.2 netmask 255.255.255.0 up
echo IP set to 192.168.0.2
#for use of DHCP
#dhclient eth0
#ip addr show eth0
Projektstatus und Ausblick
Im aktuellen Status kann das System einen NFC-Tag einlesen
und mit der verknpfen Information einen GPIO-Port steu-
ern. Die Logdaten und die Verwaltung der IDs erfolgt ber
ein Webinterface. Das Board bootet komplet selbststndig.
Fr zuknfige Erweiterungen knnte die Screibfunktion des Stics verwendet werden. Ebenso kann der Stic einen Tag emulieren
was Mglickeiten im Bereic der IT-Security erfnet. Eine weitere interessante Anwendung wre die Datenbertragung ber P2P
zu anderen NFC Gerten wie einem Handy.
Links
[1]htps://elk.informatik.f-augsburg.de/dav/elinux-13-bericte/Proske/Berict/
Listing 2: Das Startskript
18
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] C++ API fr Gnublin mit Python Wrapper
C++ API fr Gnublin mit Python Wrapper
Simon Kunzmann <Simon.Kunzmann@hs-augsburg.de>
Eine meiner Aufgaben war es eine API fr
den I2C Bus zu entwiclen. Mit der I2C API
ist es sehr einfac auf die I2C Scnitstelle zu
zugreifen wie man im folgenden Listing 1
sehen kann.
Die I2C API stellt folgende Methoden bereit:
setAddress
getAddress
setDevicefle
send
receive
getErrorMessage
fail
Ziel war es eine API zu programmieren um Einsteigern wie auch Fortgeschrittenen ein einfaches Interface fr die einfache Verwendung
der verfgbaren Schnittstellen bereitzustellen. Im Laufe der Entwicklung entsand unter anderem auch ein greres Makele um die API,
gnublin-tools und die Python Module komfortabel erstellen zu knnen. Die API ist momentan nicht nur auf dem Gnublin sondern auch
auf dem Raspberry Pi lauffhig. Den aktuellen Stand der API kann man auf Github [1] einsehen.
I2C
#include gnublin.h
int main()
{
gnublin _ i2c i2c;
i2c.setAddress(0x42);
unsigned char buffer[8];
unsigned char RxBuf[8];
buffer[0]=0x22;
i2c.send(buffer,5);
i2c.receive(RxBuf, 3);
//sende 2 byte aus buffer an Register- Adresse 0x12
i2c.send(0x12, buffer, 2);
// Lese 3 bytes aus Adresse 0x23, speichere sie in RxBuf
i2c.receive(0x23, RxBuf, 3);
}
Funktion
Die I2C API fnet das i2c Devicefle mit dem
Parameter O_RDRW fr den Screib/Lese-
zugrif. Das Devicefle auf welces zugegrif-
fen wird, kann ber die API auc gendert
werden. Nac dem erfolgreicen fnen der
Gertedatei wird auf den Slave mit der ange-
gebenen Slave-Adresse zugegrifen. Sclgt
dies fehl, wird eine Fehlermeldung generiert.
Siehe nacfolgendes Listing 2. Nun kann man
mit read() bzw. write() auf den Dateideskrip-
tor zugreifen und somit von einem Slave le-
sen, bzw an ihn screiben.
Beim Errorhandling haben wir uns darauf
geeinigt, es mglicst simpel zu halten. Die
API soll ja auc fr Anfnger verstndlic
und nacvollziehbar sein. Deswegen wurde
auf ein Try-Catc Konstrukt verzictet. Jede
Scnitstellenklasse (gpio, i2c, spi, etc.) hat
eine fail und eine getErrorMessage Methode.
Erstere gibt immer das ErrorFlag zurc, ist
dieses true ist ein Fehler aufgetreten. GetErrorMessage gibt die letzte Fehlermeldung als String zurc, den man sic dann aus-
geben lassen kann.
Im Laufe der Entwiclung der API ist ein rect groes Makefle entstanden. Dieses Makefle fgt nac einem einfacen Aufruf von
make alle Sourcecodes zusammen in eine gnublin.h und gnublin.cpp Datei. Es werden auerdem noc ein shared object erstellt
und die gnublin-tools kompiliert (rekursiver Aufruf von Make). Ein make install bewirkt, dass die gnublin-tools kompiliert werden,
falls das noc nict passiert ist, und kopiert die binaries nac /usr/local/bin/. Die Tools sind dann einfac per Kommandozeile auf-
rufar.
int gnublin _ i2c::open _ fd() {
error _ fag = false;
if (fd) {
close _ fd();
fd = 0;
}
if (slave _ address == -1)
return errorMsg(ERROR slave address is not set\n);
if ((fd = open(devicefle.c _ str(), O _ RDWR)) < 0)
return errorMsg(ERROR opening: + devicefle + \n);
if (ioctl(fd, I2C _ SLAVE, slave _ address) < 0)
return errorMsg(ERROR address: +
numberToString(slave _ address) + \ n); return 0;
}
Listing 1: Beispiel i2c Ansteuerung
Listing 2: i2c ffnen der Gertedatei
19
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] C++ API fr Gnublin mit Python Wrapper
#Crosscompiler for Gnublin
CXX := arm-linux-gnueabi-g++
#Crosscompiler for Raspberry Pi:
#CXX := arm-linux-gnueabihf-g++
#Compiler for onboard compilation:
#CXX := g++
#Compilerfags:
CXXFLAGS = -Wall
#Architecture for gnublin:
Architecture = armel
#Architecture for raspberryPi and beaglebone black:
#Architecture = armhf
#Defne which Board you want:
BOARD := GNUBLIN
#BOARD := RASPBERRY _ PI
#BOARD := BEAGLEBONE _ BLACK
#DO NOT EDIT BEYOND THIS LINE!
Empfangen von Daten ber die Funkschnittstelle
Die API ist auc auf dem RaspberryPi laufhigt, wie oben scon
erwhnt. Das ganze kann man auc im Wiki Artikel Tutorial
API RaspberryPi [3] naclesen. Das RaspberryPi muss gestartet
sein und eine Verbindung in das Internet haben. Mit git kann
man jetzt das Repository klonen.
pi@raspberrypi $ git clone https://github.
com/embeddedprojects/gnublin-api.git
Wecselt in das Verzeicnis:
pi@raspberrypi $ cd gnublin-api
Bevor man die API bersetzen kann, muss man angeben, das
die API auf einem RaspbberryPi laufen soll. Dazu ndert man in
der Datei API-confg.mk ab, wie in 1.3.2 bescrieben. Nun kann
man die API bersetzen und die Programme und Beispiele in-
stallieren:
pi@raspberrypi $ make && sudo make install
Damit die API auc funktioniert, mssen folgende Treiber ge-
laden werden:
pi@raspberrypi $ sudo modprobe spi-bcm2708
pi@raspberrypi $ sudo modprobe i2c-bcm2708
pi@raspberrypi $ sudo modprobe i2c-dev
Diese befnden sic in der aktuellen RaspberryPi Distribution.
Optional kann man die Treiber fest in die Datei /etc/modules
eintragen, dann werden die Treiber Module automatisc beim
booten geladen.
spi-bcm2708
i2c-bcm2708
i2c-dev
Hat man jetzt bereits eine Erweiterungsplatine angesclossen,
kann man sofort die kleinen Tools testen.
Wird make mit dem Parameter python-module aufge-
rufen, wird mit Hilfe von swig2.0 aus der C++ API ein
Python Modul gebaut, was die API dann per Python
zugnglic mact.
Mit make release werden die Gnublin-Tools zu einem
Debian Pacet gebaut, dass spter dann ganz einfac
per dpkg -i installiert werden kann. Auerdem wird
auc das Python Modul erstellt.
make clean
lsct alle nict bentigten Dateien und Objekte.
Das Makefle includiert die Datei API-confg.mk (Lis-
ting 3). Diese Datei ist fr den Benutzer gedact, um
hier Einstellungen vornehmen zu knnen (z.b. Compi-
ler einstellen, fr welces Board soll compiliert werden
etc.).
In den Zeilen 1-6 werden die Compiler aufgefhrt. Der
jeweils bentigte wird einfac einkommentiert, alle
anderen auskommentiert. Wer mcte kann die Com-
pilerfags in Zeile 9 noc erweitern. In Zeile 11 bis 14 le-
gen sie die Arcitektur fest, was fr den Bau des Debian
Pakets von bedeutung ist. Am Ende der Datei kann man
noc einstellen, welces Board man verwendet. Momentan werden von unserer API das Gnublin-Board, das RaspberryPi und das
Beaglebone Blac untersttzt. Auc hier gilt: Das bentigte einkommentieren und den rest auskomentieren.
int gnublin _ i2c::open _ fd() {
error _ fag = false;
if (fd) {
close _ fd();
fd = 0;
}
if (slave _ address == -1)
return errorMsg(ERROR slave address is not set\n);
if ((fd = open(devicefle.c _ str(), O _ RDWR)) < 0)
return errorMsg(ERROR opening: + devicefle + \n);
if (ioctl(fd, I2C _ SLAVE, slave _ address) < 0)
return errorMsg(ERROR address: +
numberToString(slave _ address) + \ n); return 0;
}
Listing 3: Inhalt der Datei API-cong.mk
Zuncst habe ic versuct mit SIP die C++
API zu wrappen. Die Dokumentation war
allerdings nict sehr verstndlic und es
gab Probleme mit den C++ strings. Deshalb
habe ic mic dann nac einer Alternative
umgesehen und bin auf swig gestoen. Um
die API in Python zu berfhren habe ic
sclussendlic swig [4] verwendet. Man
brauct dafr nur eine kleine confgDatei.
Diese Datei heit in unserem Falle gnublin.i
und sieht wie folgt aus (Listing 4).
Mit Zeile 1 wird festgelegt wie das Python
Modul spter heien wird. Zeile 2 inclu-
diert eine interface Datei, damit man die
C++ Strings verwenden kann. Zeile 6 ist n-
tig, da in der API Board-spezifscer Code
vorhanden ist, der ohne das Defne falsc
kompiliert wird.
Hat man nun die gnublin.i Datei sind nur
noc folgende Arbeitsscrite (Listing 5) n-
tig.
API in Python verfgbar machen
%module gnublin
%include std _ string.i
%{
#include gnublin.h
%}
#defne BOARD GNUBLIN
%include gnublin.h
Listing 4: swig-Datei
20
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] C++ API fr Gnublin mit Python Wrapper
swig2.0 -c++ -python gnublin.i
arm-linux-gnueabi-g++ -DBOARD=GNUBLIN -fpic -I python2.6/ -c
gnublin _ wrap. cxx
arm-linux-gnueabi-g++ -DBOARD=GNUBLIN -fpic -c gnublin.cpp
arm-linux-gnueabi-g++ --shared -o _ gnublin.so gnublin _
wrap.o gnublin.o
Listing 5: Kommandos fr swig
[1]htps://github.com/embeddedprojects/gnublin-api
[2]htp://www.nxp.com/documents/data_sheet/LM75A.pdf
[3]htp://wiki.gnublin.org/index.php/Tutorial_API_RaspberryPi
[4]htp://www.swig.org/
Listing 6: ledblink.py
Links und Literatur
Lauterbachstrae 70
Fax.: +49 8721/9624-50
Tel.: +49 8721/9624-0
info@pse-elektronik.de
D-84307 Eggenfelden
Muster - und Serienfertigung
Zulassungen
Entwicklung
Prototypen
www.pse-elektronik.de
Wir realisieren Ihre Idee in analoger und
digitaler Schaltungstechnik. Passend zur
Applikation wird der Controller gewhlt.
Eingesetzt wurden u. a. diese Modelle:
Individuelle Entwicklung
ARM9
RISC-Controller
EFM 32 Gecko
STM32F
Energy Micro STR912FAX
Atmega32
PIC16FX
PIC18FX
In vielfltigen Applikationen mit
unterschiedlichsten Funktionen werden
unsere Baugruppen eingesetzt:
- Honeywell sensing&control HCH
Integration von Sensoren
Nach ihren Anforderungen integrieren
wir Sensoren fr Temperatur, Feuchte,
Luftqualitt, Winkel, Durchfluss, ...
mit unterschiedlichsten Messprinzipien.
- Sensirion, CMOSens
- Thermoelement, Pt100, Pt1000, KTY
- AppliedSensor, Gas (MEMS MOS)
- NVE, Giant Magnetoresistance (GMR)
Cortex TM
Anwendungsbeispiele
Lftungssteuerung mit User-Interface
Ferndiagnose per GSM / GPRS
Klimasteuerung fr Fahrzeuge
Ultraschall-Anwendungen
Monitoring einer Maschine mit Display
Infrarot Receiver/Transmitter
digitale Regelung mit DSP
GPS Ortung
CAN-Bus
A
n
z
e
i
g
e
Zeile 1 erzeugt die gnublin_warp.cxx, die
in Zeile 2 dann kompiliert wird. Wictig
ist auc, dass man in Zeile 2 die rictige
Python Version angibt, unter der das Mo-
dul spter laufen soll. Zum scluss wvird
dann noc eine shared library erstellt.
Wictig ist hier der _ vor gnublin.so. Es be-
fnden sic nun 2 Dateien in dem Ordner,
einmal eine gnublin.py und die _gnublin.
so. Diese beiden Dateien bertragen wir
dann auf das Gnublin.
Auf dem Gnublin wecselt man nun in
den Ordner, wo die beiden Dateien liegen
und startet die Python Konsole mit dem
Aufruf:
python
als ncstes importieren wir das Python-
Modul:
>>> import gnublin
wollen wir nun als Beispiel unsere GPIOs
in python ansteuern, mssen wir zuncst
ein GPIO Objekt erstellen:
>>> gpio = gnublin.gnublin _
gpio()
Ist das Objekt erstellt, kann man wie aus
der C++ API gewohnt auf die Methoden
der Klasse zugreifen:
Beispiel LED an/ausscalten:
>>> gpio.pinMode(3,out)
1
>>> gpio.digitalWrite(3,1)
1
Dieses Programm lsst die LED auf dem
Gnublin blinken. Dazu legen wir eine Da-
tei namens ledblink.py an und screiben
den Inhalt von Listing 6 in die Datei.
import gnublin
import time
gpio = gnublin.gnublin _
gpio()
gpio.pinMode(3,out)
while True:
gpio.digitalWrite(3,1)
time.sleep(0.5)
gpio.digitalWrite(3,0)
time.sleep(0.5)
Das Programm wird wie folgt ausgefhrt:
root@gnublin: # python LED-
blink.py
Wollen wir das Programm beenden, dr-
cen wir STRG + C
21
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Interrupt mehrerer GPIOs
Interrupt mehrerer GPIOs
Manuel Liebert <Manuel.Liebert@hs-augsburg.de>
Um das andauernde Abfragen der GPIOs zu
vermeiden wurde die Funktion Poll benutzt.
Dadurc kann zum einen der Pegelwecsel
des GPIO ohne grere Verzgerungen ver-
arbeitet werden und zum anderen wird wert-
volle Recenzeit auf dem System gespart.
Im Programm Code werden zuerst die GPI-
Os als Eingang exportiert, dies wurde mit
Hilfe der API erledigt. Als ncstes werden
in den edge Dateien im GPIO Sysfs der ge-
wnste Trigger Typ gesetzt. Die mglicen
Typen sind steigend(rising), fallend(falling)
oder beides(both). Nacdem die Filestreams
gefnet und das Event gesetzt wurden muss
ein Lesezugrif erfolgen. Danac kann die Poll
Funktion aufgerufen werden und die Eventbe-
handlung ausgefhrt werden.
In dem gerade gezeigten Quellcode Ausscnit
(Listing 1) ist ein Mutex loc zu sehen. Dieser ist
ntig, weil in einem 2. Thread des Programms
die Anzahl der erfassten Pegelwecsel der ein-
zelnen GPIOs zeitgleic verarbeitet und am
Terminal ausgegeben werden.Defniert wird
die Mutex Variable in der ersten Zeile. Erstellt
und aufgerufen werden die beiden Threads im
Listing 2.
Der komplete Quellcode ist im Gnublin-Wiki [1] zu fn-
den.
Implementierung
Die Gnublin-API bietet unter anderem einen komfortablen Zugriff auf die auf dem Board bendlichen General Purpose Input/Outputs
(GPIOs). Dieses Interface bringt aber noch keine Untersttzung von Interrupts mit sich, deshalb wurde der Versuch gestartet, mehrere
GPIOs per Interrupt im Userspace zu erfassen.
Listing 1: Mutex denieren, Poll starten und Eventbehandlung
pthread _ mutex _ t region _ mutex = PTHREAD _ MUTEX _ INITIALIZER;
bytes _ read = read(fds[1].fd, buf, 1);
bytes _ read = read(fds[2].fd, buf, 1);
ret = poll(fds, 3, -1);
if(ret > 0) { // An event on one of the fds has occurred.
for(i = 0; i < 3; i++) {
if(fds[i].revents & POLLPRI) {
//lock rad
pthread _ mutex _ lock(&region _ mutex);
rad[i]++;
//unlock rad
pthread _ mutex _ unlock(&region _ mutex);
}
}
}
Listing 2: Threads
pthread _ t interrupt _ thread, printer _ thread;
//create threads
pthread _ create(&interrupt _ thread, NULL, interrupt, NULL);
pthread _ create(&printer _ thread, NULL, printer, NULL); //wait
until the threads are terminated....
pthread _ join(interrupt _ thread, NULL);
pthread _ join(printer _ thread, NULL);
Ein zweites Gnublin wurde als einfacer Frequenzgene-
rator verwendet und ber 4 Leitungen (GPIOs und GND)
mit dem Mess-Gnublin verbunden (Abb. 1). Bei dem Test-
signal erzeugenden Gert wurde mithilfe der Gnublin-API
mitels digitalWrite() an den drei Ausgngen die Rect-
ecspannung er-
zeugt, welce
in Abbildung 2
zu sehen ist. Die
Frequenz lag bei
jedem GPIO bei
ca. 100Hz. Die
Fl a nke nwe c h-
sel wurden zuverlssig aufgenommen und
ausgegeben. Die Gescwindigkeit von 100Hz
ist zwar nict all zu hoc, sollte aber fr eini-
ge Anwendungen ausreicen. Um scnellere
Pegelwecsel zu erreicen knnte man zum
Beispiel mit direktem Zugrif auf den Speicer
arbeiten (mem/mmap).
Test mit 2 Gnublins
Abb. 2: Erzeugte Rechteckspannung
[1]Gnublin-Wiki: htp://goo.gl/tdf933
Literatur
Abb. 1: Aufbau der zwei Gnublins
22
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
Lesen Sie die neue Elektor ein Jahr lang
in der ultimativen GOLD-Mitgliedschaft und
protieren Sie von allen Premium-Vorteilen!
Jetzt Mitglied werden unter www.elektor.de/mitglied!
UMWELTSCHONEND GNSTIG GREEN
Mchten Sie Elektor lieber im elektronischen Format beziehen?
Dann ist die neue GREEN-Mitgliedschaft ideal fr Sie!
Die GREEN-Mitgliedschaft bietet (abgesehen von den 10 Print-
ausgaben) alle Leistungen und Vorteile der GOLD-Mitgliedschaft.

Die Elektor-GOLD-Jahresmitgliedschaft
bietet Ihnen folgende Leistungen/Vorteile:
Sie erhalten 10 Elektor-Hefte (8 Einzelhefte + 2 Doppel-
ausgaben Januar/Februar und Juli/August) pnktlich
und zuverlssig frei Haus.
Extra: Jedes Heft steht Ihnen auerdem als PDF zum
sofortigen Download unter www.elektor-magazine.de
(fr PC/Notebook) oder via App (fr Tablet) bereit.
Neu & Exklusiv: Sie erhalten alle 2 Wochen per E-Mail
ein neues Extra-Schaltungsprojekt (frisch aus dem
Elektor-Labor).
Neu & Exklusiv: Wir gewhren Ihnen bei jeder Online-
Bestellung 10% Rabatt auf alle unsere Webshop-
Produkte dauerhaft!
Neu & Exklusiv: Der Online-Zugang zum neuen Commu-
nity-Bereich www.elektor-labs.com bietet Ihnen zustz-
liche Bauprojekte und Schaltungsideen.
Extra: Die neue Elektor-Jahrgangs-DVD (Wert: 27,50 ) ist
bereits im Mitgliedsbeitrag inbegriffen. Diese DVD schicken
wir Ihnen sofort nach Erscheinen automatisch zu.
Extra: Top-Wunschprmie (im Wert von 30 ) gibts als
Dankeschn GRATIS obendrauf!
Adv 210x297 Green-Gold membership DE 130118.indd 1 05-02-13 13:58
23
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Jgermeister-Uhr
Jgermeister-Uhr
Ansteuerung einer LED-Matrix als Display mit Webinterface
Peter Fink <Peter.Fink@hs-augsburg.de>
Hardware-Entwicklung und Software
des Atmega48
In
diesem Kapitel
geht es um den Hardwareaufau, das
bertragungsprotokoll und die Sofware
auf dem Atmega48. Das Display - wie es
in Abbildung 1 zu sehen ist - besteht aus
7x29 quadratiscen, 0,5mm groen, gel-
ben LEDs, die einem Frame aus 5 Platen
2mm Edelstahlblec stecen. Auf der
Rcseite sind die LEDs auf einer Loc-
rasterplatine elektrisc gem Scaltplan
verbunden. Die Blece waren bei Pro-
jektbeginn bereits vorhanden und wur-
den zuerst mit einem CAD-Programm
gezeicnet und ansclieend von einem
Bekannten in einem metallverarbeiten-
den Betrieb gelasert bzw. gestanzt. Die
LEDs wurden fr das Multiplexen so ver-
scaltet, dass jede Zeile eine gemeinsame
Anode hat und jede Spalte eine gemein-
same Kathode. Daraus entsteht dann die
Matrix, die ber entsprecende Zeilen-
und Spaltentreiber so gemultiplext wer-
den kann, dass es fr das mensclice
Auge so aussieht, als wrden alle LEDs
gleiczeitig leucten knnen. Tatsclic
wird beim Multiplexen aber jeweils nur
eine Zeile angezeigt und so scnell zwi-
scen den Zeilen gewecselt und umge-
scaltet, das ein statisces Bild entsteht.
Das hat den Vorteil, dass es die Ansteu-
erungselektronik um ein vielfaces ver-
einfact, 29 LED-Treiber sind weniger als
(7 x 29) 203 Treiber, wenn man jede LED
einzeln ansteuern wrde. Der Nacteil
des Multiplexens besteht in der hheren
Komplexitt der Ansteuerungssofware,
als auc in der zustzlicen Elektronik
fr die Zeilenumscal-
tung, die man aber gern in
Kauf nimmt um die Vorz-
ge genieen zu knnen.
Als Spaltentreiber wurden zwei
CAT4016 von ON Semiconductor ge-
whlt, die jeweils 16 Konstantstrom-
quellen und ein internes Scieberegis-
ter bereitstellen, in das die Daten seriell
bertragen werden. Die Stromquellen
knnen pro LED einen Strom von maxi-
mal 100mA liefern und sind ber einen
externen Widerstand regelbar; hier wur-
de ein Poti verbaut, um die Stromstrke
und somit die Helligkeit der LEDs stu-
fenlos jederzeit anpassen zu knnen. Da
die Treiberbausteine auc einen seriellen
Ausgang besitzen, knnen beide Chips
direkt kaskadiert werden und von der
Sofware wie ein einzelnes Scieberegis-
ter angesteuert werden. Fr die Zeilen-
treiber wurden aufgrund der scnellen
Scaltzeiten Mosfetransistoren ver-
wendet. Die Zeilentreiber scalten ge-
gen Masse ab, somit mussten P-Mosfets
benutzt werden, die im positiven Scal-
tungszweig scalten.
Der Plan war eine Platine zu layouten
und zu tzen, die sowohl die Zeilen- als
auc die Spaltentreiber enthlt. Das Dis-
play funktionierte mit den verwendeten
Transisoren leider nict und bereitete ei-
nige Probleme. Von dieser Platine wird
nun nur noc der Teil der Zeilenansteue-
rung verwendet und es wurde eine neue
Platine erstellt, die die sieben neuen
IRF9622 P-Mosfets beherrbergt anstat
der zuerst verwendeten SMD Mosfets.
Fr den Mikrocontroller wurde extra fr
die Entwiclung eine separate Platine
gefertigt, auf der nur der Atmega48, ein
Quarz und ein Spannungsregler sind.
Alle anderen Pins wurden auf Header
herausgefhrt.
Bilder der gerenderten Platinen sind in
den Abbildungen 2 bis 4 zu sehen. Die
Scaltplne, das Layout und die 3D-
Ansicten wurden mit dem kostenlosen
Programm Diptrace erstellt (leider nur
fr Windows erhltlic). Als Test fr die
SPI Kommunikation wurde zuerst je-
weils ein Atmega48 als SPI-Master und
als SPI-Slave programmiert, die beide
ber UART mit dem PC verbunden wa-
ren. Der Master empfngt Daten ber die
Ziel dieses Projekt war es, einen Atmega48 vom Gnublin aus anzusteuern, wel-
cher die Ausgabe auf einer LED-Matrix regelt. Dabei war das Display von Anfang
an als Teilprojekt eines greren privaten Gesamtprojekts geplant, wobei als Pro-
jektarbeit in der Vorlesung Embedded Linux eben nur das Display und
die Software behandelt wurden. Das Gesamtprojekt stellt eine Jger-
meister-Uhr dar, die aus 12 beleuchteten Jgermeisteraschen, sowie
einem Logo mit einstellbarer RGB-Beleuchtung und eben dem Display
besteht. Die Uhr wiegt etwa 25kg und misst 70cm im Durchmesser.
Lesen Sie die neue Elektor ein Jahr lang
in der ultimativen GOLD-Mitgliedschaft und
protieren Sie von allen Premium-Vorteilen!
Jetzt Mitglied werden unter www.elektor.de/mitglied!
UMWELTSCHONEND GNSTIG GREEN
Mchten Sie Elektor lieber im elektronischen Format beziehen?
Dann ist die neue GREEN-Mitgliedschaft ideal fr Sie!
Die GREEN-Mitgliedschaft bietet (abgesehen von den 10 Print-
ausgaben) alle Leistungen und Vorteile der GOLD-Mitgliedschaft.

Die Elektor-GOLD-Jahresmitgliedschaft
bietet Ihnen folgende Leistungen/Vorteile:
Sie erhalten 10 Elektor-Hefte (8 Einzelhefte + 2 Doppel-
ausgaben Januar/Februar und Juli/August) pnktlich
und zuverlssig frei Haus.
Extra: Jedes Heft steht Ihnen auerdem als PDF zum
sofortigen Download unter www.elektor-magazine.de
(fr PC/Notebook) oder via App (fr Tablet) bereit.
Neu & Exklusiv: Sie erhalten alle 2 Wochen per E-Mail
ein neues Extra-Schaltungsprojekt (frisch aus dem
Elektor-Labor).
Neu & Exklusiv: Wir gewhren Ihnen bei jeder Online-
Bestellung 10% Rabatt auf alle unsere Webshop-
Produkte dauerhaft!
Neu & Exklusiv: Der Online-Zugang zum neuen Commu-
nity-Bereich www.elektor-labs.com bietet Ihnen zustz-
liche Bauprojekte und Schaltungsideen.
Extra: Die neue Elektor-Jahrgangs-DVD (Wert: 27,50 ) ist
bereits im Mitgliedsbeitrag inbegriffen. Diese DVD schicken
wir Ihnen sofort nach Erscheinen automatisch zu.
Extra: Top-Wunschprmie (im Wert von 30 ) gibts als
Dankeschn GRATIS obendrauf!
Adv 210x297 Green-Gold membership DE 130118.indd 1 05-02-13 13:58
Abb. 1: Vorder-/Rckseite der LED-Matrix
Abb. 2: Gerenderte Platine mit den CAT4016
24
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Jgermeister-Uhr
Timinganalyse der Software auf dem Atmega48
Es war von vornherein klar, dass ein Mikrocontroller verwen-
det werden muss, der hauptsclic scnell und billig ist. Der
billigste Atmega von Atmel, den man laut Datenblat bis 20MHz
betreiben kann ist der Atmega48. Es wurde von Anfang an auf
diesem entwicelt, da er in der Bastlerkiste bereits vorhanden
war und weil er den Kriterien entsprict und auc vom Spei-
cer ausreicend erscien. Erste Tests wurden auf dem Stec-
bret mit dem internen 8MHz Oszillator gemact. Scnell wurde
aber klar, dass die Erhhung auf die maximale Frequenz
(was nur 2,5 mal so viele Recenoperationen pro Sekun-
de sind im Vergleic zu vorher!) unumgnglic ist.
Um ein mglicst fimmerfreies Bild auf dem Display
zu erzeugen muss die Multiplexfrequenz mglicst
hoc sein; deshalb wurde durc praktisce Versuce
eine Timerfrequenz fr den 8-bit Timer0 gesuct und
eingestellt. Der Timer wird im Modus CTC mit einem
Prescaler von 64 und einem Endwert von 255 betrieben
(CTC = Clear Timer on Compare, spric bei Erreicen
des eingestellten Wertes lst der Timer einen Interrupt
aus und startet automatisc von vorn). Zeilenfrequenz:
20*10^6Hz / (64*256) = 1220,7Hz. Bei 7 Zeilen entsprict
das einer Bildwiederholfrequenz von 174,4Hz. vEs muss-
te eine so hohe Frequenz gewhlt werden, weil hier die
LEDs immer nur einen Bructeil einer Sekunde tatsc-
lic leucten und ein kontinuierlices Leucten ohne Flimmern
und Flacern erwnsct ist.
Da der Timer nict der einzige Interrupt auf dem Mikrocontrol-
ler ist, sondern auc die Daten, die ber SPI empfangen werden
und im Anscluss verarbeitet werden mssen, kann es passie-
ren, dass sic die Interrupts und deren Verarbeitungszeit sic
gegenseitig beeinfussen und stren. Das liegt auc mageblic
Listing 1: Software des Displaycontrollers
Abb. 4: Messungen zur Interruptkontrolle und SPI-bertragungsgeschwindigkeit
serielle Scnitstelle vom PC und sendet
sie weiter ber SPI an den Slave, der wie-
derum die empfangenen Daten auf der
zweiten Konsole ausgibt. Nac erfolgrei-
cem Abscluss dieses Tests konnte eine
Stufe weiter gegangen werden, nmlic
Kommunikation GNUBLIN(Master) ->
Atmega(Slave). Die Programmierung des
Slaves wurde nict verndert und auf
dem Gnublin wurde zuerst das Kernel-
modul fr die SPI-Scnitstelle geladen:
modprobe spidev
Das Testprogramm fr SPI wurde etwas
abgendert und ansclieend gestartet:
./spidev _ test -D /dev/
spidev0.11 -s 500000 -d 10 -b 8
Der Test wurde auc erfolgreic abge-
sclossen und der Atmega produzierte
folgende Ausgabe:
Hello!
recv: 0x00
recv: 0x83
Das Protokoll der SPI Datenbertragung
wurde mit der Anforderung entworfen,
mglicst kompakt zu sein ohne die
Flexibilitt zu verlieren oder sptere Er-
weiterungen zu erscweren. Eine Daten-
bertragung besteht somit aus:
Kommandobyte
Datenbytes mit Paritybit
Kommandobyte: Fr das Kommando-
byte ist das MSB reserviert, das in kei-
nem andern Byte der bertragung
gesetzt sein darf. Diese einface Kon-
vention erleictert die Interpretation
der empfangenen Bytes und es dient
als Startbyte. Wird ein gltiges Startby-
te empfangen, ohne dass der vorheri-
ge Pufer vollstndig mit Daten gefllt
wurde, darf dieser verworfen werden.
Dies dient dazu fehlerhafe Frames ein-
fac zu ignorieren, knnte aber im Ext-
remfall zu einer rucelnden Darstellung
fhren, wenn die Verbindung sclect
ist. Versciedene Kommandos knnten
sein: betragung eines vollstndigen
Bildes; Abscalten des gesamten Dis-
plays (mute/blank); Aktualisieren einer
einzelnen Zeile/Spalte; etc. Im Moment
ist nur die bertragung eines vollstndi-
gen Bildes (C_FULL = OxCO) implemen-
tiert. Abhngig vom Kommandobyte ist
die Anzahl der folgenden Datenbytes.
Datenbyte: Ein Datenbyte darf nie das
MSB gesetzt haben und muss eine gera-
de Parity besitzen; dazu wird das Bit 6
verwendet. Ansclieend sind noc 6 Bit
fr tatsclice Daten vorhanden. Da das
Display spter noc auf Graustufen er-
weitert werden soll, bzw. das Protokoll
dies nict erscweren soll sind hier pro
LED 3 Bit, also 8 Graustufen vorgesehen.
Das bedeutet, dass pro Byte der Zustand
von zwei LEDs bertragen werden kann.
In der aktuellen Implementierung wird
jeder Wert grer als 0 als ein angese-
hen.
Ein vollstndiges Bild besteht also aus ei-
nem Kommandobyte, 102 Datenbytes fr
7 x 29 = 203 LEDs und zwei reservierten
Bytes, die fr eine Erweiterung mit 12
beleucteten Flascen zur visualisierung
der Uhrzeit vorgesehen sind.
Die Sofware auf dem Displaycontroller,
dem Atmega48, besteht aus der Initiali-
sierung aller Hard- und Sofware und
einer leeren while(1)-Scleife (Listing 1).
int main(void) {
init _ display();
init _ spi();
init _ buffer();
init _ timer();
//~ Interrupts erlauben
sei();
//~ Warte auf Interrupts
while (1) { }
return 0; }
Abb. 3: Separate Platine der Zeilentreiber
25
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Jgermeister-Uhr
daran, dass Atmegas keine Nested Interrupts oder Priorisierte
Interrupts kennen. Dies bedeutet, dass der Interrupt bearbeitet
wird, der zuerst aufgetreten ist und dass er nict von einem an-
deren Interrup unterbrocen werden kann. Um dies sicerzu-
stellen und um die endgltige SPI-bertragungsgescwindig-
keit herauszufnden wurden einige Messungen angestellt (Abb.
4). Fr die Messungen gilt folgende Legende:
Kanal 1 (braun): Timer-ISR
Kanal 2 (rot): SPI-ISR (pro empfangenem Byte ein Interrupt)
Kanal 3 (blau): SPI-Cloc (SCK)
Kanal 4 (grn): SPI-Daten (MOSI)
Bei ersten Tests mit einer SPI-Gescwindigkeit von 0,5 Mhz war
die Bytebertragung so scnell, dass bei laufender Timer-ISR
zwei SPI-Interrupts aufreten konnten, aber keine ISR aufge-
rufen wurde um das erste bertragene Byte zu sicern. Dies
bedeutete einen Datenverlust, was so nict akzeptiert werden
konnte. Die Bildgenerierung ist gegenber dem Empfang der
Daten priorisiert, also muss die bertragungsrate so verndert
werden, dass im Worst-Case, also bei quasi gleiczeitigem Auf-
treten der Interrupts (Timer zuerst), die Byte-bertragungszeit
lnger dauert als die Timer-ISR. Als mglicst hohe, sicere
bertragungsgescwindigkeit wurde 200 kHz ausgewhlt (sie-
he Tabelle 1).
Es kann also garantiert werden, dass die Timer ISR nict dazu
fhrt, dass ein Byte verloren geht: 44us > 33us +4us. Was pas-
sieren kann ist, dass die Multiplexzeiten zweier Zeilen um 4 S
verscoben werden, spric eine einzelne Zeile leuctet 4 s ln-
ger als normal und die andere krzer als normal. Dies ist aber
in der Praxis nict sictbar und kann vernaclssigt werden.
Die Versciebung des Datenempfangs durc die Timer-ISR um
maximal 33 s ist auc hier aufgrund der Trgheit des mensc-
licen Auges und des Nacleuctens der LEDs irrelevant und
nict sictbar.
Die Aufgabe der Sofware auf dem
Gnublin ist es, jeglice Daten so aufzu-
bereiten und an den Displaycontroller
(= Atmega; im Folgenden einfac nur
Display) zu senden, damit ein Bild auf
der LED-Matrix entsteht. Dabei wird
zwiscen drei versciedenen Modi un-
terscieden:
Zeitanzeige
Textanzeige
Rawdaten Anzeige / Bandit
Die Sofware besteht aus einem Server
bzw. Daemon und aus theoretisc un-
begrenzt vielen Clients, die Daten zur
verfgung stellen. Der Daemon selbst
stellt einen Grundsatz an Funktionen
bereit, jeglice andere Funktion kann
mit Hilfe entsprecender Clienten nac-
gerstet werden: Anzeige der aktuellen
Zeit sowie Anzeige und Verwaltung von
einer unbegrenzten Menge an Texten,
die naceinander dargestellt werden.
Ausfhren einer Animation, die einen
einarmigen Banditen darstellt zur An-
zeige von Texten und Rawdaten wird
eine Scnitstelle fr die Clients in Form
eines Unix-Socets bereitgestellt, wobei
hier eine grundstzlice Priorisierung
vorliegt:
Text vor Uhrzeit
Bandit vor Text
Clients mit Rawdaten vor interner Aus-
gabegenerierung Clients werden auf
dem Socet nict unterscieden und Da-
ten werden in der Reihenfolge angezeigt,
in der sie am Socet ankommen. Auc
werden Daten, die auf dem Socet emp-
fangen werden sofort ausgegeben, also
ist der Client selbst fr das Timing zu-
stndig. Wird eine Ausgabe von einer h-
herpriorisierten Ausgabe unterbrocen,
so wird die vorherige Aufgabe an der
Stelle fortgefhrt, an der unterbrocen
wurde (Ausnahme: Anzeige der Uhrzeit;
hier wird natrlic immer die aktuelle
Zeit angezeigt).
Die Sofware besteht aus mehreren Th-
reads, die alle versciedene Aufgaben
bewerkstelligen:
Socet Kommunikation und Verarbei-
tung der externen Daten
Thread fr interne Datenausgabe
Interrupt Thread, der GPIO-Pin 14
berwact und den Banditen startet
Signalhandler, der eingehende Signa-
le empfngt und bei SIGTERM dafr
sorgt, dass der Daemon ordnungsge-
m heruntergefahren wird
Folgende Aufgaben werden auerdem
vom cloc daemon erledigt:
Logging von Fehlern und grundstz-
licen Events
Initialisieren von externen Scnit-
stellen
Umwandeln von Uhrzeit und Texten
mit den integrierten Scrifarten
Da die Sofware als Daemon im Hinter-
grund luf und an kein Terminal oder
Standardinput mehr gebunden ist und
trotzdem die Mglickeit bestehen soll,
dass man das Programm sicer beenden
knnen soll, gibt es die Mglickeit Sig-
nale zu verwenden. Das Signal SIGTERM
ist normalerweise fr diesen Zwec vor-
gesehen. Das Signal kann zum Beispiel
mit dem Programm kill gesendet wer-
den. Um das Signal abzufangen ist ein
Singalhandler notwendig. Abgesehen
davon sollen andere Signale komplet ig-
noriert werden. Diese werden ber eine
Singalmaske deaktiviert. Anfangs wur-
de mit einem einfacen Signalhandler
gearbeitet, der aber spter in der Multith-
readanwendung Probleme bereitete und
kein siceres Abfangen und Handlen
der Signale ermglicte und somit die si-
cere Beendigung des Programms nict
gewhrleisten konnte. Daraufin wurde
ein eigener Thread fr das Handlen von
Software auf dem Gnublin: clockd
Abb. 5: Ausgaben auf dem Display
Bytebertragung ~ 44 s
Timer ISR < 33 s
SPI ISR < 4 s
Tabelle 1: Zeitenbersicht
26
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Jgermeister-Uhr
Signalen implementiert. Im Mainthread werden alle Si-
gnale deaktiviert, bevor die anderen Threads gestartet
werden, was bewirkt, dass diese die Signalmaske erben
und kein Thread Signale empfngt. Ansclieend ak-
tiviert man wieder die Signale im Handlerthread, die
man tatsclic abfangen mcte - in diesem Fall SIG-
TERM. Die Aufgabe dieses Threads ist es nun, nur auf
dieses Signal zu warten und beim Eintrefen die Sta-
tusvariable auf STOP zu setzen und sic danac selbst
sofort zu beenden. Ein weiterer Knacpunkt ist das
saubere Beenden des Haupthreads, der auf dem Socet
horct und solange blociert, bis sic ein Client auc
auf das Socet verbindet. Eine Mglickeit diesen Th-
read aufzuwecen ist einfac das Socet zu sclieen.
Allerdings bedeutet das, dass er mit einem Error-Code
zurckehrt. Da dies weiteres Errorhandling bedeutet
hte und die Lsung auc nict ganz sauber ist, wur-
de hier der Ansatz gewhlt, einfac dasselbe Socet im
Signalhandler noc einmal zu fnen und sofort wieder
zu sclieen. Das verursact, dass der blocierende Th-
read zurckehrt und dann aber nict auf den Empfang
von Daten wartet, sondern den Status berprf und
bei STOP das Socet ebenfalls scliet und die Anwen-
dung sauber beendet. Das beenden des Displaythreads
gestaltet sic nict sonderlic scwer, da dieser einfac
nac jedem Frame den Status prf und sic so mit einer
maximalen Verzgerung von 0,5s auc selbst beenden
kann.
Der Thread, der auf den Interrupt wartet, blociert auc
beim Aufruf von poll(), allerdings kann dies Funkti-
on mit einem Timeout aufgerufen werden, und aufgrund der
brigen Ressourcen wurde dieser als Mitelweg zwiscen res-
sourcensconend und recenintensiv auf 2s gestellt und somit
beendet sic auc dieser Thread nac maximal 2 Sekunden. Der
Code des Signalhandlers ist hier [1] zu sehen.
Um Interrupts an den GPIO-Pins des Gnublin zu empfangen
bzw. darauf zu reagieren, muss zuerst die Hardware entspre-
cend initialisiert werden. Das kann entweder ber das Sysfs
oder ber Memory Mapped IO erfolgen; hier wurde der Zugrif
ber das Sysfs gewhlt. Grundstzlic mssen folgende Befehle
ausgefhrt werden um per Sysfs bei einem Interrupt benac-
rictigt bzw. gewect zu werden (hier die Shellbefehle):
echo 14 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio14/direction
echo falling > /sys/class/gpio/gpio14/edge
Zuerst wird der Pin 14 im Sysfs durc den Export angelegt, an-
sclieend auf Eingang gestellt und Interrupts auf fallenden
Flanken aktiviert. Um nun beim Interrupt selbst benacrictigt
zu werden, kann jetzt mit der Funktion poll() auf dem Filede-
scriptor des Pin 14 gewartet werden, bis ein Interrupt aufrit.
Zu guter Letzt muss oder kann der Pin beim Beenden wieder
unexportiert werden:
echo 14 > /sys/class/gpio/unexport
Das Ganze kann natrlic auc direkt aus dem C-Code [1] er-
reict werden, wie es hier verwendet wird .Beactet werden
musste hier vor allem in welcem Modus die Dateien gefnet
werden, da zum Beispiel die export-Datei nur screibend und
nict lesend gefnet werden darf, da sonst der open()-Aufruf
fehlsclgt. In der aktuellen Implementierung benutzt der
clocd Unix Socets, auf die ein oder mehrere Clients screi-
ben knnen um Daten an das Display auszugeben. Beispiele fr
solce Clients ist das Webinterface, bei dem das CGI-Skript die
Textnacrict in das Socet screibt oder Nacricten, die per
Cronjob zeitgesteuert angezeigt werden sollen. Hier ist der Code
fr einen einfacen Textclient, der den Text als ersten Parameter
erwartet:
send(sock, &type, sizeof(char), 0);
send(sock, &length, sizeof(int), 0);
send(sock, argv[1], sizeof(char)*length, 0);
Der Webserver luf ja scon, jetzt muss nur noc die Dateien-
dung .cgi in der Konfgurationsdatei rictig eingestellt werden.
In der Datei /etc/lightpd/conf-enabled/10-cgi.conf wird die fol-
gende Zeile eingetragen, um CGI-Programme aus C-Code in
jedem Verzeicnis ausfhren lassen zu knnen: cgi.assign = (
.cgi => ). Das gesamte Webinterface besteht im Moment aus
zwei Dateien, nmlic einer Startseite (reine HTML-Datei) mit
einem Formular und der CGI-Datei [1], der der eingegebene Text
als Zeicenkete bergeben wird. Sie dekodiert den Text und
bergibt ihn ber das Socet an den Daemon.
Der Quellcode des Banditen entstammt einer frheren Pro-
grammierbung und wurde nur minimal angepasst und in das
Programmkonstrukt eingepfegt. Zustzlic zu den enthaltenen
Symbolen (Abb. 5) wurde noc das GNUBLIN-Logo eingefgt
(Abb. 1).
Abb. 6: Die fertig aufgebaute Jgermeister-Uhr mit der LED Matrix als Display
27
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
Das Display war von Anfang an nur als Teilprojekt eines greren privaten Gesamtprojekts
geplant, wobei als Projektarbeit in der Vorlesung Embedded Linux eben nur das Display
und die Sofware behandelt wurden. Das Gesamtprojekt stellt eine Jgermeister-Uhr
dar, die aus 12 beleucteten Jgermeisterfascen, sowie einem Logo mit einstellbarer RGB-
Beleuctung und eben dem Display besteht. Die Uhr wiegt etwa 25kg und misst 70cm im
Durcmesser (Abb. 6 und 8).
Zum Zeitpunkt der Fertigstellung des Bericts Mite Juli waren noc nict alle Probleme, was
zum Beispiel das Logo oder Platzprobleme anging, gelst und noc nict alle Hauptfeatures
vorhanden. Die Probleme wurden inzwiscen alle gelst und folgende Funktionen bzw. Ei-
genscafen wurden noc implementiert:
Generierung von Leuctmustern auf den Flascen
Zustzlice Symbole und Highscoregenerierung fr den einarmigen Banditen
Designtecnisce Aufwertung und Anpassung des Webinterfaces auf mobile Endgerte
(siehe Abb. 7)
Zustzlic wurde fr die Aktivierung der Slotmacine ein Buzzer auf einem Stnder an die
Uhr angesclossen, der fr den ntigen Spielspa sorgt und die Uhr auf eine Grundplate
montiert, mit der sie spter an einer Wand ihren endgltigen Bestimmungsort fnden soll.
Folgende Wunscliste existiert dennoc fr zuknfige Erweiterungen:
Highscorelisten auf dem Webinterface mit Namenseingabe und Daten-
bankanbindung
Erweiterung auf Internet-Socets inklusive Android-App zur Texteinga-
be stat dem Webinterface
evtl. weitere Spiele und Anbindung weiterer IO-Hardware; Spielbeispie-
le: Snake, Tetris, ...
Selbst die Firma Jgermeister war begeistert von der Uhr und hat freund-
licerweise die Einweihungsfeier etwas gesponsort ;) Das Projekt war eine
sehr zeitintensive, aber auc lehrreice Erfahrung, denn wie heit es so
scn: bung mact den Meister.
Links
[1]htps://elk.informatik.f-augsburg.de/dav/elinux-13-bericte/Fink/
[2]Timer: htp://www.embedded-linux.co.uk/tutorial/periodic_threads
[3]Autoload Module: htp://wiki.ubuntuusers.de/Kernelmodule#start
Daemonize:
[4]htp://www.itp.uzh.c/~dpoter/howto/daemonize
[5]htp://infohost.nmt.edu/~eweiss/222_book/222_book/0201433079/
c13lev1sec5.html
[6]Syslogd: htp://www.codealias.info/tecnotes/syslog_simple_example
[7]GPIO/Interrupts: htp://wiki.gnublin.org/index.php/GPIO
[8]Debugging mit cgdb: htp://sourceware.org/gdb/onlinedocs/gdb/Forks.
html
[9]5x7 Font: htp://sunge.awardspace.com/glcd-sd/node4.html
[10]CGI: htp://www.cs.tut.f/~jkorpela/forms/cgic.html
[11]Locale: htp://www.thomas-krenn.com/de/wiki/Perl_warning_Seting_locale_failed_unter_Debian Init-Skript htp://wiki.
ubuntuusers.de/Dienste htp://wiki.debian.org/LSBInitScripts
Abb. 7: Neues Webinterface
Einbindung in ein greres Projekt, aktueller Status
und Ausblick
[ PROJECT ] Jgermeister-Uhr
Abb. 8: Das fertige Projekt
28
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] GNUBLIN fr die Automatisierung
GNUBLIN fr die Automatisierung
Ein Projekt kurz vor der Serienreife
Martin Trapp, Dipl. Ing (FH) <info@it-trapp.com>
Wie in jeder Branche, so auch im Maschinen- und Anlagenbau, steigt schon seit einigen Jahren der Preisdruck rasant weltweit. Es
ist also stndig notwendig preiswerte (nicht billige) Komponenten zu nden. Sehen wir uns in diesem Zusammenhang an worber in
oben genanntem Maschinen- und Anlagenbau in Bezug auf die Steuerungs-Elektronik geredet wird: Windows und SPS. Bis auf wenige
Ausnahmen hrt und sieht man zur Zeit nichts von Linux Alternativen.
Einleitung
Uns Tecniker und Ingenieure kann es
eigentlic nict so unendlic erfreuen.
Denn wir wissen um die Stabilitt und
um den Preis und um die Flexibilitt und
um die Leistungsbreite und ... von Linux.
Und die Kaufeute besonders die Einku-
fer sollte es eigentlic auc nict freuen
- in sofern sie ofenen Auges durc die
Welt gehen.
Soweit die betrofenen Personenkreise.
Und die Tecnik?
SPS? Hand aufs Herz: Es tut sic eini-
ges; aber das was zur Zeit fr immerhin
noc sehr nennenswerte Kosten auf dem
Markt angeboten wird entsprict lngst
nict immer zwingend dem Stand der
Tecnik.
Windows? Die Lizenzkosten sind nor-
malerweise nur sehr bedingt eine Freu-
de. Zumindest nict fr Mascinen- und
Anlagenbauer. Und fr die Endkunden
ganz sicer auc nict. Das Preis Leis-
tungs Verhltnis ist also in beiden Fllen
aus den jeweiligen Grnden eher weni-
ger atraktiv. Also Linux. Und welce
Hardware?
GNUBLIN?
Ein leistungsfhiges Stc Elektronik.
Der Preis ist fair (das mact ein ber
durcscnitlic gutes Preis/Leistungs-
verhltnis). Und es bietet von sic aus
scon einige Scnitstellen, die in der
Automatisierungsbrance bekannt sind
und die sehr hufg eingesetzt werden.
Was brauct man mehr? Noc mehr stan-
dardisierte Scnitstellen. Fein. Dadurc
dass die bekanntesten und wahrscein-
lic auc meist verwendeten Scnitstel-
len SPI und I2C bereits integriert sind
ist die Integration weiterer Scnitstel-
len kein Hexenwerk. Es sind auerdem
noc einige digitale I/Os verfgbar (zu-
mindest beim GNUBLIN DIP) mit denen
man zur Not auc exotisce Scnitstel-
len realisieren kann.
Um GNUBLIN DIP geht es in diesem
Zusammenhang sowieso (wegen der di-
gitalen I/Os von denen man nie genug
haben kann). Aber auc aus einem ande-
ren Grund.
Die Mascinen- und Anlagenbauer lie-
ben keine elektroniscen Konstrukte, die
aus vielen kleinen Platincen bestehen,
die mglicerweise untereinander noc
untersciedlice Abmessungen haben.
Die Mascinen und Anlagen sind of
starken Vibrationen ausgesetzt (die sie
hufg selbst produzieren). Viele Plati-
nen bedeuten teure mecanisce Ver-
bindungselemente, teure mecanisce
Montage und teure Bauteile fr die elekt-
riscen Verbindungen.
Die Gngige und wohl auc einzig ak-
zeptable Lsung ist daher: alles auf eine
PCB. Jetzt kommen wir zum Punkt: die
DIP Version kann leict auf einer Tr-
gerplatine verltet werden, auf der dann
die weitere Elektronik verbaut ist, mit
der man den Mascinen- und Anlagen-
bauern ein atraktives Controller Board
liefern kann. Hier sind wir scon bei der
Konzeption. Die Gedanken dazu sollen
jetzt folgen.
Grundlegendes zur Hard- und Software Konzeption
Die erste Frage lautet: Was gibt es denn
aus Praxis-Sict an grundlegenden An-
forderungen an eine Steuerungs-Elektro-
nik (unabhngig davon welces Betriebs-
system eingesetzt wird)? Wictigste
Antwort: die Stromversorgung.
Egal welces Filesystem wir uns aus
diesem Sictwinkel anscauen (und alle
modernen Systeme sceinen sehr ausfall-
sicer zu sein); wirklic sicer ist keines.
Der Grund dafr liegt aber nict in den
Speicersystemen an sic sondern in der
oben erwhnten Stromversorgung. Und
egal wie pffg das Filesystem ist: Ein
Stromausfall zum rictigen Zeitpunkt
ist der ideale Killer. Sorgen wir also fr
eine mglicst intelligente aber bezahl-
bare Stromversorgung um dieses Risi-
ko zu umgehen. Es bietet sic einer von
diesen kleinen 8 Bit Mikrocontrollern an
um die Eingangsspannung und kritisce
Spannungen zu berwacen und die
versciedenen Versorgungsspannungen
an- und abzuscalten (siehe auc Abbil-
dung 1). Solce Controller sind auc bei
Einzelabnahme unter 2 Euro pro Stc
erhltlic. Die restlicen Bauteile zur
Realisierung einer solcen Bescaltung
drfe kaum mehr als 10 Euro kosten;
das sollte uns die Betriebssicerheit wert
sein. Immerhin soll der Controller mgli-
cerweise Mascinen oder Anlagen steu-
ern deren Anscafungspreis leict meh-
rere zehntausend Euro erreicen oder in
mancen Fllen auc bersteigen kann.
Ein Produktionsausfall von mehreren
Stunden kann noc weit hhere Kosten
verursacen; und dafr lsst sic nie-
mand gerne hafbar macen.
Welce Teilnehmer sollten sonst noc
auf dem Controller versammelt sein?
ber mglicst viele Scnitstellen spra-
cen wir scon. GNUBLIN selbst bietet
ja scon eine beactlice Anzahl von
Scnitstellen. Eine USB Scnitstelle, ei-
29
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] GNUBLIN fr die Automatisierung
nen I2C- , einen SPI BUS, einen gemulti-
plexten 8-Bit-A/D-8Wandler, einen PWM
Ausgang und eine Reihe von digitalen
I/Os.
Die SPI Scnitstelle knnte noc einige
Chip Select - Leitungen gebraucen. Das
erreicen wir am besten mit einer Port
Erweiterung z.B. ber I2C (ohne das wir
digitale I/Os -verscwenden).
Dann knnten wir auf gleice Weise
(ebenfalls ohne Verscwendung digitaler
I/Os) einen Baustein hinzufgen der es
ermglict externe Interrupts zu verar-
beiten.
Mit Hilfe der bereits vorhandenen
Scnitstellen (SPI oder I2C) knnen wir
noc einen 1-wire-Bus, einen CAN-Bus,
eine RS232- und eine RS485 Scnitstelle
hinzufgen. Eine Real Time Cloc (RTC)
sollte nict fehlen. Sie erspart uns die
lstige Eingabe von Datum und Uhrzeit
bei jedem Neustart auc dann wenn
unser Controller nict mit dem Internet
verbunden ist (eine Internet-Verbindung
muss vom Betreiber sclielic nict
immer erwnsct sein). Bleibt noc die
Frage: Wie soll dieses Controller-Board
angesteuert werden?
Es wird zur Zeit an einem einfacen In-
terpreter gescrieben, der Kommandos
von einer (Kommando-) Scnitstelle z.B.
RS232 entgegen nimmt, analysiert und
an die jeweiligen Scnitstellen weiter lei-
tet und der in umgekehrter Rictung In-
formationen von den Scnitstellen liest
und und an die (Kommando-) Scnit-
stelle bergibt.
Mit dieser Konzeption ist der komplete
Scnitstellenvorrat des Controller-Bords
von auerhalb erreicbar. Das Control-
ler-Board mitsamt der/den daran ange-
sclossenen Mascine(n) kann in eine
grere Steuerungs-Struktur eingebun-
den werden.
Der Interpreter (wenn fertig gestellt)
kann aber nict nur als ausfhrbares
Programm installiert werden, was den
Betrieb (s.o.) ermglict. Er steht auc als
Unit zur Verfgung (er ist vollstndig in
free pascal codiert). Mit Hilfe dieser Unit
ist es mglic den Controller eigenstn-
dig zu betreiben um mit ihm eine Ma-
scine oder Anlage zu steuern.
Nun ist auf dem GNUBLIN DIP reiclic
Speicerplatz vorhanden und selbst
wenn der nict ausreict lsst er sic
z.B. ber USB mit externem Speicer wie
etwa USB Stics oder Festplaten prak-
tisc beliebig erweitern. Dies ermglict
groe Programmkonstrukte mit denen
sic auc sehr komplexe Ablufe pro-
grammieren lassen.
Denkbar wre auc, durc wecseln ei-
nes USB Stics bei laufender Produktion,
die Produktionsdaten zu ndern. Glei-
ces wrde sic auc durc Einspielen
von Daten ber ein Netzwerk realisieren
lassen. Damit knnte der Controller nict
nur zur Steuerung an einem autarken
Arbeitsplatz sondern auc problemlos an
halbautomatiscen oder automatiscen
Produktionstrassen eingesetzt werden.
Schlussgedanken
Die Entwiclung ist noc nict komplet
abgesclossen und es werden mglicer-
weise an der einen oder anderen Stelle
noc leicte nderungen vorgenommen.
Ein erster Entwurf der Platine ist in Abbil-
dung 2 zu sehen.
Im Vordergrund der Konzeption standen
folgende Anforderungen: Es sollte ein zu-
verlssiges und fexibles System entwicelt
werden. Dieses System sollte einen atrak-
tiven Preis haben. Durc den Einsatz von
GNUBLIN DIP ist das gelungen.
Um der Flexibilitt auc im Preis gerect
zu werden ist geplant versciedene Be-
stcungsvarianten anzubieten. So sollen
nict bentigte externe Scnitstellen auf
Wunsc unbestct bleiben. So kann der
Preis des Controllers noc gnstiger wer-
den.
Zur Sofware:
die Units zum Ansteuern der einzelnen Scnitstellen werden (wenn sie fertig getestet sind) auf
www.it-trapp.com verfentlict werden.
Es ist geplant, dass die ersten Controller Anfang 2014 geliefert werden knnen.
Abb. 1: Blockschaltbild
Abb. 2: Erster Layout Entwurf
30
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET


w
w
w
.
M
E
s
s
t
e
c
h
n
ik
2
4
.
d
e
D
e
u
tsch
la
n
d
s g
ro

e
r B
2
B
M
e
sste
ch
n
ik
-W
e
b
-S
h
o
p
Meilhaus Electronic GmbH
Fischerstrae 2
82178 Puchheim/Germany
www.meilhaus.com
www.MEsstechnik24.de
TEL (0 89) - 89 01 66-0
FAX (0 89) - 89 01 66-77
E-Mail sales@meilhaus.com E
r
w

h
n
t
e

F
i
r
m
e
n
-

u
n
d

P
r
o
d
u
k
t
n
a
m
e
n

s
i
n
d

z
u
m

T
e
i
l

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
.

I
r
r
t
u
m

u
n
d

n
d
e
r
u
n
g

v
o
r
b
e
h
a
l
t
e
n
.


2
0
1
3

M
e
i
l
h
a
u
s

E
l
e
c
t
r
o
n
i
c
.
www.meilhaus.de www.MEsstechnik24.de
Riesen-Spektrum
an Tisch- und USB-PC-Oszilloskopen, M
ultim
etern,
Signalgeneratoren, Strom
versorgungen, Spektrum
-Analysatoren,
TDR, Kom
ponenten fr die M
essw
erterfassung, M
otorsteuerung,
Schnittstellen.
Produkte nam
hafter Hersteller: Acrom
ag, Adlink, Agilent, CableEye,
Cleverscope, HBM
, Icron, LabJack, Pico Technology, Pro-Dex OM
S,
Rigol, VSCOM
/Vision System
s und viele m
ehr.
Meilhaus_Beam_A4.indd 1 04.11.13 11:57
[ PROJECT ] GNUBLIN-Case
GNUBLIN-Case
Anleitung zum Bau eines Gehuses vfr die GNUBLIN Linux Boards
Torsten Hees <A1200@gmx.net>
Bentigte Komponenten
2x Plexiglas Sceiben der Strke 2 mm
3x Abstandsbolzen M3 25mm mit 2x Innengewinde
3x Abstandsbolzen M3 10 mm mit 1x Innen-/Au-
engewinde
6x Senkscrauben M3
4 Gummife
Klebefolie
Fertigung der Plexiglasscheiben
Der einfacste Weg die Plexiglas-
sceiben (Abb. 2) zu fertigen ist
diese sic passend zugescnit-
ten bei einem Hndler zu bestel-
len. Das passende Mae fr die
GNUBLIN Linux Boards ist 97
mm x 80 mm. Bei diesen Maen
ragt die Sceibe auf allen Seiten 5
mm ber das Board. Die abgerun-
deten Ecen haben ebenfalls einen
Radius von 5 mm.
Wenn die passenden Plexiglas-
sceiben bereit liegen, mssen
diese nur noc mit Lcern fr die
Scrauben versehen werden. Die
genauen Stellen fr die Bohrun-
gen knnen der Zeicnung ent-
nommen werden.
Als ncster Scrit mssen die
Bohrlcer noc mit einem Senk-
kopfohrer bearbeitet werden, so
dass sic die Senkkopfscrauben
komplet im Plexiglas versenken
lassen und zwar dreimal auf der
Oberseite der oberen Plexiglas-
sceiben und dreimal auf der
Unterseite der unteren Plexiglas-
sceibe.
Zusammenbau
Die Scutzfolie von den Plexiglasscei-
ben entfernen. Die 10 mm Abstands-
bolzen auf die untere Plexiglassceibe
scrauben und das GNUBLIN-Board auf
die Abstandsbolzen legen und mit den
25 mm Abstandsbolzen ver-
scrauben. Die obere Plexiglassceibe
nun auf die Abstandsbolzen scrauben
und die Gummife auf die Unterseite
kleben. Tipp: Die Gummife nict ber
die Scrauben kleben, so kann das Ge-
huse bei Bedarf ohne Probleme wieder
zerlegt werden.
Aufkleber
Die Grafk (Abb. 2) fr die Oberseite
liegt im Format fr das Open Source
Vektor Zeicenprogramm Inkscape
vor.
Nun gibt es zwei Mglickeiten die
Grafk auf das Gehuse zu bekommen.
Entweder man lsst sic die Grafk im
Gescf per Folien-Cuter ausscnei-
den oder man druct sie spiegelver-
kehrt aus, klebt diese auf die Rcseite
der Klebefolie auf und scneidet die
Folie per Hand.
Die fertig ausgescnitene Folie nun
auf die obere Plexiglassceibe kleben.
Tipp: Fr das bertragen der Folie auf
die Plexiglassceibe sollte man eine
Transferfolie verwenden.
Viel Spa mit dem Gehuse
Anhang
[1]CAD Plexiglassceiben (LibreCAD ) und GNUBLIN Logo im Inkscape Format
htps://github.com/embeddedprojects/gnublin-downloads/tree/master/gnublin-case
Abb. 3: Die fertigen
Gnublin Gehuse
Abb. 2: Die Plexiglasscheibe
Abb. 1: Der Gnublin Aufkleber
Tipp: Wenn die erste Scheibe
gebohrt ist, diese als Scha-
blone fr die zweite Scheibe
nutzen.


w
w
w
.
M
E
s
s
t
e
c
h
n
ik
2
4
.
d
e
D
e
u
tsch
la
n
d
s g
ro

e
r B
2
B
M
e
sste
ch
n
ik
-W
e
b
-S
h
o
p
Meilhaus Electronic GmbH
Fischerstrae 2
82178 Puchheim/Germany
www.meilhaus.com
www.MEsstechnik24.de
TEL (0 89) - 89 01 66-0
FAX (0 89) - 89 01 66-77
E-Mail sales@meilhaus.com E
r
w

h
n
t
e

F
i
r
m
e
n
-

u
n
d

P
r
o
d
u
k
t
n
a
m
e
n

s
i
n
d

z
u
m

T
e
i
l

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
.

I
r
r
t
u
m

u
n
d

n
d
e
r
u
n
g

v
o
r
b
e
h
a
l
t
e
n
.


2
0
1
3

M
e
i
l
h
a
u
s

E
l
e
c
t
r
o
n
i
c
.
www.meilhaus.de www.MEsstechnik24.de
Riesen-Spektrum
an Tisch- und USB-PC-Oszilloskopen, M
ultim
etern,
Signalgeneratoren, Strom
versorgungen, Spektrum
-Analysatoren,
TDR, Kom
ponenten fr die M
essw
erterfassung, M
otorsteuerung,
Schnittstellen.
Produkte nam
hafter Hersteller: Acrom
ag, Adlink, Agilent, CableEye,
Cleverscope, HBM
, Icron, LabJack, Pico Technology, Pro-Dex OM
S,
Rigol, VSCOM
/Vision System
s und viele m
ehr.
Meilhaus_Beam_A4.indd 1 04.11.13 11:57
32
4/2013 JOURNAL - EMBEDDED-PROJECTS.NET
[ PROJECT ] Marktplatz - Die Ecke fr Neuigkeiten und verschiedene Produkte
Marktplatz / Neuigkeiten
Die Ecke fr Neuigkeiten und verschiedene Produkte
Aufruf zum Wettbewerb: Open-Source Protokoll fr das Internet der Dinge!
Man mcte einfac eine Lampe per Browser ansteuern oder scnell ber die Ferne die Rollos sclieen. Ein einfa-
ces Protokoll fr das praktisce Internet der Dinge wird bentigt. Nac kurzer Recerce stellt man fest, dass
eigentlic das Hello-World Beispiel etwas erweitert fr das eigene Netzwerk locer ausreict. Auerdem ist
es ganz scn viel Arbeit sic fr so ein kleines Problem in fremde Protokolle einzulesen. Und genau diese
Gegebenheit war der Auslser fr die Idee fr diesen Wetbewerb.
Die Suce nac dem IOT
Protokoll!
In einer gemeinsamen
Initiative von Elektor,
embedded projects Journal,
Partnern und Open-Source
Projekten sucen wir nac einem
minima- len Protokoll fr die Verknpfung
der vielen einzelnen existierenden Lsungen.
Alle die sic berufen fhlen, oder gute Implementie-
rungen kennen sind aufgerufen Ideen und Vorscl-
ge einzureicen. Es soll am Ende ein ganz einfac zu
verstehendes Protokoll gefunden werden, mit dem je-
der genau die einfacen Sacen scalten kann. Wenn
Sic viele Entwicler an das Protkoll halten, kann
man einfac versciedene Projekte und System ver-
knpfen.
Als zentrale Informationsseite haben wir die Home-
page htp://www.iot-contest.com eingerictet.
Partner fr den Wettbewerb
Neben Ideen und Vorsclgen sucen wir Partner, die den Wetebewerb
begleiten mcten und anscliessend das Protokoll in eigene Projekte,
Produkte oder Anwendungen integrieren.
Alle Partner werden auf der Homepage genannt und verlinkt. Damit das
Internet der Dinge Protokoll sic auc gut verbreitet
muss jeder Partner ebenfalls einen Link auf die
Wetbewerbsseite htp://www.iot-contest.com auf
der eigenen Homepage erstellen.
Auf der Internetseit, im Embedded Projects Jour-
nal und in Elektor bericten wir regelmig ber
den aktuellen Stand. Bei Fragen stehen wir ebenfalls
gerne zur Verfgung. Genaue Infos zur Roadmap,
den Anforderungen usw. fndet man auf der Home-
page.
Einladung zum kostenlosen WE Training: Passiv trifft Elektromechanik
27.03.2014 bei embedded projects
Ideal fr alle Entwicler und Interessierte zum Thema:
Speierdrosseln, HF-Verhalten von Sifleisten, Filter fr
DC/DC Saltegler und einer Live-Demonstration
Perfekt fr alle die, die mal genau wissen wollen wie man Scal-
tungen korrekt befltert und Scaltregler dimensioniert, bieten
wir im Rahmen unserer kostenlosen Sculungen gemeinsam
mit Wrth Elektronik eiSos GmbH & Co. KG dieses Thema am
27.03.2014 in unserem Bro an.
In einer gemtlicen Runde ist wie immer fr das leiblice und
geistige Wohl gesorgt.
Das Training ist von Ingenieuren und Tecnikern fr Ingenieu-
re und Tecniker auf praxisbezogene Inhalte konzipiert, um Ih-
nen eine Hilfestellung bei der Entwiclung und siceren Markt-
einfhrung von Gerten zu geben.
Dabei werden sowohl Themen aus dem Bereic der Passiven
Bauelemente wie auc Themen, die die Elektromecanik betref-
fen, behandelt.
Themenscwerpunkte sind:
Designtipps fr Speicerdrosseln
HF Verhalten von Stifleisten
Filter fr DC/DC-Scaltregler mit Live-Demonstration
Tipps & Trics fr Entwicler
Bei Interesse melden Sie sic bite unter info@embedded-pro-
jects.net per E-Mail an.
www.beta-eSTORE.com
Entwickeln, Lten, Bestcken
e
S
T
O
R
E


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

18,
60 *

129,
00 *

362,
95 *
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
PCB-POOL

ist ein eingetragenes Warenzeichen der Beta LAYOUT GmbH


Ohne Aufpreis: Gold!
Hochwertigste Oberflche: ENIG

198,
00 *
Edelstahl SMD-Schablone
bei jeder PCB Prototyp-Bestellung
inklusive
K
o
ste
n
lo
s!
Big Beta-Reflow-Kit ERSA Ltstation
i-CON NANO
Universal-Frequenz-
zhler, 2,7 GHZ, mit
RS-232C Schnittstelle
Iteaduino Leonardo
V1.0, kompatibel
* inkl. MwSt. und zzgl. Versandkosten
Raspberry Pi Cam
HD-Foto- und
Videokamera

*
28,
30
[ 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

embedded-projects
JOURNAL
OPEN SOURCE SOF T- AND HARDWARE PROJ ECT S
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 Ka-
nal ist der Download als PDF - Datei. Alle Ausgaben sind auf der
Internetseite [1] verfgbar. Diejenigen, die lieber eine Papierver-
sion erhalten mcten, knnen den zweiten Kanal whlen. Man
kann sic dort auf einer Internetseite [2] in eine Liste fr die ge-
sponserten Abos oder ein Spendenabo eintragen. Beim Erscei-
nen einer neuen Ausgabe wird dank Sponsorengeldern an jeden
auf der Liste eine Ausgabe des aktuellen Journal versendet. Falls
man den Versandtermin verpasst hat, kann man das 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 bereitstellen
knnen, sucen wir dringend Sponsoren fr Werbe- und Stellen-
anzeigen. Bei Interesse meldet Euc bite unter folgender Tele-
fonnummer: 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
embedded projects GmbH
Holzbacstrae 4
D-86152 Augsburg
Telefon: +49(0)821 / 279599-0
Telefax: +49(0)821 / 279599-20
Verteilt durc:
Verfentlicung: 4x / Jahr
Ausgabenformat: PDF / Print
Aufagen Print: 2500 Stk.
Einzelverkaufspreis: 1
Layout / Satz: EP
Druc: fyeralarm GmbH
Titelbild: Torsten Hees
Alle Artikel in diesem Jour-
nal stehen unter der freien
Creativ Commons Lizenz.
Die Texte drfen, wie bekannt
von Open Source, modifziert
und in die eigene Arbeit mit
aufgenommen werden. Die
einzige Bedingung ist, dass
der neue Text ebenfalls wie-
der unter der gleicen Li-
zenz, unter der dieses Hef
steht verfentlict werden
muss und zustzlic auf den
originalen Autor verwiesen
werden muss. Ausgenommen
Firmen- und Eigenwerbung.
Dies ist ein Open Source Pro-
jekt.
Impressum
www.leiton.de kontakt@leiton.de LeitOn GmbH Info-Hotline +49 (0)30 701 73 49 0
RECHNEN SIE MIT BESTEM SERVICE
Wir denken weiter. Denn als lsungsorientiertes Unternehmen mchten wir unsere anspruchsvollen Kunden immer wieder mit neuen
Ideen und sinnvollen Innovationen begeistern. Unsere Vision, ein fhrender Online-Anbieter von Leiterplatten zu sein, haben wir nicht
nur im Kopf wir setzen sie auch um. Und zwar mit erstklassigen Leistungen in den Bereichen Service, Fairness, Technologie, Auswahl,
Komfort, Geschwindigkeit und Zuverlssigkeit. Unsere Webseite bietet eine enorme Auswahl an Lsungen in der Online-Kalkulation
sowie weiterfhrendes Wissen, Informationen und Entwicklerwerkzeuge. Und sollte einmal etwas sehr Ausgefallenes gefordert sein,
finden wir gerne Ihre persnliche Lsung. Fr unsere Kunden heit das: Sie knnen bei LeitOn immer mit bestem Service rechnen.




O
n
l
i
n
e

k
a
l
k
u
l
i
e
ren. O
n
l
i
n
e

b
e
s
t
e
l
l
e
n
.
IST
BESSER!
SCHNELLE
VIELFALT
UNSER WICHTIGSTES
WERKZEUG.
LEITERPLATTEN WEITER GEDACHT.

Das könnte Ihnen auch gefallen