• Aucun résultat trouvé

Le Microcontrôleur « pic 16F84 » et « pic 16F877 »

N/A
N/A
Protected

Academic year: 2022

Partager "Le Microcontrôleur « pic 16F84 » et « pic 16F877 » "

Copied!
25
0
0

Texte intégral

(1)

1

Le Microcontrôleur « pic 16F84 » et « pic 16F877 »

Aujourd’hui, les microcontrôleurs sont partout : ordinateurs, portable…

Assez facile d’utilisation, pour la plupart, et programmable de fort nombreuses fois (plus de 1000), ou définitivement (OTP : One Time Programmable), leur souplesse d’utilisation a séduit rapidement les divers constructeurs de divers domaines. Aujourd’hui, un des géants mondiaux s’appelle Microchip.

Mais il ne faut surtout pas confondre les microcontrôleurs et les microprocesseurs. Pour résumer, on peut dire qu’un microcontrôleur est un ordinateur extrêmement miniaturisé et possédant donc assez peu de mémoire, et dont le processeur est relativement simple, alors qu’un microprocesseur ne fait qu’exécuter des instructions qui lui sont communiquées, puis renvoie les résultats.

Les principaux problèmes des microcontrôleurs sont la taille de leur mémoire et le nombre limité de

périphériques qu’ils peuvent recevoir en même temps. Cependant, le nombre de ces derniers peut parfois être augmenté en associant, sur les mêmes pattes un périphérique d’entrée et un de sortie, permettant alors de doubler le nombre de périphériques connectables…

1) La référence :

Les PIC 16FXX sont des microcontrôleurs 8 bits (largeur du bus de données) conçus en technologie CMOS (faible consommation électrique). Les µC PIC utilisent une architecture RISC (Processeur à jeu d’instructions réduit) avec 35 instructions codées en un mot de 14 bits. Pour identifier un pic, on utilise le numéro inscrit sur son boitier, exemple du PIC 16F84-04 :

16

16 indique un PIC de la famille Mid-Range (Instructions sur 14 bits)

F

Type de mémoire programme : C  EPROM, CR  ROM, F  FLASH.

84

Référence du PIC

4

La fréquence d’horloge maximale (4 Mhz)

2) Le Brochage :

Le 16F84A est un PIC de 18 broches, la figure ci-contre montre le brochage du circuit. Les fonctions des pattes sont les suivantes :

(2)

2

L’alimentation du circuit est assurée par les pattes VDD (3 à 6v) et VSS (0v).

L’horloge doit être stabilisée de manière externe au moyen d’un cristal de quartz connecté aux pattes OSC1/CLKIN et OSC2/CLKOUT.

La patte 4 est appelée MCLR. Elle permet lorsque la tension appliquée est égale à 0V de réinitialiser le microcontrôleur.

 Les broches RB0 à RB7 (portB) et RA0 à RA4 (portA) permettent au microcontrôleur de dialoguer avec le monde extérieur (périphériques). Elles peuvent être configurées en entrée ou en sortie. Certaines de ces broches ont aussi d’autres fonctions tels que interruption,compteur (RB0/INT ; RA4/TOCKL)

a) Exemple d’alimentation

:

b) Exemple d’horloge

:

Pour fonctionner correctement, le microcontrôleur nécessite la présence d'une horloge qui doit être câblée entre les bornes « OSC1 et OSC2 ». Cette horloge peut être réalisée de différentes façons :

(3)

3

3) Structure interne :

La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2 :

Mémoire de programme

Mémoire de données

Processeur

Ressources auxiliaires (périphériques)

 La mémoire de programme contient les instructions pilotant l’application à laquelle le microcontrôleur est dédié. Il s’agit d’une mémoire non volatile (elle garde son contenu, même en l’absence de tension), elle est de type FLASH c’est à dire qu’elle peut être programmée et effacée par l’utilisateur via un programmateur et un PC. Pour le PIC 16F84 cette mémoire est d’une taille de 1024x14 bits, c’est à dire qu’elle dispose de 1024 emplacements (de 000h à 3FFh) contenant chacun 14 cases car dans le cas du PIC, les instructions sont codées sur 14 bits. On peut donc stocker 1024 instructions.

 La mémoire de donnée est séparée en deux parties :

une mémoire RAM de 68 octets puisque le bus de donnée est de huit bits. Cette RAM est volatile (les données sont perdues à chaque coupure de courant). On peut y lire et écrire des données.

une mémoire EEPROM de 64 octets dans laquelle on peut lire et écrire des données (de huit bits soit un octet) et qui possède l’avantage d’être non volatile (les données sont conservées même en l’absence de tension). La lecture et l’écriture dans cette mémoire de données sont beaucoup plus lentes que dans la mémoire de données RAM.

Le processeur est formé de deux parties :

une unité arithmétique et logique (UAL) chargée de faire des calculs.

un registre de travail noté W sur lequel travail l’UAL.

Les ressources auxiliaires qui sont dans le cas du PIC16F84

ports d’entrées et de sorties.

temporisateur (timers)

interruptions

chien de garde

(4)

4

4) Mémoire de données RAM :

La mémoire RAM est constituée de deux parties :

Les registres SFR (Special Function Register), ce sont les registres de fonctionnement du PIC.

L'ensemble de ces registres est souvent appelé fichier des registres.

Les registres GPR (General Propose Register) sont des positions mémoire que l'utilisateur peut utiliser pour stocker ses variables et ces données. On remarquera donc que, indépendamment de leur nature, les positions de la RAM sont toujours appelé registres.

Les registres SFR

Les registres GPR

Les registres spéciaux SFR :

Nous avons vu au chapitre précédent que la mémoire de données RAM contenait des registres spécifiques qui permettent de configurer le PIC, nous allons les détailler un à un et voir comment on peut accéder à la page 0 ou la page 1.

adresse 00 et 80, INDF. Cette adresse ne contient pas de registre physique, elle sert pour l’adressage indirect.

adresse 01, TMR0. Contenu du Timer (8 bits). Il peut être incrémenté par l’horloge (fosc/4) c'est à dire tous les 4 coups d'horloge ou par la broche RA4.

adresse 02 et 82, PCL .8 bits de poids faibles du compteur ordinal PC. Les 5 (13-8) bits de poids forts sont dans PCLATH.

adresse 03 et 83, STATUS Registre d’état.

Les cinq bits de poids faible de ce registre sont en lecture seule, ce sont des témoins (drapeaux ou flag en anglais) caractérisant le résultat de l’opération réalisée par l’UAL. Le bit RP0 est lui en lecture /écriture et c’est lui qui permet de sélectionner la page dans la mémoire RAM.

Si RP0=0 on accède à la page 0 et si RP0=1 on accède à la page 1.

TO/ (Time Out) : débordement du timer WDT

PD/ (Power Down) : caractérise l’activité du chien de garde WDT

Z : (zéro) résultat nul pour une opération arithmétique et logique.

DC : (digit carry) retenue sur un quartet (4 bits)

C : (carry) retenue sur un octet (8 bits).

(5)

5

adresse 04 et 84, FSR. Registre de sélection de registre : contient l’adresse d’un autre registre (adressage indirect)

adresse 05, PORTA. Ce registre contient l’état des lignes du port A.

adresse 06, PORTB. Ce registre contient l’état des lignes du port B.

adresse 08, EEDATA .Contient un octet lu ou à écrire dans l’EEPROM de données.

adresse 09, EEADR. Contient l’adresse de la donnée lue ou écrite dans l’EEPROM de données.

adresse 0A et 8A, PCLATH. Voir l’adresse 02 PCL.

adresse 0B et 8B, INTCON .Contrôle des 4 interruptions

Masque :

GIE: (Global Interrupt Enable) : masque global d’inter.

EEIE : (EEProm Interrupt Enable) autorise l'interruption venant de l'EEPROM.

T0IE : (Timer 0 Interrupt Enable) autorise l'interruption provoquée par le débordement du TIMER0

INTE: (Interrupt Enable) autorise l’interruption provoquée par un changement d'état sur broche RB0/INT

RBIE: (RB Interrupt Enable) autorise les interruptions provoquées par un changement d'états sur l'une des broches RB4 à RB7.

Si ces bits sont mis à 1, ils autorisent les interruptions pour lesquels ils sont dédiés.

Drapeaux :

T0IF : (Timer 0 Interrupt Flag) débordement du timer

INTF (Interrupt Flag) interruption provoquée par la broche RB0/INT

RBIF (RB Interrupt Flag) interruption provoquée par les broches RB4-RB7

adresse 81, OPTION. 8 bits (tous à 1 au RESET) affectant le comportement des E/S et des timers.

RBPU/ (RB Pull Up) : Résistances de tirage à Vdd des entrées du port. Si RBPU/=0 les résistances de pull-up sont connectées en interne sur l'ensemble du port B.

INTEDG (Interrupt Edge) : sélection du front actif de l’interruption sur RB0/INT (1 pour front montant et 0 pour front descendant).

RTS (Real Timer Source) : sélection du signal alimentant le timer 0 : 0 pour horloge interne, 1 pour RA4/T0CLK

RTE (Real Timer Edge) : sélection du front actif du signal timer ( 0 pour front montant).

PSA (Prescaler assignment) : 0 pour Timer 0 et 1 pour chien de garde WDT.

PS2...PS0 (Prescaler 210) : sélection de la valeur du diviseur de fréquence pour les timers.

adresse 85, TRISA. Direction des données pour le port A : 0 pour sortir et 1 pour entrer.

adresse 86, TRISB. Direction des données pour le port B : 0 pour sortir et 1 pour entrer.

adresse 88, EECON1 Contrôle le comportement de l’EEPROM de données.

adresse 89, EECON2. Registre de sécurité d’écriture en EEPROM de données. Une donnée ne peut être écrite qu’après avoir écrit successivement 0x55 et 0xAA dans ce registre.

GIE EEIE T0IE INTE RBIE T0IF INTF RBIF

RBPU/ INTEDG RTS RTE PSA PS2 PS1 PS0

(6)

6

5) JEU D’INSTRUCTIONS :

Afin de comprendre la fonction de chaque instruction, la notation adoptée pour les données et adresses manipulées par les instructions est fort simple et est la suivante :

f

représente un registre

b

représente un numéro de bit en sachant que 0 correspond toujours au bit de poids faible ( le plus à droite dans le registre )

k

représente une donnée aussi appelé littéral

Un certain nombre d’instructions (ADDWF, ANDWF, etc..) utilise une notation spéciale présentée sous la forme :

ADDWF f, d 

f

indique le registre et où d peut prendre deux valeurs (0 ou 1), ce qui change le comportement de l’instruction. Si d est à 0, le résultat est placé dans le registre de travail W, la valeur dans le registre f est alors inchangée, alors que si d est à 1, le résultat est placé dans le registre

f

.

Un autre type d’instruction mérite quelques éclaircissements, ce sont les instructions de branchement conditionnel. Prenons comme exemple :

BTFSC f, b  Qui va vouloir dire (Bit Test File Skip if Clear) qui signifie que l’on va tester le bit b du registre f (b peut prendre une valeur de 0 à 7 pour un registre 8 bits) .Il peut alors y avoir deux solutions :

-Soit le bit testé est à 1, donc la condition testée n’est pas réalisée, le programme continue alors son déroulement normalement en séquence avec l’instruction juste en dessous.

-Soit le bit testé vaut 0, donc la condition testée est réalisée et le programme saute l’instruction qui suit le BTFSC dans le programme.

Cette façon de programmer peut paraître étrange, mais avec de l’habitude, elle s’avère très pratique et permet de réaliser des programmes compacts et performants.

Voilà les 35 instructions à utiliser pour la programmation : (page suivante)

(7)

7

(8)

8

6) Mise en oeuvre et programmation de pic 16F84 :

La mise en œuvre d'une application, à base de microcontrôleur, consiste à traduire un cahier des charges en un programme code, puis à le transférer vers la mémoire programme du

microcontrôleur.

Pour ce faire, divers outils de développement sont mis à la disposition du concepteur. Parmi ces outils, on cite :

la programmation graphique, elle est basée sur l'interconnexion graphique de symboles ou modules

"exemple : organigramme".

la programmation en assembleur.

la programmation mettant en œuvre un langage évolué tels que langage C, Basic,Pascal, etc..

a) Configuration des entrées et sorties

:

Pour configurer la direction des entrées /sorties on fait appel aux registres TRISA et TRISB situés au Bank1 de la RAM ;

TRISA : Ce registre permet de configurer, en entrée ou en sortie, les 5 bits du port A.

TRISB : Ce registre permet de configurer, en entrée ou en sortie, les 8 bits du port B.

Exemple :

BSF STATUS,RP0 ; passage en bank 1

MOVLW b'00010010' ; charge la valeur B'00010010' dans W

MOVWF TRISA ; charge la valeur de W dans le registre TRISA

Alors que pour avoir accès en lecture ou en écriture aux ports du μc, on utilise les registres PORTA et PORTB situés au Bank0 de la RAM.

BCF STATUS,RP0 ; passage en banque 0 BSF PORTA,0 ; mise à 1 de la sortie RA0

CLRF PORTB ; mise à 0 de toutes les sorties du port B

Application 1

: Objectif

Une LED est connectée à RB7 tandis qu'un interrupteur (switch) est connecté à RA0.

La LED devrait s'allumer lorsque l'interrupteur est fermé et s'éteindre lorsque l'interrupteur est ouvert.

1=

pour configurer une broche en entrée

0 =

pour configurer une broche en sortie

(9)

9

Organigramme Programme en assembleur

b) Gestion de la temporisation

:

Temporisation avec une boucle

:

L’organigramme ci-dessous permet de réaliser un sous programme de temporisation (Sp. tempo) en utilisant la case mémoire 0x20 de la RAM, chargée par une valeur N 1.

L’objectif est de calculer le temps écoulé lors d’exécution de ce sous programme.

Avec un quartz de fosc = 4Mhz, la fréquence réelle du PIC : F=1/fosc=1Mhz Donc 1 cycle = 1/F = 1μs

Alors la temporisation T1 du sous-programme en fonction de N1 est :

………

La valeur max que l’on peut donner à N1 est 255, ce qui donne une temporisation max de : T1 max = ……….

(10)

10

Temporisation avec deux boucles

:

- le temps T2 en fonction de N1 et N2 est : ……….………

- La valeur max que l‟on peut donner à N1 et N2 est 255, donc la valeur maximale de T2 est : .………….………….…………

Temporisation avec trois boucles

:

le temps T3 en fonction de N1, N2 et N3 est :

……….………

 La valeur max que l’on peut donner à N1, N2 et N3 est 255, donc la valeur maximale de T3 est : .………….………….…………

(11)

11

Temporisation avec TMR0

:

Le module TMR0 (Timer 0) possède deux modes de fonctionnement :

Le mode timer utilisé pour les temporisations (Fosc)

Le mode compteur utilisé pour faire du comptage (RA4).

En mode Timer, le contenu du registre TMR0 est alors incrémenté à chaque cycle de l'horloge interne. Le durée du cycle on peut l’augmenter en utilisant le prédiviseur avec le taux désiré.

Ce registre contient un nombre de 8 bits (0 à 255), et son débordement (après les 256 incrémentations) est manifesté par l’apparition du drapeau TOIF (bit 2 du registre INTCON).

Alors pour réaliser une temporisation avec TMR0 d’une durée Tx, on peut appliquer la formule suivante :

** Organigramme : ** Sous programme en assembleur

Pour la configuration suivante :

TMR0 utilise l’horloge système (Fosc) de 4MHz et le prédiviseur avec un taux de 256

(12)

12

Calculer alors la valeur N (hexadécimal) à charger dans le compteur C pour avoir T= 8s

.………….….………….….………….….………….….………….….………….….………….….………….….

………….….………….….…………..………….….………….….……….….………….….………….….……

…….….…...

...……….…….………….………

Application 1

:

Objectif :

Réaliser un circuit qui fait clignoter une LED connectée à RB0 pour un temps prédéterminé par le sous- programme de temporisation.

BSF STATUS, RP0 ; « accès à la bank 1 » ... ..., .... ;

... ..., ... ; « accès à la bank 0 » Loop ... ..., ... ; « allumer la led »

... ... ; « appeller le sous prog Tempo » ... ..., ... ; « Etteindre la led »

... ... ; « appeller le sous prog Tempo » ... Loop ;

« sous programme temporisation avec une boucle»

... ; ... ; ... ; ... ; ... ;

« sous programme temporisation avec TMR0»

... ; ... ; ... ; ... ; ... ; ... ; ... ; ... ; END

Config des ports

(13)

13 c

) Les interruptions

:

Une interruption provoque l’arrêt du programme principal pour aller exécuter une procédure d'interruption qui se trouve à l'adresse 0004h.

Le PIC16F84 possède 4 sources d'interruption. A chaque interruption sont associés deux bits:

un bit de validation (autorisation) : permet d'autoriser ou non l'interruption.

un drapeau (flag) : permet au programmeur de savoir de quelle interruption il s'agit.

Tous ces bits sont dans le registre INTCON à part le drapeau EEIF de l'interruption EEPROM qui se trouve dans le registre EECON1.

fonctionnement d’une interruption

:

La séquence classique de fonctionnement d'une interruption est la suivante :

1- Détection de l'événement déclencheur.

2- Fin de l'instruction en cours 3- Sauvegarde de l'adresse de retour.

4- Déroutement vers la routine d'interruption.

5- Sauvegarde du contexte.

6- Identification de l'événement survenu.

7- Traitement de l'interruption correspondante 8- Restauration du contexte

9- Retour au programme initial

(14)

14

Application 1

: Objectif :

établir un programme qui permet d’inverse l’allumage d’une LED, reliée à RA0, à chaque pression sur un bouton-poussoir relié à RB0.

** Organigramme :

** programme en assembleur :

(15)

15

5) les caractéristiques de pic 16F877 :

Nous nous limiterons dans cette partie à la famille Mid-Range et particulièrement au PIC 16F876/877, sachant que si on a tout assimilé, on pourra facilement passer à une autre famille, et même à un autre microcontrôleur.

Les éléments essentiels du PIC 16F877 sont :

Une mémoire programme de type EEPROM flash de 8K mots de 14 bits,

Une RAM donnée de 368 octets,

Une mémoire EEPROM de 256 octets,

Trois ports d'entrée sortie, A (6 bits), B (8 bits), C (8 bits),

Convertisseur Analogiques numériques 10 bits à 5 canaux,

USART, Port série universel, mode asynchrone (RS232) et mode synchrone

SSP, Port série synchrone supportant I2C

Trois TIMERS avec leurs Prescalers, TMR0, TMR1, TMR2

Deux modules de comparaison et Capture CCP1 et CCP2

Un chien de garde WDT,

13 sources d'interruption,

Générateur d'horloge, à quartz (jusqu’ à 20 MHz) ou à Oscillateur RC

Protection de code,

Fonctionnement en mode sleep pour réduction de la consommation,

Programmation par mode ICSP (In Circuit Serial Programming) 12V ou 5V,

 Possibilité aux applications utilisateur d’accéder à la mémoire programme,

 Tension de fonctionnement de 2 à 5V,

Jeux de 35 instructions.

(16)

16

6) Les éléments de base du PIC 16F876/877 : a) L'Horloge :

L'horloge peut être soit interne soit externe. L'horloge interne est constituée d'un oscillateur à quartz ou d'un oscillateur RC.

Quel que soit l'oscillateur utilisé, l'horloge système dite aussi horloge instruction est obtenue en divisant la fréquence par 4. Dans la suite de ce document on utilisera le terme Fosc/4 pour désigner l'horloge système.

Exemple :

Avec un quartz de 4 MHz, on obtient une horloge instruction de 1 MHz, soit le temps pour exécuter une instruction de 1µs.

b) L'ALU et l’accumulateur W :

L’ALU est une Unité Arithmétique et logique 8 Bits qui réalise les opérations arithmétiques et logique de base. L’accumulateur W est un registre de travail 8 bits, toutes les opérations à deux opérandes passent par lui. On peut avoir :

Une instruction sur un seul opérande qui est en général un registre situé dans la RAM

Une instruction sur 2 opérandes. Dans ce cas, l’un des deux opérandes est toujours l’accumulateur W, l’autre peut être soit un registre soit une constante.

Pour les instructions dont un des opérandes est un registre, le résultat peut être récupéré soit dans l’accumulateur, soit dans le registre lui-même.

c) Organisation de la mémoire RAM :

L’espace mémoire RAM adressable est de 512 positions de 1 octet chacune :

96 positions sont réservées au SFR (Special Function Registers) qui sont les registres de configuration du PIC.

Les 416 positions restantes constituent les registres GPR (General Propose Registers) ou RAM utilisateur. Sur le 16F876 et 16F877, 3 blocs de 16 octets chacun ne sont pas implantés physiquement d’où une capacité de RAM utilisateur de 368 GPR.

7) Le brochage de PIC 16F876/877 :

(17)

17

8) L’accès à la RAM directement (mode d’adressage direct):

a) La RAM :

La RAM apparaît alors organisée en 4 banks de 128 octets chacun. L'adresse instruction permet d'adresser à l'intérieur d'un bank alors que les bits RP0 et RP1 du registre STATUS permettent de choisir un bank. La Figure II-1 montre l’organisation de la RAM avec les zones allouée au SFR et aux GPR.

(18)

18

Quelques registres de configuration et leurs bits :

b) les registres spéciaux du 16F877 :

La mémoire RAM est divisée en 4 banques. Elle comprend tous les registres spéciaux permettant de contrôler le cœur du PIC ainsi que ses périphériques. Elle contient également des cases mémoires à usage générique dans lesquelles pourront être stockées les variables de nos futurs programmes.

o Registre STATUS

(adresse : 03h ; 83h ; 103h ; 183h)

:

RP1 ; RP0 : bits de sélection de banque mémoire. Utilisé pour l’adressage indirect : 1 1 = Banque 3

1 0 = Banque 2 0 1 = Banque 1 0 0 = Banque 0

o

Registre OPTION_REG

(adresse : 81h ; 181h)

:

( même que le pic 16F84)

o Registre INTCON

(adresse : 0Bh ; 8Bh ; 10Bh ; 18Bh) : ( même que le pic 16F84)

(19)

19

o Les ports du 16F877:

Le PIC 16F877 est doté de 5 ports, ce qui est plutôt confortable :

les pattes du PORTA servent également au convertisseur Analogique/Numérique,

les pattes du PORTD au Port Parallèle Esclave, etc.

 On voit également que les ports B, C et D ont 8 lignes d’entrée/sortie, alors que le port A n’en a que 6 et le port E que 3.

On peut configurer les entrées/sorties de chaque port en entrée ou en sortie, grâce à un registre spécial dédié à chaque port.

o Les timers du 16F877:

Le timer 0 :

C’est un compteur 8 bits (0 à 255) simple, qui compte des impulsions soit internes, soit d’une source externe. On peut par ailleurs lui appliquer une pré-division programmable entre 1 et 256.

Le timer 1 :

Le Timer1 fonctionne sur le même principe que le Timer0, mais avec un registre de comptage plus gros : 16 bits au lieu de 8. De plus, il possède un mode de fonctionnement particulier : on peut l’utiliser en association avec un des modules CCP (modules de capture et de comparaison).

Le timer 2 :

Le Timer2 a un fonctionnement différent des Timer0 et Timer1. C’est un compteur 8 bits avec pré-diviseur et post-diviseur. On s’en sert pour générer des signaux carrés, ou, en association avec le module CCP, des signaux PWM.

PWM étant l’acronyme de « Pulse Width Modulation » ou, en français, Modulation de Largeur d’Impulsion (MLI).

c) Le convertisseur analogique - numérique:

Le convertisseur A/D convertit le signal analogique présent sur une de ses 8 entrées en son équivalent numérique, codé sur 10 bits. Les pattes AN2 et AN3 peuvent être utilisées comme références de tension ou comme entrées analogiques standard, les références de tension étant dans ce dernier cas prises sur les tensions d’alimentations du PIC : VDD et VSS. (VDD pour le + et VSS pour le -). On peut donc numériser jusqu’à 8 signaux analogiques. Pas tous en même temps, bien sûr, étant donné qu’il n’y a qu’un seul module de conversion pour 8 signaux d’entrée multiplexés. Mais si vos signaux n’évoluent pas trop vite (fréquence basse), vous pouvez numériser le signal sur la patte AN0, puis celui sur AN1…

o ADCON0

(adresse : 1Fh. Registre de configuration du convertisseur Analogique / Digital :

ADCS1:ADCS0

: Bits de sélection d’horloge de conversion Analogique / Numérique 00 = FOSC / 2 ; 01 = FOSC / 8 ; 10 = FOSC / 32 ;

CHS2:CHS0

: Bits de sélection du canal analogique

000 = canal 0 (RA0/AN0); 001 = canal 1 (RA1/AN1) ; 010 = canal 2 (RA2/AN2) …

GO/ DONE

: Bit de statut de conversion Analogique / Numérique Si ADON = 1 : 1 = Conversion A/D en cours. (Mettre ce bit à 1 démarre la conversion A/D)

0 = Conversion A/D pas en cours (ce bit est automatiquement effacé par le matériel lorsque la conversion Analogique/Digitale est terminée)

ADON

: Bit de mise en route du module A/D 1 = Le module convertisseur A/D est en service

0 = Le module convertisseur A/D est désactivé et ne consomme pas de courant.

(20)

20

o

ADCON1

(adresse : 9Fh) Registre de configuration du convertisseur Analogique / Digital :

ADFM :

Bits de sélection du format de résultat de conversion Analogique / Numérique 1 = Justifié à droite. Les 6 bits de poids fort du registre ADRESH sont lus comme ‘0’

0 = Justifié à gauche. Les 6 bits de poids faible du registre ADRESL sont lus comme ‘0’

PCFG3:PCFG0

: Bits de contrôle de configuration de port A/D

o ADRESL

(Adresse 9Eh) Registre de résultat de conversion Analogique / Numérique (LSB) :

o

ADRESH

(Adresse 1Eh) Registre de résultat de conversion Analogique / Numérique (MSB)

o Déroulement d’une Conversion :

Le PIC dispose d’un échantillonneur bloqueur intégré constitué d'un interrupteur S, d'une capacité de

maintien C=120 pF et d’un convertisseur Analogique numérique 10 bits. Pendant la conversion, la tension Ve à l'entrée du convertisseur A/N doit être maintenue constante.

Au départ il faut commencer par faire l’acquisition du signal en fermant l’interrupteur S, ceci se fait à l’aide du registre ADCON0, soit au moment de la validation du module par le bit ADON soit après un changement de canal si ADON est déjà positionné.

(21)

21

Après la fin de l’acquisition, on peut démarrer une conversion en positionnant le bit GO_DONE,

l'interrupteur S s’ouvre pour assurer le blocage de la tension. La conversion commence, elle est réalisée en 12 TAD, à la fin, le bit GO_DONE repasse à 0, le drapeau ADIF passe à 1 et le résultat est chargé dans les registres ADRESL et ADRESH. Le module met 2 TAD supplémentaires pour fermer l'interrupteur S ce qui démarre une nouvelle phase d’acquisition pendant laquelle la tension Ve rejoint la tension analogique d'entrée Va. Le temps d'acquisition dépend de la constante de temps RC, R étant la somme des résistances entre le module de conversion et la source de la tension analogique. Après la fin de l’acquisition, on peut démarrer une nouvelle conversion et ainsi de suite.

o Temps de conversion :

Le temps de conversion est égal à 12 TAD

TAD est le temps de conversion d'un bit, il dépend de la fréquence du quartz et du pré-diviseur (div) choisi : TAD = div x 1/fosc. Le choix de div doit être ajusté pour que TAD soit ≥ à 1,6 µs.

Avec un quartz de 4 MHz, il faut choisir div=8 ce qui donne TAD = 2 µs soit un temps de conversion : TCONV = 24 µs

o Temps d'acquisition :

Temps d'acquisition = T

ACQ

= Tc + CT +2 µs

Tc : temps de charge du condenseur = (Ric+Rss+Rs) C Ln(2047) Ric = Résistance d’interconnexions, elle est inférieure à 1k

Rss = Résistance du l’interrupteur S (Sampling switch), elle dépend de la tension d’alimentation Vdd. Elle est égale à 7kΩ pour Vdd=5V

Rs : Résistance interne de la source du signal analogique. Microchip recommande de ne pas dépasser 10 kΩ

C : Capacité de blocage = 120 pF

CT : Coefficient de température = (Tp -25°C) 0.05 µs/°C

Tp = Température Processeur, voisine de 45°C en temps normal

(22)

22

o Valeur numérique 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-)/1024

Va = tension analogique à convertir

N = valeur numérique obtenue,

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

o Programmation :

1) Si des entrée de PORTE sont utilisées, le configurer en mode normal à l'aide du bit PSPMODE 2) Configurer les E/S en Analogique/Numérique/Référence (ADCON1)

3) Configurer les entrées analogiques en entrées (TRISA, TRISE)

4) Définir l'horloge de conversion à l'aide du diviseur DIV dans ADCON0 5) Choisir le canal à convertir et valider le module (ADCON0)

6) Attendre le temps d’acquisition (12 µs ) 7) Lancer la conversion, GO = 1 (ADCON0)

8) Attendre fin de conversion, GO = 0 ou drapeau ADIF=1 9) Traiter le résultat

10) Si l'on désire prendre d'autres mesures, recommencer au point 7 en faisant attention aux timings

Application 1

: ** objectif :

Pour comprendre le fonctionnement du convertisseur A / N, nous allons étudier l‟exemple ci-contre en utilisant une thermistance CTN :

- allumez la LED lorsque la température est supérieure à 25°C, - éteignez la LED lorsqu'elle est inférieure à 25°C.

(23)

23

** Détermination de valeur numérique de la tension de référence correspondante à 25°C.

on suppose que la tension correspondante à 25°C est 𝑽𝑰𝑵 = 2.4 V , et elle augmente lorsque la température augmente.

Alors la valeur numérique correspondante à 2.4 V (pour le CAN, VDD = 5 et VSS =0) est : N= (1023/5) × 𝟐. 𝟒 ≅ 491= [0111101011]2

Avec une justification à gauche, Les 8 bits (MSB) du résultat de conversion sont stockés dans ADRESH, et les 2 bits (LSB) dans ADRESL. Afin de faciliter l’élaboration du sous programme de

conversion, on va utiliser que les 8 bits du poids fort et négliger les 2 bits du poids faible. Donc la nouvelle valeur numérique de référence sera : [01111010]B = [122]D = [7A]H

Cette valeur est comparée avec la valeur convertie par le CAN et enregistrée dans ADRESH.

* La valeur convertie par le CAN est enregistrée par la suite dans la case mémoire ValAN.

** Organigramme :

(24)

24 ** programme en assembleur

d) L’USART :

L’USART ou Universal Synchronous Asynchronous Receiver Transmitter est l’un des deux modules de communication série du PIC ou SCI en anglais (Serial Communication Interface).

Comme son nom l’indique, elle peut établir une liaison synchrone ou asynchrone, recevoir et transmettre des données, selon la manière dont elle est configurée.

Concrètement, l’USART permet de communiquer avec le reste du monde : un ordinateur ou tout autre matériel équipé d’une interface série RS232, des circuits intégrés convertisseurs Numérique/Analogique ou Analogique/Numérique, des EEPROMs série…

L’USART peut être configurée selon 3 modes : o Asynchrone (Full Duplex) o Synchrone Maître (Half Duplex) o Synchrone Esclave (Half Duplex)

(25)

25

e) Les interruptions:

Le microcontrôleur dispose de plusieurs sources d'interruptions :

 Une interruption externe, action sur la broche INT/RB0.

 Débordement du TIMER0.

 Changement d’état logique sur une des broches du PORTB (RB4 à RB7).

 Une interruption d’un des périphériques (PEIE).

 Fin de programmation d’une case mémoire de l’EEPROM.

 Changement d’état sur le PORTD (PSPIE).

 Fin de conversion analogique numérique (ADIE).

 Réception d’une information sur la liaison série (RCIE).

 Fin d’émission d’une information sur la liaison série (TXIE).

 Interruption SPI ou I2C du module MSSP (SSPIE).

 Interruption du registre de capture et/ou de comparaison 1 (CCPI1E).

 Interruption du registre de capture et/ou de comparaison 2 (CCPI2E).

 Débordement du TIMER1 (TMR1E).

 Débordement du TIMER2 (TMR2E).

 Collision de BUS (BCLIE)

f)Le mode SLEEP :

Le mode Sleep est un mode de fonctionnement particulier du PIC dans lequel celui-ci réduit sa consommation électrique au minimum. Il est presque entièrement désactivé, son oscillateur est éteint. Le PIC est en mode « veille » ! Pour sortir de cette torpeur, il faut un des événements suivant :

 Reset du circuit, ou

 Réveil par le Watch-Dog Timer (ci celui-ci est activé, il continue de fonctionner en mode SLEEP)

 Interruption générée par un module périphérique (Timer, convertisseur A/D, changement d’état de port, SSP….)

Ce mode peut être particulièrement intéressant pour une application fonctionnant sur pile ou batterie et qui ne requiert le fonctionnement du microprocesseur qu’à la survenue d’événements particuliers. On prolonge ainsi considérablement l’autonomie.

Références

Documents relatifs

observer la coexistence d’une PINS ou d’une PIC(UIP) avec une pneumopathie organisée (COP) dans la dermatomyosite et dans la polyarthrite rhumatoïde. Pneumopathies interstitielles et

Les améliorations apportées à l’onduleur se situent essentiellement au niveau de la commande, avec tout d’abord, la génération d’une onde purement sinusoïdale, mais

"Une bonne boite à outils : fermes Dephy, le Certiphyto, les guides de co-conception, le bulletin de santé végétal, EcophytoPIC (premier portail de la protection

Ce programme fait clignoter un certain nombre de fois la LED branchée sur la sortie RB0 (bit 0 du PORTB), puis fait clignoter un certain autre nombre de fois la LED branchée sur

Dans un premier temps le projet est relié au port usb d’un PC par l’intermédiaire PC par l intermédiaire d’un programmateur PICFLASH... TP PIC LPCCSEE TP PIC

Programmation des microcontrôleurs PIC ENSET d'Oran / IUFM Aix Marseille - mai 2009 -2. Classification des circuits

microcontrôleur PIC.. Lancer le compilateur C PCW.. Sélectionner le pic choisi ainsi que la fréquence de l’oscillateur.. Pour charger le programme dans un microcontrôleur PIC

A partir du fonctionnement souhaité, faire le programme source (imprimer le listing avec votre nom en entête). Tester