WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Programmation en C du micro contrôleur PIC 16F877

( Télécharger le fichier original )
par Karim SAAD
Usto Oran - Licence Electronique 2008
  

précédent sommaire suivant

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

5.4 PORT D :

C'est un port 8 bits bidirectionnel, la configuration de ce port se fait à l'aide du registre TRISD. Les registres associés sont :

Nom

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

PORTD

RD7

RD6

RD5

RD4

RD3

RD2

RD1

RD0

TRISD

Registre de Direction du PORTD

TRISE

IBF

OBF

IBOV

PSPMODE

x

Registre de direction

V' Registre TRISD :

Chaque broche est configurable en entrée ou en sortie. Pour la configurer en entrée le TRISD doit être mis à 1, sinon 0 en sortie.

Le 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 de PORTE deviennent les entrées de control de ce port (RE, WE et CS).

5.5 PORT E :

Le PORTE contient seulement 3 bits RE0, RE1 et RE2. Les 3 bits sont configurables en entrée ou en sortie à l'aide du registre TRISE.

Les 3 bits de PORTE peuvent être utilisés soit comme E/S numériques soit comme entrées analogiques du CAN. La configuration se fait à l'aide du registre ADCON1. Les registres associés sont :

Nom

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

PORTE

X

X

x

x

x

RE2

RE1

RE0

TRISE

Registre de Direction du PORTE

ADCON1

ADFM

X

x

x

PCFG3

PCFG2

PCFG1

PCFG0

V' Registre TRISE :

Si TRISE est placé à 1, Les trois bits de ce port deviennent les entrées de control du PORTD qui fonctionne en mode " parallel slave port ".A la mise sous tension (RESET), les 3 broches du PORTE sont configurés en entrées analogiques.

V' Registre ADCON1 :

Ce registre sera étudié dans le chapitre concernant le CAN.

6. Module de conversion A/N :

6.1 Caractéristiques générales du module A/D :

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 tensions de référence haute et basse peuvent être choisies par programmation parmi: VDD (broche PA3) pour VREF+ et VSS (broche PA2) pour VREF- .On peut donc numériser jusqu'à 8 signaux analogiques.

Pas tous en même temps, étant donné qu'il n'y a qu'un seul module de conversion

pour 8 signaux d'entrées multiplexées. Mais si les signaux n'évoluent pas trop vite (fréquence basse), la numérisation du signal se fait sur la patte AN0, puis sur AN1...

Les paramètres importants dont il faudra tenir compte sont :

· La résolution du convertisseur. Ici 10 bits, donc meilleur qu'un convertisseur 8 bits, mais moins précis qu'un 12 bits.

· Le temps de conversion.

· La rapidité d'évolution des signaux présents sur les entrées (leur fréquence pour des signaux périodiques).

· Le nombre de signaux à numériser.

Figure I.13 : Schéma Interne du convertisseur analogique/numérique

Registres associés avec le module A/D

Nom

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

INTCON

GIE

PEIE

TOIE

INTE

RBIE

TOIF

INTF

RBIF

PIR1

PSPIF

ADIF

RCIF

TXIF

SSPIF

CCP 1IF

TMR2IF

TMR1IF

PIE1

PSPIE

ADIE

RCIE

TXIE

SSPIE

CCP 1IE

TMR2IE

TMR1IE

ADRESH

MSB du résultat du module A/D

ADRESL

LSB du résultat du module A/D

ADCON0

ADSC1

ADSC0

CHS2

CHS1

CHS0

GO/DONE

x

ADON

ADCON1

ADFM

x

x

x

PCFG3

PCFG2

PCFG1

PCFG0

PORTA

x

x

Pins D'Entrées Sorties du PORTA

TRISA

Registre de Direction du PORTA

PORTE

x

x

x

x

x

Pins D'Entrées Sorties du PORTE

TRISE

Registre de Direction du PORTE

 

y' Registre ADCON0 :

Au reset : ADCON0 = 00000000

ADSC1 ADSC0: Clock Select bits.

Ces 2 bits permettent de choisir la vitesse de conversion :

00= Fosc/2 - 01= Fosc/8 - 10= Fosc/32 - 11= Oscillateur RC interne. CHS2 CHS1 CHS0: Channel Select bits.

Ces 3 bits permettent de choisir l'entrée qui va être convertie.

Canal

CHS2

CHS1

CHS0

PORT

0

0

0

0

RA0

1

0

0

1

RA1

2

0

1

0

RA2

3

0

1

1

RA3

4

1

0

0

RA5

5

1

0

1

RE0

6

1

1

0

RE1

7

1

1

1

RE2

 

GO/DONE: 1 = Démarre la conversion A/D - 0 = La conversion A/D est terminée. ADON : 1 = Convertisseur A/D en service - 0 = Convertisseur A/D à l'arrêt.

y' Registre ADCON1:

Au reset : ADCON1 = 00000000

ADFM: A/D Result format.

1= Justifié à droite. ADRESH ne contient que les 2 MSB du résultat. Les 6 MSB de ce registre sont lus comme des "0".

0= Justifié à gauche. ADRESL ne contient que les 2 LSB du résultat. Les 6 LSB de ce registre sont lus comme des "0".

Figure I.14 : Schéma de justification de la donnée convertie

PCFG3 PCFG2 PCFG1 et PCFG0 : Bits de contrôle de la configuration des Ports. Ces bits permettent de choisir le partage entre entrées analogiques et digitales sur les PORTS A et E.

7. Interface série asynchrone :

L'USART: "Universal Synchronous Asynchronous Receiver Transmitter" ou "SCI" en anglais (Serial Communication Interface) est l'un des deux modules de

communication série du PIC. Comme son nom l'indique, il peut établir une liaison synchrone ou asynchrone, recevoir et transmettre des données, selon la manière dont il est configuré.

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

La communication se fait sur les deux broches RC6/TX et RC7/RX qui doivent être configurés toutes les deux en entrée par TRISC.

L'USART peut être configurée selon 3 modes :

· Asynchrone (Full Duplex).

· Synchrone Maître (Half Duplex).

· Synchrone Esclave (Half Duplex). Figure I.15 : Schéma interne du port en transmission

Figure I.16 : Schéma interne du port en réception

Registres associés avec L'USART

Nom

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

INTCON

GIE

PEIE

TOIE

INTE

RBIE

TOIF

INTF

RBIF

PIR1

PSPIF

ADIF

RCIF

TXIF

SSPIF

CCP1IF

TMR2IF

TMR1IF

PIE1

PSPIE

ADIE

RCIE

TXIE

SSPIE

CCP1IE

TMR2IE

TMR1IE

RCSTA

SPEN

RX9

SREN

CREN

x

FERR

OERR

RX9D

TXREG

USART Transmettent Le Registre

TXSTA

CSRC

TX9

TXEN

SYNC

x

BRGH

TRMT

TX9D

SPBRG

Registre De Générateur De Vitesse baud

 

V' Registre TXSTA : Registre d'état Emission

Au reset : TXSTA = 00000010

CSRC : Clock Source en synchrone. (Sans importance en asynchrone) TX9 : Autorisation d'émission sur 9 bits. 1= Autorisé - 0 = Non autorisé. TXEN :Autorisation d'émission. 1= Autorisé - 0 = Non autorisé.

SYNC : Sélection mode Synchrone / Asynchrone.

1= Mode synchrone - 0 = Mode asynchrone.

BRGH : Sélection vitesse rapide en mode asynchrone.

1 = Vitesse haute sélectionnée - 0 = Vitesse basse sélectionnée.

TRMT : bit d'état du registre à décalage Emission.

1 = Registre vide, émission terminée - 0 = Registre plein, émission en cours. TX9D : 9eme bit de Données transmise. Ce bit peut être le bit de la parité.

V' Le Registre RCSTA : Registre d'état Réception

Au reset : RCSTA = 0000000x

SPEN : Serial Port Enable. PC7 et PC6 configurés pour le port série. 1 = Port série en service - 0 = Port série désactivé.

RX9 : Autorisation de réception sur 9 bits. 1 = Autorisé - 0 = Non autorisé.

SREN : Single Receive Enable. Réservé pour mode Synchrone. (Non utilisé en mode Asynchrone)

CREN :Continous Receive Enable. 1 = Autorise la réception - 0 = Désactive la réception. ADDEN: Adress Detect Enable. En mode Asynchrone 9 bits:

1 = Autorise la détection d'adresse, et charge la donnée dans le registre de réception RCREG quand le 9eme bit du registre de dé sérialisation vaut "1".

0 = Dé sélecte la détection d'adresse. Tous les octets sont reçus et le 9eme bit peut servir de bit de parité.

FERR :Framing Error.

1 = Une erreur de Framing est survenue - 0 = Pas d'erreur de Framing.

OERR :Overrun Error.Un octet est reçu alors que le registre de réception n'a pas été vidé par lecture. 1 = Erreur Overrun - 0 = Pas d'erreur Overrun.

RX9D : 9eme bit de Data reçue, ce bit peut être le bit de la parité.

y' Registre SPRBGH :

Le Baud Rate Generator est un registre 8 bits qui contient le facteur de division (N) de l'horloge interne qui permet d'obtenir la vitesse commune d'émission et de réception. BRGH=1 Vitesses haute - BRGH=0 Vitesses basse.

I Registre TXREG : Registre d'émission.

L'émission est autorisée par la mise à "1" du bit TXEN. La donnée à transmettre est mise dans le registre TXREG, TXIF = 1 le registre prévient qu'il est vide, ce flag passe à "0" dés que l'on charge un octet dans le registre TXREG. Il repasse à "1" par Hard. Ce flag passe à "0" dés que l'on charge un octet dans le registre TXREG. Il repasse à "1" par Hard quand le registre est vidé par transfert dans le registre de sérialisation : TSR. Ce registre n'est pas accessible par l'utilisateur, il n'a pas d'adresse.

Le flag TXIF permet aussi de générer une interruption, à condition qu'elle soit

autorisée par mettre TXIE = 1. Il faut dans ce cas autoriser les interruptions des périphériques par mise à PEIE = 1, et par poser GIE = 1. (Pout l'émission et la réception)

I Registre RCREG: Registre Réception

L'émission est autorisée par TXEN = 1.La donnée à transmettre est mise dans le registre TXREG. Ce registre prévient qu'il est vide en mettant le flag TXIF à "1". Ce flag passe à "0" dés que l'on charge un octet dans le registre TXREG. Il repasse à "1" par Hard quand le registre est vidé par transfert dans le registre de sérialisation TSR.

Le bit TRMT informe sur l'état du registre TSR. Quand le registre TSR n'a pas fini de sérialisé, TRMT=0. Ce flag repasse à "1" quand le registre est vide, c'est à dire quand le stop a été émis.

8. Module MSSP (Master Synchronous Serial Port) :

Le module SSP est la deuxième interface de communication série du PIC.

En fait, il s'agit d'un port Maître, donc l'appellation exacte est MSSP : « Master Synchronous Serial Port ». Il est utile pour communiquer avec d'autres modules ou microcontrôleurs, des EEPROMs séries, des registres à décalage, des afficheurs, des convertisseurs A/N.

Il peut fonctionner dans deux modes de communication :

· Le mode SPI (Serial Peripheral Interface).

· Le mode I2C (Inter-Integrated Circuit).

L'utilisation de l'un de ces deux modules de communication, USART ou MSSP dépend donc essentiellement du protocole de communication nécessaire.

Schématiquement, l'USART est bien adaptée pour communiquer avec le reste de l'univers via la célèbre interface RS232 alors que le MSSP permet de communiquer aisément avec d'autres composants électroniques à interface série.

Figure I.17 : Schéma interne du module MSSP en mode SPI

Registres associés avec Le MSSP en mode SPI

Nom

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

INTCON

GIE

PEIE

TOIE

INTE

RBIE

TOIF

INTF

RBIF

PIR1

PSPIF

ADIF

RCIF

TXIF

SSPIF

CCP1IF

TMR2IF

TMR1IF

PIE1

PSPIE

ADIE

RCIE

TXIE

SSPIE

CCP1IE

TMR2IE

TMR1IE

SSPBUF

Le Port série Synchrone Reçoivent buffer / Transmettre Le Registre

SSPCON

WCOL

SSPOV

SSPEN

CKP

SSPM3

SSPM2

SSPM1

SSPM0

SSPSTAT

SMP

CKE

D/A

P

S

R/W

UA

BF

 

Figure I.18 : Schéma interne du module MSSP en mode I2C

Registres associés avec Le MSSP en mode I2C

Nom

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

INTCON

GIE

PEIE

TOIE

INTE

RBIE

TOIF

INTF

RBIF

PIR1

PSPIF

ADIF

RCIF

TXIF

SSPIF

CCP 1IF

TMR2IF

TMR1IF

PIE1

PSPIE

ADIE

RCIE

TXIE

SSPIE

CCP1IE

TMR2IE

TMR1IE

PIR2

X

(2)

x

EEIF

BCLIF

x

x

CCP2IF

PIE2

X

(2)

x

EEIE

BCLIE

x

x

CCP2IE

SSPBUF

Le Port série Synchrone Reçoivent buffer / Transmettre Le Registre

SSPCON

WCOL

SSPOV

SSPEN

CKP

SSPM3

SSPM2

SSPM1

SSPM0

SSPCON2

GCEN

ACKSTAT

ACKDT

ACKEN

RCEN

PEN

RSEN

SEN

SSPADD

Adresse D'Esclave d'I2C/ / Registre Maitre De Vitesse baud

SSPSTAT

SMP

CKE

D/A

P

S

R/W

UA

BF

 

V' Registre SSPSTAT : registre d'état Au reset : SSPSTAT = 00000000

SMP : bit d'échantillonnage.

CKE : Clock Edge Select. Ce bit à "0" : conforme aux spécifications I2C.

D/A: Data / Adresse bit.

1 = indique que le dernier octet reçu est une donnée

0 = indique que le dernier octet reçu est une adresse.

P : STOP bit. Ce bit est remis à "0" quand le module SSP est désactivé.

1 = un Stop a été détecté. - 0 = il n'a pas détecté le Stop.

S : START bit. Ce bit est remis à "0" quand le module SSP est désactivé.

1 = un Start a été détecté. - 0 = il n'a pas été détecté de Start.

R/W : Information sur le bit R/W. Donne la valeur de ce bit qui suit la dernière adresse. Ce

bit est valable jusqu'à la réception du STOP. Mode ESCLAVE : 1 = R - 0 = W. Mode MAITRE : 1 = Transmission en cours - 0 = Pas de transmission en cours.

UA : mise à jour adresse. Utilisé en mode 10 bits seulement.

BF : Buffer plein.

Mode Réception I2C:

Registre plein =1 : réception terminée - Registre vide= 0: donc réception non

terminée.

Mode Emission I2C:

Registre plein =1: donc émission en cours. Registre vide= 0 : donc émission terminée.

V' Registre SSPCON : registre de contrôle

Au reset : SSPCON = 00000000

WCOL : détection de collision à l'écriture.

1 = Collision à l'écriture. - 0 = Pas de collision.

SSPOV : Overflow indicator en réception.Doit être remis à "0" par soft

1 = Un octet vient d'être reçu dans le buffer: Overflow.- 0 = Pas d'Overflow.

SSPEN : Enable Module SSP.

1 = Module I2C activé et pin SCL et SDA sur PC3 et PC4 configurées. 0 = Module I2C désactivé. PC3 et PC4 libres pour usage I/O.

CKP : Polarité du Clock. Inutilisé en mode maître.

Mode Esclave : 1 = Autorise horloge. - 0 = Maintient CLK = 0.

SSPM3, SSPM2, SSPM1et SSPM0 : Select Mode.

SSPM3

SSPM2

SSPM1

SSPM0

MODE

0

1

1

0

I2C esclave 7 bits

0

1

1

1

I2C esclave 10 bits

1

0

0

0

I2C maitre CLK =Fosj4(sspadd+1)

 

I Registre SSPCON2 : registre de contrôle n°2.

Au reset : SSPCON2 = 00000000

GCEN : Appel général en mode I2C esclave seulement.

1 = Autorise IT quand une adresse appel général (h'0000) est reçue.

0 = Adresse appel général désactivée.

ACKSTAT : Bit d'ACK en mode I2C maître seulement.

1 = Pas de ACK reçu de l'esclave - 0 = ACK de l'esclave a été reçu.

ACKDT : ACK Data bit. En mode maître et réception : valeur qui sera transmise quand on va lancer une séquence de ACK en fin de réception.

1 = NO ACK - 0 = ACK.

ACKEN: ACK Sequence Enable. En mode maître et réception, lance une séquence d'ACK ou de NOACK suivant la valeur dans ACKDT.

1 = Lance la séquence de ACK et transmet ACKDT. Remis à "0" par hard. 0 = Pas de séquence d'ACK.

RCEN : Receive Enable Bit. En mode I2C maître seulement.

1 = Autorise mode réception- 0 = Pas de réception autorisée.

PEN : Stop Condition Enable. En mode I2C maître seulement.

1 = Lance la séquence de STOP sur SDA et SCL. Remis à "0" par hard

0= Pas de séquence de STOP

RSEN : Repeated Start Condition. En mode I2C maître seulement.

1 = Séquence de répétition de START sur SDA et SCL. Remis à "0" par hard. 0 = Pas de séquence de répétition de START.

SEN = Start Condition Enable. En mode I2C maître seulement.

1 = Lance la séquence de START sur SDA et SCL. Remis à "0" par hard. 0 = Pas de séquence de START.

MODE MAITRE :

Les pins SDA et SCL sont manipulées par le Hard. Les événements qui causent le passage à "1" du flag S SPIF et éventuellement une si elles sont autorisées, sont :

- Condition de START.- Condition de STOP.- Répétition d'un START. - ACK après un

transfert et Transfert d'octet en Emission ou réception. (Le flag SSPIF doit être remis à "0" par soft).

Lancement d'un START:

L'utilisateur doit mettre le bit SEN "1". Les pins SDA et SCL étant toutes les deux à "1 ", le module fait passer la pin SDA de "1" à "0" ce qui génère une condition de START.

Le bit S passe à "1" pour signaler le START. A la fin du START, le bit SEN est remis à "0" par le hard. Dés que le flag SSPIF passe à "1" pour signaler la fin du START, on peut charger le registre de transmission SSBUF avec l'octet à transmettre. (Ne pas oublier de remettre ce flag à "0"par le soft).

Transmission :

Dés que le registre SSBUF est chargé, BF passe à "1" pour signaler que la transmission est en cours. Au 8eme coup de CLK, la transmission est terminée et le BF repasse à "0".

Acquittement :

Quand l'esclave répond l'ACK, le bit ACKSTAT passe à "0". La fin de l'ACK est signalée par le Flag SSPIF qui passe à "1". On doit alors remettre ce flag à "0"par soft. Lancement d'un STOP :

L'utilisateur doit mettre PEN à "1 ". Le module fait alors passer SDA à "0" puis force

SCL à"1 ". Quand SCL est à "1" il fait passer SDA de "0" à"1 ", ce qui génère une condition de STOP. P passe à "1" pour signaler le STOP. A la fin du STOP, PEN est remis à "0" par le hard.- Le flag SSPIF passe à "1" pour signaler la fin du STOP.

Réponse du maître à l'esclave :

Il s'agit soit d'un ACK soit d'un NOACK :

Positionner le bit ACKDT en fonction de la réponse à faire. Mettre le bit ACKEN à "1". La

fin de transmission du ACK ou du non ACK est signalé par le flag SSPIF qui passe à "1". (Ne pas oublier de le remettre à "0" par soft)

Réception d'un octet par le maître :

Pour cela il faut mettre le module en réception en portant RCEN à "1 ". La fin de réception est signalée par le passage à "1" du flag SSPIF, que l'on remettra à "0" par soft. On peut alors lire l'octet reçu dans SSBUF.

9. Port Parallèle Esclave (PSP : Parallel Slave Port) :

Le Port Parallèle Esclave est un port 8 bits permettant d'interfacer le PIC avec, par exemple, un autre microprocesseur. Les données transitent via les lignes PSP0 à PSP7, qui

physiquement utilisent les mêmes broches que le PORTD. Le flux de données est contrôlé par les lignes RD, WR et CS qui correspondent aux broches du PORTE.C'est le microprocesseur externe qui est le chef d'orchestre : il valide le PIC par la ligne CS (Chip Select), et indique au PIC s'il lit ou écrivent grâce aux lignes RD (Read) et WR (Write). D'où l'appellation de port parallèle esclave. Esclave, puisque c'est le microprocesseur externe qui donne les ordres, le PIC ne fait qu'exécuter.

Figure I.19 : Schéma interne du module PSP

Registres associés avec le PSP

Nom

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

PORTD

Verrou de données gauches une fois écrit : Goupilles gauches une fois lu

PORTE

x

x

x

x

x

RE2

RE1

RE0

TRISE

IBF

OBF

IBOV

PSPMODE

x

PORTE Data Direction Bits

PIR1

PSPIF

ADIF

RCIF

TXIF

SSPIF

CCP1IF

TMR2IF

TMR1IF

PIE1

PSPIE

ADIE

RCIE

TXIE

SSPIE

CCP1IE

TMR2IE

TMR1IE

ADCON1

ADFM

x

x

x

PCFG3

PCFG2

PCFG1

PCFG0

 

PSPIE = Parallel Slave Port Interrup Enable bit.

1= Autorise les interruptions R/W du port SSP.- 0= Désactive toutes ces interruptions. PSPIF = Parallel Slave Port Interrup Flag bit.

1 = Une opération de R/W vient d'avoir lieu sur le port SSP.

0 =Il n'y a pas eu de R/W sur le port SSP.

10. Modules CCP1 et CCP2 :

Ces deux modules sont identiques et composés chacun d'un registre à 16 bits. Ils peuvent fonctionner dans l'un des trois modes ci-dessous :

Mode capture (CAPTURE) : Ce mode permet d'effectuer des mesures de temps.

Mode comparaison (COMPARE) : Ce mode permet de générer des événements périodiques.

Mode PWM (PULSE WITH MODULATION): Ce mode permet de générer des signaux dont le rapport cyclique est variable.

Ces modules sont associés aux broches R/CCP1 et RC1/T1OSI/CCP2.

Suivant le mode choisit, les Timer1 ou Timer2 vont être utilisés. Le mode Capture et le mode Comparaison utilise le Timer 1, tandis que le mode PWM utilise le Timer2.

Figure I.20 : Schéma interne du module CCP

Registres associés avec Le CCP1 et CCP2

Nom

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

INTCON

GIE

PEIE

TOIE

INTE

RBIE

TOIF

INTF

RBIF

PIR1

PSPIF

ADIF

RCIF

TXIF

SSPIF

CCP1IF

TMR2IF

TMR1IF

PIE1

PSPIE

ADIE

RCIE

TXIE

SSPIE

CCP1IE

TMR2IE

TMR1IE

PIR2

x

(2)

x

EEIF

BCLIF

x

x

CCP2IF

PIE2

x

(2)

x

EEIE

BCLIE

x

x

CCP2IE

TRISC

Registre de Direction Du PORTC

T MR1L

En tenant l'inscription au moindre byte significatif du TMR1 de 16 bit enregistrés

TMR1H

En tenant l'inscription au byte le plus significatif du TMR1 de 16 bits enregistré

SSPSTAT

SMP

CKE

D/A

P

S

R/W

UA

BF

T1CON

x

x

T1CKPS1

T1CKPS0

T1OSCEN

T1SYNC

TMR1CS

TMR1ON

CCPR1L

Capture/Compare/PWM Register1 (LSB)

CCPR1H

Capture/Compare/PWM Register1 (MSB)

CCP1CON

x

x

CCP1X

CCP1Y

CCP1M3

CCP1M2

CCP1M1

CCP1M0

CCPR2L

Capture/Compare/PWM Register2 (LSB)

CCPR2H

Capture/Compare/PWM Register2 (MSB)

CCP2CON

x

x

CCP2X

CCP2Y

CCP2M3

CCP2M2

CCP2M1

CCP2M0

 

y' Registre CCP1CON :

Au reset : CCP1CON = 00000000

CCP1X et CCP1Y : Bits non utilisés en modes Compare et Capture, ce sont les 2 bits LSB pour le Duty cycle en mode PWM. Les 8 bits MSB sont dans le registre CCPR1L. CCP1M3 à CCP1M0 : bits de sélection du mode.

0 0 0 0 = Module CCP stoppé.

0 1 0 0 = Mode Capture à chaque front descendant.

0 1 0 1 = Mode Capture à chaque front montant.

0 1 1 0 = Mode Capture tous les 4 fronts montants.

0 1 1 1 = Mode Capture tous les 16 fronts montants.

1 0 0 0 = Mode Compare. Pin de sortie mise à "1" et Flag CCP 1IF = 1 à l'égalité. 1 0 0 1 = Mode Compare. Pin de sortie mise à "0" et Flag CCP 1IF = 1 à l'égalité.

1 0 1 0 = Mode Compare. Génération d'une Interruption et Flag CCP1IF = 1 à l'égalité. 1 0 1 1 = Mode Compare. Evénement spécial généré et Flag CCP1IF = 1 à l'égalité.

1 1 x x = Mode PWM.

MODE COMPARE :

Les deux modules CCP étant identiques on ne décrira que le module 1. Les 16 bits des registres CCPR1 (CCPR1H et CCPR1L) sont constamment comparés avec le valeur sur 16 bits des registres du Timer 1 (TMR1H et TMR1L). Quand il y a égalité, la broche préalablement programmée en sortie P, passe soit à "1" soit à "0" suivant la configuration des 4 bits CCP1M du registre CCP1CON. Au même instant le Flag CCP1IF est mis à "1".

En mode Compare, les événements spéciaux générés quand il y a égalité sont: - Pour CCP1: reset du Timer 1.

- Pour CCP2 : reset du Timer 1 et démarrage d'une conversion A/D.

Dans ce cas la broche de sortie n'est pas affectée, mais le Flag CCP 1IF est mis à " 1". Il est rappelé que ce Flag doit être remis à "0" par soft.

MODE CAPTURE :

Quand un événement extérieur apparaît sur la broche préalablement programmée en entrée P, la valeur des 16 bit des registres du Timer 1 (TMR1L et TMR1H) est recopiée dans les registres CCPR1 (CCPRIH et CCPR1L). Cet événement est programmable par les 4 bits CCP1M du registre CCP1CON. La capture peut avoir lieu à chaque front descendant, à chaque front montant, tous les 4 ou tous les 16 fronts montants. Quand la capture a eu lieu, le flag CCP1IF est mis à "1". Ce bit doit être remis à "0" par soft. Les fonctions de Capture et de Compare sur le Timer 1 par les modules CCP1 et CCP2 peuvent générer une interruption quand le Flag CCP1IF passe à "1" si le bit d'autorisation CCP1IE du registre PIE1 est mis à "1".

MODE PWM :

Un signal PWM est caractérisé par une période, et un temps de travail ou le signal est à "1 ". Ce temps est appelé DUTY CYCLE. La broche P doit être configurée comme une sortie en mettant le bit 2 de TRISC à "0".

Le signal PWM est fabriqué à partir du Timer 2. Le signal interne Fosc/4 passe à travers le pré diviseur programmable par 1, 4 ou 16 et fait compter TMR2.Quand ce registre atteint la valeur écrite dans le registre PR2, trois événements se produisent :

- RAZ du registre TMR2.

- La broche de sortie P est mise à "1 ", sauf si le Duty cycle vaut 0.

- Chargement de la valeur du registre CCPR1L dans le registre de Duty.

Quand le registre TMR2 atteint la valeur inscrite dans le registre interne de Duty, c'est à dire la valeur qui avait été inscrite dans CCPR1L, la broche de sortie P est remise à "0". La période est déterminée par la relation suivante :

T = [PR + 1]* 4 * T * valeur du pré diviseur

La durée du Duty cycle est la valeur écrite dans le registre 8 bits : CCPR1 L. La durée du signal au niveau "1" est donnée par la relation :

D = [CCPR1L]* 4 * T * valeur du pré diviseur

On peut avoir une meilleure r ésolution sur le Duty cycle en utilisant les 2 bits de LSB réservés à cet effet dans le registre CCP1CON.

Il s'agit de CCP1X et CCP1Y. La résolution est dans ce cas divisée par 4. Si on appelle X le registre sur 10 bits, constitué de ces 2 bits en LSB et des 8 bits de CCPR1L comme MSB, la durée à "1" est donnée par la relation :

D = X * Tosc * valeur du pré diviseur

Dans les 2 cas, quand on incrémente le registre CCPR1L de une unité, le Duty cycle augmente d'une durée égale à : 4.Tosc.valeur du pré diviseur.

Quand on passe à "1" le bit 5 la durée augmente de 2 x Tosc x pré div.

Quand on passe à "1" le bit 4 de CCP1CON, la durée augmente de Tosc.pré div Si la durée du Duty cycle est supérieure à la période, le signal n'est pas remis à "0".

11. Timers :

Le PIC 16F877 dispose de 3 timers :

· Timer 0 (8 bits): Il peut être incrémenté par des impulsions extérieures via la broche (TOCKI/ RA4) ou par l'horloge interne (Fosc/4).

· Timer 1 (16 bits): Il peut être incrémenté soit par l'horloge interne, ou soit par des impulsions sur la broche T1CKI/RC0 ou par un oscillateur (RC ou quartz) connecté sur les broches TOSO/RCO et T1OSI/RC1.

· Timer 2 (8 bits) : Il est incrémenté par l'horloge interne, celle peut être prédivisée. Tous ces timers peuvent déclencher une interruption interne, s'ils ont été autorisés.

11.1 Timer0 :

C'est le plus ancien des timers implantés dans les PICs, son ancienne appellation était

RTC, pour Real Time Clock (horloge temps réelle). On peut se servir de celui-ci pour générer des événements périodiques, comme le rafraîchissement d'afficheurs multiplexés ou l'incrémentation de variables (secondes, minutes ...).

Registres associés avec Le TMR0

Nom

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

TMR0

Registre compteur

INTCON

GIE

PEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF

OPTION_REG

RBPU

INTEDG

T0CS

T0SE

PSA

PS2

PS1

PS0

 

y' Registre OPTION : Au reset : OPTION = 11111111 TOCS: Timer TMR0 Clock Source select bit.

1 = L'horloge du Timer est l'entrée PA4/Clk (pin 3).

0 = Le Timer utilise l'horloge interne du PIC.

TOSE: Timer TMR0 Source Edge select bit.

1 = Le Timer s'incrémente à chaque front montant de la broche PA4/Clk.

0 = Le Timer s'incrémente à chaque front descendant de la broche PA4/Clk.

PSA : Prescaler Assignement bit.

1 = Le prédiviseur est affecté au watchdog. - 0 = Le prédiviseur est affecté au Timer

PS2 PS1 PS0: Prescaler Rate Select bits.

PS2

PS1

PS0

Prédiv Timer

Prédiv Watchdog

0

0

0

2

1

0

0

1

4

2

0

1

0

8

4

0

1

1

16

8

1

0

0

32

16

1

0

1

64

32

1

1

0

128

128

1

1

1

256

256

 

Figure I.21 : Schéma interne simplifié du TMR0 sans le WA TCHDOG

11.2 Le Timer1 :

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, ce qui étend notablement ces capacités de comptage. Il est accessible en lecture/écriture par l'intermédiaire des registres 8 bits TMR1H et TMR1L, On le configure à l'aide du registre T1CON. On peut l'utiliser en association avec un des modules CCP (modules de capture et de comparaison)

Figure I.22 : Schéma interne du TMR1

Registres associés avec Le TMR1

Nom

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

INTCON

GIE

PEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF

PIR1

PSPIF

ADIF

RCIF

TXIF

SSPIF

CCP1IF

TMR2IF

TMR1IF

PIE1

PSPI

ADIE

RCIE

TXIE

SSPIE

CCP1IE

TMR2IE

TMR1IE

TMR1L

Registre compteur ( 8bits) poids faible

TMR1H

Registre compteur (8 bits) pois fort

T1CON

x

x

T1CKPS1

T1CKPS0

T1OSCEN

T1SYNC

TMR1CS

TMR1ON

 

V' Le registre T1CON : Sélection du pré diviseur placé avant le TIMER.

Au reset : T1CON = 00000000

T1CKPS1 T1CKPS0 : Bits Sélection du pré diviseur placé avant le TIMER.

00 = Prédiviseur 1.
01 = Prédiviseur 2.

10 = Prédiviseur 4.

11 = Prédiviseur 8.

T1OSCEN : Bit d'autorisation de l'oscillateur du Timer 1.

1 = oscillateur autorisé -0 = oscillateur stoppé.

T1SYNC : Bit de contrôle de la synchronisation du CLK externe.

1 = Pas de synchronisation de l'horloge externe. 0 = Synchronisation de l'horloge

externe.

TMR1CS : Bit de sélection de la source horloge.

1 = Mode Compteur: Clk externe sur la broche PC0 ou Quartz entre PC0 et PC 1

0 = Mode Timer: Clk interne = Fosc/4.

TMR1ON : Bit d'autorisation du Timer 1.

1= Timer 1 en service. -0 = Timer 1 stoppé.

11.3 Le TIMER2 :

Le Timer2 a un fonctionnement différent des Timer0 et Timer 1. C'est un compteur 8 bits avec prédiviseur et postdiviseur. Son horloge ne peut être que l'horloge interne divisée

par 4 (Fosc/4).On s'en sert pour générer des signaux carrés, ou, en association avec le module CCP, des signaux PWM.

Figure I.23 : Schéma du TMR2

Registres associés avec Le Timer2

Nom

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

INTCON

GIE

PEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF

PIR1

PSPIF

ADIF

RCIF

TXIF

SSPIF

CCP 1IF

TMR2IF

TMR1IF

PIE1

PSPI

ADIE

RCIE

TXIE

SSPIE

CCP1IE

TMR2IE

TMR1IE

TMR2

Registre compteur

T2CON

x

TOUTPS3

TOUTPS2

TOUTPS1

TOUTPS0

TMR2ON

T2CKPS1

T2CKPS0

 

V' Registre T2CON :

TOUTPS : Programmation du Post diviseur.

0 0 0 0 = post divise par 1. 0 0 0 1 = post divise par 2. 0 0 1 0 = post divise par 3. . . . .

1 1 1 1 = post divise par 16.

TMR2ON : mise en service du Timer 2.

1= Timer 2 On.6- 0= Timer 2 Off.

T2CKPS : Programmation du pré diviseur.

0 0= pré divise par 1.
0 1= pré divise par 4.
X= pré divise par 16.

TMR2IE : TMR2 Interrup Enable bit.

1= Autorise les interruptions du Timer 2 TMR2. - 0 = Désactive cette interruption.

TMR2IF: TMR2 Interrup Flag bit.

1 = Le Timer2 a fait une IT. - 0 = Pas d'IT du TIMER 2.

12. Les interruptions :

Le microcontrôleur dispose de 14 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).

· Fin de programmation d'une case mémoire de l'EEPROM.

· Changement d'état sur le PORTD

· Fin de conversion analogique numérique

· Réception d'une information sur la liaison série

· Fin d'émission d'une information sur la liaison série

· Interruption SPI ou I2C du module MSSP

· interruption du registre de capture et/ou de comparaison 1

· Interruption du registre de capture et/ou de comparaison 2

· Débordement du Timer 1

· Débordement du Timer2

Une demande d'interruption ne peut aboutir au processeur que si tous les bits d'autorisation

qui se trouvent sur son chemin sont activés.

Exécution
En cours

 

Save PC
0 GIE

 

Execution retour

SPI

 

Reprise exécution
Suspendue

 

V' Fonctionnement :

- Le proceseur est en cour d'exécution (un programme ou un sous programme). - Un evenemment=> arrive FLAG mis à 1 =>demmande d'intruption :

Si les bits d'otorisation sont validées le processeur répond.

- Le processeur sauvegarde le PC dans la pile et mis à 0 le bit de contrôle GIE .ce ci à fin d'éviter que le CPU ait éventuellement intérempu pendant l'éxécution du SPI.

- Le processeur se branche vers la routine SPI et l'éxécute ,cette rroutine doit étre à l'adress 0x0004.

- Le SPI se termine par l'instruction de retour, l'exécution de cette instruction consiste à remettre à 1 le bit GIE puis à récupérer et mètre dans le PC l'adresse de retour.

- Le processeur reprend l'exécution suspendue.

- On peut schématiser les interruptions sur les PIC par l'organigramme suivant :

Instruction
quelleconque

Sauvegarder
l'événement

Evénement déclencheur

Instruction xxx
(1/2cycle)

Détecter quel
événement est
survenu

Organigramme
principal

Sous programme
d'interruption

Programme
principal

Sous programme
d'interruption

Traiter l'événement

Restaurer
l'événement

Return

Instruction suivante

Suite de Programme

Événement

Implémentation d'une fonction sous interruption :

SPI

Autorisation D'interruption

Sous programme
d'interruption

Programme
principal

Initialisation
principale

Boucle principale
BP

Sauvegarde
contexte

RAZ flag

Traitement

Restitution contexte

Return

Cas de plusieurs sources d'interruption:

Restitution contexte

Return

RAZ flag

RAZ flag

SPI

Sauvegarde
contexte

FLAG=1

FLAG=1

Traitement 1

Traitement 1

Figure I.24 : Schéma interne des interruptions

rtie Pratiq

 

Applications du PIC 16F8

 
 

:

Présentation de la Carte EASYPI

Ce starter-kit "EASYPI" est spécialement conçu pour supporter les microcontrôleurs 18, 28 et 40 broches de la famille PIC 16F87x. Une nouvelle version existe avec programmateur USB intégré.

Le starter-kit "EASYPIC " permet ainsi de tester, d'étudier et de communiquer avec la plupart des périphériques qui peuvent être rencontrer dans les applications industrielles:

· Afficheurs LCD ou 7 segments.

· Claviers de saisie.

· Affichage par Led.

· communication série.

· Mesure et contrôle de température.

· Conversion analogique / numérique.

L'alimentation externe du PIC :

Il est exigé pour tous les éléments dans le système de développement d'avoir +5V stabilisé. Le système EasyPI utilise le régulateur de tension LM7805. En outre, l'alimentation d'énergie d'USB peut être utilisée qui permet à EasyPI de fonctionner sans alimentation d'énergie externe.

Figure II.1 : Schéma interne de l'alimentation

38

Figure II.2 : Photo de la carte EASY PI

Dans la partie pratique on a étudié les différentes interfaces du pic 1 6F877 telle que : le port parallèle, le port série, le convertisseur ...

Dans chaque interface on a cité plusieurs exemples d'applications avec leurs schémas et leurs organigrammes.

Mais par manque de temps on n'a pas pu utiliser d'autres interfaces telles que le port parallèle slave, Module MSSP, I2C, Module de comparaison CCP1 et CCP2....

La directive CONFIG :

Cette directive contient les fameux « fusibles » qui fixent le fonctionnement du PIC. Les valeurs écrites seront intégrées dans le fichier « .hex » pour signaler au programmateur les valeurs à encoder aux adresses spécifiques du PIC.

Cette directive est programmée lors de la programmation du PIC dans un registre

spécial, situé en mémoire programme à l'adresse 0x2007, et ne peut plus être modifié en cours d'exécution du programme.

Cette directive est un registre de 14 bits dont chaque bit a une fonction précise :

- CP1/CP0 : bits 13/12 - 5/4 : Détermine quelle zone du PIC sera protégée contre la lecture. - DEBUG : bit 11 : Debuggage sur circuit. Permet de réserver RB7 et RB6 à la

communication avec un debugger.

- Bit 10 : non implémenté.

- WRT : bit 9 : Autorisation d'écriture en flash.

- CPD : bit 8 : Protection en lecture de la mémoire eeprom.

- LVP : bit 7 : Utilisation de la pin RB3/PGM comme broche de programmation.

- BODE N : bit 6 : provoque le reset du PIC en cas de chute de tension (surveillance de la tension d'alimentation).

- PWRTE : bit 3 : Délai de démarrage à la mise en service. Attention, est automatiquement mis en service si le bit BODEN est positionné.

- WDTE : bit 2 : Watchdog timer.

- FOSC1/FOSC0 : bits 1/0 : sélection du type d'oscillateur.

Dans nos application on utilisés la configuration suivante : pragma config | = 0x 3a71, C'est-à-dire: CP1/CP0= OFF, WDT= OFF, PWRTE=ON, BODEN= ON, LVP= OFF, CPD=OFF, WRT=OFF, DEBUD= OFF, FOSC1/FO=XT.

Les valeurs données sont définies dans le fichier 1 6f877.inc qui représente les équivalences pour le PIC.

précédent sommaire suivant










Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy



"Soit réservé sans ostentation pour éviter de t'attirer l'incompréhension haineuse des ignorants"   Pythagore