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


par KARIM SAAD
Usto Oran - Licence Electronique 2008
Dans la categorie: Informatique et Télécommunications
   
Télécharger le fichier original

Disponible en mode multipage

République Algérienne Démocratique et Populaire
Ministère de l'Enseignement Supérieur de la Recherche Scientifique

Université des sciences et
de la technologie MOHA MED
BOUDIA F Oran

Mémoire de fin d'études pour l'obtention du

diplôme de Licence

L-M-D

Option : Technique de Communication

Présenté par :

ISila .011 017e4 ileae~~ilt~eK

THÈME

Programmation En C Sur Carte "EASYPIC 2"

du Microcontrôleurs 16F877

Encadré par : Mr HAMADA

JURY

Examinateur : Mr BOUGHANMI

Encadreur : Mr HAMADA

2ème Promotion 2007/2008

Introduction Générale 1

CHAPITREI :

PARTIE THEORIQUE : ETUDE THEORIQUE DES INTERFAÇE DU PIC 16F877

I. Introduction

2

II. Présentation Microcontrôleur PIC 16F877

.2

 

1. Principales caractéristiques du PIC 16F877

. 3

2. Architecture Interne

...4

2.1Coeur du PIC : le microprocesseur

4

2.2 Horloge

5

2.3 Pile et Compteur Programme

6

3. Mémoires du PIC

..6

3.1 Mémoire FLASH

6

3.2 Mémoire RAM

6

3.3 Mémoire EEPROM

6

4. Architecture Externe

7

5. Ports d'Entrées Sorties

8

5.1 PORT A

8

5.2 PORT B

9

5.3 PORT C

10

5.4 PORT D

11

5.5 PORT E

12

6. Module de conversion . ./N

13

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

13

7. Interface série asynchrone

16

8. Module MSSP (Master Synchronous Serial Port)

18

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

22

10. Modules CCP1 et CCP2

23

11.Timers

26

11.1 Timer 0

26

11.2 Timer 1

27

11.3 Timer 2

28

12. Les interruptions

29

CHAPITRE II : PARTIE PRATIQUE: APPLICATIONS DU PIC 16F877.

 

Présentation de la Carte EASYPI

33

I. Ports Parallèles

35

1. Utilisation des LEDs

35

1.1 Clignotement d'une led

37

1.2 Chenillard

.38

1.3 Compteur 0-9 des leds

38

2. Utilisation avec les afficheurs 7 segment

39

2.1 Compteur 0 - 9 des afficheurs

40

2.2 Compteur 0 - 99

41

3. Utilisation avec le clavier

43

3.1 Allumage d'une led à l'aide d'une touche

43

3.2 Allumage des leds à l'aide de chaque touche correspondant

.....44

II. Port Série

45

1. Utilisation avec la liaison RS232

45

1.1 Transmission des données entre le PIC et le PC

46

III. Port Analogique Numérique

47

1. Utilisation du convertisseur A/D

47

1.1Conversion d'un signal analogique

48

2. Utilisation du convertisseur avec un capteur de température

51

2.1 Conversion du signal analogique reçu par le capteur

51

IV. Autres Applications

52

1. Utilisation du pic avec LCD

52

1.1 Affichage d'un message

54

1.2 Utilisation du pic pour la commande d'un moteur pas à pas

55

2. Utilisation du pic pour la commande d'un moteur pas à pas .

.56

Figure I.1 :

3

Figure I.2 : Schéma interne du PIC:

4

Figure I.3 : Schéma de L'ALU:

5

Figure I.4 : Schéma de l'horloge

....6

Figure I.5 : Schéma de la pile

...6

Figure I.6 : Schéma interne des mémoires

7

Figure I.7 : Brochage du PIC:

7

Figure I.8 : Schéma interne d'une ligne d'entrée sortie du PORTA:

9

Figure I.9 : Schéma interne d'une ligne d'entrée sortie du PORTB

Pins (RB3 - RB0) Pins (RB7-RB4)

10

Figure I.10 : Schéma interne d'une ligne d'entrée sortie du PORTC

Pins (RC7-RC5, R-RC0) Pins (RC3-RC4) )

11

Figure I.11 : Schéma interne d'une ligne d'entrée sortie du PORTD)

12

Figure I.12 : Schéma interne d'une ligne d'entrée sortie du PORTE

.13

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

14

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

15

FigureI.15 : Schéma interne du port en transmission

16

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

..17

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

19

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

19

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

22

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

23

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

..27

Figure I.22 : Schéma interne du TMR1

..27

Figure I.23 : Schéma du TMR2

..28

Figure I.24 : Schéma interne des interruptions

31

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

33

Figure II.2 : Photo de la carte EASY PI

34

Figure II.3 : Montage des leds avec le PIC

36

Figure II.4 : Montage des afficheurs 7segments avec le PIC

.40

Figure II.5 : Montage du clavier avec le PIC

43

Figure II.6 : Montage du PIC avec un PC via une liaison RS232

.45

Figure II.7 : Montage du convertisseur A/N avec le PIC

...48

Figure II.8 : Montage du capteur LM335 avec le PIC

...51

Figure II.9 : Montage de l'afficheur LCD 2X16 avec le PIC

52

Figure II.10 : Montage de la carte de commande du moteur pas a pas avec le PIC

..56

Cette étude a été faite dans le cadre de constituer un document pédagogique destiné aux étudiants qui veulent s'initier à la programmation des microcontrôleu rs.

Ce projet a été réalisé dans le but d'étudier les caractéristiques techniques

d'un microcontrôleur par son utilisation dans certaines applications bien déterminées, notre choix est porté vers le pic 16F877 de la famille MicroChip . La programmation des microcontrôleurs nécessite des outils fondamentaux citons :

· Le compilateur.

· Le programmateur.

Plusieurs langages de programmation sont à la disposition des utilisateurs des pics c'est le compilateur qui fait la différence entre chaque langage. Le principe reste le même, c'est les instructions qui changent.

Dans notre projet le logiciel utilisé est le MPLABv6.4 dont il dispose d'un compilateur C et un assembleur, notre choix s'est porté vers le langage C pour sa simplicité d'utilisation.

Chaque programme compilé doit être téléchargé sur le pic à l'aide d'un programmateur qui nécessite une interface graphique pour la transmission de ce dernier. Nous avons a utilisé le PIC FLASH Programmer v5.15.

Le mémoire a été présenté notre en deux parties :

Dans la première partie théorique : nous avons étudié les différentes interfaces du pic, chaque interface a été détaillée avec une explication du principe de fonctionnement, un schéma interne et son registre associé.

Dans la deuxième partie pratique : nous avons développé les programmes d'applications sur les interfaces suivantes : port série, parallèle et le module A/D.

Dans chaque application nous avons proposée une explication du principe de fonctionnement, un schéma et un organigramme qui traduit le programme de l'application.

Par manque de temps les interfaces PSP, MSSP, CCP ... n'ont pas été appliquées.

I. Introduction :

Un microcontrôleur est un composant électronique autonome composé :

· D'un microprocesseur.

· D'une mémoire vive type mémoire RAM.

· D'une mémoire morte type mémoire Flash.

· D'interfaces d'entrées/sorties parallèles, séries.

· D'interfaces d'entrées/sorties analogiques.

· De Timers (registres compteurs de temps ou d'évènements).

· D'autres modules plus au moins sophistiqués selon la taille des uC.

Il est généralement moins puissant qu'un microprocesseur en terme de rapidité ou de taille mémoire et se contente le plus souvent d'un bus 8 ou 16 bits. Ceci en fait un composant parfaitement adapté pour piloter les applications embarquées dans de nombreux domaines d'application.

Un microcontrôleur peut être programmé une fois pour toutes afin qu'il effectue une ou des tâches précises pour une ou des applications précises. Mais les u C récents peuvent être reprogrammés et ceci grâce à leur mémoire reprogrammable de type FLASH (d'où le terme flasher quelque chose).

Les microcontrôleurs, quelque soit leurs constructeurs, ont des architectures très similaires et sont constitués de modules fondamentaux assurant les mêmes fonctions :

· UAL.

· Ports d'E/S.

· Interfaces parallèles, série.

· Interfaces analogiques.

· Timers et horloge temps réels ...

On peut dire que seul le langage de programmation (Assembleurs, langages évolués (C, Basic, Pascal...) constitue la différence majeure entre deux microcontrôleur (similaires).

II. Présentation Microcontrô leur PIC 16F877 :

Définition : Un PIC est un microcontrôleur, c'est à dire une unité de traitement de l'information de type microprocesseur à laquelle on a ajouté des circuits internes permettant de réaliser des montages sans nécessiter l'ajout de composants externes. Les PICs sont des composants dits RISC (Reduced Instructions Set Computer), ou encore (composant à jeu d'instructions réduit).

Différentes familles des PICs : La famille des PICs est subdivisée à l'heure actuelle en 3 grandes familles :

· Base-line : c'est une famille qui utilise des mots d'instructions de 12 bits.

· Mid-range : c'est une famille qui utilise des mots de 14 bits (dont font partie les 1 6F84 16F876 et 16F877

· High-end : c'est une famille qui utilise des mots de 16 bits.

Identification d'un PIC : identifier un PIC, en suivant l'architecture suivante :

Figure I.1

~~F877-4

441Hz

1. Principales caractéristiques du PIC 16F877 :

Le PIC 16F877 est caractérisé par :

- Une fréquence de fonctionnement élevée, jusqu'à 20 MHz.

- Une mémoire vive de 368 octets.

- Une mémoire morte EEPROM de 256 octets pour la sauvegarde des données. - Une mémoire de type FLASH de 8 Kmots (1mot = 14 bits) .

- Chien de garde WDT.

- 33 lignes d'entrées /sorties. Chaque sortie peut sortir un courant maximum de 25 mA. - 3 Temporisateurs :

· TIMER0 (compteur 8 bits avec prédiviseur).

· TIMER 1 (compteur 16 bits avec prédiviseur et possibilité d'utiliser une horloge externe réseau RC ou QUARTZ).

· TIMER2 (compteur 8 bits avec prédiviseur et postdiviseur).

- 2 entrées de captures et de comparaison avec PWM (Modulation de largeur d'impulsions).

- Un convertisseur Analogique Numérique 10 bits avec 8 entrées multiplexées.

- Une interface de communication série asynchrone et synchrone (USART/SCI). - Une interface de communication série synchrone (SSP/SPI et I2C).

- Une tension d'alimentation entre 2 et 5.5 V.

8

2. Architecture Interne :

Figure I.2 : Schéma interne du PIC

2.1 Coeur du PIC : le microprocesseur :

Un microcontrôleur, c'est avant tout un microprocesseur : une unité de traitement logique qui effectue l'une après l'autre les opérations contenues dans un programme stocké en mémoire (la mémoire FLASH). On peut le voir sur le schéma de la figure I.2, il est essentiellement composé de :

· L'ALU (Unité Arithmétique et Logique) : Exécute les opérations sur les donnés.

· Le registre de travail « W reg. ».

· Le multiplexeur « MUX ».

· Le registre de statut « status reg ».

· Le registre « FSR reg » utilisé pour l'adressage direct et indirect.


· Le multiplexeur d'adresse « Addr mux ».

· Le compteur programme « Program Counter » : Pointage des instructions à exécuter

· La pile à 8 niveaux « 8 level Stack ».

· Le registre d'instruction « Instruction reg »

Figure I.3 : Schéma de L'ALU

Bus du programme

AddrMUXM

Direct Adrr

Indirect Adrr

STATUS

Wreg

2.2 Horloge :

L'horloge peut être soit interne soit externe. L'horloge interne est constituée d'un oscillateur à quartz ou d'un oscillateur RC. Avec l'oscillateur à quartz, on peut avoir des fréquences allant jusqu'à 20 MHz selon le type de microcontrôleur.

Le filtre passe bas (Rs, C1, ) limite les harmoniques dus à l'écrêtage et réduit l'amplitude de l'oscillation. Avec un oscillateur RC, la fréquence de l'oscillation est fixée par Vdd, Rext et Cext. Elle peut varier légèrement d'un circuit à l'autre.

Dans certains cas, une horloge externe au microcontrôleur peut être utilisée pour synchroniser le PIC sur un processus particulier. Quelque soit l'oscillateur utilisé, l'horloge système dite aussi cycle d'instruction est obtenue en divisant la fréquence par 4. Le terme Fosc/4 désigne l'horloge système. Par exemple on obtient un cycle d'instruction de 1 MHz, en utilisant un quartz de 4 MHz.

10

 

13

 

Bus de Données 8

Mémoire
Flash

 
 

P.C

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Pile

Figure I.4 : Schéma de l'horloge

2.3 Pile et Compteur Programme :

Le « Program Counter » ou PC est le compteur qui pointe, dans la mémoire de programme, la prochaine instruction à exécuter. Il est lié à la pile système (Stack en anglais) à 8 niveaux dans le 16F877. C'est-à-dire qu'on peut avoir jusqu'à 8 niveaux d'imbrication d'appels de sous-programmes ou fonctions.

Figure I.5 : Schéma de la pile

3. Mémoires du PIC :

Le PIC 16F877 contient trois types de mémoires :

3.1 Mémoire FLASH :

C'est dans celle-ci qu'est stocké le programme du PIC. Après compilation du fichier source, le compilateur génère un fichier « .hex », Celui-ci est transféré ensuite dans la mémoire programme du PIC à l'aide du programmateur. La capacité de cette mémoire est de 8Kmots.

Cette mémoire n'est pas reliée au bus de données (DATA Bus), elle sert à stocker le programme du PIC, mais pas les variables du programme. L'avantage de cette mémoire c'est qu'on peut l'effacer et la réécrire facilement.

3.2 Mémoire RAM :

Fait partie de la zone d'adressage des données. Elle comprend tous les registres spéciaux permettant de contrôler le coeur du PIC ainsi que ses périphériques. Les variables des programmes pourront être stockées dans des cases mémoires à usage commun.

3.3 Mémoire EEPROM :

L'EEPROM est une mémoire de stockage de données. Sur le PIC 16F877, il y a 256 octets d'EEPROM disponibles. Le nombre de cycles d'effacement / écriture sur la mémoire EEPROM est limité d'ordre du million pour le PIC, mais cette limite pourrais être atteinte plus vite pour le stockage des variables modifiées plusieurs milliers de fois par seconde.

Figure I.6 : Schéma interne des mémoires

4. Architecture Externe :

Le boîtier du PIC 16F877 décrit par la figure I.7 comprend 40 pins : 33 pins d'entrées/sorties, 4 pins pour l'alimentation, 2 pins pour l'oscillateur et 1 pin pour le reset (MCLR).

Figure I.7 : Brochage du PIC

12

- La broche MCLR sert à initialiser le pic qui dispose de plusieurs sources de RESET

(POR: la mise sous tension, EXTERNAL RESET: remise à zéro externe, WDT: chien de garde, BOR : baisse de tension d'alimentation).

- Les broches VDD (Broche 11 et 32) et VSS (Broche 12 et 31) servent à alimenter le PIC.

On remarque qu'on a 2 connections «VDD» et 2 connections « VSS ». La présence de ces 2 pins s'explique pour une raison de dissipation thermique. Le courant porté dans le PIC n'est pas négligeable parce qu'il existe de nombreuses lignes d'entrées/sorties disponibles.

- Les broches OSC1 (Broche 13) et OS (Broche 14) permettent de faire fonctionner

l'oscillateur interne du PIC qui peut être (un quartz, un résonateur céramique, un oscillateur externe ou un réseau RC).

5. Ports d'Entrées Sorties :

Le microcontrôleur dispose de 5 PORTS (A, B, C, D et E). Tous les ports d'entrées sorties sont bidirectionnels. La plupart des lignes ont une double fonction.

Remarque : L'indicateur x signifie un bit non implémenté. L'indicateur Gras signifie un bit utilisé.

5.1 PORT A :

Le PORTA est un port de six bits donc six entrées/sorties numérotées de RA0 à RA5 qui peuvent être utilisées comme des entrées pour le : (Convertisseur Analogique Numérique, le TIMER0, dans ce cas la pin RA4 sera utilisé comme entrée pour configurer TOCKI est de type drain ouvert). Les registres associés avec le port A sont :

Nom

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

PORTA

x

X

RA5

RA4

RA3

RA2

RA1

RA0

TRISA

Registre de Direction du PORTA

ADCON1

ADFM

X

x

x

PCFG3

PCFG2

PCFG1

PCFG0

y' Registre TRISA :

TRISA=1 : les lignes du PORTA sont configurées en ENTREES, et le driver de sortie est placé en haute impédance.

TRISA=0 : les lignes du port sont configurées en SORTIES.

y' Registre ADCON1 :

Ce registre sera étudié dans le chapitre concernant le CAN. On retiendra seulement que pour configurer les 5 bits du Port A en entrées sorties digitales, il faut positionner les 4 bits PCFG à 0110.

Figure I.8 : Schéma interne d'une ligne d'entrée sortie du PORTA

5.2 PORT B :

C'est un port bidirectionnel de 8 bits (RB0 à RB7). Ses registres associés sont :

Nom

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

PORTB

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

TRISB

Registre de Direction Du PORTB

OPTION_REG

RBPU

TOCS

INTEDG

TOSE

PSA

PS2

PS1

PS0

y' Registre TRISB :

Le PORTB est configuré en entré si TRISB est mis à 1 et lorsque ce dernier est mis 0 le PORTB est en sortie.

En mode entrée chaque broche du PORTB doit être maintenue à un niveau haut par

l'intermédiaire de résistances de 10 k pour ne pas déclencher d'interruptions imprévues qui peut être activé ou désactivé par la mise à 1 ou a 0 du 7èmè bit du registre OPTION.

Au reset, le tirage est désactivé. Il est inactif quand le port est configuré en sortie.

En entrée, les broches RB4 à RB7 peuvent déclencher l'interruption. On parlera là- dessus dans le paragraphe réservé aux interruptions.

y' Registre OPTION :

Ce registre en lecture écriture permet de configurer les prédiviseurs du Timer et du Watchdog, la source du Timer, le front des interruptions et le choix du Pull up sur le Port B.

Figure I.9 : Schéma interne d'une ligne d'entrée sortie du PORTB
Pins (RB3 - RB0) Pins (RB7-RB4)

5.3 PORT C :

Il s'agit d'un PORT de 8 bits bidirectionnels. Il est partagé avec le module de transmission synchrone I2C et l'USART. La configuration de direction se fait à l'aide du registre TRISC.

Les registres associés sont :

Nom

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

PORTC

RC7

RC6

RC5

RC4

RC3

R

RC1

RC0

TRISC

Registre de Direction du PORTC

V' Registre TRISC:

La mise à 1 de ce registre configure la broche correspondante en entrée, et inversement.

Au reset toutes les broches sont configurées en entrée. Toutes les broches du port C peuvent être utilisées soit comme E/S normales soit comme broches d'accès à différents modules comme le timer1, les modules de comparaison et de capture CCP1/2, le timer 2, le port I2C ou le port série, ceci sera précisé au moment de l'étude de chacun de ces périphériques.

Figure I.10 : Schéma interne d'une ligne d'entrée sortie du PORTC
Pins (RC7-RC5, R-RC0) Pins (RC3-RC4)

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.

I. Ports Parallèles :

1. Utilisation des LEDs :

Le kit "EASYPI" a 32 diodes, reliées pour mettre en communication les pins du PORTA, PORTB, PORT C, PORTD et le PORTE.

Ces diodes sont d'habitude utilisées dans la première phase du travail, mais elles sont également employées pour les indications postérieures de l'écoulement de programme.

Chaque ensemble des diodes peut être activé ou désactivé en utilisant le commutateur SW3. La manière de relier ces LEDS avec un microcontrôleur est montrée sur la figure I.3.

Les LEDS s'allument avec un "1" logique. Il signifie qu'un microcontrôleur doit avoir un "1" logique sur une pin pour que la diode émette la lumière.

Figure II.3 : Montage des leds avec le PIC

41

P B0

PIC

16 F8 77

PD0

1.1 Clignotement d'une led :

Principe :

- Faire clignoter une led du PORTB chaque seconde.

- Varier la vitesse du clignotement (chaque 500ms à l'aide du registre timer0) à l'aide d'un bouton du PORTD.

- Fonction Timer0 :

Configuration du registre option pour un pré diviseur de 8.

On charge la valeur du timer à 2.

La variable T s'incrémente à 125 pour obtenir 1000us quand le pré diviseur est 8. Incrémentation de T tan qu'elle est différente de TMR0.

Schéma d'application :

Organigramme principal

RB0 = 0

x = 1000

oui

T = T + 125

TMR0 ? T

retour

?

non

non

x= x-1

x ? 0

oui

non

tempo(x)

tempo(x)

RB0 = 1

RD0=1

?

oui

x = 300

PB = 0

PA =0

Sous Organigramme de
temporisation

Début

Configuration de timer0 Charger TMR0, T=0

Organigramme :

Configuration de la ligne
RB0 en sortie, PA en entrée

Début

i = i + 1

Remarque :

On représente le meme organigramme pour le port C et le port D.

1.2 Chenillard :

Principe :

- Faire tourner un jeu lumière en utilisant les ports B, C et D du pic. - Utilisation de la fonction tempo à l'aide du timer0.

Organigramme :

- Le tableau PIN [8] de 8 éléments contient le Code d'affichage des leds = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}

Organigramme principal

Début

Configuration des ports B, C
et D en sortie

PB = 0 PC = 0 PD = 0 PE =0
x= 120

i = 0

oui

PB = PIN[i]

tempo(x)

non

?

i<=7

1.3 Compteur 0-9 des leds:

Principe :

- On ajouter une autre application concernant les leds qui affiche un compteur allant de 0 jusqu'à 9 à chaque seconde.

- On n'a pas pu représenter son organigramme a cause de sa longueur.

- Voici un schéma qui explique le principe de fonctionnement de cette application.

43

PA0-5 PB0-7 PC0-7 PD0-7

PIC

16F87

Schéma de l'application :

2. Utilisation avec les afficheurs 7 segment :

L'affichage des 7segments se compose de quatre digits qui sont régénérés par le PORTB en combinaison avec le PORTA. L'interrupteur à positions multiples SW2, permet d'activer ou désactiver les digits spécifiques. Par exemple, pour afficher le premier chiffre du côté gauche. Le quatrième commutateur (SW2) doit être mis a l'état (ON), le digit du 7segment correspondant DISC1 affichera la valeur définie par des valeurs des pins du PORTB.

La procédure est similaire avec les digits DIS, DISC3 et DISC4. La figure suivante montre comment relier l'afficheur sept-segment au microcontrôleur.

Figure II.4 : Montage des afficheurs 7segments avec le PIC

2.1 Compteur 0 - 9 des afficheurs :

Principe :

- Un compteur de 10 secondes qui va de 0 jusqu'à 9.

- Utilisation d'une fonction de temporisation à l'aide de timer0.

- Le tableau suivant explique le principe de codage BCD 7 segments.

45

PB0

PB1

PB2

PB3

PB4

PB5

PB6

PB7

PIC

16 F8 77

Chiffre7
Segments

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Code binaire
a b c d e f g

00111111

00000110

01011011

01001111

01100110

01101101

01111101

00000111

01111111

01101111

Code
Hexadécimal

0x3F

0x06

0x5B

0x4F

0x66

0x6D

0x7D

0x07

0x7F

0x6F

Schéma de l'application :

g

f

d

a

h

dp

c

b

a

b

c

d

e

f

g

h

Organigramme :

- PIN [10]: tableau à 10 éléments contient code d'affichage 7 segments.

Début

Configuration des ports
A et B en sortie

PB = 0 PA = 0

x = 1000

non

i = 0

?

i<=9

2.2 Compteur 0 - 99 :

oui

PA3 = 1

PB = PIN[i]

tempo(x)

i = i + 1

Principe :

- Faire un chronomètre de 100 secondes qui va de 0 jusqu'à 99. - Utilisation de fonction tempo qui utilise le timer0.

i = i + 1

PA3 = 1

Organigramme :

AFS [10] : tableau à 10 éléments contient code d'affichage 7 segments.

Début

Configuration des ports
A et B en sortie

PB = 0 PA = 0
AFS [10] x = 5

non

i = 0

?

i<=9

oui

oui non

j<=9

?

PB = AFS[j]

tempo(x)

PA2 = 1

PB = AFS[i]

tempo(x)

j = j + 1

Remarque :

Ce compteur doit compter de 0 jusqu'à 9999 mais on a représenter que l'organigramme des deux digits du poids faible a cause de la longueur du programme.

47

j = 0

3. Utilisation avec le clavier :

Le kit EASYPI a un bouton de remise à zéro "RESET" et 32 boutons pour simuler les entrées de système qui sont reliées aux pins RE0, RE1 et aux ports A, B, C, et D. Le branchement des boutons avec le microcontrôleur est montré dans la figure suivante :

Figure II.5 : Montage du clavier avec le PIC

3.1 Allumage d'une led à l'aide d'une touche :

Principe :

- Vérification du fonctionnement d'une touche du clavier en utilisant les leds. - Le montage suivant explique cette application.

Schéma de l'application :

Organigramme :

Début

Configuration des ports
PB en sortie, PD en

PB = 0 PD = 0

non

?

PB0=1

PB0=0

RD0=0 oui

3.2 Allumage des leds à l'aide de chaque touche correspondant :

Principe :

- Lors d'un appui sur un bouton, la led de la même pin s'allume.

- Le montage qui explique cette application est montré dans la figure II.5.

Organigramme :

Début

Configuration des ports
PB en sortie PD en entrée

PB = 0 PD = 0

PB[i]=1

non

RD[i]=0 oui

49

?

P B [i] =0

P B0

PIC

16 F8 77

PD0

II. Port Série :

1. Utilisation avec la liaison RS232:

La communication RS232 est employée pour la communication entre deux dispositifs sur une distance de 10m. Elle est utilisée généralement pour des le transfert de données avec l'ordinateur. Les jumpers (JP 10 & JP 12) RX et TX sélectionnent la pin qui sera l'entrée de la communication.

Si DIP40 ou DIP28 sont employés, ils devraient être relié à RC6 et à RC7, et en cas de DIP18, utilisent les pins RB1 et RB2.

La figure ci-dessous montre le branchement entre l'ordinateur et le 16F877.

Figure II.6 : Montage du PIC avec un PC via une liaison RS232

1.1 Transmission des données entre le PIC et le PC :

Principe :

Le principe de cette application est d'établir une communication entre le PIC et le PC en le configurant en hyper terminal.

Le terminal envoi des données en codes ascii en tapant des caractères sur le clavier du PC. Chaque caractère un a code binaire qui va être affiché sur le kit en utilisant les LEDS.

Schéma de l'application :

 
 
 
 
 

RC7

PIC

16 F8 77

 
 

Transmission

 
 
 
 
 

PC

Organigramme :

- Le PC qu'on a utilisé a été configuré sur le COM1 de la minière suivante : Vitesse = 9600

Bit de parité = 8

Bit d'arret = 1

Contrôle de flux : Aucun

- Le programme utilise 3 fonctions : Init ( ), incar ( ), outcar ( ).

Init ( ) : Sous programme d'initialisation du pic.

Configuration des registres TXSTA & RCSTA.

Déterminaion de la vitesse de transmission. Par le registre SPBGR = 25. La valeur de la vitesse est calculée par la formule suivante :

Vitesses Hautes : BRGH = 1

- 1

Fosc Fosc

VITESSE = N =

16(N+ 1) 16 * VITESSE

Vitesses Basses : BRGH = 0

Fo sc Fosc

VITESSE = N = - 1

64 (N+ 1) 64 * VITESSE

Incar ( ) : Sous programme de lecture de caractère envoyé par le PC Test du buffer de réception par le flag RCIF.

Si RCIF :

= 0 le buffer est vide. =1 le buffer est plein.

Outcar ( ) : Sous programme d'envoi de caractères vers le PC. Test du buffer de transmission par le flag TXIF.

Si TXIF :

= 1 le buffer est vide. =0 le buffer est plein.

Mettre le caractère reçu dans le registre TXREG.

Organigramme principal

Sous Organigramme de
réception de caractère

Début

RCIF = 0

oui

Retour

non

Début

Configuration portA en
sortie

c=incar()

PORTA=c

Init ()

III. Port Analogique Numérique :

1. Utilisation du convertisseur A/D :

Le microcontrôleur PIC 16F877 fourni avec "EASYPI" dispose d'un convertisseur analogique numérique de 10 bits.

Les deux pins RA2 et RA3 sont déterminées et peuvent être utilisées pour mesurer la tension réglée par les potentiomètres P2 et P3.

Pour mesurer des valeurs du potentiomètre P2 ou P3, les deux jumpers doivent être accordés. Sur le commutateur SW1, RA2 doit être désactivée (niveau bas).

Figure II. 7 : Montage du convertisseur A/N avec le PIC

1.1 Conversion d'un signal analogique :

Principe :

- La conversion d'un signal se fait sur le PORTA ou le PORTE, pour notre application on a choisi le PORTE et précisément la pin 0 (RE0).

- Le résultat de la conversion (10 bits en binaire) sera affiché sur les leds.

53

Vref +

Vref -

Procédure de la conversion :

> Configuration du module A/D :

· Configuration des pins et les entrées digitales (ADCON1).

· Sélection du canal d'entrée (ADCON0).

· Sélection de l'horloge de conversion (ADCON0). > Configuration des interruptions du convertisseur :

· Remise à zéro du bit ADIF (Bit 6 du registre PIR1).

· Mise à 1 du bit ADIE (Bit 6 du registre PIE1).

· Mise à 1 du bit PEIE (Bit 6 du registre INTCON).

· Mise à 1 du bit GIE (Bit 7 du registre INTCON).

> Attendre le temps d'acquisition : TAD = 20us.

> Démarrer la conversion : GO/DONE = 1.

> Attendre la fin de la conversion : GO/DONE = 0.

> Lire le résultat : En utilisant les deux registres ADRESH et ADRESL.

V' Temps d'acquisition :

TACQ : Temps d'acquisition - TACQ = 2 jis + Tc + CT

Tc : temps de charge du condenseur - Tc = C (Ric+Rss+Rs) Ln(1/2047) CT : Coefficient de température - CT = (Tp -25°C) 0.05 jis/°C

Avec: Tp = Température Processeur, Ric = 1k, Rss = 7k, Rs = 10k, Tp = 50 °C.

Tc = 18k x 120pF x Ln(2047) = 16,47 jis CT = 25 x 0.05 jis = 1,25 jis

TACQ = 2 + 16,47 + 1,25 jis = 19,72 jis

V' L'acquisition commence :

- Après la fin d'une conversion.

- Au moment du choix d'un canal si convertisseur validé (ADON=1). - Au moment de validation du convertisseur si canal choisi.

V' Temps de conversion :

Le temps de conversion est égal à (12 +2) TAD. TAD est le temps de conversion d'un bit, il

dépend de l'horloge système et du prédiviseur (div) choisi. Les choix doivent être ajustés pour que TAD ne dépasse pas 1,6 jis.

\Quartz Div \

20Mhz

5Mhz

4Mhz

2Mhz

2

0,1 jis

0,4 jis

0,5 jis

1,0 jis

8

0,4 jis

1,6 jis

2,0 jis

4,0 jis

32

1,6 jis

6,4 jis

8,0 jis

16,0 jis

 

Schéma de l'application :

Organigramme :

DEBUT

Configuration des PORT C et D
en sortie, PORTE en entrée
Configuration du convertisseur.

Activation du convertisseur

Temporisation de 20 useconde

Démarrage de la conversion

oui

non

?

Fin de la
conversion
ADIF=0

PORTC=ADRESL

PORTD=ADRESH

Démarrage de la conversion

Résultats de la conversion :

- Après la fin de la conversation on a relevé les valeurs en volts de l'entrée analogique et déterminé leurs équivalences en binaire et en hexadécimal.

- Ce tableau permet d'étudier la linéarité du convertisseur.

Tension (V)

0

1

2

3

4

5

Code Binaire

0000000000

0011011111

0110111111

1001101111

1101000011

1111111111

Code Héxa

0x00

0xDF

0x1BF

0x26F

0x343

0x3FF

 

+100

- 40

LM335

2. Utilisation du convertisseur avec un capteur de température :

Le capteur LM335 a une température ambiante qui va de -40 à 100 °C, il peut être utilisé pour la mesure de la température d'environnement de et pour d'autres expériences. Il est très précis et facile de se relier. Les 3 pins se branchent dans la douille, sous le connecteur de puissance du système de développement. Figure au-dessous montre comment relier le thermomètre numérique et le microcontrôleur sur le kit.

La valeur numérique de la température est envoyée sur les 2 pins (RA5 ou RE2, selon la position du jumper (JP4).

Figure II.8 : Montage du capteur LM335 avec le PIC

2.1 Conversion du signal analogique reçu par le capteur :

Principe :

- La conversion d'un signal se fait sur la pin RA5 ou RE2, pour notre application on a choisi le PORTA sur la pin (RA5).

- Le résultat de la conversion (10 bits en binaire) sera affiché sur les leds.

Organigramme :

- On obtient le même organigramme que celui décrit ci-dessus sauf que l'entrée du signal à convertir change, cela se fait par la configuration du registre ADCON0 et ADCON1.

IV. Autres Applications :

1. Utilisation du pic avec LCD :

L'afficheur LCD (2x16 caractères) est recommandé sur le kit. Cependant, ce n'est pas une limitation, parce que n'importe quel afficheur de même type de communication peut être utilisé. Le réglage du contraste de l'afficheur peut être ajusté en utilisant un potentiomètre.

L'afficheur LCD se relie au port B. La figure suivante montre comment relier l'afficheur avec le microcontrôleur PIC16F877 par le PORTB.

Figure II.9 : Montage de l'afficheur LCD 2X16 avec le PIC

57

Commandes principales du LCD :

Instructions

Code

Description

Durée

 

R/W

D7

D6

D5

D4

D3

D2

D1

D0

 

0

0

0

0

0

0

0

0

0

1

Efface l'ensemble de la mémoire de donnée sans toucher au générateur de caractères. Ramène le curseur en position « home », à l'adresse 00.

1,64 ms

Return home

0

0

0

0

0

0

0

0

1

X

Ramène le curseur en position « home », à l'adresse 00. Si

l'affichage était décalé, il est remis à sa position d'origine : l'adresse 00 se trouve à nouveau en haut à gauche.

1,64 ms

Entry mode set

0

0

0

0

0

0

0

1

I/D

S

Définit le sens de déplacement du curseur après l'apparition d'un caractère (vers la gauche si I/D=1, vers la droite si I/D=0) et si l'affichage accompagne le curseur dans son déplacement ou non (S).

40 us

Display on/off control

0

0

0

0

0

0

1

D

C

B

Met l'affichage en ou hors fonction l'affichage (D), le curseur (C), le clignotement du curseur (B).

40 us

Cursor and display shift

0

0

0

0

0

1

S/C

R/L

X

X

Deplace le curseur (S/C=1) ou l'affichage (S/C=0) d'une position vers la gauche (R/L=1) ou la droite (R/L=0) sans changer la DD RAM.

40 us

Function set

0

0

0

0

1

DL

N

F

X

X

Définit la taille de l'interface (DL=0 pour mode 4 bits, DL=1 pour mode 8 bits), le nombre de lignes (NL=0 pour 1 ligne, N=1 pour 2 ou 4 lignes), et la taille des fontes (F=0 pour des caractères 5x7, F=1 pour des caractères 5x10).

40 us

Set CG RAM address

0

0

0

1

A5

A4

A3

A2

A1

A0

Définit l'adresse de la CG RAM. Les données de la CG RAM sont envoyées après cette commande.

40 u s

Set DD RAM address

0

0

1

A6

A5

A4

A3

A2

A1

A0

Définit l'adresse de la DD RAM. Les données de la DD RAM sont envoyées après cette commande.

40 us

Read busy flag & address

0

1

BF

A6

A5

A4

A3

A2

A1

A0

Lit le flag busy (BF), et l'adresse de la position du curseur. BF vaut 0 si l'afficheur accepte une instruction, 1 s'il est occupé

1 us

Write data to CG or DD RAM

1

0

D7

D6

D5

D4

D3

D2

D1

D0

Ecrit des données dans la DD RAM ou la CG RAM.

40 us

Read data

1

1

D7

D6

D5

D4

D3

D2

D1

D0

Lit les données de la DD RAM ou de la CG RAM.

40 us

 

1.1 Affichage d'un message :

Principe :

- Envoi du message " Microcontrôleur \0" qui apparait caractère par caractère.

Organigramme :

- La fonction envoi caract ( ) : Puisque on est en mode 4 bits donc la données a envoyée est fragmentée en deux partie de 4 bits. On envoi dans un premier temps les 4 bits du poids fort et dans un deuxième temps les 4 bits du poids faible.

- Le même principe s'applique sur la fonction envoi com ( ) qui est une fonction pour envoyer des commandes (instructions) a l'afficheur LCD. (voir tableau des instructions).

- MSG[i] : Tableau qui contient le message a affiché ("Microcontrôleur").

DEBUT

Configuration et
initialisation du PIC

Initialisation d e LCD
( Mode 4bits, 1 ligne,
taille d'affichage...)

i = 0

i = i +1

Envoi_carct ( )

C = MSG[i]

non

C = nul
?

oui

Fin

59

Via RS232

PC

Envoi caractère

PB0

PB1

PB2

PIC PB3

PB4

16F877 PB5

PB6

1.2 Communication du PIC avec le PC via une liaison RS232 :

Principe :

- On a ajouté une autre application concernant le LCD.

- Il s'agit d'envoyer des caractères du PC vers l'afficheur LCD a travers le PIC en utilisant un programme qui s'exécute sur le PC pour la configuration des COM.

- Utilisation d'une liaison RS232 pour établir la connexion entre les deux périphériques.

chéma de l'application :

Organigramme :

DEBUT

Configuration et
initialisation du PIC

Initialisation d e LCD
( Mode 4bits, 1 ligne,
taille d'affichage...)

C = incar ( )

oui

non

C = ` q `
?

Fin

2. Utilisation du pic pour la commande d'un moteur pas à pas :

Figure II.10 : Montage de la carte de commande du moteur pas a pas avec le PIC

Principe :

Le pic prend le contrôle du moteur pas a pas, il envoi les impulsions pour faire tourner le moteur et le déplacement du plateau.

Détection des contacts du début de course et de fin de course pour le changement de sens de déplacement. Introduire un capteur de milieu pour faire varier la vitesse (diminue ou augmente) selon le sens.

61

Organigramme

- Le pic envoi des impulsions avec un interval déterminé par la fonction delay. - Utilisation d'une interruption pour faire varier la vitesse de rotation.

RAZ flag (RB0)

Vitesse rapide

non

RD1=0

?

Vitesse lente

oui

Configuration des ports
B, RD0 et RD1 en sortie,
RD4-7 en entrée
Activation des interruptions

PORTD.1=1

Démarrage du
timer

non

Débordement
timer

oui

RAZ flag TMR1

oui

Sous Organigramme
d'interruption

Début

Organigramme principal

Début

retour

Sous Organigramme de
temporisation

Début

Configuration du
timer1

delay

non

RD4=0

?

oui

Envoi d'une
impulsion

PORTD.1=1

Envoi d'une
impulsion

delay

non

RD4=0

Arret du timer

FIN

Les microcontrôleurs permettent de réaliser des applications diverses qui peuvent servir dans différents domaines industriels.

Dans notre projet nous avons traité les différentes interfaces du pic et les simulées dans plusieurs application sur la carte de développement "EASY PI".

Par ces différentes applications nous avons appris énormément de notions :

· La programmation des pics (langage C).

· Apprentissage de l'utilisation du pic 16F877 et ses différents registres.

· La manipulation des différents modules (I2C, A/D, PSP, MSSP, USART et PSP...).

· La mise en pratique des connaissances théoriques en électronique et en programmation en C.

Ce projet nous a beaucoup appris sur les microcontrôleurs et leurs programmations. Il a été mené d'une recherche bibliographique bien détaillée.

En effet nous avons pu approcher un ensemble de logiciels permettant la programmation (MPLAB, PIC FLASH,.....etc.).

Et tous ceci dans le but d'étudier les microcontrôleurs en général et précisément le 16F877.

Nous allons proposer quelques applications que nous n'avons pas pu les appliquées par manque temps. Nous espérons que leurs réalisations seront faites dans les prochains projets.

1. Mise en place d'une communication entre un 68000

et un PIC pour dialoguer sur un bus I2C :

Cette application présente la mise en place d'une communication entre un microprocesseur

68000 et un PIC 16F877 à travers un bus parallèle. Pour uniformiser les interfaces avec le bus, un PIC16F877 a été placé sur ce bus. Le processeur principal du 68000 qui devait donc dialoguer avec le PIC pour envoyer les données sur le bus.

Le 68000 :

Le Motorola 68000 est un microprocesseur CISC 16/32 bits développé par Motorola. C'est le premier de la famille de microprocesseurs souvent appelée m68k ou 680x0, qui comprend notamment les microprocesseurs Motorola 68010, Motorola 68020, Motorola 68030, Motorola 68040 et Motorola 68060. Le nom du 68000 vient à la fois de la continuité avec la famille de microprocesseurs Motorola 6800 et du nombre de transistors qu'il contient, un peu plus de 68 000.

Le PIC Le 16F877 :

Le PIC 16F877 est à ce jour le plus gros microcontrôleur de la série 8/12 bits de Microchip. Il possède entre autre une interface série RS232 une interface I2C, un PSP (Parallel Slave Port) port 8 bits permettant au PIC de s'interfacer en tant que périphérique sur le bus de données d'un autre microcontrôleur où d'un microprocesseur.

Schéma du PIC avec le 68000 via le bus I2C

2. Utilisation d'un clavier matriciel 12 touches :

On propose d'implémenter un clavier matriciel, sur le port B du pic 16F877.

Cette application pourra servir pour le codage des serrures dont le but de protéger les endroits à accès limité.

Le clavier de 12 touches est équipé de touche numérique 0 à 9, * et #.

Montage du clavier matriciel avec le PIC

3. Utilisation du LCD 2x16 en mode 8 bits :

Les afficheurs à cristaux liquides, autrement appelés afficheurs LCD (Liquid Crystal Display), sont des modules compacts intelligents et nécessitent peu de composants externes pour un bon fonctionnement. Ils consomment relativement peu (de 1 à 5 mA), sont relativement bons marchés et s'utilisent avec beaucoup de facilité.

Plusieurs afficheurs sont disponibles sur le marché et diffèrent les uns des autres, non seulement par leurs dimensions, (de 1 à 4 lignes de 6 à 80 caractères), mais aussi par leurs caractéristiques techniques et leur tension de service.

65

Certains sont dotés d'un rétro éclairage de l'affichage. Cette fonction fait appel à des LED montées derrière l'écran du module, cependant, cet éclairage est gourmand en intensité (de 80 à 250 mA).

Ils sont très utilisés dans les montages à microcontrôleur, et permettent une grande convivialité. Ils peuvent aussi être utilisés lors de la phase de développement d'un programme, car on peut facilement y afficher les valeurs de différentes variables.

Montage du LCD avec le PIC

A. REBOUX. « S'initier à la programmation des PIC». http://www.eyrolles.com/Sciences/Livre/

G. SAMBLANCAT. « Progressez avec les microcontrôleurs PIC ». http://www.eyrolles.com/Sciences/Livre/

C. TAVERNIER. « Les microcontrôleurs PIC10, 12, 16». http://www.eyrolles.com/Sciences/Livre/

C. TAVERNIER. « Programmation en C des PIC » http://www.eyrolles.com/Sciences/Livre/

DATASHEET 16F87x.

Cour Bigonoff.

 

Webographie :

http// www.mikroelectronika.co.yu http// www.abcelectronique.com/bigonoff

http// www.microchip.com

http// www.micropic.free.fr

http// www.planet.net/--surbnov/ Http//www.Suplec-rennus.Fr/ren/fi/elec/mcn/pic/applications. Http// www.lectronique.fr/dd+/toplec.com.

Http// www.sprut.de

Http// www.guimipic.fr

Http// www.CC5.de

http://en.wikipedia.org/wiki/PIC_microcontroller.