TP Microcontrôleurs

Transcription

TP Microcontrôleurs
TP microcontrôleurs
A. Oumnad
page 1
TP Microcontrôleurs
Ce document ainsi que la librairie lcd4-lib.inc peuvent être téléchargés sur
www.oumnad.123.fr/tp-emsi
Les étudiants doivent absolument préparer les TP avant d'arriver en
classe. Un pourcentage important de la note de TP et affecté à la
préparation.
Attention, les PC sont équipés du logiciel DeepFreese. A la fin de chaque
séance, chaque étudiant est tenu de sauvegarder son travail sur une clef
USB. Chaque étudiant sera interrogé ultérieurement sur les travaux
réalisés
Il est strictement interdit de sauvegarder des fichiers sur le bureau
La carte de TP EasyPIC5
TP microcontrôleurs
A. Oumnad
page 2
L'alimentation
L'alimentation de la carte peut se faire soit à travers le câble USB de programmation, soit par une alimentation
externe. Le choix se fait à l'aide du jumper J6.
L'interrupteur ON/OFF permet d'allumer éteindre la carte
La programmation de la carte
La programmation du PIC se fait à l'aide du logiciel de programmation MikroProg à travers un câble USB.
•
•
•
•
•
•
Choisir PIC16F dans MCU Family (en haut à gauche)
Choisir PIC16F887 dans MCU
Faire apparaitre les Switches de configuration à l'aide du bouton config
Charger votre programme .hex à l'aide du bouton Load
Flasher à l'aide du bouton Write
Si vous avez retouché votre .hex, il faut le recharger à l'aide du bouton Reload Hex
TP microcontrôleurs
A. Oumnad
page 3
TP no 1
L'objectif de ce TP est de prendre en main la carte EASYPIC5 et d'écrire un programme sous MPLAB qui
utilise les LEDs et les boutons poussoirs, d'implanter ce programme sur la carte à l'aide du programme
MikroProg et de faire des investigations pertinentes.
Préparation
•
•
•
•
•
•
Chaque E/S du PIC est reliée à une LED, un bouton poussoir et une résistance de pull-up-down comme
indiqué sur les figures ci-dessous.
Cinq entrées de PORTA sont (en plus) reliés à deux potentiomètre P1 et P2 à travers les jumper J15 et J16
afin de servir (éventuellement) comme entrées analogiques.
Le port PORTB est branché (en plus) à un afficheur LCD comme illustré sur la figure
Les ports PORTC, PORTD et PORTE sont branchée aux LEDs, aux boutons poussoirs et aux résistances de
pull-up d’une façon similaire. Les résistances de pull-up de PORTC sont contrôlés par par SW3 et J3, ceux
de PORTD par SW4 et J4 et ceux de PORTE par SW5 et J5.
Le jumper J17 qui contrôle les boutons poussoirs est commun à tout les ports
D’autres éléments sont connectés aux ports d’E/S. Pour ne pas alourdir les schémas, ils ne sont pas
représentés. Afin d’éviter tout disfonctionnement, tous les switchs et jumpers doivent être sur OFF sauf
ceux concernant les modules sur lesquels on travaille.
J1
P1
P2
SW1
J15
J16
RA0
RA1
SW6
OFF
ON
RA2
PORTA/E
RA3
RA4
RA5
RA6
RA7
PORTB
PORTC
PORTD
JP17
Figure 1 : Branchement du port PORTA
PIC
TP microcontrôleurs
A. Oumnad
page 4
J2
LCD
SW2
D7 D6 D5 D4 D3 D2 D1 D0
RS E RW
RB0
PORTA/E
RB1
RB2
SW6
OFF
ON
RB3
PORTB
RB4
PIC
RB5
RB6
RB7
PORTC
PORTC
JP17
Figure 2 : Branchement du port PORTB
Manipulation
1) Observer la carte et localiser :
a) Le Microcontrôleur 16F887
b) Le connecteur USB de programmation/alimentation
c) Le connecteur Jack d'alimentation
d) Le jumper J6 qui permet de choisir entre alimentation USB ou alimentation Jack
e) Le bouton marche arrêt ON/OF
f) Le jumper J13 qui permet de connecter/déconnecter le broche RA6 et RA7 au quartz
g) Le switchSW6 qui permet de connecter les ports sur les LED
h) Le jumper J17 qui permet de connecter les boutons poussoirs sur la masse ou sur Vdd
i) Les switchs/jumper SW1/J1, SW2/J2, SW3/J3, SW4/J4, SW5/J5 qui permettent de relier les E/S aux
résistances de pull-up-down
2) Placer les deux jumpers de J13 de sorte que les E/S RA6(OSC1) et RA7(OSC2) soient isolées du quartz et
puissent servir comme des entrées sorties normales.
3) Placer tous les switchs sur position OFF sauf ceux qui permettent de connecter les LEDs
4) Déconnecter les jumper J15 et J16 pour isoler les E/S RA0 à RA5 des potentiomètres servant d'entrées
analogiques. (Les Placer horizontalement sur la rangée inférieures)
TP microcontrôleurs
A. Oumnad
page 5
5) Déterminer les valeurs à placer dans les registres CONFIG1 (2007), CONFIG2 (2008) et OSCCON pour avoir:
• Debugger : OFF,
• Low Voltage Programming : OFF,
• Fail-Safe Clock Monitor : OFF,
• Internal External Switchover : OFF,
• Brown-out Reset : ON pour Vcc<4V
• Data Code Protection : OFF,
• Code Protection : OFF,
• MCLR enabled on RE3,
• Power up Timer : ON,
• WDT : OFF,
• Horloge à Oscillateur interne 8 MHz, RA6=E/S et RA7=E/S
6) A l'aide de MPLAB, Ecrire et compiler le programme TP1-A.asm qui :
a) Configure Le PIC avec la Configuration définie ci-dessus
b) Configure tous les ports en sorties numériques
c) Fait clignoter tous les ports avec une temporisation de ½ s obtenue à l'aide de tempo3
7) Brancher la carte EasyPic5 sur votre PC à l'aide du câble USB.
- Vérifier que le jumper J6 est sur position USB.
- Allumer la carte à l'aide de bouton ON/OFF.
- Démarrer le programme MicroProg, charger le fichier TP1-A.hex (bouton LOAD), vérifier dans l'onglet
CONFIG que les switchs sont correctement positionnés. Flasher le PIC (bouton WRITE),
- Observer les résultats. Pourquoi le bit RE3 ne clignote pas.
8) Ecrire le programme TP1-B.asm qui réalise un chenillard sur PORTC. (une LED qui se déplace vers la
gauche)
9) Ecrire le programme TP1-C.asm qui allume la LED RB0. Ensuite, chaque fois qu’on appuie sur le bouton
poussoir RA0, La LED se décale vers la gauche. Il faut positionner correctement les switches les jumpers
adéquats pour que, quand on appuie sur le bouton poussoir RA0, on obtient une impulsion négative sur
RA0. (-------_-------).
Implanter le programme sur la carte et commenter les résultats
10) Ecrire le programme TP1-D.asm similaire à TP1-C.asm sauf que cette fois, le bouton RA0 décale la LED vers
la gauche et le bouton RA1 décale la LED vers la droite.
11) Ecrire le programme TP1-E.asm qui réalise un chenillard sur PORTB qui change de direction chaque fois
qu'on appuie sur le bouton poussoir branché sur RA0
TP microcontrôleurs
A. Oumnad
page 6
TP no 2
L'objectif de ce TP est de prendre en main l'afficher LCD de la carte EASYPIC5
Préparation
Sur la carte EasyPIC5, l'afficheur LCD est connecté en mode 4 bits. Il est commandé par la partie basse de
PORTB. Les bits RB0, RB1, RB2 et RB3 constituent le bus de données, les bits RB4 et RB5 permettent de
contrôler les commandes RS et E de l'afficheur.
LCD
D7 D6 D5 D4 D3 D2 D1 D0
RW E RS
RB0
RB1
RB2
RB3
RB4
PIC
RB5
RB6
RB7
D7 D6 D5 D4 D3 D2 D1 D0
Description
Durée
Clear Display
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
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
1
Display
control
0
0
0
0
1
D
Cursor
or
0
display shift
0
0
1
Function set
0
1 DL
on/off
0
Set CG RAM
0
address
Définit le sens de déplacement du curseur après l'apparition d'un caractère (vers la
I/D S gauche si I/D=1, vers la droite si I/D=0) et si l'affichage accompagne le curseur dans son 40 µs
déplacement ou non (S).
C
B
Met l'affichage en ou hors fonction l'affichage (D), le curseur (C), le clignotement du
40 µs
curseur (B).
S/C R/L X
X
Deplace le curseur (S/C=0) ou l'affichage (S/C=1) d'une position vers la gauche (R/L=0)
40 µs
ou la droite (R/L=1) sans changer la DD RAM.
N
F
X
Définit la taille de l'interface (DL=0 pour mode 4 bits, DL=1 pour mode 8 bits), le
X nombre de lignes (NL=0 pour 1 ligne, N=1 pour 2 ou 4 lignes), et la taille des fontes 40 µs
(F=0 pour des caractères 5x7, F=1 pour des caractères 5x10).
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
40 µs
commande.
Set DD RAM
Définit l'adresse de la DD RAM. Les données de la DD RAM sont envoyées après cette
1 A6 A5 A4 A3 A2 A1 A0
40 µs
address
commande.
Read busy flag
Lit le flag busy (BF), et l'adresse de la position du curseur. BF vaut 0 si l'afficheur
BF A6 A5 A4 A3 A2 A1 A0
& address
accepte une instruction, 1 s'il est occupé
1 µs
Write data to
CG or DD D7 D6 D5 D4 D3 D2 D1 D0 Ecrit des données dans la DD RAM ou la CG RAM.
RAM
40 µs
Read data
40 µs
D7 D6 D5 D4 D3 D2 D1 D0 Lit les données de la DD RAM ou de la CG RAM.
Pour gagner du temps, on peut utiliser la librairie lcd4-lib.inc téléchargeable sur www.oumnad.123.fr/tp-emsi
et qui contient les fonctions suivantes :
TP microcontrôleurs
A. Oumnad
page 7
tempo1 : temporisation, T = 3W + 7 cycles
tempo2 : temporisation, T = 770W + 7 cycles
tempo3 : temporisation, T = 197122W + 7 cycles
lcd_init : Initialise l'afficheur LCD pour fonctionner sur les cartes EasyPIC5 à 8 MHz.
lcd_clrscr : Efface l'écran de l'afficheur LCD.
lcd_char : Affiche le caractère présent dans W sur le LCD
lcd_cmd : Envoie la commande présente dans W vers le LCD
lcd_locate : Positionne le curseur à la position définie par W (0=début ligne 1, 64=début ligne 2)
lcd_byte_d : Affiche l'octet présent dans w en décimal
lcd_byte_h : Affiche l'octet présent dans w en hexadécimal
lcd_word_d : Affiche le word présent dans AH:AL en décimal
lcd_word_d5 : Affiche le word présent dans AH:AL en décimal sur 5 positions
umul8x8 : Multiplication 8 bits non signée : AL * W --> AH:AL
umul16x16 : Multiplication 16 bits non signée : AH:AL x BH:BL --> BH:BL:AH:AL
div16by8 : Division non signée : AH:AL / W --> Q=AL, R=AH
div16by16 : Division DH:DL / BH:BL --> Q=AH:AL, R=CH:CL
div32by16 : Division BH:BL:AH:AL / DH:DL --> Q=AH:AL R=BH:BL
byte2dec : Convertit le contenu de W en 3 chiffres décimaux et les place dans BANK0 à partir de l’adresse
bcd. Exemple : avec W=234 on obtient :
bcd
2
3
4
word2dec : Convertit AH:AL en 5 chiffres décimaux et les place dans BANK0 à partir de l’adresse bcd d’une
manière similaire à la fonction byte2dec
dword2dec : Convertit BH:BL:AH:AL en 10 chiffres décimaux et les place dans BANK0 à partir de l’adresse
bcd d’une manière similaire à la fonction byte2dec
TRAVAIL PRATIQUE
1) Tous les boutons de tous les switchs doivent être sur OFF sauf le bouton 7 de SW9 qui allume le rétroéclairage de l'afficheur.
2) Tous les programme doivent utiliser l'horloge interne du PIC configurée à FOSC = 8MHz
3) Faire le programme TP2-A.asm qui affiche : TP PIC sur la première ligne et les deux nombres 125 et
2011 sur la 2ème ligne
4) Faire le programme TP2-B.asm qui affiche sur la première ligne un compteur 8 bits (0,1,2 …255)
5) Faire le programme TP2-C.asm qui affiche sur la deuxième line un compteur 16 bits (0, 1, 2,… 65535).
6) Faire le programme TP2-D.asm qui affiche une chaine (de plus de 16 caractères) puis la fait défiler à
gauche.
7) Faire le programme TP2-E.asm qui affiche une chaine (de plus de 16 caractères) puis, la décale d’un
caractère vers la droite ou vers la gauche chaque fois qu’on appuie sur RC0 ou sur RC1
Attention
Si l'afficheur contient un nombre à plusieurs chiffres ex: 34567, si on affiche un nombre plus petit à la
même position, ex: 88, les chiffres 567 restent affichés et on obtient 88567
TP microcontrôleurs
A. Oumnad
page 8
TP no 3
L'objectif de ce TP est de réaliser un voltmètre à l'aide du Convertisseur Analogique Numérique
du PIC
Préparation
•
•
•
La carte EasyPIC5 dispose de deux potentiomètres P1 et P2. La tension à la sortie d'un potentiomètre est
comprise entre 0 V et 5V. Les jumper (J15 et J16) permette de connecter ces potentiomètres sur les
entrées analogiques RA0, RA1, RA2, RA3 et RA5. (Attention, sur le 16F887 RA4 ne peut être analogique).
Faire attention à ce que les résistances de pull-up-down des E/S analogique soient déconnectées de la
masse ou de Vcc à l’aide de SW1.
Faire attention à ce que les LEDs reliée aux E/S analogique soient déconnectées de la masse l’aide de
SW6.
J1
P1
P2
SW1
J15
J16
RA0
RA1
SW6
OFF
ON
RA2
PORTA/E
RA3
RA4
PIC
RA5
RA6
RA7
PORTB
PORTC
PORTD
JP17
Méthodologie :
Supposons qu'on a la valeur 3.836V sur une entrée analogique. Si on la convertit à l'aide de l'ADC du PIC, on
obtient le nombre N=785. Le travail consiste à afficher la valeur de la tension en volts, c.à.d 3,836.
Pour faciliter, on va travailler en mV ce qui permet de travailler avec des nombres entiers. Sachant que la
tension en mV (M) varie entre 0 mV et 5000mV et que le nombre (N) correspondant varie entre 0 et 1023. Il
est facile de passer de l'un à l'autre par une simple règle de 3.
5000(mV)
1023
M(mv)
N
M(mV) = (N x 5000) / 1023
La multiplication et la division se feront à l'aide des fonctions : umul16x16 et div32by16.
TP microcontrôleurs
A. Oumnad
page 9
Pour l'exemple précédent, le DAC du PIC fournit N = 785, la règle de 3 donne M = 3836 mV. Pour afficher en
volts sans utiliser des nombres réels (ce qui n'est pas facile en assembleur) on convertit M en un tableau de 5
chiffres à l'aide de la fonction word2dec :
bcd
0
3
8
3
6
Il suffit ensuite d'utiliser la fonction lcd_char pour afficher le chiffre bcd[1], suivi de ',' suivi des trois
chiffres qui restent.
Les variables utilisées par les fonctions de la librairie lcd4-lib.inc sont déclarées dans le bank0 à partir de
l'adresse 20h. Parmi les variables, on peut citer AN1, AN2, AN3, AL, AH, BL, BH, CL, CH, DL, DH, bcd (bcd est
l'adresse de début d'un tableau de 10 positions)
Travail pratique :
1) Observer la carte et localiser les potentiomètres P1 et P2 et les jumper J15 et J16
2) A l'aide des jumpers J15, Brancher RA0 sur le potentiomètre P1
3) S'assurer sur SW1 que RA0 n'est pas connectée à une résistance de pull-
1
P1
up/down
4) S'assurer sur SW6 que PORTA n'est pas connecté aux LEDs
5) Ecrire le programme TP3-A.asm qui convertit le nombre 63579 en un tableau
2
3
4
5
6
7
RE3/MCLR/VPP
RA0/AN0/ULPWU
RA1/AN1/C12IN1RA2/AN2/VREF-/C
RA3/AN3/VREF+/
RA4/T0CKI/C1OU
RA5/AN4/SS/C2O
de 5 chiffre à laide de la fonction word2dec et les affiche ensuite comme suit : 6-3-5-7-9
6) Ecrire le programme TP3-B.asm qui prend une mesure de RA0 toute les 0.5 secondes et affiche le
nombre N obtenu sur le LCD. Utiliser la fonction lcd_word_d de la librairie lcd4-lib.inc
7) Sauvegarder TP3-B.asm comme TP3-C.asm et compléter le pour assurer les fonctions suivantes :
a) Prend une mesure du signal RA0 et afficher le N correspondant sur la 1ère ligne du LCD
b) Convertit le nombre N obtenu en mV en utilisant la règle de 3, M = (N x 5000) / 1023
c) Convertir le nombre M en en un tableau de chiffres : x m c d u (le chiffre x est toujours nul car
la valeur max de M est 5000 mV)
d) Afficher les chiffres obtenus comme suit : m,cdu ce qui correspond au résultat en Volts
TP microcontrôleurs
A. Oumnad
page 10
TP no 4
L'objectif de ce TP est d'étudier un afficheur sept segments à 4 chiffres multiplexés
Les afficheurs sept segments de la carte easyPIC5 sont branchés comme suit.
C'est un affichage multiplexé. On peut faire les constatations suivantes :
• Les 4 afficheurs sont contrôlés en parallèle par le port D sans décodeur bcd-7segments
• Cela implique que le décodage bcd-7segment est réalisé par soft
• Cela implique aussi que quand on place un chiffre sur le port D, il va s'afficher sur les 4 afficheurs ce
qui n'est pas normal.
• Pour remédier à ce problème, la cathode commune de chaque afficheur est connectée à la masse à
travers un transistor qui joue le rôle d'interrupteur. On peut ainsi allumer/éteindre chaque afficheur
en contrôlant les interrupteurs par l'intermédiaire des bits RA0, RA1, RA2 et RA3.
• En résumé, si je veux afficher le chiffre 5 sur l'afficheur DIS2, il faut :
o Placer le code 7segments de 5 sur PORTD
o Place RA2à 1 pour saturer le transistor Q9 ce qui allumer l'afficheur DIS2.
TP microcontrôleurs
A. Oumnad
page 11
Travail pratique :
1) S'assurer que tous les switchs de SW1 et SW4 sont sur OFF. Placer les switchs 5, 6, 7 et 8 de SW6 sur
ON
2) Donner le programme TP4-A.asm qui affiche le chiffre 5 sur l'afficheur de gauche
3) Donner le programme TP4-B.asm qui affiche le chiffre contenu dans W sur l'afficheur de droite
quelque soit sa valeur. Pour cela on utilisera la fonction ci-dessous. Essayer de comprendre cette
fonction sachant que PCL est le programme counter.
bcd7seg: addwf PCL,f
retlw 3fh,
retlw 06h
retlw 5bh
retlw 4fh
retlw 66h
retlw 6dh
retlw 7dh
retlw 07h
retlw 7fh
retlw 6fh
4) Donner le programme TP4-C.asm qui affiche le nombre 2345
5) Donner le programme qui affiche un compteur 16 bits sur l'afficheur 7 segments
TP microcontrôleurs
A. Oumnad
page 12
TP no 5
L'objectif de ce TP est de mettre en œuvre une communication série entre la
carte EasyPIC5 et un PC
Travail pratique :
1) Branchez la carte avec le PC à l'aide d'un câble série nul modem
a) S'assurer que tous les switch sont sur position OFF
b) Connecter les E/S RC6(TX) et RC7(RX) du PIC aux E/S TX et RX de la carte à l'aide des boutons
1 de SW7 et SW8
2) Pour tous les programmes, le PIC doit être configuré avec un oscillateur interne de 8 MHz
3) Ecrire le programme TP5-A.asm qui transmet l'alphabet majuscule sur l'USART à une vitesse de
9600 baud,
a) Flasher le PIC avec ce programme,
b) Démarrer le programme Tera Term. Chaque fois qu'on appuie sur le bouton RESET de la carte,
L'alphabet doit apparaitre dans la fenêtre du terminal
4)
Programme TP5-B.asm qui place les 3 messages suivants dans la EEPROM à l'aide de la directive DE,
"BONJOUR"
"BONSOIR"
"Mauvaise Commande"
Ensuite, le programme écoute le port série. S'il reçoit :
A : il transmet le message 1 sur le port série
B : il transmet le message 2 sur le port série
Sinon il transmet le message 3 sur le port série