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