Microcontroleur PIC - Part 10c

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 6

TECHNOLOGIE

Microcontrôleurs
PIC
10ème partie - Chapitre 3
La pratique :
l'écriture de programmes
Les afficheurs à cristaux liquides (LCD) de type alphanumérique,
capables de visualiser soit des chiffres, soit des nombres, sont,
aujourd’hui, utilisés dans de nombreuses applications. Cela est dû
à la disponibilité sur le marché de nouveaux modèles à des prix à la
portée de tous mais aussi parce que les afficheurs de nouvelle
conception sont fournis équipés de drivers d’interface en mesure de
piloter de façon autonome le LCD à partir de simples commandes
reçues en format digital. Quand un afficheur alphanumérique dispose
des drivers d’interface, il est dit “intelligent”. Malgré cet adjectif
qui les qualifie, les afficheurs intelligents demandent presque toujours
l’interconnexion avec un dispositif à microcontrôleur en mesure de
gérer les différents signaux qu’ils exigent.

ans cette par- Comme nous l’avons


tie du cours, déjà noté, notre af fi-
nous allons donc cheur dispose d’un cer-
voir comment fonc- tain nombre de lignes
tionnent ces types pour la communication
d’afficheurs et en particulier com- avec les systèmes
ment les gérer en utilisant un micro- externes (pour la précision,
contrôleur de la famille des PIC. 11 lignes), ainsi que de
quelques lignes nécessaires
Comme nous l’avons fait jusqu’à pré- à l’alimentation et au réglage
sent, nous utiliserons comme hardware de du contraste.
référence la carte de test, présentée dans le
numéro 12 d’ELM. Cette carte implémente Les 8 lignes de données vont de
justement un afficheur intelligent de type “DB0” à “DB7”. Si le mot est envoyé
CDL4162 de 16 caractères / 2 lignes. Nous étudierons en format 8 bits, le bit de poids “0” sera
ensuite un programme adapté à la gestion de cet afficheur présenté sur la ligne “DB0”, celui de poids “1” sur la ligne
en gardant cependant à l’esprit que les techniques de pro- “DB1” et ainsi de suite.
grammation que nous allons acquérir sont valables pour
tout autre type d’afficheur, pour vu qu’il soit alphanumé- Nous avons aussi 3 lignes de contrôle. La ligne “R/W”
rique. (Read/Write) qui nous permet d’écrire des données sur l’af-

ELECTRONIQUE 62 magazine - n° 15
TECHNOLOGIE

ficheur ou bien de lire des Avec la car te test, il est


données de l’af ficheur, la L’afficheur LCD CLOVER CDL4162 nécessaire de fermer JP2,
ligne “RS” qui nous permet activant de cette façon les
de faire savoir à l’afficheur Caractéristiques techniques deux buffers qui pilotent l’af-
si nous sommes en train de mini 4,75 V ficheur.
Tension d’alimentation VDD typique 5,00 V
lui envoyer des données ou maxi 5,25 V
des instructions, (comme, mini 2,20 V
Tout le port B du PIC est uti-
par exemple, le déplacement Tension d’entrée niveau haut VIH lisé pour piloter le bus de
maxi VDD
du curseur) et, enfin, la ligne Tension d’entrée niveau bas VIL
mini 0,00 V données “DB0” à “DB7”
“E” de validation. maxi 0,60 V alors que le por t A est uti-
Température de fonctionnement TOPR de 0 à 50 °C lisé pour piloter les lignes
Avant de pouvoir utiliser l’af- “E”, “R/W” et “RS”.
ficheur en lui envoyant des
caractères à visualiser, vous
devrez l’initialiser à travers
Programme
une procédure bien définie pour gérer un
sans laquelle il deviendrait afficheur LCD
impossible de lui faire affi-
cher quoi que ce soit. Voyons maintenant notre
programme de démonstra-
Nous allons vous expliquer tion (DEMO8.ASM) dont le
les opérations d’initialisation, listing est donné en figure
16 1
mais voyons d’abord com- 1 et l’organigramme en
ment fonctionne la logique figure 2.
de contrôle implémentée, en
gardant à l’esprit que chaque Après avoir initialisé les
afficheur LCD dispose à l’in- deux ports en sorties, nous
térieur d’une mémoire de entrons dans la partie cor-
sélection des caractères respondant à l’initialisation
dénommés “CG RAM” et de l’afficheur. Tout d’abord,
d’une mémoire de données la ligne “R/W” est mise à
dénommée “DD RAM”. “0” (BCF PORT_A, R_W)
puisque l’afficheur sera tou-
Pour les afficheurs à 2 lignes jours utilisé en écriture. Puis
la “DD RAM” est située aux la ligne “RS” est également
adresses qui vont de “00” à mise à “0” puisque, lors de
“0F” hexadécimales et de l’initialisation, nous
“40” à “4F” toujours hexa- envoyons à l’afficheur des
décimales. Les caractères Broche Nom Fonction instructions et non des don-
inscrits dans ces 32 cases 1 BL+ Rétroéclairage (+) nées à visualiser.
mémoire sont ceux que l’on 2 BL– Rétroéclairage (-)
visualise effectivement sur 3 GND Alimentation (0 V) On envoie alors une série
l’af ficheur. Pour pouvoir 4 VDD Alimentation (5 V) d’instructions dont la signi-
écrire quelque chose sur l’af- 5 V0 Drive LCD fication peut être déduite
ficheur, il suffit donc d’insé- 6 RS Haut - sélectionne entrée instructions du tableau 1 qui illustre le
rer des données dans ces Bas - sélectionne entrée données jeu d’instructions des affi-
positions spécifiques. 7 R/W Haut - lecture données cheurs LCD. Vous noterez
Lorsque l’on veut écrire une Bas - écriture données qu’à chaque fois que l’on
ligne entière de l’afficheur, il 8 E Signal de validation met une cer taine instruc-
suffit de placer le curseur à 9 DB0 Bus de données bit 0 tion sur le por t B du micro,
la première case de la ligne 10 DB1 Bus de données bit 1 celle-ci est ensuite acquise
et d’envoyer les données. De 11 DB2 Bus de données bit 2 par l’afficheur à travers une
cette façon, à chaque envoi 12 DB3 Bus de données bit 3 impulsion sur la broche
d’un caractère, le curseur est 13 DB4 Bus de données bit 4 “E”. On obtient cette impul-
positionné automatiquement 14 DB5 Bus de données bit 5 sion avec les deux instruc-
à la case suivante. 15 DB6 Bus de données bit 6 tions “BSF PORT_A, E” et
16 DB7 Bus de données bit 7 la suivante “BCF PORT_A,
Nous vous rappelons cepen- E” qui permettent de
dant que l’afficheur est un Sélection des registres mettre à “1” puis à “0” la
dispositif assez lent, c’est RS R/W Opération ligne “E”.
la raison pour laquelle, une 0 0 Écrit opérations internes
routine de retard qui permet 0 1 Lit le drapeau “busy” (DB7) et pointe Après avoir initialisé l’affi-
de “ralentir” le flux des don- le compteur d’adresse (DB0 à DB6) cheur, nous sommes prêts
nées à visualiser est sou- 1 0 Écrit opérations internes à écrire sur ses deux lignes.
vent insérée dans le pro- (de DR à DD ou bien CG RAM) Pour exécuter cette opéra-
gramme. Ceci est également 1 1 Lit opérations internes tion, le programme a été
valable pour celui que nous (de DR ou bien CG RAM à DD) subdivisé en dif férentes
avons réalisé. sous-routines, que nous

ELECTRONIQUE 63 magazine - n° 15
TECHNOLOGIE

avons appelées “LIGNE_1”, “LIGNE_2” facilement le deviner à la lecture du ment identique : elles positionnent la
et “CARACT”. Les deux premières rou- programme, il s’agit du tableau dans ligne “RS” à “0” pour dire à l’afficheur
tines servent à positionner le curseur lequel on place l’inscription que l’on que l’on est en train d’envoyer une com-
au début de la première ligne et au veut visualiser. mande, et transmettent ensuite la com-
début de la seconde, alors que la rou- mande qui permet de positionner le
tine “CARACT” permet d’écrire un carac- Voyons maintenant le fonctionnement curseur au début de la première ou de
tère prélevé d’un tableau qui se trouve des deux routines “LIGNE_1” et la deuxième ligne. La routine “CARACT”
au point du programme distingué par “LIGNE_2”, tout en tenant compte rappelle la routine “TABLE” à travers
l’étiquette “TABLE” et, comme on peut qu’elles sont conçues de façon totale- l’instruction “CALL” et met le contenu

Le jeu d’instructions des afficheurs LCD intelligents

Tableau 1 : Avant de pouvoir utiliser l’afficheur pour la visualisation de données, il faut lui envoyer une série de commandes
d’initialisation qui permettent de préparer l’afficheur au mode de fonctionnement désiré. C’est la raison pour laquelle il faut
se référer à ce tableau qui indique, pour chaque commande possible, la valeur logique du bus de données et des lignes de
contrôle RS et R/W.

ELECTRONIQUE 64 magazine - n° 15
TECHNOLOGIE

Voici l’organigramme du programme qui permet de gérer


DEMO8 l’afficheur (2 lignes / 16 caractères) de la carte de test.
Le programme, après avoir initialisé l’afficheur, positionne
le curseur sur le premier caractère de la première ligne
Initialise les ports puis il appelle la routine “CARACT”, 16 fois. Cette dernière
va chercher, à l’adresse pointée par le registre “W”, le
Initialise caractère à afficher en utilisant pour l’adressage le “Pro-
l’afficheur LCD gram Counter” (voir diagramme ci-dessous). Ceci fait, le
programme positionne le curseur de l’afficheur sur le pre-
Appelle LIGNE_2 mier caractère de la deuxième ligne puis appelle de nou-
COUNT_3 = 16
veau 16 fois la routine “CARACT”.
COUNT_4 = 0
COUNT_3 = 16

Appelle LIGNE_1
W=0
W = COUNT_4
PC = TABLE
W = COUNT_4 call TABLE TABLE
Appelle CARACT add WF PC ;PC TABLE + 1
RETLW “E”
Appelle CARACT W = “E”
Incrém. CONT_4

Incrém. CONT_4
Décrém. COUNT_3 W=1
PC = TABLE
Décrém. COUNT_3 NON call TABLE TABLE
COUNT_3 = 0 ?
add WF PC ;PC = TABLE + 2
NON OUI
COUNT_3 = 0 ? RETLW “E”
OUI RETLW “L”
FIN W + “L”

Z I d e s P a l u d s - B P 1 2 4 1 - 1 3 7 8 3 AU B AG N E C e d e x
Tél. : 04 42 82 96 38 - Fax 04 42 82 96 51
I n t e r n e t : h t t p : / / w w w. c o m e l e c . f r

… SPÉCIAL PIC… SPÉCIAL PIC… SPÉCIAL PIC…


MICROCONTRÔLEURS PIC : CARTE DE TEST POUR PIC PROGRAMMATEUR UNIVERSEL POUR PIC.
Pour apprendre de manière simple la technique de programmation des
microcontrôleurs PIC. Interfaçable avec le programmateur pour PIC16C84, Permet de programmer tous les
(Réf. : FT201K). Le demoboard possède les options suivantes : 8 LED, 1 microcontrôleurs MICROCHIP,
display LCD, 1 clavier matriciel, 1 display 7 segments, 2 poussoirs, 2 relais,
1 buzzer piézo ; toutes ces options vous permettent de contrôler à l’exception des PIC16C5x et
immédiatement votre programme. Le kit des PIC17Cxx. Livré avec son
comprend tous les composants, un micro programme : éditeur (exa) +
PIC16C84, un afficheur LCD, le clavier assembleur + programmateur.
matriciel et une disquette contenant des
programmes de démonstrations.
FT215/K (Kit complet) ....468 F FT215/M (Livré monté)..668 F FT284 (Kit complet + câble PC + SFW 284) ......455 F

Un compilateur sérieux est enfin disponible (en Basic par rapport au langage assembleur sont
deux versions) pour la famille des microcontrôleurs COMPILATEUR BASIC POUR PIC évidents : l'apprentissage des commandes est
8 bits. Avec ces softwares il est possible "d'écrire" un quelconque immédiat ; le temps de développement est considérablement réduit ; on
programme en utilisant des instructions Basic que le compilateur peut réaliser des programmes complexes avec peu de lignes
transformera en codes machine, ou en instructions prêtes pour être d'instructions ; on peut immédiatement réaliser des fonctions que seul
simulées par MPLAB ou en instructions transférables directement dans un expert programmateur pourrait réaliser en assembleur. (pour la liste
la mémoire du micro. Les avantages de l'utilisation d'un compilateur complète des instructions basic : www.melabs.com)
SRC pub 02 99 42 52 73 08/2000

PIC BASIC COMPILATEUR : Permet d'utiliser des fonctions de PIC BASIC PRO COMPILATEUR : Ajoute de nombreuses autres
programmation avancées, commandes de saut (GOTO, GOSUB), de fonctions à la version standard, comme la gestion des interruptions, la possibilité
boucle (FOR… NEXT), de condition (IF… THEN…), d'écriture et de lecture d’utiliser un tableau, la possibilité d’allouer une zone mémoire pour les variables,
d'une mémoire (POKE, PEEK) de gestion du bus I2E (I2CIN, I2COUT), la gestion plus souple des routines et sauts conditionnels (IF… THEN…
de contrôle des liaisons séries (SERIN, SEROUT) et naturellement de ELSE…). La compilation et la rapidité d’exécution du programme compilé sont
toutes les commandes classiques du BASIC. La compilation se fait très bien meilleures que dans la version standard. Ce compilateur est adapté aux
rapidement, sans se préoccuper du langage machine. utilisateurs qui souhaitent profiter au maximum de la puissance des PIC.
PBC (Pic Basic Compiler) ...................... 932,00 F PBC PRO ............................................ 2 070,00 F
DEMANDEZ NOTRE NOUVEAU CATALOGUE 32 PAGES ILLUSTRÉES AVEC LES CARACTÉRISTIQUES DE TOUS LES KITS NUOVA ELETTRONICA ET COMELEC
Expéditions dans toute la France. Moins de 5 kg : Port 55 F. Règlement à la commande par chèque, mandat ou carte bancaire. Bons administratifs acceptés.
Le port est en supplément. De nombreux kits sont disponibles, envoyez votre adresse et cinq timbres, nous vous ferons parvenir notre catalogue général.

ELECTRONIQUE 65 magazine - n° 15
TECHNOLOGIE

;Cours PIC - DEMO8 BCF PORT_A,E


;list P=16F84, F=INHX8M CALL DELAY
MOVLW DIS_CLEAR
E EQU 0 MOVWF PORT_B ;Efface tout sur l’afficheur
R_W EQU 1 BSF PORT_A,E
RS EQU 2 BCF PORT_A,E
CUR_HOME EQU 02 CALL DELAY
DIS_CLEAR EQU 01 MOVLW CUR_HOME
CG_RAM EQU H’40’ ;Adresse CG ram MOVWF PORT_B ;Curseur au début
DD_RAM_1 EQU H’80’ ;Adresse première ligne BSF PORT_A,E
DD_RAM_2 EQU H’C0’ ;Adresse seconde ligne BCF PORT_A,E
BITS EQU H’38’ MOVLW CG_RAM
AI_NS EQU H’06’ MOVWF PORT_B ;Adresse CG ram
DO_NC EQU H’0C’ BSF PORT_A,E
PORT_B EQU 06 ;Port B = registre 06h BCF PORT_A,E
PORT_A EQU 05 ;Port A CALL DELAY
COUNT_1 EQU 0C ;Compteur MOVLW DD_RAM_1
COUNT_3 EQU 0E ;Compteur MOVWF PORT_B ;Adresse la première ligne
COUNT_4 EQU 0F ;Compteur BSF PORT_A,E
PCL EQU 02 BCF PORT_A,E
CALL DELAY
ORG 00 BSF PORT_A,RS ;Fin d’envoi des instructions
CALL DELAY
;Configure les ports en sortie ***************************

MOVLW 00 ;Routine d’écriture pour la première ligne de l’afficheur **


TRIS PORT_B
MOVLW 00 CALL LIGNE_1
TRIS PORT_A CALL DELAY
MOVLW 00 PREMR MOVF COUNT_4,0 ;Charge COUNT_4 dans W
MOVWF PORT_A CALL CARACT
MOVWF PORT_B CALL DELAY
INCF COUNT_4
;Initialisation des compteurs***************************** DECFSZ COUNT_3
GOTO PREMR ;Si les 16 caractères
MOVLW H’FF’ ;ne sont pas écrits
MOVWF COUNT_1
MOVLW D’16’ ;Routine d’écriture pour la deuxième ligne de l’afficheur **
MOVWF COUNT_3
MOVLW 00 CALL LIGNE_2
MOVWF COUNT_4 CALL DELAY
MOVLW D’16’
;Initialisation de l’afficheur**************************** MOVWF COUNT_3
SECRIG MOVF COUNT_4,0
INIT BCF PORT_A,R_W ;Afficheur en écriture CALL CARACT
BCF PORT_A,RS ;envoie les instructions CALL DELAY
CALL DELAY INCF COUNT_4
MOVLW BITS DECFSZ COUNT_3
MOVWF PORT_B ;Interface 8 bits GOTO SECRIG ;Si les 16 caractères
BSF PORT_A,E ;E=1 ;ne sont pas écrits
BCF PORT_A,E ;E=0
CALL DELAY fine nop
BSF PORT_A,E goto fine
BCF PORT_A,E
CALL DELAY ;Routine d’adressage de la première ligne ****************
BSF PORT_A,E
BCF PORT_A,E LIGNE_1 BCF PORT_A,RS ;Envoie une instruction
CALL DELAY MOVLW DD_RAM_1
MOVLW DO_NC MOVWF PORT_B ;Adresse la première ligne
MOVWF PORT_B ;Afficheur on, pas de curseur BSF PORT_A,E
BSF PORT_A,E BCF PORT_A,E
BCF PORT_A,E CALL DELAY
CALL DELAY BSF PORT_A,RS
MOVLW AI_NS RETURN
MOVWF PORT_B ;Sélectionne mode
BSF PORT_A,E ;Routine d’adressage de la deuxième ligne ****************

du registre “W” sur le port B, en l’en- tir de cette position. A l’étiquette fois que la routine “TABLE” est appe-
voyant ensuite à l’af ficheur pour la “TABLE”, le contenu du “Program Coun- lée, après l’instruction “ADDWF PCL”,
visualisation. ter” est additionné à celui du registre le “Program Counter” pointera ensuite
“W” et le résultat est ensuite remis aux dif férentes instructions rencon-
L’instruction CALL qui, comme vous le dans le “Program Counter”. trées. Celles-ci sont toutes du type
savez, ser t à exécuter une sous-rou- “RETLW”, c’est-à-dire de retour à la rou-
tine, charge dans le “Program Coun- Comme nous le verrons bientôt, Le tine, chargeant dans le registre “W” à
ter” l’adresse de l’étiquette “TABLE”. registre “W” est chargé avec un nombre chaque fois une lettre différente. Ce
Le programme continue ensuite à par- de 0 à 31. Ce qui veut dire qu’à chaque sera justement le contenu du registre

ELECTRONIQUE 66 magazine - n° 15
TECHNOLOGIE

LIGNE_2 BCF PORT_A,RS ;Envoie une instruction


MOVLW DD_RAM_2
MOVWF PORT_B ;Adresse la seconde ligne
BSF PORT_A,E
BCF PORT_A,E
CALL DELAY
BSF PORT_A,RS
RETURN

;Routine d’écriture d’un caractère se trouvant dans la TABLE

CARACT CALL TABLE


MOVWF PORT_B elle envoie à l’af ficheur le code du caractère lu par le
BSF PORT_A,E tableau.
BCF PORT_A,E
CALL DELAY
RETURN Etant donné que “W” contenait “0”, le code de la lettre “E”
sera transmis. Puis “COUNT_4” est incrémenté alors que
;Table *************************************************** l’on procède à la décrémentation de “COUNT_3”, qui avait
été initialisé à “16”. Puisque l’opération de décrémentation
TABLE ADDWF PCL ne donne pas comme résultat “0”, l’instruction “GOTO PRI-
RETLW ‘E’ MAR” est exécutée, elle permet de rappeler encore la rou-
RETLW ‘L’
RETLW ‘E’ tine “CARACT” avec “W” contenant le nombre “1”. Le code
RETLW ‘C’ correspondant à la lettre “L” sera alors envoyé à l’afficheur.
RETLW ‘T’ Cette opération est répétée 16 fois, jusqu’à ce que “COUNT_
RETLW ‘R’ 3” se porte à “0”. De cette façon est écrite toute la pre-
RETLW ‘O’ mière ligne de l’afficheur, constituée de 16 caractères.
RETLW ‘N’
RETLW ‘I’
RETLW ‘Q’
Une fois cette première partie terminée, on rappelle la rou-
RETLW ‘U’ tine “LIGNE_2” qui positionne le curseur au début de la
RETLW ‘E‘ seconde ligne de l’af ficheur et, après avoir rechargé
RETLW ‘ ‘ “COUNT_3”, s’occupe d’envoyer les données selon une
RETLW ‘M’ modalité tout à fait similaire à celle utilisée dans la pre-
RETLW ‘A’ mière routine.
RETLW ‘G‘
◆ R. N.
;Seconde ligne *******************************************

RETLW ‘ ‘
RETLW ‘ ‘
RETLW ‘ ‘
RETLW ‘C’
RETLW ‘O’
RETLW ‘U’
RETLW ‘R’
RETLW ‘S’
RETLW ‘ ‘
RETLW ‘ ‘
RETLW ‘ ‘
RETLW ‘P’
RETLW ‘I’
RETLW ‘C’
RETLW ‘ ‘
RETLW ‘ ‘

;Routine de retard ***************************************

DELAY DECFSZ COUNT_1,1 ;Décrémente COUNT_1


GOTO DELAY ;Si différent de 0 va à DELAY
MOVLW 0FF
MOVWF COUNT_1 ;Recharge COUNT_1
RETURN ;Retour au programme principal

END

“W” chargé dans la sous-routine qui sera utilisé pour com-


muniquer à l’afficheur quels caractères visualiser.
SRC pub 02 99 42 52 73 04/2000

Le corps principal du programme prévoit, en effet, le posi-


tionnement du curseur au début de la première ligne (CALL
LIGNE_1), une fois l’initialisation de l’af ficheur terminée.
Pendant ce temps, le contenu du registre “COUNT_4”, qui
avait été initialisé à “0”, est chargé en “W”. Puis la rou-
tine “CARACT” est appelée et, comme nous l’avons vu,

ELECTRONIQUE 67 magazine - n° 15

Vous aimerez peut-être aussi