Enoncé TP 02
Enoncé TP 02
Enoncé TP 02
TRAVAUX PRATIQUES N : 01
avec
PICC,
langage
C,
organisation
dun
Mr Nizar TOUJENI
1/13
Nous obtenons la premire page du Wizard, il faut alors dfinir les valeurs des
diffrentes ressources utilises. Ici seul lICD et loscillateur sont utiliss.
Mr Nizar TOUJENI
2/13
3/13
setup_comparator(NC_NC_NC_NC);
// This device COMP currently not supported by the PICWizard
while(TRUE)
{
//TODO: User Code
}
}
Nous trouvons ici lorganisation traditionnelle dun programme en langage c :
- Entte : avec la directive : #include <Tp1.h>
- La fonction void main( )
- Dans cette fonction nous trouvons
- Au dbut linitialisation de priphriques.
- La boucle While.
a. Entte
Cette partie permet dinclure des fichiers en principe de type .h, avec picc, il
faut parfois inclure aussi des fichiers de type .c. Nous verrons par la suite le
fichier Tp1.h.
Nous pouvons dire que le langage C est un langage modulaire :
- Il est trs simple dutiliser des librairies fournies avec le logiciel (par
exemple LCD, USB, BUSCAN, ).
- Il est possible de dvelopper un projet plusieurs, chacun est charg
dune partie indpendante.
- Il est possible de dvelopper ses propres librairies et de les rutiliser par
la suite, nous verrons ceci la fin.
b. La fonction void main( )
Le langage C permet dcrire un programme sous forme de fonction.
- Une fonction peut recevoir des paramtres en entres placs entre les ( ).
- Chaque fonction peut renvoyer des valeurs. Lorsquelle nen renvoie pas
il est sage de placer void dans sa dclaration.
Mr Nizar TOUJENI
4/13
Mr Nizar TOUJENI
5/13
Les fonctions, qui nous intressent sont dcrites dans la section DISCRETE I/O.
6/13
output_low (PIN_C0) ;
}
}
Commentaires :
Nous utilisons la structure de contrle if (test) then ; else ;
If vrifie si test est vrai, si cest le cas alors il ralise linstruction aprs Then, si
ce nest pas le cas il ralise linstruction aprs else.
La fonction input( ) renvoie 0 ou 1 (en langage C, 0 = faux et 1 = vrai), or il faut
en sortie un tat haut lorsque le bouton est appuy pour que la LED claire . Le !
correspond loprateur inversion. Nous avons donc :
Lorsque le bouton est appuy, input(PIN_A0) vaut 0, loprateur ! inverse
donc le test prend la valeur 1.
Le test est donc vrai.
PICC vous fournit diffrentes aides partir du point dinterrogation, notamment
les diffrents oprateurs en langage C ainsi que les diffrentes fonctions du
langage C.
Mr Nizar TOUJENI
7/13
Le rsultat est positif, vous pouvez continuer. Vous pouvez passer Proteus :
- Vous dfinissez la configuration du microcontrleur, pour cela vous double
cliquer sur le processeur :
Mr Nizar TOUJENI
8/13
Les signaux VoieA et VoieB sont les signaux, qui seront appliqus au circuit de
puissance dalimentation dun moteur pas pas.
Le principe de fonctionnement est le suivant :
- Un appui sur le bouton cbl sur lentre A0, alors le moteur tourne de 10
pas en sens horaire.
- Un appui sur le bouton cbl sur lentre A1, alors le moteur tourne de 10
pas en sens anti-horaire.
Les signaux VoieA, VoieB vont prendre 4 tats dans lordre :
Numro
VoieA
VoieB
0
0
0
1
0
1
2
1
1
3
1
0
Il faut crer une variable pas_encours pour compter les pas. Cette variable est
de type global car connue par tous les programmes.
Afin de produire du programme facilement rutilisable, nous allons crer dans le
dossier projet un fichier librairie nomm moteur.c .
Dans ce fichier nous allons crire 3 fonctions, qui sont :
- void init_pas(void).
- void rotation_un_pas(unsigned short sens) : permet de tourner dun pas
dans le sens indiqu par sens.
- void rotation_n_pas(unsigned int nombre_pas,unsigned long int
duree_pas_us,unsigned short sens) : permet davancer de nombre_pas,
suivant sens et avec duree_pas_us.
Le fichier moteur .c est le suivant :
Mr Nizar TOUJENI
9/13
10/13
{
pas_encours = 2;
output_high(voieA);
}
else
{
pas_encours = 0;
output_low(voieB);
}
break;
case 2 : if (sens==horaire)
{
pas_encours = 3;
output_low(voieB);
}
else
{
pas_encours = 1;
output_low(voieA);
}
break;
case 3 : if (sens==horaire)
{
pas_encours = 0;
output_low(voieA);
}
else
Mr Nizar TOUJENI
11/13
{
pas_encours = 2;
output_high(voieB);
}
break;
default : init_pas( );
}
}
void rotation_n_pas(unsigned int nombre_pas, unsigned long int duree_pas_us,
unsigned short sens)
{
unsigned int i;
for (i=0; i<nombre_pas; i++)
{
rotation_un_pas(sens);
delay_us(duree_pas_us);
}
}
Nous utilisons la structure de contrle switch voir dans laide. Le programme
principal Tp1_II.c devient :
#include <Tp1_II.h>
#include "moteur.c"
void main( )
{
SHORT mem_PIN_A0, mem_PIN_A1;
SHORT old_PIN_A0, old_PIN_A1;
setup_timer_3 (T3_DISABLED|T3_DIV_BY_1) ;
setup_timer_4 (T4_DISABLED, 0, 1) ;
Mr Nizar TOUJENI
12/13
setup_comparator (NC_NC_NC_NC);
// This device COMP currently not supported by the PICWizard
init_pas( );
mem_pin_A0 = input (PIN_A0);
mem_pin_A1 = input (PIN_A1);
WHILE (TRUE)
{
old_pin_A0 = mem_pin_A0;
old_pin_A1 = mem_pin_A1;
mem_pin_A0 = input (PIN_A0);
mem_pin_A1 = input (PIN_A1);
IF ((mem_pin_A0==0) && (old_pin_A0== 1))
{
output_high (PIN_C0) ;
rotation_n_pas(10,100,horaire);
// on fait tourner le moteur de 10 pas en sens horaire, 100us
par pas
}
IF ((mem_pin_A1==0) && (old_pin_A1== 1))
{
rotation_n_pas(10,100,antihoraire);
// on fait tourner le moteur de 10 pas en sens horaire, 100us
par pas
output_low (PIN_C0);
}
}
}
Les variables old_pin_A0, old_pin_A1, mem_pin_A0 et mem_pin_A1 sont ajoutes
pour dtecter un appui sur un bouton.
Mr Nizar TOUJENI
13/13
Mr Nizar TOUJENI
14/13