Vous êtes sur la page 1sur 5

Chapitre

: Microcontrô leurs
Sé rie N°3 : Applications à base de PIC ‐ Prof : HmidiF

IV‐ Conversion Analogique Numérique : CAN ou ADC


*ADC_Init();
procedure ADC_Init();  ‐Initialiser le module ADC de PIC.
ADC_Read( )
function ADC_Read(channel : byte) : word;
ByteToStr
procedure ByteToStr(nombre : byte; var chaine : array[3] of char);
Description Convertir  un nombre en une chaine de caractères,  
V‐Modulation de largeur d’une impulsion : MLI ou PWM
*PWM1_Init( );
procedure PWM1_Init(const freq : longint);
*PWM1_Start();
procedure PWM1_Start(); ‐PWM1_Init doit être appelée avant d'utiliser cette routine.
* PWM1_Set_Duty( );
procedure PWM1_Set_Duty(alpha : byte); ‐alpha peut prendre des valeurs de 0 à 255.
3‐/ Registre ADCON1 :
ADCON1
ADFM ‐  ‐  ‐ PCFG3 PCFG2 PCFG1  PCFG0
 

 
 
PRESENTATION DU REGISTRE DE CONTROLE : INTCON (INT ERRUPT CONTROL)
BIT7  BIT6  BIT5  BIT4 BIT3 BIT2 BIT1 BIT0
INTCON 
GIE  EEIE  TOIE  INTE RBIE TOIF INTF RBIF
Ce registre se situe à l’adresse 0BH, dans La mémoire RAM et initialement = 0.

 
Microcontrôleur : Applications à base de PIC – Hmidi F. Page 1 
 B 7 :  GIE  :G LOBAL I NTERRUPT E NABLE BIT :   broche RB0. 
=1 : autoriser  toutes les interruptions d’une seule fois.   B 3   :   RBIE   :RB  PORT CHANGE  I NTERRUPT  E NABLE BIT  :  
=0 : interdire  toutes les interruptions d’une seule fois.   =1 : Autoriser les interruptions si on a changement de niveau sur une des 
Ce bit correspond donc à notre interrupteur de validation générale. entrées RB4 à RB7. 
B 6   :   EEIE   :   E EPROM WRITE COMPLETE  I NTERRUPT  E NABLE BIT  :   =0 : Interdire les interruptions si on a changement de niveau sur une des 
=1 : autoriser l’interruption de fin d’écriture en eeprom.  entrées RB4 à RB7. 
=0 : interdire l’interruption de fin d’écriture en eeprom.  B 2   :   T0IF   :   T MR 0   I NTERRUPT  F LAG BIT :  
B 5   :   T0IE   :T MR 0   I NTERRUPT  E NABLE BIT  :   =1 :il signale la  présence d’un débordement du TMR0 
=1 : autoriser l’interruption générée par le débordement du TMR0   =0 :il signale l’absence d’un débordement du TMR0 
=0 : interdire l’interruption générée par le débordement du TMR0   B 1   :   INTF   :   INT ERRUPT PIN  F LAG BIT  :  
B 4   :   INTE   :   INT ERRUPT PIN  E NABLE BIT  :   =1 : signale la présence d’une impulsion sur la broche  RB0/INT  
=1 : autoriser l’interruption dans le cas d’une modification de niveau de la  =0 : signale l’absence  d’une impulsion sur la broche  RB0/INT  
broche RB0. 
=0 : interdire l’interruption dans le cas d’une modification de niveau de la 
R EMARQUE : Le bit6 (= INTEDG) du registre OPTION_REG, détermine quel est le sens de transition (front montant ou descendant) qui provoque l’interruption.
B 0   :   RBIF   :   P ORT  I NTERRUPT  F LAG BIT  :  
=1 : il signale la présence d’un changement d’état sur l’une des entrées RB4 à RB7. 
=0 : il signale l’absence d’un changement d’état sur l’une des entrées RB4 à RB7. 
Présentation du registre Option_reg
1. R EGISTRE DE CONTROLE :OPTION_REG 
Le registre de contrôle de mode de fonctionnement est : OPTION_REG (voir fiche technique) 
2. P RINCIPE DE FONCTIONNEMENT DU  MODULE T IMER 0 : 

 
 
RBPU  INTEDG  TOCS  TOSE PSA PS2 PS1 PS0 OPTION_REG 

B7 : :  bit de validation de résistance de tirage vers 5V (Pull‐up)  B4 : TOSE : : bit de sélection de front de source d’horloge de tmr0
Si b7=1 : Pull up désactivé.   Si b4 = 1, on a comptage de tmr0, si le signal passe de 1 à 0 sur 
Si B7=0 : Pull up activé.  RA4/TOCKI, 
*  Cette fonction n’existe que pour le PORTB configuré en entrée.    Si b4 = 0, on a comptage de tmr0, si le signal passe de 0 à 1 sur 
B6 : INTEDG : bit de sélection de front d’interruption sur RB0/INT RA4/TOCKI, 
Si b6=1 : on a une interruption si le niveau sur RB0 passe de 0 à 1  * Cette fonction est activé si b5=1 
(front montant)  B3 : PSA : : bit d’affectation de prédiviseur
Si b6 =0 : on a une interruption si le niveau sur RB0 passe de 1 à 0  Si b3 =1 : Le pré‐diviseur est affecté au watchdog. 
(front descendant)  Si b3 =0 : Le pré‐diviseur est affecté au Timer0 
B5 : TOCS : bit de sélection de source d’horloge de tmr0  B2, B1,B0 : PS2,PS1,PS0
Si b5 = 1 : le timer0 compte les impulsions reçues sur la pin  Le prédiviseur indique le nombre des impulsions(N) qui devront être reçus pour 
RA4/TOCKI,   provoquer une incrémentation. Ces trois bits déterminent la valeur de 
Si b5 = 0 : le timer0 est incrémenté en fonction de l’horloge interne  prédivision (N). Il y a donc 8 valeurs possibles,  
(synchronisé au programme)  
Application n°1 : Notion d’interruption
1‐a / configurer le registre INTCON pour autoriser une interruption INT : 
GIE EEIE TOIE INTE RBIE TOIF INTF RBIF INTCON
…. ….  ….  ….  ….  ….  …. ….
1‐b/ programmer ce registre en mikropascal par deux méthodes : 
1ière méthode : intcon.gie := ……… ; intcon.inte := …… ; intcon.intf := ….. ; 
2ème méthode : intcon := $…………… ; 
1‐c/ déduire l’état de registre juste après une impulsion  sur RB0 
GIE EEIE TOIE INTE RBIE TOIF INTF RBIF INTCON
…. ….  ….  ….  ….  ….  …. ….
2‐a / configurer le registre INTCON pour autoriser une interruption RBI : 
GIE EEIE TOIE INTE RBIE TOIF INTF RBIF INTCON
…. ….  ….  ….  ….  ….  …. ….

Microcontrôleur : Applications à base de PIC – Hmidi F. Page 2 


2‐b/ programmer ce registre en mikropascal par deux méthodes : 
1ière méthode : intcon.gie := ……… ; intcon.rbie := …… ; intcon.rbif := ….. ; 
2ème méthode : intcon := $…………… ; 
2‐c/ déduire l’état de registre juste après  une impulsion sur l’une des broches RB4, RB5, RB6 ou RB7. 
GIE EEIE TOIE INTE RBIE TOIF INTF RBIF INTCON
…. ….  ….  ….  ….  ….  …. ….
3‐a / configurer le registre INTCON pour autoriser deux interruptions INT et RBI : 
GIE EEIE TOIE INTE RBIE TOIF INTF RBIF INTCON
…. ….  ….  ….  ….  ….  …. ….
3‐b/ programmer ce registre en mikropascal par deux méthodes : 
1ière méthode : intcon.gie := ……… ; intcon.rbie := …… ; intcon.rbif := ….. ; intcon.inte := ….. ; intcon.intf := …… ; 
2ème méthode : intcon := $…………… ; 
3‐c/ déduire l’état de registre juste après  une impulsion sur l’une des broches : RB4, RB5, RB6 ou RB7. 
GIE EEIE TOIE INTE RBIE TOIF INTF RBIF INTCON
…. ….  ….  ….  ….  ….  …. ….
3‐/ déduire la source d’interruption dans les cas suivants : 
a‐/  INTCON :=$90 ; ‐‐‐‐‐> source de l’interruption :………  b‐/  INTCON :=$88 ; ‐‐‐‐‐‐> source de l’interrution : …………………………… 
c‐/ INTCON :=$98 ; ‐‐‐‐‐‐‐‐‐‐‐‐‐ > source de l’interruption : …………………………… 
4‐/ Un système alarme de sécurité installé dans une maison est construit autour d’un puce microcontrôleur PIC16F84A. Par 
ailleurs, un capteur infrarouge passif (PIR) est intégré avec le système d'alarme pour la détection du mouvement. Le programme 
est de surveillance est constitué par deux sous programmes  
Sous‐programme N°1 commentaires
lampe : = 1 ; pendant la surveillance normale : une lampe témoin connectée sur 
delay_ms(1000) ; la broche RB1 qui clignote chaque seconde indiquant la mise en 
lampe :=0 ; marche du système alarme. 
delay_ms(1000) ;
Sous‐programme N°2 commentaires
sirene : = 1 ; lors de présence d’un mouvement détecté par le capteur PIR, le 
delay_ms(20000) ; système déclenche  une sirène d’alarme connecté à la broche RB2, 
sirene : = 0 ; pendant 20s 
4‐a/ compléter le schéma de câblage du circuit à alarme : 
4‐b/ compléter le programme : 

 
Program alarme ; …………………………………….. While true do
Var ………………………………………………. end; Begin
………………………………………………… Begin ……………………………………………….
Procedure interrupt; Trisb.0:=…….; …………………………………………………
Begin Trisb.1:=……..; ………………………………………………….
…………………………………………………... Trisb.2:= …….; ……………………………………………………
……………………………………………………. Intcon:=$........; end;
…………………………………………………… end.
4‐c/ Pour augmenter la zone de sécurité on ajoute quatre capteurs PIR1, PIR2, PIR3 et PIR4 dans les quatre coins de la maison, 
quelle est la modification qu’elle doit être apportée sur le programme et le schéma de câblage pour qu’elle répond aux besoins 
de cahier Charge.   
 Les 4 capteurs doivent être reliés à ………………………………………………………………..………………………… 
 On ajoute une instruction de ……………………………………….…… du PORTB au procedure d’interruption RBI  
 On configure le registre INTCON à ……………………………………………………………………………………….…… 

Microcontrôleur : Applications à base de PIC – Hmidi F. Page 3 


Application n°2 : Module timer0
1‐a/ Configurer le registre OPTION_REG pour que le compteur TMR0 s’incrémente à chaque 8 impulsions à front montant de 
l’horloge RA4/TOCKI : 
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 OPTION_REG
RBPU INTEDG  TOCS  TOSE PSA  PS2 PS1 PS0
…. ….  ….  …. ….  …. …. ….
1‐b/ programmer ce registre en langage MikroPascal : 
1ière Méthode :  
Option_reg.ps0 := …. ;  Option_reg.ps1 := …. ; Option_reg.ps2 := …. ; Option_reg.psa := …. ; Option_reg.tose := …. ; Option_reg.tocs := …. ; 
2ème Méthode : option_reg := $ ……… ;  
1‐c/ le option_reg := $34 ; déduire l’horloge du tmr0 sélectionnée ainsi que le front d’incrémentation et le pré diviseur affecté : 
Horloge : ………………………………………..…….. , front : …………………………………..…………..… , pré‐diviseur : …………….………………….……….    
Application n°3 : Module PWM et ADC
Pour pouvoir varier la vitesse du moteur de 0 à sa vitesse maximale 1500tr/mn , on a besoin de faire varier le rapport cyclique 
du signal MLI appliqué à la base de transistor Q1 de 0 à 1,  ce qui est correspondant en mikroPascal est de faire varier N1 de 0 à 
255 en utilisant l’instruction PWM1_set_duty(N1) ;  
1‐a/ calculer le rapport cyclique, la vitesse et la tension moy sachant que la tension aux bornes de l’induit est 30V 
PWM1_set_duty(N1) ; N1 α Umoy vitesse
PWM1_set_duty(255) ; ………  …………. …………. …………. 
…………. ……….  0,5 …………. …………. 
1‐a/ écrire un programme qui permet de faire fonctionner le moteur à une vitesse 750 tr/min , sachant que la fréquence de 
hachage est 500Hz . 
program VARIATEUR;  while true do
begin    begin 
PWM1_init(……………);  PWM1_set_duty(………….……); 
PWM1_start;    end; end. 
2‐/ le Module CAN permet de faire varier un nombre N0 de 10 bits à l’aide d’une tension externe en agissant sur un 
potentiomètre (varier la tension Ue de 0 à 5V  le module CAN entraine la variation de N0 de 0 à 1023), l’instruction 
correspondante en mikroPascal est : N0 := adc_read(numero_du_canal);  
2‐a/ compléter le programme pour faire varier la vitesse de 0 à 1500 tr/min en exploitant les deux modules ADC et PWM 
sachant que : la fréquence de hachage est de 500Hz, la justification est à droite, PortA est en mode analogiques et Vref+ = VDD 
et Vref‐ = Vss. 
program VARIATEUR; 
var 
  N1 : byte;  
N0 : word; 
begin 
PWM1_init(……………); 
ADCON1:=…………; 
PWM1_start; 
while true do 
  begin 
  ………….:= adc_read(4); 
  …………………………. 
PWM1_set_duty(…………)

  end;  
end. 
2b‐/ compléter le tableau : 
Ue Adc_read(4) N1 PWM1_set_duty(N1) ; α Umoy vitesse
….. ……  …..  PWM1_set_duty(255) ; …………. ………….  ………….
…… ….  ….  …………. 0,5 ………….  ………….
2c‐/ Décrire brièvement la description des instructions de ce programme ? 
PWM1_INIT(……………); // ………………………………………………………………………………………………………………………………………… 
ADCON1 := ……….. ;      // ………………………………………………………………………………………………………………………………………… 
ADC_READ(4) //          //  …………………………………………………………………………………………………………………………………………… 

Microcontrôleur : Applications à base de PIC – Hmidi F. Page 4 


PWM1_SET_DUTY(………….); // …………………………………………………………………………………………………………………………………… 

Microcontrôleur : Applications à base de PIC – Hmidi F. Page 5 

Vous aimerez peut-être aussi