Académique Documents
Professionnel Documents
Culture Documents
ESTI 2011-2012
Objectifs
Programmer en langage C les diffrents modules du pic16F877: Les ports dentres/sorties. Le module de Conversion analogique numrique DAC. Les Interruptions La transmission srie RS232. Les Timers : TMR Les modules de comparaison CCP Lcriture dans la mmoire EEPROM et dans la mmoire Flash.
PORTB: 8 bits
PORTC: 8 bits PORTD: 8 bits PORTE : 3 bits
33 pins IO (E/S)
ESTI 2012-2013 Ferchichi Moez 3
Quelque soit le mode (Analogique ou Numrique), il faut utiliser le registre TRISA pour configurer la direction des E/S : Bit i de TRISA = 0 TRISA.fi =0; bit (pin) i du PORTA configur en sortie Bit i de TRISA = 1 TRISA.fi=1; bit i du PORTA configur en entre
ESTI 2012-2013 Ferchichi Moez 5
En entre, la ligne RB0 appele aussi INT peut dclencher linterruption externe INT. En entre, une quelconque des lignes RB4 RB7 peut dclencher l'interruption RBI. Nous reviendrons l-dessus dans le paragraphe rserv aux interruptions.
PORTD nest pas implment sur le 16F876, il est disponible sur le 16F877. PORTD peut tre utilis dans un mode particulier appel parallel slave port, pour cela il faut placer le bit 4 (PSPMODE) de TRISE 1. Dans ce cas les 3 bits du PORTE deviennent les entres de control de ce port (RE, WE et CS).
Exercices
Exercice 1LED: Clignoter des LEDs A) Sachant que le PIC est dot d'un quartz de 4 MHz, donner le programme en langage C qui fait clignoter les LEDs branches sur Le port B avec une temporisation voisine de 1s. B) Changer le programme pour faire clignoter la LED connecte sur RB0 avec une temporisation de 10s et garder la mme temporisation (1 s) pour les autres LEDs.
ESTI 2012-2013 Ferchichi Moez 10
Exercices
Exercice 2LED: Ecrire un programme en ASM qui fait clignoter une diode LED (des LEDs) connecte(s) au port RB0 du PIC16F877 une frquence de 2,5 Hz. Lhorloge du PIC est de 4 Mhz, ce qui implique quune instruction sexcute durant 1 microseconde. Exercice 3LED: Jeu de lumire :On utilise le PORTB pour faire un jeu de lumire. Ce jeu de lumire consiste mettre RB0 1 et le faire dcaler sur les autres pins. Chaque diode LED sallume pendant 200 ms. Ecrire un programme en Langage C et en Assembleur.
Exercices
Exercice Afficheur 7Seg-BCD: Ecrire un programme en langage C qui permet dafficher les 16 symboles Hexadcimaux: 0..F sur un Afficheur 7seg-BCD. (lafficheur sera command par les Pins RD0..RD3).
12
Exercices
Exercice Afficheur 7Seg: Ecrire un programme en langage C puis en langage Assembleur qui permet dafficher les 16 symboles Hexadcimaux: 0..F sur un Afficheur 7Seg Cathode Commune selon le schma suivant: Rq: Dans cet exercice nous avons besoin de dclarer un tableau en assembleur. Ceci peut se faire par deux mthodes : soit mettre le tableau dans la mmoire de donne EEPROM , soit dclarer le tableau dans la mmoire de programme. Nous utiliserons la deuxime mthode dans cet exercice. Ce tableau sera dclar sous la forme dune procdure dont la premire instruction permet de pointer sur lindex de la case du tableau afficher.
RC7 Segment pt RC6 Segment g RC5 Segment f RC4 Segment e RC3 Segment d RC2 Segment c RC1 Segment b RC0 Segment a
8
13
Exercices
Exercice Afficheur 7Seg: Ecrire un programme en langage C qui permet dafficher les 16 symboles Hexadcimaux: 0..F sur un Afficheur 7Seg Cathode Commune tel que la valeur de dbut est lue sur les entres RA0..RA3 :
PIC16F877 8
RA0 . . RA3
Afficheur 7 Seg
14
15
A la fin de la conversion, le rsultat de conversion est recopi dans les registres ADRESH et ADRESL, le bit GO/DONE repasse automatiquement 0 et le drapeau ADIF (situ dans PIR1) passe 1 ce qui peut dclencher linterruption associe si elle est valide.
Le control du module se fait par les deux registres ADCON0 ou ADCON1.
16
ADCON0
ADCS1:ADCS0 : Choix de l'horloge de conversion donc du temps de conversion 00 : Fosc/2 01 : Fosc/8 10 : Fosc/32 11 : Oscillateur RC ddi au CAN
CHS2:CHS0 : choix de l'entre analogique 000 = channel 0, (RA0) 001 = channel 1, (RA1) 010 = channel 2, (RA2) 011 = channel 3, (RA3) 100 = channel 4, (RA5) 101 = channel 5, (RE0) 110 = channel 6, (RE1) 111 = channel 7, (RE2) GO/DONE : Une conversion dmarre quand on place ce bit 1. A la fin de la conversion, il est remis automatiquement zro. Ce bit peut aussi tre positionn automatiquement par le module CCP2. ADON : Ce bit permet de mettre le module AN en service
ESTI 2012-2013 Ferchichi Moez 17
ADCON1
ADFM : justification droite ou gauche du rsultat 1 : justifi droite 000000XX XXXXXXXX 0 : justifi gauche XXXXXXXX XX000000 PCFG3:PCFG0 : configuration des E/S et des tensions de rfrences. Les 5 broches du PORTA et les 3 du PORTE peuvent tre configurs soit en E/S digitales, soit en entres analogiques. RA2 et RA3 peuvent aussi tre configures en entre de rfrence.
18
Avec Vref- = masse, on obtient N = int (Va / Q) exemple : Vref+ = Vdd = 5V, Vref- = 0, Vin = 4 V Q = 5V/1024 = 0,0048828125 V N = 4V / 0,0048828125 = 819
ESTI 2012-2013 Ferchichi Moez 19
Temps d'acquisition
Pendant la conversion, la tension Ve l'entre du convertisseur A/N doit tre maintenue constante. Le PIC dispose dun chantillonneur bloqueur intgr constitu d'un interrupteur S et d'une capacit de maintien de C=100pF
20
Temps dacquisition
Pendant le temps de conversion, S est maintenu ouvert, la capacit bloque Ve une valeur constante. A la fin de la conversion, S se ferme, la tension Ve rejoint la tension analogique d'entre Va au bout d'un temps d'acquisition qui dpend de la constante de temps RC.
R tant la somme de la rsistance d'interconnexion (Ric), la rsistance du sampling switch S (Rss) et la rsistance de la source de tension Va (Rs).
La valeur de Rs ne doit pas dpasser 10 k. La valeur Ric est 1 k La valeur de Rss dpend de la tension d'alimentation, elle est de l'ordre de 7k pour Vdd=5V et de 5 k pour Vdd = 6V
21
Temps dacquisition
Tc : temps de charge du condenseur : TC= (Ric+Rss+Rs).C.Ln(2047) CT : Coefficient de temprature = (Tp -25C) 0.05 s/C Tp = Temprature Processeur
Exemple: Avec Ric = 1k, Rss = 7k, Rs = 2k, Tp = 50 C : Tc = 10k x 100pF x Ln(2047) = 7,6 s CT = 25 x 0.05 s = 1,25 s TACQ = 2 + 7,6 + 1,25 s = 10, 85 s
ESTI 2012-2013 Ferchichi Moez 22
Le temps de conversion est gal (12 +2) TAD TAD est le temps de conversion d'un bit, il dpend de l'horloge systme et du prdiviseur (div) choisi. Les choix doivent tre ajust pour que que TAD ne dpasse pas 1,6 s
Temps de conversion
Une conversion dmarre au moment du positionnement du bit GO_DONE, l'interrupteur S est ouvert et la conversion est ralise en 12 TAD. A la fin, le bit GO_DONE est remis 0 et le drapeau ADIF est plac 1. Le module attend 2 TAD supplmentaires avant de fermer l'interrupteur S et commencer une nouvelle acquisition. Si on veut chantillonner un signal variable, La priode d'chantillonnage Te doit tre suprieur ou gale : TECHmin TACQ + TCON
ESTI 2012-2013 Ferchichi Moez 23
Exercice
Ecrire un programme qui permet de convertir la tension dun capteur de Pression qui varie entre 0.4 V et 4.3 V. Le rsultat de la conversion sera visualis sur les ports B et D. Simuler le fonctionnement avec ISIS, la sortie du PIC sera visualise avec des diodes LEDs.
24
27
Exercice
On se propose de dvelopper le programme dun PIC 16F877 permettant denvoyer sur le port srie une des quatre informations suivantes: Etat dun capteur1 logique plac sur RC0, Etat dun capteur2 logique plac sur RC1, La valeur dun capteur1 analogique plac sur RA0, La valeur dun capteur2 analogique plac sur RA1, Rq: les deux capteurs analogiques dlivrent des courants variant entre 4-20 mA. Fonctionnement: Tout dabord le choix de lacquisition est fait par la rception sur le port srie de lune des deux lettres suivantes: A: acquisition analogique D: acquisition numrique si le choix se fait sur A: On doit activer un MUX analogique (4067: MUX 16 entres) sur lequel sont connectes les deux capteurs analogiques: Puis une deuxime lecture sur le port srie permet de slectionner lacquisition du capt1 ou capt2 analogique; si le choix se fait sur D: une deuxime lecture sur le port srie permet de slectionner lacquisition du capt1 ou capt2 logique;
ESTI 2012-2013 Ferchichi Moez 29
Les Interruptions
Une interruption provoque larrt du programme principal pour aller excuter une procdure d'interruption. A la fin de cette procdure, le microcontrleur reprend le programme principal lendroit o il la laiss. A chaque interruption sont associs deux bits, un bit de validation et un drapeau.
Le bit de validation permet d'autoriser ou non l'interruption, alors que bit drapeau permet au programmeur de savoir de quelle interruption il s'agit. Sur le 16F876/877, l'es interruptions sont classes en deux catgories, les interruptions primaires et les interruptions priphriques. Elles sont gres par les registres suivants :
30
Les Interruptions
Toutes les interruptions peuvent tre valides/interdites par le bit INTCON.GIE Toutes les interruptions priphriques peuvent tre valides/interdites par le bit INTCON.PEIE
Chaque interruption peut tre valide/interdite par son bit de validation individuel
31
32
Les Interruptions
Lorsque l'vnement dclencheur d'une interruption intervient, alors son drapeau est positionn 1 (lev). Si l'interruption a t valide (bits de validations = 1), elle est alors dclenche : le programme arrte ce qu'il est en train de faire et va excuter la procdure d'interruption qui se trouve l'adresse 4 en excutant les tapes suivantes : L'adresse contenue dans le PC (Program Counter) est sauvegarde dans la pile, puis remplace par la valeur 0004 (adresse de la routine d'interruption). Le bit GIE est plac "0" pour inhiber toutes les interruptions (afin que le PIC ne soit pas drang pendant l'excution de la procdure d'interruption). A la fin de la procdure d'interruption (instruction RETFIE) : 1. le bit GIE est remis 1 (autorisant ainsi un autre vnement) 2. le contenu du PC est recharg partir de la pile ce qui permet au programme de reprendre l o il s'est arrt.
ESTI 2012-2013 Ferchichi Moez 33
Les Interruptions
Remarques: Le drapeau reste ltat haut mme aprs le traitement de linterruption. Par consquent, il faut toujours le remettre "0" la fin de la routine d'interruption sinon l'interruption sera dclenche de nouveau juste aprs l'instruction RETFIE Seul le PC est empil automatiquement. Si cela est ncessaire, les registres W et STATUS doivent tre sauvegards en RAM puis restaurs la fin de la routine pour que le microcontrleur puisse reprendre le programme principal dans les mmes conditions o il l'a laiss. L'interruption INT (Entre RB0 du port B) Cette interruption est provoque par un changement d'tat sur l'entre RB0 du port B quand elle est programme en entre. En plus de son bit de validation INTE et son drapeau INTF, elle est gre aussi par le bits INTEDG (OPTION_REG) qui dtermine le front sur lequel l'interruption se dclenche, 1=montant, 0=descendant L'interruption RBI (RB4 A RB7 du port B) Cette interruption est provoque par un changement d'tat sur l'une des entres RB4 RB7 du port B, Le front n'a pas d'importance. Les bits associs sont RBIE (validation) et RBIF (drapeau) Les autres interruptions : Les autres interruptions seront abordes au moment de l'tude des modules qui les dclenchent.
ESTI 2012-2013 Ferchichi Moez 34