PIC LeçonN°2E
PIC LeçonN°2E
PIC LeçonN°2E
Chapitre N°3
Mise en œuvre d’une application à base
d’un microcontrôleur
Objectifs à atteindre :
Rappeler les structures algorithmiques fondamentales
Réaliser des applications à base des microcontrôleurs
Elaborer un programme spécifique à une application à base de microcontrôleur.
Organigramme
Assembleur et
Algorithme Simulateur
CDCF
compilateur
GRAFCET
4
1 2 3 C
Transfert
24
(assembleur et/ou évolué) que nous utiliserons sur des bases objectives, par exemple de manière
à optimiser le temps de développement, la facilité de maintenance, le nombre d'opérations, etc.
(3) La phase de test doit être menée pour vérifier que le cahier des charges initial est bien
rempli. Cette phase de test « finale » n'empêche pas d'avoir mené des tests séparés lors des
phases de développement matériel et logiciel.
2 Langage C : MikroC
2.1 Filière de développement :
On désigne par filière de développement figure N°1 l’ensemble des outils qui rendre en œuvre
pour passer du fichier texte (source codé en C) au code objet (code machine) téléchargé dans le
microcontrôleur.
Le tableau suivant présente les différentes extensions générées par la filière de développement
25
compilation. fonction) et l’utilisation de la
mémoire pour chaque
fonction.
Fichier de projet (pas obligatoire). Code machine plus
.PJT .COF
Informations de débogage
Fichier qui montre chaque ligne Erreurs éventuelles
.LST du code C et son code assembleur .ERR rencontrées durant la
associé généré compilation.
Indique la correspondance entre le Fichier statistique sur
nom des symboles (variables, bits, l’espace mémoire occupé.
.SYM registres) et .STA etc.
leur adresse hexadécimale en
mémoire.
.ASM Fichier en langage assembleur.
Il existe différents types de variables reconnus par le compilateur du MikroC: Par défaut, tous
ces types de données sont non signés, ils peuvent être signé en rajoutant le mot clé signed devant
le type.
26
2.3 Les opérateurs du langage C : MikroC
Lors de son exécution, un programme est amené à effectuer des opérations qui peuvent être
purement arithmétiques, de comparaison, d’affectation, etc…
Type Description
Type Symbole Exemple
Opérateur d’affectation
Affectation = x=11 ; y=a+b
Opérateurs arithmétiques
addition + a = a+b ; x= 7 + a
soustraction - a= a-b ; y= c-13
moins unitaire - a = -b
multiplication * a=a*a;b=y*9
division / c=8/b;d=a/b
Reste de la division
entière (modulo) % r=a%b
27
=> Le résultat de la comparaison peut prendre deux valeurs vrai ou faux
ET binaire x = a $ b // c est vrai bit à bit si bit à bit a et
&
b sont vrais
OU binaire x= a | b // c est vrai bit à bit si bit à bit a ou
|
b sont vrais
OU exclusif binaire x = a ^ b // c est vrai bit à bit si bit à bit a
^
ou exclu b sont vrais
complément à 1 ~ a=~b
décalage de n bits
>> x = y >> n // y = x décalé de n bits à droite
à droite
décalage de n bits
<< x = y << n // y = x décalé de n bits à gauche
à gauche
Exemples (a et b deux entiers) tel que :
a = 1100 0111 0101 0011 (0xC753) a ^ b = 1101 1110 1111 1101 (0xDEFD)
b = 0001 1001 1010 1110 (0x19AE) ~ a = 0011 1000 1010 1100 (0x38AC)
~ b = 1110 0110 0101 0001 (0xE651)
a & b = 0000 0001 0000 0010 (0x0102)
a<<2 = 0001 1101 0100 1100 (0x1D4C)
a | b = 1101 1111 1111 1111 (0xDFFF)
Un tableau à deux dimensions est défini par l’intersection du nombre des lignes par celui
des colonnes. Un tableau bidimensionnel correspond à la notion de matrice en
mathématiques. Voici une matrice de 3*3 éléments : (3 lignes et 3 colonnes)
19 22 31 90 47
26,8 15 0 74 6
…
28
2.4.2 Tableau à une dimension
Tableau à une dimension
29
Affectation : L’affectation permet de modifier le contenu d’une case du tableau et ainsi
changer sa valeur par une autre valeur de même type ou la valeur d’une
expression.
En algorithmique : <nomtableau>[n°position] valeur
Exemple : tab3[3] 34
La valeur de tab3[3] ne vaut plus 3 mais 34
Ou tab3[3] 5 + tab3[1]
La valeur de tab3[3] ne vaut plus 34 mais 35 car tab3[1] vaut 1 d’après la
déclaration
En langage C : <nomtableau>[n°position] = valeur ;
Exemple : tab3[3] = 34 ;
tab3[3] 5 + tab3[1] ;
Accès : En algorithmique, pour consulter le contenu d’une case, il faut avoir, à la fois, le
numéro de ligne et le numéro de la colonne :
<nomtableau>[n°ligne, n°colonne]
Exemple :
30
Mat3[1,2] permet de connaitre la valeur ‘B’ ‘après la déclaration faite ci-dessus
Par contre en C, la syntaxe de la consultation est la suivante :
<nomtableau>[n°ligne][ n°colonne]
Exemple :
mat2[2][1] permet de connaitre la valeur 90 après la déclaration faite ci-dessus
Affectation : Il est possible de changer le contenu d’une case déjà rempli par une nouvelle
valeur de même type ou par le résultat d’une expression (qui doit être de type
compatible avec celui de l’élément correspondant), la syntaxe utilisée est :
En algorithmique :
<nomtableau>[n°ligne, n°colonne] valeur
Exemple :
Mat3[1,2] ‘G’
La valeur de Mat3[1,2] ne vaut plus ‘B’ mais ‘G’ (voir la déclaration de Mat3
faite ci-dessus)
En C : <nomtableau>[n°ligne][n°colonne] = valeur ;
Exemple : mat2[2][1] = 41 ;
La valeur de mat2[2,1] ne vaut plus 90 mais 41
Ou mat2[2][1] = 3 * mat2[2][1];
La valeur de mat2[2][1] sera 123 au lieu de 41
31
Dissimulation des méthodes : Lors de l'utilisation d'une fonction il faut seulement
connaître son effet, sans devoir s'occuper des détails de sa réalisation.
Réutilisation d'une fonction déjà existante : Il est facile d'utiliser des fonctions que l'on a
écrites soi-même ou qui ont été développées par d'autres personnes.
Simplicité de l'entretien
2.5.2 Syntaxe
La syntaxe d’une fonction est la suivante:
Type_de_la_valeur_de_retour Nom_de_la_fonction (type noms_des_paramètres)
{
liste d’instructions; // Une ou plusieurs instructions séparées par des ;
return (valeur) // Valeur à renvoyer à la fin de la fonction
}
Remarque :
Si la fonction ne renvoi pas de valeur (type de la valeur de retour = VOID), la ligne return
(valeur) est inutile.
Tous les paramètres d’entrées deviennent des variables locales de la fonction.
Exemple de fonction sans paramètre d’entrée et de sortie :
Pour appeler la fonction dans un programme :
initialisation();
Déclaration de la fonction :
void initialisation()
{
TrisB=0;
TrisA=0;
TrisC=0x8F;
Adcon1=7; // Toutes les broches du PortA en numérique
}
Exemple de fonction avec des paramètres d’entrée et pas de valeur retournée en
sortie :
Exemple de fonction avec des paramètres d’entrée et une valeur retournée en sortie :
32
{
if(a>b) //si 'a' est supérieur à 'b'
return a; //on retourne 'a'
else //sinon
return b; //on retourne 'b'
}
Il existe un ensemble de fonctions déjà existantes que l’on peut utiliser dans nos programmes.
Ces fonctions sont stockées dans des librairies (tel que stdio.h par exemple) que l’on doit faire
référence en début de programme.
Exemple : #include <stdio.h>
Fonctions de temporisation
Le compilateur de MikroC intègre des fonctions très pratiques pour gérer les délais, à savoir:
delay_cycles(valeur) ; // temporisation en NB de cycles
delay_us(valeur) ; // temporisation en μS
delay_ms(valeur) ; // temporisation en mS
Les registres de direction figure N° 2 TRISA, TRISB, … permet de configurer les PORTA,
PORTB,…. soit en entrée ou en sortie selon l’utilisation.
L’état du bit i de TRISx ( TRISx<i> ) contrôle la direction du bit i de PORTx (PORTx<i> ):
TRISx<i> = 0 PORTx<i> en sortie (écriture)
TRISx<i> = 1 PORTx<i> en entrée (lecture)
Exemple : TRISB = 0xFF les 8 bits du PORTB en entrées
TRISC = 0x0F RC7 à RC4 en sorties, RC3 à RC0 en entrées
Les bits i 7 6 5 4 3 2 1 0
Le nom de bit RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0
0 0 0 0 1 1 1 1
TRISC = 0x0F
Sortie Sortie Sortie Sortie Entrée Entrée Entrée Entrée
34
Figure N° 2 : choix de la direction de communication
3 Notion d’algorithme
3.1 Définition :
3.2 Organigramme :
35
SYMBOLE DÉSIGNATION
Traitement
Opération ou groupe d’opération sur des données, instructions, etc.
Sous-programme
Portion de programme considérée comme une simple opération.
Entrée-Sortie
Mise à disposition d’une information à traiter ou enregistrement
d’une information traitée.
Embranchement
Test, exploitation de conditions variables impliquant le choix
d’une parmi deux. Symbole utilisé pour représenter une décision.
Les opérations relatives à la résolution d’un problème peuvent en fonction de leur enchaînement,
être organisées selon trois familles de structures :
� Structures linéaires,
� Structures alternatives,
� Structures répétitives.
void main( )
Début algorithme :
{
FAIRE opération 1
fonction_1( ) ;
FAIRE opération 2
fonction_2( ) ;
FAIRE opération 3
fonction_3( ) ;
Fin algorithme.
}
36
3.3.2 La structure alternative ou sélection :
La structure alternative n’offre que deux issues possibles s’excluant mutuellement. Les structures
alternatives définissent une fonction de choix ou de sélection entre l’exécution de l’un ou de
l’autre des deux traitements. Également désignées par structures conditionnelles, elles sont
représentatives de saut ou rupture de séquence.
La structure alternative complète :
SI condition VRAIE
if( condition = = VRAI )
{
ALORS action
fonction( ) ;
}
FIN SI
37
Organigramme Langage algorithmique Exemple en langage C
do
FAIRE {
action fonction( ) ;
TANT QUE condition VRAIE }
while(condition = = VRAI) ;
for( I = Vi ; I > 0 ; I = I – 1 )
{
fonction( ) ;
POUR I = Vi à I = 0 et par pas de 1
}
Équivalent à :
FAIRE action
I=Vi;
while(I>0)
FIN POUR
{
fonction( );
I=I-1; }
38
4 Applications N°1 :
Exercice N°1 : On donne l’algorigramme suivant :
1- Trouver l’équation de S
2- On déduire la (les) fonction(s) réalisée(s) par S
3- Traduire l’algorigramme par le langage algorithmique
4- Ecrire le programme de l’application en langage MikroC
Exercice N° 2:
1- Trouver l’équation de de l’exercice N°1.
On donne l’équation suivante :
2- Tracer l’algorigramme correspondant
Exercice N° 3:
On veut commander une lampe L suivant le montage ci-dessous :
a L
b
1- Donner l’équation de L.
2- Proposer une solution en logique programmée utilisant un microcontrôleur 16F628A
3- Créer l’organigramme de l’équation L.
4- Ecrire le programme relatif à cette solution en langage MikroC
39
Exercice N°4 :
Créer un organigramme et écrire un programme qui incrémente une variable à chaque appui sur
un bouton poussoir L. le nombre d’appui sera égale à 5, la LED raccordée au montage changera
d’état. (Proposer d’abord un schéma de simulation)
PIC 16F84A
ULN2003
--------------------- ---------------------
-----------
--------------------- --------------------- -------------------
--------------------- ---------------------
-- -------------- μC
-----------------
---------------
-----------------
------- ---------------------- -----------------------
--
Start 16f84A
2
8 16
3
9 17
4
….. 10 18
Si Port A
=D’1'
….. 11 Port B = 19
5 13 D’10’
12 20
6 Tempo 14
T-1-1000000µs
13 Saut vers 21 Saut vers
7 15 module N°..... module N°.....
41
Exercice N°6: Etude d’une carte de commande à base d’un microcontrôleur 16F877A :
En se référant à la carte de commande :
1- La référence du microcontrôleur est PIC16F877A : Que signifie la lettre F et A.
2- Donner le nom du circuit d’horloge utilisé.
3- Le PIC16F877A possède plusieurs ports, on demande de compléter le tableau suivant :
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Port A
4- Sur quel port sont connectés les deux moteurs pas à pas
5- Mettre une croix dans la case correspondante :
RB2, RB3, RB4, RB5 sont affectés aux : variables des entrées
variables des sorties
6- Mettre une croix dans la case correspondante :
Sens 1 Sens 2
Le moteur Mb tourne dans le : Si RB0 =1
Si RB1 =1
Le moteur Mb en marche
Le moteur Mb à l’arrêt
8- Déduire l’état du moteur Mb si RB0=0 et RB1=0
9- Une partie du
programme pour la
commande du
moteur Mb est
représenté en
algorigramme
suivant. On
demande de
trouver l’équation
de X.
42
10- Réaliser un algorigramme qui décrit cette équation ; X=a.(m+x)
11- Donner un nom aux équations de la question 9 et 10.
43
Exercice N°7: Système de perçage
Soit le système de perçage suivant : Le moteur est commandé par un contacteur KM1 et le
vérin est Commandé par le distributeur M.
a) Déterminer le GRAFCET PC
b) Remplir le tableau d’affectation
Entrées Sorties
Broches Broches
Capteurs Préactionneurs
du µC du µC
Algorithme grafcet
Variables X0, X1, X2 : octet ; ----------------------------------------------------------
DEBUT ----------------------------------------------------------
TrisA ← ………….. ----------------------------------------------------------
TrisB ← ………….. ----------------------------------------------------------
PortA ← 0; ----------------------------------------------------------
X0 ← 1; ----------------------------------------------------------
X1 ← 0; ----------------------------------------------------------
X2 ← 0; ----------------------------------------------------------
Tanque (1=1) Faire ----------------------------------------------------------
DEBUT ----------------------------------------------------------
SI ((X0=1) ET (Port….=1)) ALORS ----------------------------------------------------------
DEBUT ----------------------------------------------------------
X0 ← 0; ----------------------------------------------------------
X1 ← 1; ----------------------------------------------------------
FINSI ; ----------------------------------------------------------
DEBUT ----------------------------------------------------------
44
X1 ← 0; ----------------------------------------------------------
X2 ← 1; ----------------------------------------------------------
FINSI ; ----------------------------------------------------------
SI ((X2=1) ET (Port…. =1)) ALORS ----------------------------------------------------------
DEBUT ----------------------------------------------------------
X2 ← 0; ----------------------------------------------------------
X0 ← 1; ----------------------------------------------------------
FINSI ; ----------------------------------------------------------
Port…..... ; ----------------------------------------------------------
FINSI ;
SI (X1=1)ALORS Port………SINON
Port…..... ;
FINSI ;
SI (X1=1)ALORS Port………SINON
Port…..... ;
FINSI ;
FINFAIRE ; FIN.
Entrées
Microcontrôleur RA0 RA1 RA2 RA3 RA4 - - -
TRISA =
(------------)H
Système
Sorties
Microcontrôleur RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7
TRISB =
(------------)H
Le potentiomètre P, en réglant la tension u appliquée sur l’entrée RA1 du pic, permet de simuler
l’état de charge d’une batterie.
46
Algorigramme (organigramme) Programme
---------------------------------------------------------------
---------------------------------------------------------------
---------------------------------------------------------------
---------------------------------------------------------------
---------------------------------------------------------------
---------------------------------------------------------------
---------------------------------------------------------------
---------------------------------------------------------------
---------------------------------------------------------------
------------------------------------------------------
47
On donne le GRAFCET
au point de vue système
et au point de vue
commande
Système
Entrées
48
c- Compléter le schéma structurel du système.
49
d- Compléter le programme suivant :
{ ------------------------------------------------------
x5=--------; ------------------------------------------------------
{ //Activation/Désactivation de X4
//Activation/Désactivation de X0 ------------------------------------------------------
if (x3&x5&portc.f4&portc.f6) ------------------------------------------------------
{x0=1;} ------------------------------------------------------
--------------------------------------------------- //Activation/Désactivation de X5
//Activation/Désactivation de X1 if (x4&portc.f7)
if ((x0&portc.f0&portc.f1&portc.f2) {x5=1;portd.f7=1}
---------------------------------------------------- -----------------------------------------------------
if (x1){ x0=0; } }
5 Applications N°2 :
Exercice N°1 :
On donne la référence du microcontrôleur est PIC16f628A : que signifie les lettres F et A
Indiquer la signification des broches :
VSS, VDD, OSC1 OSC2, RA0 à RA7, MCLR
Exercice N°2 :
Pour le cas du PIC 16F84, Quelles le rôle :
- TRISB
50
- WATCHDOG :
- PORTA :
- Cycle machine :
Exercice N°3 :
On veut réaliser un compteur/décompteur modulo 10 à l’aide du PIC 16F84A.
a) Proposer un montage électronique : Il faut utiliser un afficheur 7segments pour
l’affichage et un interrupteur pour le choix entre le comptage et le décomptage.
b) Ecrire l’organigramme de fonctionnement.
c) Ecrire le programme correspondant.
Exercice N°4 :
On propose de réaliser une partie de la carte de commande d’une voiture en utilisant le circuit
PIC 16F84, dans ce cas on utilise:
- Un Interrupteur K de validation du fonctionnement de cette partie de la carte.
- Trois commutateurs à deux positions: K1 pour le choix entre clignotant à droite/ gauche,
K2 « Code /Far » et K3 essuie-glass Marche/Arrêt.
1- Proposer un montage électronique sans oublier que la source de l’alimentation est une
batterie 12V.
6 Applications N°3 :
Exercice N°1 :
On veut réaliser le montage électronique, à base de PIC16F877, d’un testeur de batterie de
voiture qui permet d’allumer les LEDs D1 à D5 selon la tension mesurée de la batterie
- Vb>12v : Batterie chargée D1=1, D2=1, D3=1, D4=1 et D5 éteinte.
- Vb< 12v et Vb>10.4v : Batterie moyennement chargée D1=1, D2=1, D3=1, (D4 et D5)
éteintes.
- Vb<10.4 et Vb>9.1v : Batterie faible D1=1, D2=1, (D3, D4 et D5) éteintes.
- Vb<9.1v : état Batterie déchargée D1=1, (D2, D3 et D4) éteintes et D5 clignotantes.
a) Proposer un montage de réalisation électronique.
b) Donner l’expression de la tension Va en fonction de Vb .
c) Ajouter un interrupteur sur la ligne RA4 du PIC 16F877, qui permet de valider le
fonctionnement de votre préposition.
d) Donner l’organigramme correspondant à ce fonctionnement puis le programme.
51
Exercice N°2 :
On propose de réaliser, pour un Hôtel, une carte pour la commande du parking de voitures.
52
Exercice N°3 :
Figure 1
Le diagramme du cycle est le suivant :
Figure 2
Cycle de fonctionnement :
L’opérateur, après avoir accroché les pièces à traiter sur le cadre situé au point de chargement, en
position basse, donne l’information de départ cycle (dcy). Le chariot automoteur (CM) élève le
châssis en position haute (S5), effectue une translation à droite (TD) et se positionne au dessus
de la première cuve (S2). Le chariot descend (CD) alors le châssis dans le bac de décapage, le
laisse pendant 20 secondes et remonte le châssis pour aller ensuite au bac suivant. Il
recommencera les mêmes opérations jusqu’au poste de déchargement où l’opérateur décrochera
les pièces avant de renvoyer (r). Le chariot remonte puis effectue une translation à gauche (TG).
Rq : On supposera que le processus se trouve dans les conditions initiales au départ cycle :
- Le châssis se trouve en position basse (S6)
- Le chariot se trouve en S1
- Le châssis est vide.
53
Ce système sera commandé par un PIC 16f877.
a) Selon la description précédente, donner dans un tableau les entrées et les sorties du
système à commander.
Entrées Sorties
* ………………………………………… * ………………………………………
* ………………………………………… * ………………………………………
* ………………………………………… * ………………………………………
b) Proposer un schéma électronique (les actions seront représentées par des diodes LEDs) .
c) Donner un organigramme de fonctionnement du système.
d) Ecrire le programme correspondant, en MickroC Pro, permettant de gérer ce système
54