Vous êtes sur la page 1sur 4

Travaux Pratiques dInterfaage Logiciel

premire sance
ENSIBS 2eme anne, Spcialits Mcatronique et Gnie Industriel

Objectifs

Ce TP sinscrit dans le cours dinterfaage Logiciel et fait partie dune srie de deux
TP dont lobjectif est de vous familiariser avec du matriel.
Cette premire sance doit vous permettre de prendre en main la plate-forme dsPIC
et dapprendre utiliser des priphriques en utilisant les plus basiques dentre-eux que
sont les boutons poussoirs et les diodes electro luminescentes (LED).
A lissue du TP vous devez savoir :
Configurer et piloter les ports dEntre/Sortie
Utiliser des oprations de masquage pour piloter chaque E/S
Utiliser des symboles
Grer une interruption

Description du matriel

Les deux scances de TP se drouleront sur une carte de dveloppement dsPIC sur
laquelle sont prcabls un ensemble de priphriques. Parmi ceux-ci ont trouve deux liens
srie RS232, un port CAN, un cran LCD, des entres/sorties analogiques ainsi que des
LED et des boutons poussoir.
Le dveloppement sur la carte qui vous est propos sera ralis laide de lenvironnement MPLAB fourni par Microchip auquel est associ le compilateur C C30.

2.1

Implantation des priphriques

Les paragraphes suivants dcrivent sur quelles broches du dsPIC les diffrents priphriques utiliss sont mapps.
2.1.1

LEDs

Les LED sont connectes aux 4 bits de poids faible du port D. Une LED sallume
lorsquun 0 logique est mis sur la sortie correspondante.
2.1.2

Boutons Poussoir

Les Boutons poussoirs sont connects aux 4 bits de poids fort du port A. Lorsque le
Bouton Poussoir est appuy, on peut lire un 0 sur la sortie corrspondante.
1

Ralisations

3.1

Prise en main de la maquette

Il est tout dabord ncessaire de prendre en main lutilisation de la maquette. Pour


cela, nous allons excuter le programme C dcrit sur le listing 1 et permettant dallumer
une diode sur la maquette.
Listing 1 Programme de Test
1

# include < p30f6014 .h >

2
3
4
5
6
7

void main ( void )


{
// initialisation du port D
TRISD =0 xFFF0 ; // Port D en sortie
LATD =0 x000F ; // Toutes LEDS eteintes

PORTD &= ~0 x0001 ; // on allume la LED 1

9
10
11
12

while (1) ; // boucle infinie

MPLAB fonctionnant par projet, il est dabord ncessaire de crer un projet. Une fois
le projet cr, on peut commencer crire ses programmes. Pour excuter le programme,
il faut passer par une phase de compilation qui est dcrite ensuite.
3.1.1

Cration dun projet

La cration dun projet se ralise simplement, en utilisant lassistant.


Project -> Project Wizard
Configurer la cible : dsPIC30F6014(A)
Choisir la chane de dveloppement : MPLAB C30
Choisissez lemplacement du projet (je conseille de crer un rpertoire pour y
mettre tous les fichiers du projet)
Ajouter des fichiers au projet
Un fichier est ncessaire, il est appel script ddition de liens, vous le trouverez
ladresse : C:\PROGRAM FILES\Microchip\MPLAB C30\support\gld\p30f6014.gld.
3.1.2

criture du programme

Une fois le projet cr, il faut crer le fichier contenant le programme, crit en langage
C. Ce fichier sera insr dans le projet.
La procdure de cration est la suivante.
File -> New File
File -> Save As
Project -> Add Files To Project
3.1.3

Excution du programme

Pour pouvoir excuter le programme, il est ncessaire de passer par plusieurs phases.
2

La phase de compilation permet de gnrer le code objet qui sera envoy sur la
cible. Chaque fichier C est transform en un code objet correspondant (fichier portant
lextension .o).
Ledition de liens cette phase permet de lier les diffrents codes objet provenant des
sources ou de librairies entre eux. En effet, les diffrents objets peuvent utiliser des variables ou des fonctions en commun.
La programmation Il sagit denvoyer le code sur la cible pour quil y soit excut. Un
reset de la cible permettra ensuite de dmarrer le programme.
Loutil MPLAB offre une interface intgrant les diffrentes phases pour excuter un
programme, on effectue donc les tapes suivantes :
Project -> Build All effectue les phases de compilation et ddition de liens
Programmer -> Select Programmer permet de slectionner linterface de programmation (ici ICD2 ).
Programmer -> Program charge le programme dans la cible.
Programmer -> Release From Reset permet dautoriser lexcution du code.

3.2

Allumage dune LED sur un Bouton

Le premier exercice consiste allumer la LED1 par appui sur SW1.


Deux mthodes sont possibles : on peut utiliser une structure de contrle conditionnelle
if ... then ... else ou bien une quation logique reliant la LED1 au SW1 laide de
masquages.

3.3

Changement dtat dune LED sur un Bouton

Il sagit, cette fois-ci de changer ltat de la LED chaque appui sur le bouton SW1.

3.4

Gestion compacte dun ensemble de LED

En partant de la solution utilisant une quation logique, proposez une solution compacte pour piloter les 4 LED.

3.5

Symbolisation des E/S

Vous avez normalement utilis jusqu prsent les noms des ports et les masques crits
en hexadcimal. Ce nest pas trs explicite, limite la comprhension du code et la portabilit des programmes. Cest pourquoi on symbolise gnralement les entres/sorties.
Pour cela, on dfinit des macro qui prennent la forme prsente sur le listing 2.
Listing 2 Dfinition des symboles
1
2

# define LEDS PORTD


# define LED1 0 x0001

Avant la phase de compilation, tous les appels LEDS seront transforms en PORTD.
Pour allumer la LED1, on crira donc le code propos sur le listing 3
3

Listing 3 Allumage dune LED


1

LEDS = LED & ~ LED1 ;

Il vous est donc demand de transformer les programmes prcdents pour utiliser les
symboles.
Note : Certaines constructions ne sont plus possibles ...

3.6

Gestion par interruption

Il vous est maintenant demand de grer lallumage de la LED1 en utilisant une interruption. Par chance, vous aurez remarqu que le SW1 est cabl sur la broche INT1 on
va donc pouvoir utiliser linterruption associe.
Si vous lisez les documentations de Microchip, vous remarquerez que le dsPIC dispose
dune table de vecteurs. Celle-ci est initialise par le compilateur partir du nom des
fonctions dclares. Pour INT1, ce nom est _INT1Interrupt. Il est aussi ncessaire dindiquer au compilateur que lon est en prsence dune routine dinterruption, cela est fait
laide de la macro _ISR qui dfinit un ensemble de paramtres pour la fonction indiquant
notamment au compilateur de gnrer une instruction RETFIE. Lcriture de linterruption
INT1 prend donc la forme prsente sur le listing 4.
Listing 4 Utilisation de INT1
1

void _ISR _INT1Interrupt ( void ) {

2
3

// ... Code de l interruption ...

4
5

Il sera ensuite ncessaire de valider et configurer linterruption laide des registres


IECx et INTCONx. Linterruption doit aussi tre acquitte au dbut de la routine en manipulant lun des registres IFSx.

3.7

Utilisation dun timer

Pour finir, vous allez faire clignoter la LED1 avec une frquence de 1Hz laide dun
timer. Dabord sans puis avec linterruption associe.

Vous aimerez peut-être aussi