Cours Microcontrôleur Microprocesseur 31
Cours Microcontrôleur Microprocesseur 31
Cours Microcontrôleur Microprocesseur 31
PROGRAMMATION EN C
1 – DEFINITION
Il dispose :
-
-
-
-
Faible coût
Composant programmable et effaçable.
Utilisé de façon autonome : plus besoin d'ordinateur une fois le composant programmé.
Pour développer une application fonctionnant à l’aide d’un microcontrôleur, il faut disposer de :
Le compilateur :
Le programmateur :
Environnement comportant :
MPLAB IDE
Dans l'environnement MPLAB, Le programme doit être écrit en assembleur, langage proche de la machine et
donc nécessitant un long apprentissage.
Le code source écrit en langage c doit donc être compilé en assembleur à l'aide d'un compilateur c.
On utilisera le compilateur CC5X dans sa version gratuite téléchargeable sur www.bknd.com. Cette version
gratuite permet d'écrire environ 1ko de programme.
On peut alors intégrer CC5X dans l'environnement MPLAB. Ainsi CC5X devient un outil de MPLAB dans
lequel l'écriture, la simulation et le debugging du programme en c devient alors possible.
5.1 – BOITIER
Boîtier Plastique DIL ( Dual in Line) à 18 pattes
Le boîtier intègre un µC :
-
-
Technologie CMOS
-
- (à Quartz ou Circuit RC)
N. B : La fonction que l’on choisit d’utiliser pour une patte est définie par programmation en donnant une valeur
précise à un registre spécifiquement prévu à cet usage.
Patte multi fonction Lire la doc …
en anglais !
Registre (8bits) :
Choix de la fonction
Exemple :
5.4 - MEMOIRE
Mémoire FLASH : Mémoire de type EEPROM => Electrically Erasable Programmable Read Only Memory
5.5 - PERIFERIQUES
1 – DESCRIPTION
En effet, certaines pattes de ces ports sont multiplexées avec d’autres fonctions de périphériques internes
(comparateur et référence de tension par exemple).
Quand le périphérique est activé, la borne ne peut plus être utilisée en E/S.
2 – PORT A
a) Registre CMCON
Les pattes du port A étant multiplexées avec les entrées du comparateur, il convient de définir leur rôle grâce au
registre CMCON (Comparator Control Register) registre de contrôle du comparateur.
b) Registre TRISA
TRISAn = 0 => RAn en sortie Remarque : TRISA6 et TRISA7 sont forcés par la configuration de l’oscillateur.
Dans ce cas la donnée lue est « 0 » et ces deux bits sont alors ignorés.
Remarque : Toute opération d’écriture sur une des sorties est précédée d’une
lecture de la patte correspondante.
Le tableau ci-
contre décrit les
différentes
fonctions
multiplexées sur le
port B.
Certaines de ces
fonctions seront
examinées dans
les paragraphes
suivants.
-
-
-
-
b) Registre TRISB
1 – CARACTERISTIQUES DU TIMER 0
TOCS = 1 Compteur
Timer 0 s’incrémente à chaque front montant ou
descendant du signal connecté à la patte RA4/TOCKI
TOCS = 0 Timer
Timer 0 s’incrémente à chaque cycle s’il n’y a pas de
prédiviseur.
En cas d’opération d’écriture dans le timer,
l’incrémentation est inhibée pour les 2 cycles suivants.
Avec une horloge à 4 MHz,
Le pré-diviseur est partagé entre Timer0 et le chien de Garde (Watchdog Timer) ; Ce choix s’opère par l’état
du bit 3 PSA du registre OPTION.
OPTION3 = PSA
5 – EXEMPLE : Temporisation
Pour utiliser le TIMER0 avec pré-division par 256, il faudra une ligne de code dans le programme :
OPTION=0b00000111 ; TMR0 = 0 ;
Ou OPTION=0x07 ; do {
Ou OPTION=7 ; }
while (TMR0 < 240);
Une interruption est générée par le timer0 si le timer ou le compteur passe de xFF à x00 (en hexadécimal).
INTCON5 = TOIE
1 – RAPPEL
V+
+
S = 1 si V+ > V-
S = 0 si V+ < V-
V- -
2 – LES COMPARATEURS
Exemple :
Si l’on souhaite utiliser un seul comparateur, les bits CM2 CM1 et CM0 du registre CMCON sont
respectivement 101.
Le comparateur est alors constitué des deux entrées RA1/AN1 (patte 18) et RA2/AN2 (patte 1). Le
résultat de la comparaison est disponible sur les bits 6 et 7 du registre CMCON.
Ces deux bornes appartiennent au port A qui doit être configuré correctement à l’aide de TRISA :
RA1/AN1 et RA2/AN2 en entrées
Les résultats des deux comparaisons sont disponibles sur les bits 6 et 7 du registre CMCON. (Ces deux bits
sont en lecture seule).
Ils peuvent aussi être transmis sur les sorties RA3/AN3/CMP1 (patte 2) et RA4/TOCKI/CMP2 (patte3).
Pour cela il faut être dans la configuration où CM2 :CM0=110.
Ces deux bornes appartenant au port A, il faut les configurer en sortie à l’aide de TRISA : TRISA = 0bxxx00xxx
Le programme suivant permet de faire fonctionner le pic en comparateur, comme un simple ampli op en
boucle ouverte.
void main(void)
{
CMCON=0b00000110 ; /*choix du mode de
comparaison Cf tableau §4.3 */
TRISA=0b00000110 ; /*RA1 et RA2 entrées, RA4 en
sortie */
}
Après voir compilé le programme source et programmé le composant, on peut câbler le montage suivant pour
tester le fonctionnement :
La résistance Rt est une résistance dite de
Exemple tirage (pull up).
Elle est nécessaire car la sortie RA4 en
+5V 1kΩ 1kΩ +5V mode comparateur est à drain ouvert :
Vdd
Rt
Rt=470Ω
AN2 AN1 D Si G = 1 =>
G
Si G = 0 =>
S
+5V RA4
2,2 kΩ
Le module est constitué d’un réseau de résistances en échelle permettant de fabriquer une tension de
référence VRef.
On dispose de deux gammes dont le choix s’opère par VRR le bit 5 du registre VRCON.
La valeur exacte dans la gamme est commandée par VR les bits 3 à 0 du registre VRCON.
VRCON5 = VRR
La tension de référence doit être activée par le bit 7 mis à 1 dans le registre VRCON.
La tension de référence élaborée est envoyée sur la sortie RA2/AN2/VREF du port A si VROE le bit 6 du registre
VRCON est à 1. Sinon, la tension de référence est déconnectée.
void main(void)
Ainsi on doit avoir VRCON = 0b1110 0110 => Vref = 6*VDD/24 =1,25 V
{
envoyé sur la sortie RA2.
VRCON=0b11100110 ;
TRISA=0b00000100 ;
En même temps, la sortie RA2 du port A doit être configurée en entrée
}
par l’intermédiaire du registre TRISA : TRISA = 0bxxxxx1xx
La sortie Vref programmée par l’intermédiaire d’un mot binaire VR<3 :0> constitue un Convertisseur Numérique
Analogique. Cependant, cette sortie ne peut être chargée sans l’utilisation d’un étage suiveur.
1 – DESCRIPTION DU TIMER 1
Le module Timer 1 est un timer/compteur 16 bits constitué de deux registres 8 bits TMR1H et TMR1L pouvant
être en lecture ou écriture.
Le Timer 1 s’incrémente donc de 0x0000 à 0xFFFF puis repasse à 0x0000. Le dépassement est signalé par le
bit TMR1IF du registre PIR1.
2 – REGISTRE T1CON
T1CON0 = TMR1ON
Les bits 4 et 5 permettent de choisir le taux de division de la fréquence d’horloge interne ou externe.
TMR1CS = 0 Timer
Timer 1 s’incrémente à chaque cycle,
T1CON1 = TMR1CS donc à Fosc/4.
TMR1CS = 1 Compteur
Timer 0 s’incrémente à chaque front
montant de l’horloge externe
Dans ce mode, le timer 1 ne peut pas être utilisé comme base de temps
pour le module CCP (Cf § 7)
non oui
TMR1H a
changé ?
Lire TMR1H
Lire TMR1L
Continuer
4 – BLOC DIAGRAMME DU TIMER 1
Ce module contient un registre 16 bit constitué en réalité de deux registres 8 bits : CCPR1H et CCPR1L.
Ce mode permet de transférer la valeur (16 bits) du timer 1 dans les deux registres 8 bits CCPR1H et
CCPR1L, lorsqu’un événement se produit sur le port RB3 d’entrée.
L’événement déclenchant le transfert est sélectionné par les bits 0 à 3 du registre CCP1CON. (Cf §7.1) :
Les bits 0 à 3 du registre CCP1CON permettent donc de régler un pré-diviseur agissant sur le signal appliqué
à RB3.
La réalisation de la capture est signalée par la mise à 1 du drapeau correspondant : bit 2 CCP1IF du registre
PIR1. Ce bit doit alors être remis à 0 dans le programme.
PIE12 = CCP1IE
Le registre PIR1 est un registre regroupant les drapeaux d’interruption c’est à dire des bits signalant qu’un
événement déclenchant une interruption s’est produit.
Dans ce mode, le registre 16 bits CCPR1 (CCPR1H et CCPR1L) est constamment comparé au timer 1.
Quand ils sont égaux, cela est signalé sur la sortie RB3 :
L’action sur la patte RB3 est choisie par les bits 0 à 3 du registre CCP1CON. (Cf § 7.1).
Comme dans le mode capture, la réalisation de l’égalité est signalée par la mise à 1 du drapeau
correspondant : bit 2 CCP1IF du registre PIR1. Ce bit doit alors être remis à 0 dans le programme.
Le contrôle de cette interruption est réalisé par le bit 2 CCP1IE du registre PIE1.
Si CCP1CON <3 :0> = 1010 alors la réalisation de l’égalité entraîne une interruption logiciel sans affecter RB3.
Si CCP1CON <3 :0> = 1011 alors la réalisation de l’égalité remet à zéro le timer 1. On a ainsi un timer 1 dont
la période est programmable par le registre CCP1.
Le timer 2 est un timer 8 bits avec pré et post-diviseurs programmables par l’intermédiaire du registre T2CON.
Il peut être utilisé en lecture et écriture et est remis à zéro par le reset du microcontrôleur.
Il est activé ou désactivé par le bit 2 du registre T2CON.
Il sert de base de temps pour le mode PWM du module CCP : timer 2 s’incrémente de 0x00 jusqu’à ce qu’il atteigne
la valeur du registre PR2 puis repasse à 0x00 lors du cycle suivant. (fonctionnant en lecture et écriture).
Le bit 1 TMR2IF du registre PIR1 signale l’égalité timer 2 = PR2 en passant à 1. Ce drapeau doit alors être remis à
zéro dans le programme.
Rappel : PWM signifie Pulse Width Modulation. En Français MLI, modulation de largeur d’impulsion. Il s’agit
donc de réaliser un signal dont la largeur de l’impulsion et donc le rapport cyclique est programmable.
Ce mode permet de délivrer sur la patte RB3 utilisée en sortie un signal PWM grâce à l’utilisation du timer 2.
Dans ce mode, le registre 8 bits CCPR1L auquel s’ajoutent les bits 4 et 5 du registre CCP1CON constitue un
mot de 10 bits correspondant à la largeur de l’impulsion :
Largeur de l’impulsion = CCPR1L :CCP1CON<5 :4> . Tosc . (valeur du pré-diviseur du timer 2)
La période du signal PWM dépend d’une valeur devant être écrite dans le registre PR2.
Elle est donnée par la relation : Période PWM = (PR2 + 1) . 4 Tosc . (valeur du pré-diviseur du Timer 2 )
Le bit 1 TMR2IF du registre PIR1 signale l’égalité timer 2 = PR2 en passant à 1. Ce drapeau doit alors être
remis à zéro dans le programme.
1°/ Ecrire un programme qui lit un bouton poussoir connecté à RA0 et allume une led connectée sur RA1 si le
bouton poussoir est relâché et éteint la led si le BP est enfoncé.
2°/ Ecrire un programme qui délivre sur les sorties RB3, RB2, RB1 et RB0 du port B du pic, les valeurs
complémentées des bits RA3, RA2, RA1, RA0 du port A utilisé en entrée.
Exercice 2 : Timer 0
Ecrire un programme qui fait clignoter à la fréquence d’1 Hz, une led connectée sur la sortie RA0 du port A.
Ecrire un programme qui compare les tensions appliquées sur RA1 et RA2 et affiche le résultat sur RA0
Exercice 4.2
Ecrire un programme qui compare AN0 et AN1 à AN2 et affiche le résultat sur RB0 et RB1
Ecrire un programme délivrant sur la sortie RA4, le résultat de la comparaison de la tension Vin appliquée sur RA0
et de la tension de référence interne réglée à 1,25 V
Ecrire un programme qui attend l’appui sur un bouton poussoir connecté sur RB4 pour allumer la led RB0.
Exercice 4.5
Ecrire un programme qui génère une tension RA2 qui augmente de 0,208 V à chaque appui sur un bouton poussoir
connecté sur RB4 jusqu’à atteindre 2,5 V
Reprendre le programme précédent et le modifier pour que la référence interne soit fonction des bits RB3 RB2 RB1
et RB0 du port B utilisé en entrée numérique.
Ecrire un programme permettant d’utiliser un pic pour réaliser un CAN 4 bits ayant les caractéristiques suivantes :
Ve appliquée sur RA1 comprise entre 0 et 3,125 V quantum de 0,2 V.
Le mot binaire résultat de la conversion sera affiché sur 4 leds connectées sur les sorties RB3 RB2 RB1 RB0 du
port B. Les leds sont allumées par un 0 sur la sortie correspondante.
+5V
EXERCICE 1
+5V
BP0 BP1
Ecrire un programme qui allume la
led si les boutons poussoirs BP0 et RB0
BP1 sont appuyés simultanément. RA0
330 Ω RB1
Le programme tournera en boucle.
1°/ Configuration
V. Chollet - cours-pic-13b-trous -
Page 45 sur 48
EXERCICE 2
Ecrire un programme qui attend l’appui sur le bouton poussoir BP0 puis attend le relâchement
du bouton poussoir pour allumer la led pendant 2 s. (Voir schéma exo 1)
V. Chollet - cours-pic-13b-trous -
Page 46 sur 48
+5V
EXERCICE 3
BP0 Vref
Relâché 3V
Enfoncé 4V
V. Chollet - cours-pic-13b-trous -
Page 47 sur 48
EXERCICE 4
V1
Ecrire un programme qui génère une RA0/AN0
tension de référence délivrée sur la patte RA2 V2
RA3/AN3
RA2 selon la règle suivante :
V. Chollet - cours-pic-13b-trous -
Page 48 sur 48