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