chapitre 3-Microcontrôleurs (3)

download chapitre 3-Microcontrôleurs (3)

of 34

Transcript of chapitre 3-Microcontrôleurs (3)

Les Microcontrleurs Programmation avec le C

Les Microcontrleurs Programmation avec le CESTI 2011-2012

ESTI 2012-2013 Ferchichi Moez1 ESPRIT 2012 Ferchichi MoezObjectifs 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 : TMRLes modules de comparaison CCPLcriture dans la mmoire EEPROM et dans la mmoire Flash.

ESTI 2012-2013 Ferchichi Moez

2Les ports dentrs/sortiesLe pic 16F877 comporte 5 ports dentrs/sorties: A, B, C, D et E.PORTA: 6 bitsPORTB: 8 bitsPORTC: 8 bits PORTD: 8 bits PORTE : 3 bits

33 pins IO (E/S) ESTI 2012-2013 Ferchichi Moez

33Port dE/S PORTALe port A dsign par PORTA est un port de 6 bits (RA0 RA5). RA6 et RA7 ne sont pas accessibles.La configuration de direction se fait l'aide du registre TRISA: positionner un bit de TRISA 1, configure la broche correspondante du PORTA en entre et inversement.

Au dpart toutes les broches sont configures en entre.

ESTI 2012-2013 Ferchichi Moez

4Port dE/S PORTALa broche RA4 peut tre utilise soit comme E/S numrique normale, soit comme entre horloge pour le Timer TMR0

Les autres broches (RA0, RA1, RA2, RA3 et RA5) peuvent tre utilise soit comme E/S numriques soit comme entres analogiques.

Au RESET, ces E/S sont configures en entres analogiques. Pour les utiliser en E/S numriques, il faut crire '00000110' dans le registre ADCON1 (sera explicit dans la partie CAN).

Quelque soit le mode (Analogique ou Numrique), il faut utiliser le registreTRISA 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

5Le port dE/S PORTBLe port B dsign par PORTB est un port bidirectionnel de 8 bits (RB0 RB7). Toutes les broches sont compatibles TTL.

La configuration de direction se fait l'aide du registre TRISB, positionner un bit de TRISB 1 (TRISB.fi=1) configure la broche correspondante de PORTB en entre et inversement.

Au dpart (ou aprs un RESET) toutes les broches sont configures en entre.

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.

ESTI 2012-2013 Ferchichi Moez6Le port d' E/S PORTCLe port C dsign par PORTC est un port bidirectionnel de 8 bits (RC0 RC7). Toutes les broches sont compatibles TTL.

La configuration de direction se fait l'aide du registre TRISC, positionner un bit de TRISC 1 (TRISC.fi=1) configure la broche correspondante du PORTC en entr et inversement.

Au dpart (ou aprs un RESET) toutes les broches du port C peuvent tre utilises soit comme E/S normales soit comme broches d'accs diffrents modules comme le timer1, les modules de comparaison et de capture CCP1/2, le timer 2, le port I2C ou le port srie, ceci sera prcis au moment de l'tude de chacun de ces priphriques.

Pour lutilisation dune broche du port C comme E/S normale, il faut sassurer quelle na pas t affecte un de ces modules. Par exemple, si TIMER1 est valid, il peut utiliser les broches RC0 et RC1 selon sa configuration. ESTI 2012-2013 Ferchichi Moez7Le port dE/S PORTDLe port D dsign par PORTD est un port bidirectionnel de 8 bits (RD0 RD7). Toutes les broches sont compatibles TTL .

Chaque broche et configurable en entre ou en sortie laide du registre TRISD. Pour configurer une broche en entre, on positionne le bit correspondant dans TRISD 1 (TRISD.fi=1) et inversement.

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).

ESTI 2012-2013 Ferchichi Moez

8Le port d' E/S PORTEPORTE contient seulement 3 bits RE0, RE1 et RE2. Les trois sont configurables en entre ou en sortie laide des bits 0, 1 et 2 du registre TRISE.

PORTE nest pas implment sur le 16F876, il est disponible sur le 16F877.

Les 3 bits du PORTE peuvent tre utiliss soit comme E/S numrique soit comme entres analogiques du CAN. La configuration se fait laide du registre ADCON1.

Si le bit 4 de TRISE est plac 1, Les trois bits du PORTE deviennent les entres de control du PORTD qui (dans ce cas) fonctionne en mode parallel Slave mode.

A la mise sous tension (ou aprs un RESET), les trois broches du PORTE sont configures en entre analogique.

ESTI 2012-2013 Ferchichi Moez

9ExercicesExercice 1LED: Clignoter des LEDsA) 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 Moez10ExercicesExercice 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.

ESTI 2012-2013 Ferchichi Moez11

ExercicesExercice 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). ESTI 2012-2013 Ferchichi Moez12PIC16F877

Afficheur 7 Seg-BCD ExercicesExercice 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.

ESTI 2012-2013 Ferchichi Moez13RC7 Segment ptRC6 Segment gRC5 Segment fRC4 Segment eRC3 Segment dRC2 Segment cRC1 Segment bRC0 Segment a

8ExercicesExercice 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 : ESTI 2012-2013 Ferchichi Moez14PIC16F877

Afficheur 7 Seg8RA0..RA314Le module de conversion A/NCe module est constitu d'un convertisseur Analogique Numrique 10 bits dont l'entre analogique peut tre connecte sur l'une des 8 (5 pour 16F876) entres analogiques externes.

On dit qu'on a un CAN 8 canaux. Les entres analogiques doivent tre configures en entre l'aide des registres TRISA et/ou TRISE.

Les tensions de rfrences permettant de fixer la dynamique du convertisseur. Elles peuvent tre choisies parmi Vdd, Vss, Vr+ ou Vr-

ESTI 2012-2013 Ferchichi Moez

15Le module de conversion A/NLa conversion dmarre quand on place le bit GO/DONE 1. Ceci peut tre fait par le programme utilisateur ou automatiquement par le module CCP2 s'il est configur en mode comparaison avec vnement spcial.

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.

ESTI 2012-2013 Ferchichi Moez16ADCON0ADCS1:ADCS0 : Choix de l'horloge de conversion donc du temps de conversion00 : Fosc/201 : Fosc/810 : Fosc/3211 : Oscillateur RC ddi au CAN

CHS2:CHS0 : choix de l'entre analogique000 = 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

17ADCON1ADFM : justification droite ou gauche du rsultat1 : justifi droite 000000XX XXXXXXXX0 : justifi gauche XXXXXXXX XX000000PCFG3: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.

ESTI 2012-2013 Ferchichi Moez

18Valeur numrique obtenue

Quelle est la relation entre la tension analogique convertie et le nombre N recueilli dans le registre ADRES ?Si on note : Q = pas de quantification = (Vref+ - Vref-)/1024Va = tension analogique convertirN = valeur numrique obtenue

Avec Vref- = masse, on obtient N = int (Va / Q)exemple :Vref+ = Vdd = 5V, Vref- = 0, Vin = 4 VQ = 5V/1024 = 0,0048828125 VN = 4V / 0,0048828125 = 819

ESTI 2012-2013 Ferchichi Moez

19Temps 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

ESTI 2012-2013 Ferchichi Moez20

Temps dacquisitionPendant le temps de conversion, S est maintenu ouvert, la capacit bloqueVe 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

ESTI 2012-2013 Ferchichi Moez21Temps dacquisition Tc : temps de charge du condenseur : TC= (Ric+Rss+Rs).C.Ln(2047)CT : Coefficient de temprature = (Tp -25C) 0.05 s/CTp = Temprature Processeur

Exemple: Avec Ric = 1k, Rss = 7k, Rs = 2k, Tp = 50 C :Tc = 10k x 100pF x Ln(2047) = 7,6 sCT = 25 x 0.05 s = 1,25 sTACQ = 2 + 7,6 + 1,25 s = 10, 85 s

ESTI 2012-2013 Ferchichi Moez22

Temps de conversion Le temps de conversion est gal (12 +2) TADTAD 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

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 Moez23

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. ESTI 2012-2013 Ferchichi Moez24Communication sur le Port SrieL'USART (Universal Synchronous Asynchronous Receiver Transmitter) est l'un des deux modules de communication srie dont dispose le PIC 16F876/877. L'USART peut tre configur comme systme de communication asynchrone full duplex ou comme systme synchrone half duplex.

La communication se fait sur les deux broches RC6/TX et RC7/RX qui doivent tre configurs toutes les deux en ENTREE par TRISC.

ESTI 2012-2013 Ferchichi Moez25Communication sur le Port SrieMode Asynchrone Si on place le bit SYNC du registre TXSTAT 0, l'USART fonctionne dans le mode asynchrone standard, 10 (ou 11) bits sont transmis ou reus dans l'ordre ci-dessous : 1 bit de START (toujours 0) 8 ou 9 bits de donne (LSB d'abord) 1 bits de STOP (toujours 1)

La transmission se fait sur la broche RC6/TX et la rception sur la broche RC7/RX

La vitesse de communication est dtermine par un gnrateur de baud rate ddi.

L'accs au port en lecture ou criture se fait par les registres tampon RCREG et TXREG. La transmission et la rception se font par deux registres dcalage, un pour la transmission (TSR) et un pour la rception (RSR).

ESTI 2012-2013 Ferchichi Moez26Communication sur le Port SrieL'accs au registres tampon peut se faire alors que les registre dcalage sont en train de transmettre/recevoir une donne.

Le control du port se fait par les registres d'tat et de control TXSTA et RCSTA

TXSTA:CSRC : non utilis en mode asynchroneTX9 et TX9D : Pour utiliser le mode 9 bits il faut positionner le bit TX9. Le 9me bit doit tre crit dans TX9D avant d'crire les 8 bits de donnes dans TXREGTXEN : permet de valider ou interdire la transmissionSYNC : 0 mode asynchrone, 1 mode synchroneBRGH : slectionne le mode haut dbit du gnrateur de baud rateTRMT : Indicateur de lactivit du registre dcalage de transmission TSR1 TSR libre, 0 TSR en activit

ESTI 2012-2013 Ferchichi Moez27

Communication sur le Port SrieLe drapeau RCIF et TXIF sont trs utiles pour grer la lecture/criture dans le port. RCIF est positionn quand le port a termin une rception et TXIF est positionn quand le buffeur de transmission TXREG est "vide".

C: Le Help du C comporte une fonction simple pour commander le port srie asynchrone : usart

ESTI 2012-2013 Ferchichi Moez28Exercice 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 analogiqueD: 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 Moez29Les 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 :

ESTI 2012-2013 Ferchichi Moez30Les 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

ESTI 2012-2013 Ferchichi Moez

31Les sources d'interruption

ESTI 2012-2013 Ferchichi Moez

32Les Interruptions Droulement d'une interruption:

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 Moez33Les 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 Moez34