Conception Avec PIC
Conception Avec PIC
Conception Avec PIC
=
Conception et simulation des
systmes PIC
A.TAOUNI
Lyce Alkhaouarizmy
CASABLANCA
1 ELT
2.
2.1
2.2
2.3
2.4
2.5
2.6
6
8
9
13
15
15
16
16
17
18
18
18
20
20
4.
24
5.
30
30
30
33
35
39
41
42
45
45
47
Conversion AD et DA .
50
50
51
51
54
Les PICs ..
58
58
58
58
3.
6.
7.
8.
Support de cours
Page 1
1 ELT
60
60
60
61
62
62
63
64
64
64
65
65
67
9.
10.1
10.2
10.3
10.4
10.5
67
67
68
68
70
71
71
73
TD/TP .. ..
Support de cours
76
Page 2
1 ELT
Figure 1-1
Figure 1-2
Support de cours
Page 3
1 ELT
Un microcontrleur a une architecture de base similaire celle d'un PC ,dispose d'un bloc OTP ou
mmoire Flash dans lequel sont stockes les instructions du programme, cette section est similaire au
disque dur de l'ordinateur, le PICmicro a une RAM, qui joue le mme rle de la mmoire vive d'un
ordinateur personnel, le microcontrleur possde des ports d'entre et de sortie qui sont similaires aux
priphriques d'entre et de sortie pour ordinateur tel que souris, une imprimante, un cran, un clavier,
et autres.
Ces caractristiques du microcontrleur le rendent idal pour la cration de petites applications qui ont
une interface utilisateur, comme des claviers, des boutons, des lecteurs de la mmoire de stockage de
masse, et des capteurs de diffrentes grandeurs telles que la temprature, l'humidit, la pression, la
lumire, la proximit, etc. De mme, il est possible de crer des environnements de visualisation avec
des afficheurs numriques, alphanumriques et graphiques. Les ports srie comme USART et l'USB
peuvent crer des communications srie et des communications sans fil avec d'autres appareils. En
bref, les possibilits sont sans fin.
Support de cours
Page 4
1 ELT
Figure 1-3
Support de cours
Page 5
1 ELT
2. Principes de langage C
Le langage C datant de 1972, a t cr par les laboratoires Bell en raison de la ncessit de rcrire
les systmes d'exploitation UNIX afin d'optimiser le code assembleur. De la mme manire, le langage
C a t l'volution des langages prcdents appel B et BCPL. Le nouveau langage C, a rapidement
pris la main pour ses fonctionnalits et sa facilit la mise en uvre dans des diffrents systmes de
calcul.
La forme du langage C, est base sur une structure complexe, ncessitant une tude approfondie. Pour
la programmation des microcontrleurs, ltudiant na besoin que des notions fondamentales qui le
permettent de se lancer et de crer les premiers projets en MikroC PRO. La fin ce chapitre est ax sur
la connaissance des notions de base pour commencer tudier les microcontrleurs avec ce document.
bit
char
short
int
long
float
double
Les variables bit peuvent stocker un boolen qui peut tre vrai ou faux, 0 ou 1.
Les variables char sont utilises pour stocker des caractres cods avec le code ASCII. Il est utile pour
stocker des lettres ou des textes.
Une variable short contient un entier 8 bits qui peut prendre des valeurs : -127 127.
Les variables de type int sont des entiers 16 bits, cette variable peut stocker des nombres : -32767
32767.
La variable type long stocke un entier sur 32 bits, sa plage de valeurs est:
-2147483647 2147483647.
Les variables type double et float permettent de stocker des nombres avec virgule.
Les variables ci-dessus peuvent tre dclares, y compris le signe positif et ngatif, ou peuvent tre
dclares au moyen de la directive unsigned.
Support de cours
Page 6
1 ELT
Type de variable
Bit
Char
Short
Int
Long
Float
Double
unsigned char
unsigned short
unsigned int
unsigned long
Taille en octets
1
1
1
2
4
4
4
1
1
2
4
Valeurs
0 ou 1
-127 127
-127 127
- 32767 32767
- 2147483647 2147483647
-1.5x10^45 3.4x10^38
-1.5x10^45 3.4x10^38
0 255
0 255
0 65535
0 4294967295
Tableau 2.1
La dclaration des variables s'effectue en indiquant le type de la variable suivi d'un nom que le
dveloppeur attribue arbitrairement la variable. Au moment de la dclaration d'une variable, il est
possible de lui donner une valeur initiale, mais ceci n'est pas strictement ncessaire. Enfin, la
dclaration doit se terminer par un point-virgule (;).
Dans les exemples suivants, on peut voir comment les dclarations sont faites:
bit VARIABLE1_BIT;
char CARACTERE;
char CARACTERE2='J';
int ENTIER=1234;
float DECIMAL=-12.45;
double DECIMAL2=56.68;
long ENTIER2=-954261;
Les exemples suivants montrent comment dclarer des variables non signes:
unsigned char CARACTERE;
unsigned int ENTIER;
unsigned long ENTIER2;
Les variables peuvent galement tre dclares dans un format qui associe plusieurs variables dans un
mme nombre, ce format est connu comme une chaine de variables ou un vecteur et peut-tre mme
un tableau de variables, en conclusion ce genre de dclaration peut avoir une ou plusieurs dimensions.
L'exemple suivant montre un vecteur de caractre, ou galement connu sous le nom chane de
caractres:
char Text[20];
Support de cours
Page 7
1 ELT
De mme des chanes de variables peuvent tre dclares avec des valeurs initiales, ce genre de
dclaration peut tre vu dans l'exemple suivant:
char Text[20] = Nouveau Texte;
int Eniers[5]={5,4,3,2,1};
float Decimals[3]={0.8,1.5,5.8};
La dclaration des variables doit respecter quelques rgles de base pour viter les erreurs et les
incohrences dans la compilation de code, cet effet il faut tenir compte des conseils suivants:
Les noms des variables ne doivent pas tre rpts.
Les variables ne doivent pas commencer par un chiffre.
Une variable ne peut pas utiliser des caractres spciaux comme: / * ;} {- \! . %.
Des exemples de dclarations de variables quon ne peut pas faire, c'est:
bit 1_VARIABLE-;
char -CARCTERE!;
int 3ENTIER*;
De mme, on peut crer des structures d'informations comme une nouvelle variable cre par le
dveloppeur. Ces structures sont ralises avec les variables prdfinies et peuvent tre des
dclarations des variables ou des variables tableaux. De telles structures sont dclares par
l'intermdiaire de la directive: typedef struct, et la faon de dclarer une variable cre par le
dveloppeur est la suivante:
typedef struct
{
char Nom[10];
int age;
}Utilisateur;
Voici comment utiliser une variable personnalise par le dveloppeur:
Utilisateur U;
U.age = 25;
U.Nom[0]=A;
U.Nom[1]=h;
U.Nom[2]=m;
U.Nom[3]=e;
U.Nom[4]=d;
Page 8
1 ELT
travailler avec les autres bases telles que binaire, hexadcimal et rend plus facile effectuer des calculs
et des tches qui seraient plus complexe en dcimal.
Les systmes de numration en base 2, 10, et 16, sont implments dans le compilateur du langage C.
Lcriture des nombres dcimaux, est la forme la plus simple, ils sont crits en langage C de la mme
manire conventionnelle quon a appris ds les premiers cours des mathmatiques. Les nombres
binaires sont crits avec le prfixe 0b suivi par le nombre binaire. Un exemple d'criture est:
0b10100001 qui est quivalent au nombre dcimal 161.
Les nombres en base 16 ou hexadcimal sont dsignes avec 0x en entte suivi d'un nombre en
hexadcimal, l'expression 0x2A, est un exemple d'un nombre hexadcimal en langage C, qui est
quivalent 42 en dcimal. Les nombres binaires ne peuvent avoir que deux chiffres sont 0 et 1. Les
nombres hexadcimaux peuvent comprendre des chiffres parmi les suivants: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
A, B, C, D, E et F.
L'opration mathmatique de multiplication peut tre effectue entre deux ou plusieurs variables, cet
opration est ralise avec l'astrisque (*), cette expression peut tre vue plus clairement dans les
exemples suivants:
int A;
int B;
int C;
C = A*B;
C = A*B*C;
Support de cours
Page 9
1 ELT
La division arithmtique en langage C est spcifie par la barre oblique (/), dans l'exemple suivant, on
peut voir sa mise en uvre:
int A;
int B;
int C;
C = A/B;
//cet expression stocke la division entre A et B dans
//la variable C.
Lopration modulo calcule le reste d'une division arithmtique, le calcul du modulo est indiqu par le
caractre pour cent (%), l'application de cette opration peut tre vue dans l'exemple suivant:
C = A%B;
Les oprations arithmtiques peuvent tre utilises en combinaison, c'est dire que on peut mlanger
plusieurs oprations en une seule expression, pour voir plus clairement on va observer les exemples
suivants:
int A;
int B;
int C;
C = (A+B)/C;
C = (A/B)*C;
D'autres oprateurs mathmatiques raccourcis peuvent tre utiliss lorsquon veut une modification
constante des variables, par exemple, il est possible d'incrmenter ou de dcrmenter une variable
d'un certain nombre, tout comme il est possible de faire cette opration avec la multiplication et la
division. Pour comprendre ce concept, on observe plus clairement les exemples suivants:
A++;
A--;
A+=4;
A-=5;
A/=4;
A*=3;
A+=B;
A*=B;
Autres oprations mathmatiques plus complexes peuvent tre effectues en langage C, l'aide des
fonctions prdfinies dans la bibliothque mathmatiques. Ce sujet sera trait plus tard, quand les
dclarations des fonctions seront tudies.
Les oprateurs logiques permettent d'effectuer des actions ou des oprations qui respectent la logique
numrique souleve par le mathmaticien anglais George Boole au XIXe sicle. Boole a pos les
oprations boolennes OU, ET, NON, XOR, NOR, NAND, XNOR, qui sont largement tudies dans les
cours de la logique combinatoire et systmes numriques squentielles.
Les oprations logiques sont effectues en langage C entre deux variables ou des constantes, bit bit
de mme poids dans une variable ou un nombre. Pour voir et comprendre les exemples, on rappelle
d'abord les tables de vrit des oprations logiques comme indiqu ci-dessous:
Support de cours
Page 10
1 ELT
Inverseur NOT
Entre
0
1
Sortie
1
0
OR inclusive
Entre 1 Entre 2 Sortie
0
0
0
1
1
0
0
1
1
1
1
1
NOR inclusive
Entre 1 Entre 2 Sortie
0
1
0
1
0
0
0
0
1
1
0
1
OR exclusive ou XOR
Entre 1 Entre 2 Sortie
0
0
0
1
1
0
0
1
1
1
0
1
AND
NAND
Entre 1
0
0
1
1
Entre 2
0
1
0
1
Sortie
0
0
0
1
Entre 1
0
0
1
1
Entre 2
0
1
0
1
Sortie
1
1
1
0
Les oprations logiques en C, sont ralises avec des caractres spciaux qui dsignent chacun. Dans
l'exemple, on peut voir des applications de ces oprateurs logiques:
Opration logique OU, OU inclusive, est dsigne par le caractre barre verticale (|);
Support de cours
La mise en uvre de NAND, NOR est XNOR, sont semblables aux oprations logiques ET,
OU, XOR, avec lajout du caractre tilde () de la complmentation, on observe les exemples:
1 ELT
Le dcalage des bits d'une variable binaire est utile pour des procds et des tches impliquant
la manipulation de donnes au niveau des bits. Le dcalage droite dune variable ou dune
constante, en langage C, est ralis par double caractre suprieur (>>), de la mme manire
pour le dcalage gauche qui est ralis par (< <). L'opration de dcalage fait perdre des bits
et insre des zros dans les nouveaux bits. Dans les exemples suivants, on voit la mise en
uvre de ces oprateurs:
short Donnee=0xFF
short RESULTAT;
RESULTAT = Donnee>> 4
Les oprations logiques et arithmtiques mentionnes ci-dessus sont rsumes dans le tableau suivant:
Description de l'opration
Oprateur
Somme
Reste
Division
Modulo ou reste de la division entire
Incrmenter
Dcrmenter
Opration OU
Opration ET
Opration Ou exclusive
Complment 1
Dcalage droite
Dcalage gauche
+
/
%
++
-|
&
^
>>
<<
Tableau 2-2
Support de cours
Page 12
1 ELT
}
int nom_fonction(int A)
{
}
Les noms dsignant les fonctions rpondent aux mmes rgles de dnomination de variables.
L'exemple suivant montre une fonction qui est capable de calculer le produit de deux nombres avec
virgule:
Une fonction peut utiliser une autre fonction pour excuter des fonctions plus complexes. Pour voir
cette situation, on voit l'exemple suivant, qui calcule l'aire d'un cercle en fonction de son rayon:
Support de cours
Page 13
1 ELT
Surface
Rayon
Figure 2-1
L'aire du cercle est calcul par l'quation A = r , o la valeur de est d'environ 3,1416.
float Valeur_PI ( void )
{
float PI=3.1416;
return PI;
}
//Fin de la fonction
Dans le cas o une fonction utilise des variables locales, la dclaration doit tre faite au dbut de celuici, avant toute autre action ou instruction.
float Aire_Cercle(float Rayon)
{
float Aire;
Aire= Valeur_PI()*Rayon*Rayon;
return Aire;
}
Les fonctions sont crs par le dveloppeur, mais il y en a certaines qui sont prdfinies dans le
compilateur et peuvent tre consultes et mises en uvre en respectant les paramtres d'entre et de
sortie, la plus importante d'entre elles est la fonction main() ou principale. L'importance de cette
fonction rside dans le fait que c'est sur elle que court tout le programme du microcontrleur. Elle est
automatiquement excute quand le microcontrleur est aliment. La fonction main() dans le cas
particulier des microcontrleurs ne contient ni paramtres d'entre ou ni de sortie, sa dclaration peut
tre vue dans l'exemple suivant:
Les dclarations des fonctions, crites par le dveloppeur, doivent tre dclares avant la fonction
main().
Dans le cas d'une fonction qui appelle une autre fonction, la fonction appele doit tre dclare avant
la fonction qui fait l'appel.
Les fonctions trigonomtriques et d'autres fonctions mathmatiques telles que logarithmes, et
exponentielle, peuvent tre utilises avec la bibliothque prdfinie par le compilateur. Cette
bibliothque est appele C_Math.h.
Support de cours
Page 14
1 ELT
Support de cours
Page 15
1 ELT
{
// Partie de code qui est excute si la condition est
//vraie.
}
La structure if else est la mme que if , la seule diffrence est que dans le cas o la condition est
fausse, cest la partie de code associe else qui est excute. Pour comprendre cette situation, on
prend l'exemple suivant:
short Valeur;
if( Valeur>100 )
suprieure 100.
{
Support de cours
Page 16
1 ELT
if( (Valeur2==4)&&(Valeur1<50) )
{
}
}
Support de cours
Page 17
1 ELT
Mettre en uvre une boucle do while est similaire la boucle while, la diffrence quon entre dans la
boucle, le fragment de code est excut, puis il value la condition contenue dans while. En
conclusion, le code est excut au moins une fois avant l'valuation de la condition. Dans l'exemple cidessous, on peut voir comment utiliser ce type de boucle:
short CONT=0;
do
{
CONT++;
} while( CONT<100 );
Support de cours
Page 18
1 ELT
dans une autre. Une boucle peut contenir une ou plusieurs boucles imbriques. Pour mieux
comprendre ce concept, on considre l'exemple suivant:
short COL;
short LIN;
short MATRICE[10][10];
for( COL=0; COL<10; COL++ )
{
for( LIN=0; LIN<10; LIN++ )
{
MATRICE[COL][LIN] = COL*LIN;
}
}
Dans l'exemple ci-dessus, les valeurs stockes sont dans une matrice de 10 sur 10, recouvrant toutes
les positions de la matrice.
Support de cours
Page 19
1 ELT
Figure 3-1
L'utilisation et le travail avec ISIS exigent un large ventail d'outils et d'options quon doit savoir. On
va les dcouvrir progressivement au cours des exemples.
Support de cours
Page 20
1 ELT
Figure 3-2
Lorsquon appuie sur la touche P, le programme ouvre une nouvelle fentre qui permet de trouver les
dispositifs lectroniques travers la rfrence commerciale, ou sous la classification adopt par ISIS.
Pour rechercher un dispositif, on entre la rfrence dans la zone: Keywords, le programme gnre une
liste, sur le ct droit de la fentre, des dispositifs en fonction de la recherche de l'utilisateur.
Pour slectionner un dispositif, on double-clique sur sa rfrence dans la liste donne. Pour
commencer, on repre les dispositifs suivants: BUTTON, LED-RED, RES, correspondants au bouton
poussoir, LED rouge, et une rsistance. Aprs ce processus, dans la palette on devrait avoir les
appareils suivants:
Figure 3-3
La prochaine tape consiste trouver les bornes de la masse et lalimentation, cet effet, on clique sur
l'icne suivant:
programme.
Support de cours
Page 21
1 ELT
Lorsquon clique sur cet outil, une liste de terminaux qui apparait, on trouve GROUND et POWER,
qui correspondent respectivement la rfrence lectrique ou la masse et lalimentation ou Vcc. La
borne d'alimentation a une diffrence de potentiel de 5 volts par dfaut. Pour placer ces terminaux
dans la zone de travail, on clique sur les lments dans la palette des terminaux, puis dans la zone de
travail. Aprs cette action, la zone de travail devrait tre comme la figure suivante:
Figure 3-4
L'tape suivante consiste fixer les dispositifs dans la zone de travail, on choisit le bouton:
dans
la palette d'outils sur la gauche. Pour coller les dispositifs dans lespace de travail, on procde de la
mme manire que les terminaux, enfin on aura lespace de travail suivant:
Figure 3-5
La prochaine tape est d'effectuer les connexions lectriques, pour cet exemple, tous les lments
sont connects en srie, cet effet le curseur de la souris prend la forme d'un crayon, pour lier entre
deux bornes on clique sur la premire puis la prochaine et le programme termine la connexion. la
fin des connexions, lespace de travail devient:
Support de cours
Page 22
1 ELT
Figure 3-6
Enfin, on peut modifier la valeur de la rsistance par un double clic de la souris sur la rsistance, avec
cette action on affiche une fentre pour modifier la valeur de la rsistance, qui est par dfaut 10k, ce
qu'il faut faire est de la changer 330.
L'tape suivante consiste lancer la simulation, la palette situe dans le coin infrieur gauche de
l'cran permet de contrler les simulations. Cette palette a l'apparence suivante:
Figure 3-7
Enfin, on appuie sur le bouton play et la simulation fonctionne, lorsque la simulation est en cours, on
peut appuyer sur le bouton poussoir, et voir l'effet sur la simulation. Cet exemple simple montre le
processus de cration d'un schma sur ISIS.
La cration des circuits en ISIS, implique une autre srie d'actions qui seront abords au cours des
exemples.
Support de cours
Page 23
1 ELT
Figure 4-1
La prochaine action est de cliquer sur le bouton Next, cette tape de l'assistant affiche une case pour
slectionner la rfrence de PICmicro, quon souhaite utiliser. Dans ce champ, on slectionne le PIC
P16F84A. L'tape suivante est de dfinir la frquence d'oscillation avec laquelle travaillera le PIC ;
dans cet exemple on slectionne 4.000000 MHz. L'option suivante permet de dfinir le rpertoire o le
dveloppeur enregistrera le projet, dans ce rpertoire le programme enregistrera tous les fichiers
ncessaires, parmi lesquels le code source qui sera archiv avec lextension .c, et lexcutable du PIC
de avec lextension. hex.
L'tape suivante, lassistant demande d'ajouter des fichiers joindre au projet. Lorsquon cre un
nouveau projet, cette tape peut tre ignore, et on appuie sur Next, le dernier lment de l'assistant
demande si le dveloppeur veut slectionner les bibliothques quil va utilises dans ce travail, par
dfaut, ce paramtre slectionne toutes les bibliothques utilisables pour ce PIC, le meilleur est de
laisser toutes les bibliothques actives. Enfin, la configuration est termine et le projet est cr, la fin
la fentre doit apparatre comme suit:
Support de cours
Page 24
1 ELT
Figure 4-2
A chaque modification effectue sur le code du programme, on doit compiler le code en appuyant sur
le bouton suivant
: il est situ en haut du programme dans la barre d'outils. Cette action produit
des rsultats de la compilation quon trouve dans la partie infrieure de la fentre de programme. Les
messages doivent se terminer par un text Finished successfully.
Pour commencer ldition dun projet, on configure les ports du PIC, puis on insre le programme
dans une boucle infinie. Le PIC 16F84A dispose de deux ports A et B, on manipule le registre TRIS
pour configurer les ports en sortie ou entre. Chaque port a son registre TRIS respectif, quon
configure avec trois tats possibles, tats haut, bas, et haute impdance.
Les registres TRIS ont le mme nombre de bits que les ports, par exemple le port B ou PORTB de ce
PIC est de 8 bits, donc le TRISB comporte galement 8 bits. Les bits des registres TRIS correspondent
ceux des ports, et dfinissent bit bit l'tat du port. Si un bit du TRIS est 0 le mme bit du port est en
sortie, et Si un bit du TRIS est 1 le mme bit du port est en entre ou en haute impdance. Pour voir ce
concept plus clairement, on observe et on analyse l'exemple suivant:
TRISB = 0b11110000;
PORTB=0b00000000;
Cet exemple utilise un bouton et deux LED pour afficher le comportement du programme. On observe
et on analyse le programme ci-dessous:
Support de cours
Page 25
1 ELT
PORTB=0b00000000;
while( 1 ) //Boucle infinie
{
if( PORTB.F7==0 )
//test si bit RB7 est 0
{
if( PORTB.F0==1 )
//test la valeur du bit RB0 et commute sa valeur.
PORTB.F0=0;
else
PORTB.F0=1;
while( PORTB.F7==0 ); //attend que RB7 passe 1.
}
COMPTEUR++;
//Incrmente la valeur du COMPTEUR.
//La condition if qui suit change automatiquement
ltat //du bit RB1tout les 256 incrmentations
if(COMPTEUR&0x0100 )
//test si le bit 8 du COMPTEUR est 1
PORTB.F1=1;
else
PORTB.F1=0;
}
}
L tape suivante est de faire la simulation sur ISIS, les rsistances des LED doivent tre changes
330, lentre Master CLeaR , MCLR doit tre connect Vcc pour que le PIC ne redmarre pas , la
fin on devrait voir la forme suivante:
Figure 4-3
Support de cours
Page 26
1 ELT
Avant de lancer la simulation, on doit charger le fichier .Hex. Pour procder on double clique sur le
PIC, et une fentre qui permet de rechercher le fichier .Hex, dans cette fentre on peut galement
ajuster la frquence d'oscillation. Par dfaut, cette valeur est de 1 MHz, des fins de simulation dans
ce cas, on doit slectionner 4 MHz, cette fentre se prsente comme suit:
Figure 4-4
Pour des fins de la programmation physique du microcontrleur, il est important de tenir compte des
conditions de la configuration du PIC, chacun des microcontrleurs Microchip possde un champ de
mmoire qui caractrise le comportement rel de la PIC, entre elles on peut souligner, le type
d'oscillateur ou horloge de traitement, par exemple quand on utilise un quartz de 4MHz, l'oscillateur
doit tre rgl sur XT, si l'oscillateur est de 20MHz on utilise la configuration HS. S'il s'agit dun
quartz d'une faible vitesse comme 400KHz, on utilise la configuration LP, et si un oscillateur est mis
en uvre en utilisant un circuit RC ou une rsistance en srie avec un condensateur, on utilise loption
RC.
De mme, il est possible de configurer d'autres options telles que l'utilisation du chien de garde et la
protection du code en mmoire FLASH et lEEPROM, cette dernire option est trs importante pour
protger les informations du microcontrleur et d'empcher le programme ou les donnes de la
mmoire dtre lues. Pour modifier la configuration du PIC, on doit chercher Edit Project ...qui se
trouve dans longlet Project du menu principal de MikroC PRO.
L'accs cet outil est expliqu dans la figure suivante:
Support de cours
Page 27
1 ELT
Figure 4-5
Support de cours
Page 28
1 ELT
Figure 4-6
Support de cours
Page 29
1 ELT
Figure 5-1
Les afficheurs 7 segments sont fabriqus en deux formats; anode commune et cathode commune, les
afficheurs 7 segments existent galement dans un format dynamique, ces derniers utilisent deux
chiffres ou plus dans un seul boitier reliant tous les segments en parallle, mais avec bornes communes
spares. Les figures suivantes montrent des afficheurs 7 segments dans leur forme dynamique:
Figure 5-2
Lentre DP, quon peut voir sur la figure ci-dessus, est le huitime segment. Il est mis en uvre dans
certains affichages et correspond la virgule, il est utilis si la demande l'exige.
Support de cours
Page 30
1 ELT
segment "a" est reli la broche RB0, le "b" la broche RB1, et ainsi de suite, jusqu'au segment "g"
la broche RB6. Cependant, le dveloppeur peut faire laffectation des broches dune manire
arbitraire.
Il est important de connaitre un outil contenu dans le logiciel MikroC PRO qui permet dditer les
digits de lafficheur. Pour cela on utilise Tools dans la barre de menu, et on choisit loutil Seven
Segment Editor.
Avec cette action, ressort une nouvelle fentre o on peut diter dune manire simple les segments de
l'afficheur 7 segments. Au moment de ldition de lafficheur, apparait la valeur constante qui doit
tre utilise sur les sorties du port dsign pour son contrle. L'diteur permet de mettre en uvre des
constantes pour l'afficheur anode ou cathode commune. De la mme faon, on peut utiliser les valeurs
en dcimal ou hexadcimal. L'aspect visuel de l'diteur est:
Figure 5-3
Lutilisation de cet outil signifie que toutes les broches de lafficheur sont attribues au mme port, et
dans un ordre conscutif comme on a vu ci-dessus. Pour la visualisation des chiffres dans lafficheur,
on doit organiser les informations de ces digits dans un ordre conscutif, dans le cas de cet exemple de
0 9. A cette fin, la forme la plus simple est l'utilisation d'un tableau de donnes contenant les codes
des 10 chiffres. Dans l'exemple suivant, on dclare un tableau constant avec les codes des 10 chiffres,
et on utilise un afficheur cathode commune. On observe comment dclarer des constantes qui
doivent tre insres avant la fonction main:
const unsigned short DIGITS[] =
{
0x3F, //Code du digit 0
0x06, // Code du digit 1
0x5B, // Code du digit 2
0x4F, // Code du digit 3
0x66, // Code du digit 4
0x6D, // Code du digit 5
0x7D, // Code du digit 6
0x07, // Code du digit 7
0x7F, // Code du digit 8
0x6F, // Code du digit 9
};
Support de cours
Page 31
1 ELT
Pour afficher les chiffres dans l'afficheur 7 segments, cet exemple va utiliser le port B du PIC
16F84A. La visualisation des numros est contrle par une routine, qui change le chiffre aprs une
temporisation ralise par une fonction delay_ms, cette fonction qui est prdfinie dans les
bibliothques du compilateur. Cette fonction a pour paramtre dentre un entier reprsentant le temps
en millisecondes, pendant lequel le PIC effectue un retard, de la mme manire on peut utiliser la
fonction delay_us, qui est identique delay_ms mais en microsecondes.
Alors, le code source du PIC pour cet exemple est le suivant:
const unsigned short DIGITS[] =
{
0x3F, //Code du digit 0
0x06, //Code du digit 1
0x5B, //Code du digit 2
0x4F, //Code du digit 3
0x66, //Code du digit 4
0x6D, //Code du digit 5
0x7D, //Code du digit 6
0x07, //Code du digit 7
0x7F, //Code du digit 8
0x6F, //Code du digit 9
};
void main ( void )
{
unsigned short COMPTEUR=0;
TRISB = 0;
while( 1 )
{
PORTB = DIGITS[COMPTEUR];
COMPTEUR++;
delay_ms(1000);
}
}
L'tape suivante consiste effectuer la simulation dans ISIS, pour cet effet, les dispositifs suivants
sont dcouverts: 16F84A, RES, et 7SEG-COM-CATHODE. Pour la liaison entre le PIC et l'afficheur,
on devrait utiliser les rsistances de 330. Par la suite, on ralise le circuit suivant :
Circuit 5-1
Support de cours
Page 32
1 ELT
A lexcution de la simulation, on doit voir sur lafficheur un comptage des nombres de 0 9, avec
une cadence dune seconde entre chiffres et chiffre.
N++;
if( N==12 )
{
N=0;
Nombre++;
if( Nombre==10000 )
Nombre=0;
}
}
}
1 ELT
//Variable de comptage.
//Configurer le port B en sortie
// Configurer le port A en sortie
//Dsactiver tout les afficheurs
//Boucle infinie
//Visualiser la valeur du Nombre.
//cette fonction dure approximativement 40ms.
//On compte 12 incrmentations de N pour faire une
//incrmentation
//du Nombre approximativement chaque 500ms.
//Initialiser le compteur N.
//Incrmentation de la valeur Nombre.
//Test si Nombre vaut 10000
//Initialisation 0 si nombre = 10000.
On compile le programme. Finalement, on ralise la simulation sur ISIS avec les dispositifs suivants
16F84A, RES, 7SEG-MPX4-CC,7404. Le circuit est le suivant:
Support de cours
Page 34
1 ELT
Circuit 5-2
Pour des raisons pratiques, les inverseurs 7404 peuvent tre remplacs par un rseau de
transistors, comme on le voit dans l'image ci-dessous:
Circuit 5-3
Lorsque la simulation est en marche, ce circuit devrait afficher un nombre de 0 9999 avec une
cadence de 500ms entre chaque incrment.
Support de cours
Page 35
1 ELT
Figure 5-4
Les afficheurs LCD, permettent de visualiser les caractres figurant dans le code ASCII. En plus du
code ASCII, LCD affiche jusqu' 8 caractres conus par le dveloppeur. Une autre caractristique
fondamentale des afficheurs LCD, tenant physiquement sur 8 bits, est la possibilit de configurer les
connexions avec seulement 4 bits. La connexion 8-bit implique un plus grand nombre de fils utiliser,
pour une meilleure vitesse de travail, par consquent les connexions de 4 bits rduits le nombre de fils,
mais diminue la vitesse. La bibliothque prdfinie dans MikroC PRO fonctionne avec une
configuration de 4 bits.
Pour voir la bibliothque prdfinie pour ce dispositif et d'autres, contenues dans MikroC PRO, on
choisit View dans la barre de menu, et on appuie sur lun onglet : Library Manager. Lorsquon appuie
sur cet onglet un menu montrant les diffrentes bibliothques quon peut utiliser avec les PIC.
Dans ce nouveau menu, on identifie la bibliothque Lcd, par la suite on peut appuyer sur une des
fonctions contenues dans la bibliothque pour voir l'aide. L'aspect visuel de cet outil est illustr dans la
figure suivante:
Support de cours
Page 36
1 ELT
Figure 5-5
Support de cours
Page 37
1 ELT
Pour changer les broches, il suffit de changer les noms des sorties du port utilis dans l'exemple
prcdent. Comme on peut le voir dans la prsentation ci-dessus seulement 6 broches sont ncessaires
pour faire fonctionner le LCD, avec 4 bits de donnes et 2 bits de contrle.
A la fin, on doit appeler la fonction dinitialisation dans la fonction main aprs configuration des ports.
La fonction main doit tre comme suit:
void main( void )
{
Lcd_Init();
while(1)
{
}
}
//Initialisation du LCD.
//Boucle infinie.
Aprs ldition du code ci-dessus, l'afficheur LCD est initialis et devrait tre prt commencer
laffichage des caractres, se positionnant dans la premire ligne et la premire colonne, montrant le
curseur clignotant.
Les LCD sont fabriqus dans diffrentes formes et couleurs, ils sont disponibles avec des crans vert,
bleu et jaune, avec des distributions de caractres sous forme de matrice comme les LCD 2 lignes, 16
colonnes. Ceux-ci sont connus comme 2x16, de la mme manire on peut trouver des 1x16, 2x16, 2x8,
2x20, 4x20, entre autres. Pour les exemples de ce chapitre, on utilisera l'afficheur 4x20.
Pour dmarrer la simulation de l'afficheur LCD, on cherche le dispositif de LM044L, et PIC 16F84A
dans le simulateur ISIS. La rfrence LM044L dans ISIS correspond un LCD de 4x20. Enfin, on
effectue les connexions comme indiqu dans le circuit suivant:
Circuit 5-4
Lafficheur LCD a une broche nomme VEE, cette broche fonctionne comme contrleur du contraste
de l'cran, mais dans la simulation, elle n'a pas d'effet. Cette broche peut tre relie la masse pour
Support de cours
Page 38
1 ELT
gnrer le contraste le plus lev, certains grands crans ncessitent une tension ngative externe pour
contrler le contraste. Pour des raisons pratiques, le contraste peut tre ajust par l'intermdiaire d'un
potentiomtre, comme indiqu dans le circuit suivant:
Circuit 5-5
La prochaine tape consiste afficher l'cran des informations. A cet effet, on peut utiliser quatre
fonctions. Deux de ces fonctions permettent d'afficher des caractres, et les deux autres des chanes de
caractres.
Pour afficher les caractres, on peut procder de deux faons, la premire affiche simplement les
caractres dans l'ordre conscutif pris par l'afficheur et la seconde fonction imprime les caractres dans
la ligne et la colonne dsignes par le dveloppeur.
//Initialisation du LCD.
//cette fonction affiche lettre lettre le mot Salut.
//Boucle infinie.
Aprs l'excution de la simulation, on devrait observer ce qui suit sur l'afficheur LCD:
Support de cours
Page 39
1 ELT
Figure 5-6
Pour l'affichage des caractres au moyen des cordonnes ligne, colonne, la fonction mise en uvre:
Lcd_Chr(char row, char column, char out_char); cette fonction imprime le caractre out_char, dans
la colonne column et la ligne row. Dans l'exemple ci-dessous, on peut voir comment utiliser cette
fonction:
void main( void )
{
Lcd_Init();
Lcd_Chr_Cp(S);
Lcd_Chr_Cp(a);
Lcd_Chr_Cp(l);
Lcd_Chr_Cp(u);
Lcd_Chr_Cp(t);
Lcd_Chr( 1, 6, 1);
Lcd_Chr( 2, 7, 2);
Lcd_Chr( 3, 8, 3);
Lcd_Chr( 4, 9, 4);
while(1)
{
}
}
//Initialisation du LCD
//Ces functions impriment lettre lettre le mot
//Salut.
Aprs l'excution de la simulation, on devrait observer ce qui suit sur l'afficheur LCD:
Support de cours
Page 40
1 ELT
Figure 5-7
//Initialisation du LCD.
//Boucle infinie.
La mise en uvre de cette fonction peut tre faite avec des chanes de caractres constantes ou
variables, des chaines constantes sont indiques par des guillemets au dbut et la fin du texte, par
exemple "Salut tout le Monde ", la forme variable est dclare : char texte [20] = "Salut tout le Monde
". Aprs avoir excut la simulation, on a comme montr dans la figure suivante:
Support de cours
Page 41
1 ELT
Figure 5-8
Pour imprimer une chane de caractres avec une coordonne comme point de dpart, on implmente
la fonction : Lcd_Out(char row, char column, char *text);. Cette fonction est similaire la
prcdente, la diffrence quon inclut les donnes row et column, qui font rfrence respectivement
la ligne et la colonne. Pour bien comprendre le fonctionnement de cette fonction d'observe et on
analyse l'exemple suivant:
void main( void )
{
Lcd_Init();
Lcd_Out( 1, 1, Ligne 1, Colonne 1 );
Lcd_Out( 2, 2, Ligne 2, Colonne 2 );
while(1)
{
}
}
//Initialisation du LCD.
//Boucle infinie.
Aprs la compilation et la simulation de cet exemple, on devrait observer sur l'cran LCD comme suit:
Figure 5-9
Page 42
1 ELT
Limpression des nombres entiers en chane de caractres avec cette fonction, rserve toujours un
champ fixe de 7 caractres, c'est dire si le nombre est infrieur 7 chiffres le reste du texte est
complt par des espaces vides. Aprs compilation du programme et simulation sur ISIS, on a un
rsultat comme dans la figure suivante:
Figure 5-10
Limpression des nombres dcimaux (avec virgule) peut tre fait avec la fonction:
FloatToStr(float fnum, char *str);. La philosophie de fonctionnement de cette fonction est identique
la prcdente, qui fait des conversions d'entiers. Pour raliser l'exemple suivant, on doit modifier la
rfrence du microcontrleur, cela est d la capacit de mmoire du PIC 16F84A, qui n'est pas
suffisante pour les exercices suivants.
void main( void )
{
int ENTIER=123;
123.
float DECIMAL=12.76543;
char Text[20];
Lcd_Init();
IntToStr( ENTIER,Text );
Lcd_Out(1,1,Text);
FloatToStr( DECIMAL,Text );
Lcd_Out(2,1,Text);
while(1)
{
}
}
Support de cours
Page 43
1 ELT
Circuit 5-6
Le mme processus peut tre suivi pour autres types de variables telles que: short avec la fonction:
ShortToStr(short input, char *output);
Les variables long avec la fonction:
LongToStr(long input, char *output);
Des variables unsigned short avec la fonction:
ByteToStr(unsigned short input, char *output);
Variables unsigned long avec la fonction:
LongWordToStr(unsigned long input, char *output);
Les variables unsigned int avec la fonction:
WordToStr(unsigned int input, char *output);
Support de cours
Page 44
1 ELT
Figure 6-1
Lorsque des changements de tension traversent la zone indfinie, gnrent des rebondissements de
ltat haut ltat bas et vice versa. Le microcontrleur les dtecte comme des impulsions. Pour viter
l'effet du bruit ou des rebonds, on devrait faire une temporisation en attendant la stabilisation de l'tat
du signal. La dure moyenne d'un rebond est de 1 5 millisecondes, indique qu'un retard doit tre
effectu suprieur ce temps pour attendre la stabilisation. Un retard convenable cet effet est
suprieur ou gal 10 millisecondes. Ce dlai devrait s'appliquer aprs la dtection du premier
changement sur le bouton.
Pour le traitement des boutons et llimination des rebondissements, le compilateur MikroC PRO
dispose dune bibliothque Button, qui peut tre touv dans la palette ou l'onglet des bibliothques.
Cette bibliothque contient la seule fonction: unsigned short Button(unsigned short *port, unsigned
short pin, unsigned short time, unsigned short active_state); o port est le port o le bouton est
connect, pin est le bit du port o le bouton est connect, time est le temps d'attente en millisecondes
du bruit et active_state est l'tat logique pour lequel on souhaite l'activation du bouton. La fonction
retourne 0 si le bouton n'est pas actif et 255 si elle est active. Installation des boutons peut tre
effectue de deux manires, actif ltat haut ou actif ltat bas, la figure suivante montre comment
configurer les deux possibilits:
Support de cours
Page 45
1 ELT
Circuit 6-1
La dcision d'utiliser l'activation ltat haut ou bas, dpend du dveloppeur qui doit analyser la
manire la plus simple au moment de la conception. On rappelle que dans tous les cas l'activation
finale peut tre inverse avec la fonction de la bibliothque. Pour analyser et tudier l'utilisation de
cette bibliothque, on cre un nouveau projet avec les composants: PIC 16F877A, BUTTON, RES, et
LED-RED. Le circuit correspondant dans ISIS est le suivant:
Circuit 6-2
Page 46
1 ELT
PORTB.F0=0;
}
}
A lexcution de la simulation, la LED doit s'allumer lorsque le bouton est press, et steindre
lorsqu'il est relch.
L'exemple suivant commute ltat de la LED :
void main( void )
{
TRISB=0xF0;
PORTB=0;
while(1)
{
if( Button(&PORTB, 7, 100, 0) )
{
if( PORTB.F0==1 )
PORTB.F0=0;
else
PORTB.F0=1;
Figure 6-2
Lutilisation du Dip-Switch est similaire au bouton. Il peut tre configur de la mme manire avec
activation sur ltat haut ou bas. Ces configurations peuvent tre apprcis dans le circuit suivant:
Support de cours
Page 47
1 ELT
Circuit 6-3
Pour comprendre l'utilisation du Dip-Switch avec les microcontrleurs PIC, on observe et on analyse
l'exemple suivant:
void main( void )
{
TRISB = 0;
PORTB = 0;
TRISC = 255;
while(1)
{
PORTB = ~PORTC;
}
}
//Configuration de ports.
//Boucle infinie.
//Sortir dans le port B le complment du port C.
Pour excuter la simulation dans ISIS, on utilise les dispositifs suivants: 16F877A, RES, LED-RED,
DIPSW_8. Puis le circuit suivant est mis en uvre dans ISIS:
Support de cours
Page 48
1 ELT
Circuit 6-4
Support de cours
Page 49
1 ELT
7. Conversion AD et DA
La conversion analogique-numrique et numrique analogique est un processus par lequel on peut
prendre ou dlivrer un chantillon d'un signal continu de tension. Lutilisation des conversions est trs
utile pour le traitement numrique des signaux. La conversion analogique numrique, ou ADC, peut
tre faite avec des microcontrleurs qui intgrent ce type de convertisseur. Le processus de conversion
numrique-analogique est possible avec des lments externes faciles implmenter, mme on peut
effectuer cette conversion par des modules PWM incorpors dans certains des microcontrleurs.
Support de cours
Page 50
1 ELT
Circuit 7-1
Aprs l'excution de la simulation, les LED montrent le code binaire correspondant la valeur de la
conversion analogique-numrique de la tension applique par le potentiomtre lentre analogique 0.
FC
1
2RC
quation 7-1
Circuit 7-2
Support de cours
Page 51
1 ELT
Circuit 7-3
FC
1
2RC 2
quation 7-2
La frquence attribue la porteuse PWM, doit tre beaucoup plus grande que la frquence du signal
modulant. Pour expliquer le fonctionnement de cette conversion, on dsigne 20 chantillons
correspondant une priode d'un signal sinusodal. Les chantillons et la forme d'onde peut tre vu
dans la figure suivante:
Figure 7-1
La figure suivante illustre le comportement d'un signal PWM, selon la priode de travail, la relation
fpwm et Tpwm:
Support de cours
Page 52
1 ELT
Figure 7-2
Enfin, il y a des fonctions: PWM1_Start () et PWM1_Stop ();, Qui active et dsactive respectivement
le signal PWM.
Pour la simulation doit crer un projet en MikroC PRO, avec le code source suivant:
//Dclaration des constantes
//pour le signal sinus.
const unsigned short Sinus[20] =
{
127, 146, 163, 177, 185, 189, 185,
177, 163, 146, 127, 107, 90, 76,
68, 65, 68, 76, 90, 107
};
void main( void )
{
unsigned short n=0;
PWM1_Init(15625);
Hz.
PWM1_Start();
while(1)
{
for( n=0; n<20; n++ )
//Boucle infinie.
//Boucle pour parcourir les 20 chantillons
//dune priode du signal sinus.
{
PWM1_Set_Duty( Sinus[n] );
delay_us(50);
}
}
}
L'excution de la simulation ncessite les dispositifs: 16F877A, RES, PAC, OP1P et des instruments
virtuels: OSCILLOSCOPE. Ce dernier est un oscilloscope virtuel 4 canaux simultans, idal pour
l'affichage des signaux analogiques et mme numriques.
Ce circuit met en uvre un filtre passe-bas pour liminer fpwm frquence porteuse dans ce cas est
15.6KHz, le filtre a une frquence de coupure d'environ 1,5 kHz.
Dans les applications futures, il est recommand de calculer les filtres, dfinir une valeur arbitraire
pour le condensateur C, entre 100 pF et 100nF et calculer la valeur de R, en utilisant les quations cidessus.
Support de cours
Page 53
1 ELT
Circuit 7-4
Au cours de la simulation, on peut voir sur loscilloscope le signal analogique de forme sinusodale,
produit de la reconstitution numrique du PIC, par l'intermdiaire du module PWM, et le filtre passebas. Le signal visualis par l'oscilloscope peut tre apprci sur la figure suivante:
Figure 7-4
Support de cours
Page 54
1 ELT
Il est noter que plus on utilise de bits, plus la rsolution est meilleure, donc une plus grande qualit
du signal reconstruit.
Linconvnient notable de cette disposition est l'augmentation du matriel exig, et par consquent,
l'utilisation d'un plus grand nombre de broches du port.
Dans le circuit ci-dessous, on peut voir la configuration des rsistances pour une conversion de 8 bits:
Circuit 7-5
Cette disposition peut tre tendue avec la mme architecture de ralisation pour un convertisseur
d'une rsolution plus leve, ce qui augmente le nombre d'entres D, qui est le mme nombre de bits.
Une autre caractristique de ce type de conversion est qu'il ne ncessite pas des bibliothques
spcialises, il suffit simplement de placer la valeur numrique convertir sur un port, et la valeur
analogique sera prsente dans la sortie.
De la mme faon quon a procd pour la conversion avec PWM, il est important de supprimer la
frquence d'chantillonnage pour viter les composantes de signal.
Le schma complet du convertisseur avec un suiveur pour ladaptation dimpdances, suivi dun filtre
passe bas de frquence de coupure 1.5KHz:
Circuit 7-6
Page 55
1 ELT
{
PORTB = Sinus[n];
delay_us(50);
}
}
}
Support de cours
Page 56
1 ELT
Circuit 7-7
Le rsultat attendu est cette simulation est similaire la simulation du convertisseur avec PWM, la
sortie de l'oscilloscope devrait montrer une courbe identique.
Support de cours
Page 57
1 ELT
8. Les PICs
8.1 Les microcontrleurs
Un microcontrleur est un composant lectronique Autonome dot :
dun microprocesseur,
de la mmoire RAM,
de la mmoire permanente
des interfaces dE/S parallle, srie (RS232, I2C )
des interfaces dE/S analogique
des Timer pour grer le temps
dautres modules plus au moins sophistiqus selon la taille des C.
Un microcontrleur peut tre programm une fois pour toutes afin qu'il effectue une ou des tches
prcises au sein d'un appareil lectronique. Mais les C rcents peuvent tre reprogramms et ceci
grce leur mmoire permanente de type FLASH (do le terme flasher un appareil).
Support de cours
Page 58
1 ELT
Les PICs sont subdivises en 3 grandes familles : La famille Base-Line, qui utilise des mots
dinstructions de 12 bits, la famille Mid-Range, qui utilise des mots de 14 bits (et dont font partie la
16F84 et la 16F877), et la famille High-End, qui utilise des mots de 16 bits.
Les PICs sont des composants STATIQUES, Ils peuvent fonctionner avec des frquences dhorloge
allant du continu jusqu une frquence max spcifique chaque circuit.
On se limite dans ce document la famille Mid-Range et particulirement aux PIC 16F84/877, sachant
que si on a tout assimil, on pourra facilement passer une autre famille, et mme un autre
microcontrleur.
C indique que la mmoire programme est une EPROM ou plus rarement une EEPROM
CR pour indiquer une mmoire de type ROM
F pour indiquer une mmoire de type FLASH.
On note ce niveau que seule une mmoire FLASH ou EEPROM est susceptible dtre efface.
Puis on trouve les derniers chiffres identifiants prcisment le PIC. (84/877)
Enfin on voit sur les botiers -XX dans laquelle XX reprsente la frquence dhorloge maximale
que le PIC peut recevoir. Par exemple 04 pour une 4MHz.
Donc, un 16F84-04 est un PIC Mid-Range (16) dont la mmoire programme est de type FLASH (F)
donc rinscriptible, de type 84 et capable daccepter une frquence dhorloge de 4MHz.
Une dernire indication que on trouve est le type de botier. Le botier PDIP par exemple est un botier
DIL 18 broches, avec un cartement entre les ranges de 0.3.
Support de cours
Page 59
1 ELT
9. Le PIC 16F84
9.1 Organisation du 16F84
Les microcontrleurs de la socit Microchip les plus rencontres sont les 16F84 et 16F87X. Leur
structure est du type HARVARD et se composent d'une CPU architecture RISC 8 bits.
Le 16F84, en botier DIP 18 broches, peut fonctionner une frquence maximale de 10 MHz pour un
cycle d'instruction de 400ns. Il est constitu des lments suivants :
Figure 9-1
Page 60
1 ELT
La mmoire EEPROM
La mmoire EEPROM (Electrical Erasable Programmable Read Only Memory), est constitue de 64
octets quon peut lire et crire depuis un programme. Ces octets sont conservs aprs une coupure de
courant et sont trs utiles pour conserver des paramtres semi-permanents. Leur utilisation implique
une procdure spciale quon verra par la suite, car ce nest pas de la RAM, mais bien une ROM de
type spcial. Il est donc plus rapide de la lire que dy crire.
La mmoire RAM
La mmoire RAM est celle qui est trs utilise. Toutes les donnes qui y sont stockes sont perdues
lors dune coupure de courant. La mmoire RAM est organise en 2 banques pour la 16F84. La RAM
est subdivise de plus en deux parties. Dans chacune des banques on trouve des cases mmoires
spciales appeles REGISTRES SPECIAUX et des cases mmoires libres dont on peut se servir.
9.3 L'Horloge
L'horloge peut tre soit interne soit externe. L'horloge interne est constitue d'un oscillateur quartz
ou d'un oscillateur RC. Avec l'oscillateur Quartz, on peut avoir des frquences allant jusqu' 10 MHz
selon le type de C.
Figure 9-2
Le filtre passe bas (Rs, C1, C2) limite les harmoniques dus lcrtage et Rduit lamplitude de
Loscillation, il n'est pas obligatoire.
Avec un oscillateur RC, la frquence de l'oscillation est fixe par VDD, Rext et Cext. Elle peut varier
lgrement d'un circuit l'autre.
Figure 9-3
Dans certains cas, une horloge externe au microcontrleur peut tre utilise pour synchroniser la PIC
sur un processus particulier.
Figure 9-4
Support de cours
Page 61
1 ELT
Quelque soit l'oscillateur utilis, l'horloge systme dite aussi horloge instruction est obtenue en
divisant la frquence par quatre. Par la suite on utilisera le terme Fosc/4 pour dsigner l'horloge
systme. Avec un quartz de 4 MHz, on obtient une horloge instruction de 1 MHz, soit le temps pour
excuter une instruction de 1s.
Figure 9-5
Support de cours
Page 62
1 ELT
Figure 9-5
Certains registres sont identiques dans les 2 banques (FSR par exemple). Cela signifie quy accder
depuis la banque 0 ou 1 ne fait pas de diffrence.
Pour la grande majorit des registres, chaque bit a une fonction spciale.
Support de cours
Page 63
1 ELT
STATUS
IRP
RP1
RP0
/T0
/PD
DC
03
Adresse
03 ou
STATUS.7
IRP est un bit destin permettre laccs plus de 256 mots de RAM
par adressage indirect, il nest pas utilis par le 16C84
83H
STATUS
RP1-RP0 Sont les deux bits de slection de la PAGE en RAM, seul 6-5
RP0 est utilis par le 16C84. Le second peut tre utilis comme bit dusage
gnral mais cela est dconseill pour des raisons de compatibilit des
Logiciels avec dautres botiers de la famille 16CXX.
STATUS.4
/TO (Time Out) Est mis 1 lors de la mise sous tension ou de la remise
zro du chien de garde, il est bascul 0 si le chien de garde dborde.
STATUS.3
/PD (Power Down) Est mis 1 la mise sous tension, 0 par une
instruction SLEEP
Support de cours
Page 64
1 ELT
Registre INTCON
Les interruptions sont dfinies et autorises partir du registre INTCON
Adresse
0B
ou 8B
INTCON
GIIE
EEIE
RTIE
INTE
RBIE
RTIF
INTF
RBIF
0B
INTCON.7
INTCON.6
INTCON.5
INTCON.4
INTCON.3
INTCON.2
INTCON.1
INTF. Ce bit dtecte cette interruption mme si elle nest pas autorise
INTCON.0
Support de cours
Page 65
1 ELT
EECON1
EEIF WRERR WREN WR
RD
88H
7
6
5
4
3
2
1
0
EECON1.4 EEIF EEPROM Interrupt Flag est mis 1 lorsquune
criture est termine une interruption lui est associe, il ne
faut pas oublier que lcriture dun octet dans lEEPROM
prend 10mS.
EECON1.3 WREER Mis 1 si une erreur sest produite pendant
lcriture
Adresse
88H
EECON1.2 WREN ce bit doit tre mis 1 pour autoriser une criture,
il est au 0 Au reset
EECON1.1 Doit tre forc 1 pour crire une donne, est remis 0 par
le logiciel lorsque lcriture est acheve
EECON1.0 RD Doit tre mis 1 pour lire un octet, est remis
automatiquement au 0 par le circuit.
Tableau 9-5
Charger 55 dans W
Transfrer W dans EECON2 (adresse 89H)
Charger AA dans W
Transfrer W dans EECON2
Monter 1 le bit WR de EECON1
Il nexiste pas de procdure deffacement car toute criture dans une case mmoire EEPROM efface
son contenu prcdent.
Support de cours
Page 66
1 ELT
PIC
FLASH RAM
EEPROM
I/O
A/D
Port//
Port Srie
16F870
2K
128
64
22
NON
USART
16F871
2K
128
64
33
PSP
USART
16F872
2K
128
64
22
NON
MSSP
16F873
4K
192
128
22
NON
USART/MSSP
16F874
4K
192
128
33
PSP
USART/MSSP
16F876
8K
368
256
22
NON
USART/MSSP
16F877
8K
368
256
33
PSP
USART/MSSP
Tableau 10-1
Support de cours
Page 67
1 ELT
Figure 10-1
10.4 Registres
Support de cours
Page 68
1 ELT
Figure 10-2
Support de cours
Page 69
1 ELT
Figure 10-3
La PIC 16F877 possde 8 entres analogiques (RA0..RA3, RA5 et RE0..RE2 pour les PICs disposant
du port E)
Ces entres sont multiplexes vers un CAN approximation successive (SAR = Successive
Approximation Register). Celui-ci a une rsolution de 10 bits.
Le CAN est prcd dun chantillonneur/bloqueur permettant une stabilit de la tension dentre
pendant toute la dure de la conversion.
Support de cours
Page 70
11.
1 ELT
Les capteurs
La mise en uvre de capteurs dans les systmes microcontrleurs est utile dans de nombreuses
applications. Les capteurs permettent d'obtenir des lectures des grandeurs physiques telles que la
temprature, l'acclration, la pression, l'humidit, la vitesse du vent, la luminosit, le contraste entre
autres. Son application est importante dans les systmes de contrle, de la robotique et de
l'instrumentation.
Figure 11-1
Pour effectuer la lecture de la tension de sortie du capteur, on met en uvre le module CAN du
microcontrleur. La sortie maximale du capteur est de 1,5V, lorsque la temprature est de 150 degrs
Celsius. Il est donc important de changer la valeur de la rfrence positive du convertisseur analogiquenumrique, afin d'amliorer la rsolution de la mesure de tension. Pour l'exemple suivant la tension de
rfrence positive de l'ADC sera fixe 2,5 volts. Prendre la rfrence positive 2,5V, le convertisseur
donne un rsultat binaire 1023 lorsque la tension convertir est de 2,5V. Dans le cas de ce capteur, va
tre dfini par les relations suivantes:
O Radc est le rsultat binaire de conversion AN. A partir de cet quation, on peut dduire que la
tension Vadc lue par le convertisseur analogique-numrique est le suivant:
O N est la temprature en degr Celsius enregistre par le capteur, de cet quation on peut dduire que
la temprature N est :
Support de cours
Page 71
1 ELT
Cette relation doit tre mise en uvre avec la conversion AD, dans le programmation du PIC.
Pour mettre en contexte l'utilisation de ce capteur, on peut observer et analyser le code source suivant
pour PIC 16F877A:
//Dfinition des broches du LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;
//Dfinition des TRIS du LCD
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
void main( void )
{
//Dclaration des variables.
unsigned int Radc, TemI;
float Tem;
char Text[16];
//Configuration du module ADC avec la broche AN3
//comme tension de rfrence positive.
ADCON1 = 0b11000001;
//Initialization du LCD.
Lcd_Init();
//Effacer le curseur.
Lcd_Cmd(_LCD_CURSOR_OFF);
//Affichage du texte.
Lcd_Out( 1, 1, "Temperature:");
while(1)
//Boucle infinie.
{
//Lecture du canal 0 du module CAN.
Radc = ADC_Read(0);
//Utilisation de l quation (5).
Tem = 0.244*Radc;
//Convertir le rsultat en un nombre entier.
TemI = Tem;
//Convertir le nombre entier en une chaine de caractres.
IntToStr( TemI, Text );
//Affichage du rsultat.
Lcd_Out( 2, 1, Text);
//Retard de 100m secondes.
Support de cours
Page 72
1 ELT
delay_ms(100);
}
}
Aprs l'dition et la compilation du programme, on doit construire un circuit dans ISIS avec les
dispositifs suivants: 16F877A, IC, LM35, et LM016L, ceci peut tre vu dans la figure suivante:
Circuit 11-1
Les rsistances 330 constituent un diviseur de tension pour crer la rfrence de 2,5 volts. Au cours de
la simulation, on peut changer la valeur de temprature au capteur LM35 pour le voir travailler....
Figure 11.2
Support de cours
Page 73
1 ELT
Fonction
Vout
GND, rfrence
Vs, alimentation
No connects
Tableau 11-1
En fonction du capteur mis en place, chaque capteur a une relation de la sortie ou une fonction de
transfert, dans le cas particulier de la fonction de transfert du capteur MPX4115 indique par le
fabricant est:
Donc on va extraire la tension n de l'quation (8) et en la remplaant dans l'quation (7), on peut obtenir
la relation ou l'quation qui va tre utilise dans le microcontrleur pour dterminer la pression. La
relation est la suivante:
Pour le cas particulier de cet exemple, on utilise une source dalimentation de 5V pour le PIC et le
capteur. Donc Vs est gale 5V, la relation finale devient :
Pour dmontrer le fonctionnement pratique de ces capteurs, on peut observer et analyser le code source
suivant:
//Dfinition des broches du LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;
//Dfinition des TRIS du LCD
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
void main( void )
{
//Dclaration des variables.
Support de cours
Page 74
1 ELT
Support de cours
Page 75
1ELT
TP 1 Prise en main
I. Cration d'un premier projet
Vous disposez d'un petit fascicule en anglais intitul Creating the first project in mikroC for PIC. Ce
texte vous indique la marche suivre pour crer et compiler un projet.
1. Manipulation :
Suivre les instructions (jusqu' l'excution - run) avec les recommandations suivantes :
- nom du projet : tp1a
- Chemin du projet d:\tp_pic\tp1. Ce dossier doit tre cr en remplaant rep_perso par un nom qui
vous est propre
- Le type (device) est lire sur la puce elle-mme. En principe 16F887.
- Choisir les fusibles par dfaut.
- Le programme suivant est saisir :
1
2
3
4
5
6
7
8
9
void main ()
{
PORTB = 0;
TRISB= 0;
while (1) {
PORTB = ~PORTB; // Clignoter PORTC
delay_ms(1000);
}
}
Si vous voulez un fonctionnement correct de Delay_ms, il faut configurer aussi la frquence du quartz
(8 MHz) correctement.
2. Manipulation
Aller dans le dossier de votre projet et examiner les fichiers .hex, .mcl, .asm, .lst. Que contiennent ces
fichiers, quelle est leur utilit ?
Par quelles instructions assembleur sont traduites les lignes suivantes ?
- PORTB = 0;
- TRISB= 0;
Crer un nouveau projet toujours dans votre dossier tp1 nomm tp1b. Le programme saisir est le suivant :
1
2
3
4
5
6
7
8
9
void main ()
{
int k ;
PORTB = 0;
TRISB= 0;
for (k=0;k<256;k++) {
PORTB = k;
// Comptage binaire sur PORTB
delay_ms(500);}
}
A.TAOUNI
1ELT
3. Manipulation
Pour utiliser le dbogueur reportez-vous la photocopie ci-aprs.
A.TAOUNI
1ELT
On rappelle qu'en C le OU boolen se fait par ||, le ET boolen par &&. Nous aurons besoin du OU bit
bit | et du ET bit bit &. Soit le contenu d'un registre C sur 8 bits,
b7 b6 b5 b4 b3 b2 b1 b0
1
1
1
0
0
0
1
1
1. Prparation :
- Vous dsirez mettre le bit b2 1 sans changer les autres bits, comment faites-vous ?
- Vous dsirez mettre le bit b6 0 sans changer les autres bits, comment faites-vous ?
II. Exemple
On vous donne un programme C qui fait clignoter une led (poids faible) sur le portC.
1 void main ()
2
{
3
4
PORTC = 0;
5
TRISC= 0;
6
while (1) {
7
PORTC = 0x01;
8
Delay_ms(1000);
9
PORTC = 0x00;
10
Delay_ms(1000);
11
}
12 }
1. Exercice 2.1:
crire ce programme, le charger et l'excuter. Modifiez-le pour faire clignoter RC1.
III. Exercices
1. Exercice 2.2:
crire un chenillard simple : une led se dplaant sur le PORTC (de haut en bas) et en utilisant le
mme type de temporisation que dans le programme exemple. Utilisez l'un des oprateurs >> ou <<.
2. Exercice 2.3:
crire un chenillard double : un chenillard de haut en bas et simultanment de bas en haut qui se
croisent.
A.TAOUNI
1ELT
void main ()
On
vous
2
{ donne un programme C qui fait clignoter une led (poids faible) sur le port B.
3
4
5
TRISA= 0b00000100; // tous les bits en sortie pour PORTA sauf RA2
PORTA = 0;
}
1. Exercice 3.1:
crire un programme qui positionne en entre les quatre bits de poids faible du PORTB et en sortie
les quatre autres. Le programme doit alors en permanence copier les 4 bits de poids faibles vers les
quatre bits de poids fort.
2. Exercice 3.2:
crire un programme qui comporte les lments suivants :
un compteur binaire sur le PORTC (256 tats). Placer une temporisation de 100 ms entre chaque
tat.
L'appui sur RB2 (bit b2 du PORTB) doit remettre zro le compteur.
Les accs aux bits seront effectus par des accs directs (en crivant PORTB.F2 pour accder
au bit b2 du PORTB). Puis dans un second temps avec des masques.
A.TAOUNI
1ELT
Figure 1
II. Exercices
1. Exercice 4.1:
En vous aidant de laide du mikroC PRO for PIC (figure 2) crire un programme qui affiche le
message Salam! Sur le LCD 2x16, conformment la (figure 3).
Figure 2
A.TAOUNI
1ELT
Figure 3
2. Exercice 4.2:
crire un programme qui comporte les lments suivants :
Effacer le curseur.
Modifier le programme pour crire le message Lyce Alkhaouarizmy sur deux lignes de
lafficheur LCD.
Modifier le programme de lexercice 4.2, pour dcaler le message 16 fois droite et 16 fois
gauche.
Effacer le lafficheur LCD.
A.TAOUNI
1ELT
Le PIC 16F877 possde 8 entres analogiques (RA0..RA5 et RE0..RE2 pour les PICs disposant du port
E) multiplexes vers un C.A.N. approximation successive (SAR = Successive approximation register).
Ce dernier est prcd dun chantillonneur / bloqueur permettant une stabilit de la tension dentre
pendant toute la dure de la conversion.
Figure 1
II. Exemple
On dsire afficher la valeur en provenance d'un convertisseur analogique numrique sur un LCD.
La figure ci-dessous explique comment et un programme d'exemple se trouve parmi les dmonstrations
fournies dans la rubrique daide.
Figure 2
A.TAOUNI
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1ELT
// PORTA is input
// PORTB is output
// PORTC is output
1. Exercice 5.1:
crire un programme qui lit le convertisseur et affiche le rsultat sur lafficheur.
Adapter pour que votre programme lise RA3 (contre RA2 dans le programme d'exemple).
Figure 3
2. Exercice 5.2:
Modifier le programme prcdent pour quil affiche la valeur de la tension correspondante la valeur
numrique donne par le convertisseur conformment la figure ci-dessous :
A.TAOUNI
1ELT
Figure 4
A.TAOUNI
1ELT
Exercice 1 :
crire le programme pour raliser la mesure et l'affichage sur LCD de la temprature en utilisant un
capteur de temprature LM35. La temprature mesure est comprise entre 0C et 150C.
Caractristiques principales
Plage de la tension d'alimentation
Sensibilit
Prcision
Type de botier
TO 92
Lyce Alkhaouarizmy
A.Taouni
1ELT
Exercice 2 :
crire le programme pour raliser la mesure et l'affichage sur LCD de la pression en utilisant un capteur
de pression MPX4115. La pression mesure est comprise entre 15 et 115KPa.
Caractristiques du capteur de pression MPX4115 :
PIN
1
2
3
4, 5,6
Lyce Alkhaouarizmy
Fonction
Vout
GND, rfrence
Vs, alimentation
No connects
A.Taouni
1ELT
Exercice 3:
crire un programme de thermostat utilisant le LM35, un bouton UP, un bouton DOWN, un afficheur
LCD et une LED:
Exercice 4:
Faire l'algorithme de gestion de l'affichage d'un menu sur LCD srie:
Au dbut:
Choix 1
Choix 2
Choix 3
Choix 4
Choix 1
Choix 2
Choix 3
Choix 4
Lyce Alkhaouarizmy
Choix 1
Choix 2
Choix 3
Choix 4
A.Taouni
1ELT
Choix 1
Choix 2
Choix 3
Choix 4
Choix 2
Choix 3
Choix 4
Choix 5
Choix 2
Choix 3
Choix 4
Choix 5
Exercice 5:
crire le programme pour faire dfiler un texte de gauche droite sur l'afficheur LCD:
L
Ly
lyc
lyce
Lycee
ycee
Alkhaouarizmy
Alkhaouarizmy
Lyce Alkhaouarizmy
A.Taouni