Vous êtes sur la page 1sur 8

EMN - Anne 2 - A2I

Informatique Industrielle

Informatique Industrielle

! ! ! !

Anne 2 - A2I 2013/2014

Mathieu POREZ Bureau C122 E-Mail : mathieu.porez@mines-nantes.fr Sylvain LANNEAU Bureau C119 E-mail : sylvain.lanneau@mines-nantes.fr

TP n4: Intgration dun capteur MEMS interface I2C.

Lobjectif de ce TP est de crer un ensemble de fonctions en langage C permettant la prise en charge (cf. http://beagleboard.org/bone) dun acclromtre MEMS 3 axes de type LIS331HH (cf. https:// www.sparkfun.com/products/10345 ) mont sur un pendule simple (cf. Fig. 1) par une application embarque dans une carte de dveloppement BeagleBone.

Fig. 1 : A gauche : le chariot - A droite : le pendule.

!
1.

La carte de dveloppement BeagleBone en quelques mots.

Dans ce TP, nous utiliserons la carte de dveloppement BeagleBone (cf. Fig. 2 et http:// beagleboard.org/bone). Cette carte est un micro-ordinateur Linux, low-cost de la taille dune carte de crdit. Elle est base sur un processeur Texas Instrument AM3359 darchitecture ARM Cortex A8

! /8 1 !

EMN - Anne 2 - A2I

Informatique Industrielle

(cf. http://fr.wikipedia.org/wiki/Architecture_ARM) de dernire gnration. Les caractristiques principales de la carte BeagleBone (blanche) sont :

un processeur Texas Instrument AM3359 720MHZ (http://www.ti.com/product/am3359) ; 256MB de mmoire RAM DDR2 400MHZ ; le support de lUSB (Host) ; le support dEthernet ; le support des protocoles sries SPI, I2C, UART et CAN ; un GPIO (c--d General Purpose Input/Output) de 65 ports ; 6 sorties PWM, 3 compteurs quadrature (codeur incrmentale) ; 8 entres analogiques 12 bits ; embarque une distribution Linux Ubuntu.

!
Fig. 2: La carte de dveloppement BeagleBone (blanche).

Il est noter, quune version BeagleBone Black existe. Cette dernire est plus rcente et plus puissante.

! ! ! ! !

2.

Tour dhorizon du travail effectuer

Ce TP est compos des tapes successives suivantes:

- Etape 1: Notre premier programme embarqu . Lobjectif de cette tape est daborder sur un cas
simple le dveloppement et la compilation dune application en langage C pour BeagleBone.

- Etape 2: Le capteur LIS331HH. Lors de cette tape, vous serez amens dvelopper pour la
carte BeagleBone un ensemble de fonctions en langage C permettant lutilisation du capteur dans une application.

Enfin, il est conseill de lire compltement le texte du sujet pour avoir une vue d'ensemble du travail demand avant de commencer le TP.

! /8 2 !

EMN - Anne 2 - A2I 3.

Informatique Industrielle

Etape 1: Votre premier programme embarqu


3.1.

Procdure

Nous allons prsent diter, porter, et compiler notre premier programme embarqu en langage C. Avant de dbuter la procdure se trouvant ci-dessous, vous devrez mettre sous tension votre carte BeagleBone et aussi la connecter au rseau Ethernet de la salle de TP.

! Afin de crer un nouveau projet nomm ! ! ! !

mon_projet, la dmarche est la suivante:

- Crez dans le rpertoire C:\TP_2I\, un rpertoire de travail, par exemple TP4. Ce rpertoire
contiendra par la suite vos fichiers sources.

- Crez dans votre rpertoire de travail un fichier source nomm mon_fichier_source.c et


ditez le avec notepad++(http://notepad-plus-plus.org/fr/ ). Copiez et collez le code source (en langage C) suivant dans votre fichier et sauvegardez le:
#include<stdio.h> int main (int argc, char*argv[]) { return 0; printf("Bonjour A2I!\n"); /* valeur de retour */ /* fin du bloc main */ /* dfinition du bloc main */

/* dbut du bloc main */

! ! ! ! !

- Crez dans votre rpertoire de travail un script make, nomm Makefile. Editez avec notepad
++ le script. Copiez et collez les commandes suivantes dans votre fichier et sauvegardez le: CC = gcc EXEC = mon_projet SRCS = mon_fichier_source.o CFLAGS = -O2 all: $(SRCS) $(CC) -o $(EXEC) $(SRCS) mon_fichier_source.o: $(CC) -o mon_fichier_source.o -c mon_fichier_source.c $(CFLAGS) clean: @rm -rf *.o @rm -rf $(EXEC)

! /8 3 !

EMN - Anne 2 - A2I

Informatique Industrielle

!
- La carte BeagleBone ne possdant pas de moyens daffichage et de saisi, nous allons ouvrir une
session distance scurise (protocole Secure Shell ou SSH - cf. : http://fr.wikipedia.org/wiki/ Secure_Shell ). Pour ce faire, excutez le programme PuTTY (client SSH) se trouvant dans lea rpertoire Windows C:\Program
Files (x86)\PuTTY\. Dans la zone Category,

choisissez Session - Logging. Dans la zone Host Name (or IP address), tapez ladresse IP de la carte BeagleBone se trouvant sur votre paillasse (ladresse IP est celle figurant sur ltiquette colle sur la maquette). Dans la zone Port, taper 22. Choisir le protocole Protocol SSH. Une fois ces tapes ralises, cliquez sur Open (cf. Fig. 3). Une invite de commande souvre. A la question Login as:, rpondez root. A la question Pass, rpondez temppwd . Une session Linux souvre, vous tes connects la carte de dveloppement BeagleBone !

! !

- Sur la carte BeagleBone, crez le rpertoire \home\ubuntu\mon_projet\ :


root@beaglebone:~# mkdir mon_projet

Fig. 3: Interface de configuration de PuTTY.

- Nous allons prsent charger notre programme mon_fichier_source.c et notre script


Makefile sur la carte. Pour ce faire, excutez le programme PSFTP se trouvant dans la

rpertoire C:\Program

Files

(x86)\PuTTY\ . Tapez open

[IP_BeagleBone] .

IP_BeagleBone correspond ladresse IP de votre carte BeagleBone. A la question Login

as:, rpondez root. A la question Pass, rpondez temppwd. A laide de la commande cd, choisir \home\ubuntu\ comme rpertoire distant. Avec la commande lcd, choisir le rpertoire
C:\TP_2I\TP4\ comme rpertoire locale. Enfin, avec la commande put -r mon_projet,

copiez le rpertoire mon_projet et son contenu se trouvant dans le rpertoire locale dans le

! !
! /8 4 !

rpertoire distant.

- Compilez votre programme sur la cible. Dans linvite de commandes ouverte par puTTY.exe,
placez-vous dans le rpertoire \home\ubuntu\mon_projet. Pour compiler votre programme, tapez:
root@beaglebone:~/mon_projet# make all

EMN - Anne 2 - A2I

Informatique Industrielle

! Si la compilation se droule sans erreur, le programme xcutable est cr. ! - Pour excuter votre programme, dans linvite de commandes ouverte par puTTY.exe, taper: !
mon_projet root@beaglebone:~/mon_projet# ./mon_projet

! Remarques: ! !

Le message suivant apparaitra : Bonjour A2I!

- Il est important de noter que vous serez amens raliser cette procdure de nombreuses
reprises durant ce TP. Ainsi, il est important de la maitriser.

- De nombreuses erreurs volontaires ont t glisses dans la procdure ci-dessus. Soyez prudent et
attentif ce que vous faites !

3.2.

Travail raliser

Q1- Raliser la procdure dcrite la section 3.1.

! !

4.

Etape 2: le capteur LIS331HH

Dans cette section, nous allons dcrire en quelques mots lacclromtre 3-axes utilis comme base de notre capteur intelligent que nous nous sommes proposs de dvelopper. Puis, afin dinterfacer celui-ci notre carte BeagleBone, nous nous intresserons la gestion des I/O (Input/Output) sur cette plateforme Linux. Enfin, nous dcrirons le travail effectuer.

4.1.

Le capteur LIS331HH en quelques mots

Le capteur LIS331HH (cf. https://www.sparkfun.com/products/10345) est un acclromtre MEMS (http://fr.wikipedia.org/wiki/Microsystme_lectromcanique) 3-axes possdant une interface de communication srie protocole i2c (cf. http://fr.wikipedia.org/wiki/I2C). Il possde une plage de mesure rglable allant de +-6g +-24g avec une frquence d'chantillonnage pouvant atteindre 1kHz et une rsolution de 16 bits par axe. Enfin, sa tension dalimentation est de 3.3V.

! /8 5 !

EMN - Anne 2 - A2I 4.2.

Informatique Industrielle

Gestion des I/O sous linux

Sous linux, la gestion dun port I/O (numrique, analogique ou bus de communication srie, etc ...) s'effectue en manipulant (en criture, en lecture ...) un fichier (Tab. 1 liste les fichiers relatifs au 2 bus i2c de la carte de dveloppement BeagleBone). Pour manipuler un fichier entre/sortie, nous utiliserons les fonctions open, write, read et close comme dfinies dans le fichier header <fcntl.h>.

Bus i2c I2C0 I2C1

Fichier I/O /dev/i2c-0 /dev/i2c-1

Id 0 1

Frquence 100 KHz 400 Khz

Tab. 1: Paramtres des deux interfaces i2c de la carte de dveloppement BeagleBone.

! Louverture dun port I/O se fait via la fonction suivante: ! !


o:

int open (const char * filename, int mode);

- la valeur de retour est lidentifiant du fichier ouvert fournis par lOS ;


- filename est le nom du fichier li au port ouvrir;

! ! ! ! ! o: ! !
! /8 6 !

- mode spcifie le mode d'accs au priphrique: O_RDONLY ouverture en lecture seule; O_APPEND mise jour dun fichier existant; O_WRONLY ouverture en criture seule; O_RDWR ouverture en lecture et criture.

Une fois le fichier I/O ouvert, pour effectuer une lecture ou une criture dans celui-ci, nous avons notre disposition les deux fonctions suivantes:
int int read( write( int int handle, handle, void void *buffer, *buffer, int int nbyte ); nbyte );

- handle est lidentifiant du fichier sur lequel la fonction (read() ou write()) doit oprer ; - buffer est un pointeur sur un tableau de donnes ; - nbyte est le nombre doctets lire ou crire.

EMN - Anne 2 - A2I


Enfin la fonction, int
handle. close( int handle

Informatique Industrielle
); permet de fermer le fichier identifi par

! Avant de conclure cette section, intressons nous la procdure pour configurer un port I/O (par
exemple vitesse de transfert, adresse dun composant, parit, etc ... ). Pour ce faire, nous utilisons la fonction input-output control de la bibliothque <ioctl.h>, c--d:

! ! o: ! ! ! ! !

int

ioctl (int id, int propertyname, ...);

- id est lidentifiant dun fichier ouvert et li un priphrique ; - propertyname est le paramtre que lon cherche configurer ;

- le troisime argument est la nouvelle valeur du paramtre.

ioctl retourne 0 si la modification est russie, sinon elle retourne -1. Dans le cas qui nous concerne,

cette fonction nous permettra dindiquer au priphrique i2c du processeur de la carte BeagleBone ladresse du capteur MEMS LIS331HH, c--d:
ioctl(id,I2C_SLAVE,LIS331HH_ADDR);

o I2C_SLAVE est le paramtre relatif ladresse du priphrique i2c esclave (constante dfinie dans le header <linux/i2c-dev.h> ) et LIS331HH_ADDR est ladresse du capteur (constante dfinir !). Il est important de noter ici que lenregistrement du capteur est raliser avant toutes oprations de lecture et dcriture (read() et write()).

4.3.

Travail raliser

Q2- A laide du manuel de la carte BeagleBone (cf. BONE_SRM.pdf se trouvant sur Campus), identifier le port i2c utilis pour communiquer avec le capteur LIS331HH.

! Pour ce faire, vous pouvez aussi utiliser la commande UNIX suivante : ! ! ! o est lidentifiant du bus i2c scanner. !
i2cdetect i2cbus_id i2cbus_id

Q3- A laide du manuel du capteur LIS331HH (cf. LIS331HH.pdf se trouvant sur Campus) et des descriptions de fonctions faites la section 4.2, proposez des organigrammes permettant de:

crire dans un registre du capteur ;

! /8 7 !

EMN - Anne 2 - A2I lire un registre du capteur.

Informatique Industrielle

! Q4- A partir des organigrammes prcdents, dveloppez les fonctions suivantes: !


- void acc_power_on(void);. Cette fonction permet de mettre en fonctionnement le

! ! ! ! ! !

capteur.
- void acc_power_idle(void);. Cette fonction permet de mettre le capteur en mode

IDLE.
- float acc_read_acceleration(char axis);. Cette fonction retourne lacclration

mesure acc_integer (valeur entire) selon laxe axis.


- void acc_read_register(char reg, char * val);. Cette fonction permet de lire la

valeur val contenue dans le registre reg.


- void acc_write_register(char reg, char val);. Cette fonction permet dcrire la

valeur val dans le registre reg du capteur.

Q5- Dveloppez un programme affichant toutes les secondes dans linvite de commande de la session Linux (puTTY), les 3 acclrations linaires en M/S^2 mesures par le capteur. Que constatez-vous ? Q6- A laide des mesures dacclration, calculez et affichez la position angulaire du pendule par rapport la verticale.

! /8 8 !

Vous aimerez peut-être aussi