Académique Documents
Professionnel Documents
Culture Documents
Mr COTTET
Prsentation: On dsire mettre en oeuvre l'afficheur LCD puis un clavier 16 touches, sur une carte comportant un PIC16F84 conformment au schma structurel fourni, ou raliser un cablage quivalent sur la carte millnnium avec les PIC 16F876 ou 877, afin de dvelopper avec l'mulateur ICD. L'afficheur LCD est du type afficheur LCD intelligent LTN 211 (rfrence PHILIPS), comportant 2 lignes de 16 caractres et utilisant le contrleur Hitachi HD44780, utilis pour les afficheurs de 1 4 lignes de 16 40 caractres . Sur la carte Clavier LCD, la gestion du clavier est assure par un circuit spcialis encodeur de clavier (MM74C922 ou MM54C922), alors que sur la carte MILLENNIUM les lignes et les colonnes du clavier sont directement accessibles et doivent tre gres logiciellement.
1) En vous aidant du schma structurel fourni, compltez les tableaux d'affectation des broches du PIC feuille rponse N1, en indiquant l'affectation des ports A et B du PIC 16F84. On utilisera les labels D0 D7 pour les donnes de l'afficheur LCD, RS, R/W et EN pour rite puis ENable de l'afficheur LCD, et A, B, C, D pour respectivement Register Select, Read/W les donnes fournies par le MM74C922 (OA OD), DA (Data Available) lorsqu'une touche est enfonce. Rem: On supposera dans tout l'exercice qu'un cavalier est positionn sur le connecteur J5 entre les broches 2 et 3. Indiquez sur la deuxime ligne le sens de chaque information pour le micro (E= entre, S= sortie). On notera "NU" lorsqu'un fil de port est non utilis. On notera "-" si un bit de port n'existe pas sur le microcontrleur utilis (PIC16F84). 2) En dduire les valeurs des registres de direction des ports A et B (TRISA et TRISB). Rem: On rappelle que pour les PIC, un "1" => Input, et un "0" => Output. Pour les bits non utiliss on prfre les laisser en entre pour viter qu'un court-circuit ventuel avec d'autres broches en sortie provoque une dtrioration des ports. 3) L'afficheur LCD dispose des broches Vss, Vdd, Vo, RS, R/W, EN, D0 D7, indiquez leur rle en vous aidant de la documentation sur l'afficheur LCD. Conclure sur le cblage de la broche R/W (Prsence ou absence du cavalier sur J5 reliant J5.2 et J5.3, et rle de la rsistance R9). Attention R9 = 4.7K et non 47K. 4) L'afficheur LCD (Contrleur HD44780) peut tre command en mode 8 bits (D7 D0) ou en mode 4 bits (Seuls D7 D4 sont utiliss pour transmettre en deux quartets l'octet de commande, ou le caractre ASCII transmettre). Rem: En mode 4 bits, il faut transmettre le quartet de poids fort sur D7 D4, puis transmettre le quartet de poids faible galement sur D7 D4. Chaque
PICLCD5
Page N1
Gestion d'un afficheur LCD et d'un clavier avec le PIC16F84 ou le 16F876 transmission d'un caractre ou d'une commande (Voir le rle de RS dans le tableau: instruction set), est valid par une impulsion sur EN. Dduire de l'tude prcdente si l'on doit utiliser ici le mode 8 bits ou le mode 4 bits. 5) En analysant les chronogrammes (fig.5) de la documentation de l'afficheur LCD (partie suprieure correspondant une criture d'un caractre ou d'une commande en mode 8 bits, proposez un algorithme permettant d'crire une donne (caractre = data) sur l'afficheur LCD, en prcisant dans l'ordre chronologique, les tats ncessaires sur les broches RS, R/W, EN et D7 D4, pour exploiter le mode 4 bits. 6) La lecture de la broche DA du MM74C922 (DA= Data Available, indique si une touche est enfonce). Est-il possible de provoquer une interruption sur le PIC lors de l'appui sur une touche du clavier ? II) Etude logicielle: 1) L'afficheur LCD ncessite souvent une initialisation logicielle. Voir organigramme RESET de mise sous tension: initialisation par instruction, quand l'interface est en mode 4 bits de donnes (Sur le document fourni: HOBBYTRONIC N30 Page 13). Compltez l'ordinogramme page rponse N2 et l'extrait de programme en langage C pour le PIC 16F84 en mode 4 bits (Valeurs et commentaires). Ajoutez en italique soulign, les noms des sous programmes, fonctions ou procdures utiliss. 2) Expliquez le rle des deux sous programmes "Aff_Cmd4" et "Aff_Cmde" dans les lignes "Aff_Cmd4(0x20)" et "Aff_Cmde(0x0C)". 3) On souhaite crire un programme permettant l'criture d'un message appel Mesg1 sur la premire ligne de l'afficheur. En vous aidant des extraits suivants, des sous programmes Aff_Car, Aff_Cmde, Aff_Cmd4, Init_LCD, Tempo et de l'ordinogramme du programme principal, proposez un programme complet permettant l'affichage du message (Mesg1). On utilisera un sous programme Affiche_ligne et un pointeur sur Mesg1.
#include <pic.h> /***************************************************************** * En tte remplir avec nom du projet, nom du fichier, date * branchement des ports.... *****************************************************************/ typedef unsigned char byte; // byte en remplacement de unsigned char #define E RB2 A complter #define RS RB #define DA RB #define #define #define #define #define #define #define D100us 7 D10us D40us D1_6ms D4ms LIGNE_1 1 LIGNE_2 2 //7*16us //16us //3*16us = 48us //100*16us = 1.6ms //250*16us = 4ms
//********* Dclaration des constantes ********************************* const char Mesg1[]="Afficheur LCD"; //******** Declaration fonctions & procedures ************************* void InitPort(void); void InitLCD(void); void Affiche_ligne(const byte *, byte); void Place_curseur(byte, byte);
PICLCD5
Page N2
Page N3
// Fin du Reset logiciel du LCD // Commande en mode 4 Bits // N=1 => 1/16, F=0 =>5x7 points // D=1 => Display on, sans curseur // Display clear => tempo longue > 1.64ms // Autoincrmentation DDRAM adresse
Ordinogramme du programme de Gestion de l'afficheur LCD Dbut Programme principal Initialisations direction des ports
Initialisation afficheur
Init_Port
Init_LCD
4) Indiquez l'intrt des passages de paramtres: " Affiche_ligne (Mesg1,LIGNE_1); ". 5) Modifiez le programme principal, afin d'afficher un message "Mesg2" sur la deuxime ligne. 6) Modifiez le programme principal, en vous aidant de la documentation du circuit MM74C922 ou en grant directement un multiplexage complet dans le cas de la carte MILLENNIUM, afin d'afficher un endroit fixe de l'afficheur LCD, le caractre correspondant la touche enfonce sur le clavier. On utilisera un tableau "Table_ASCII" donnant les caractres ASCII correspondant aux codes fournis par le clavier. ALGORITHME respecter dans le cas du 74C922:
PICLCD5
Page N4
Gestion d'un afficheur LCD et d'un clavier avec le PIC16F84 ou le 16F876 - Si DA =1 => Lecture du clavier et rsultat dans code (valeur de 0 15, car 16 touches). - Si DA = 0 => imposer code 16. Rem: Le tableau "Table_ASCII" se terminera par l'espace afin d'effacer le caractre lorsqu'aucune touche n'est enfonce. - Prendre caractre ASCII correspondant code dans le tableau "Table_ASCII". - Placer le curseur un emplacement libre de l'afficheur. - Afficher le caractre correspondant la touche. Dans le cas de la carte MILLENIUM, il faut remplacer les deux lignes "Si DA..." par une scrutation complte du clavier (Sous programme crire).
PICLCD5
Page N5
Nom:
TRISB =
(en hexa)
3.) Rle des broches Vss, Vdd, Vo, RS, R/W, EN, D0 D7 de l'afficheur LCD.
PICLCD5
Page N6
Nom:
Temporisation de plus de
Ecrit commande Quartet
Temporisation de plus de
Ecrit commande Quartet 0x3 Ecrit commande Quartet 0x2 Ecrit commande Octets de configuration fin SP
//************ Initialisation du LCD ******** void InitLCD(void) { Tempo(D4ms); Tempo(D4ms); Tempo(D4ms); Tempo(D4ms); A complter Aff_Cmd4(0x30); Tempo(D4ms); Aff_Cmd4(0x30); Tempo(D100us); Aff_Cmd4(0x30); // Fin du Reset logiciel du LCD Tempo(D100us); Aff_Cmd4(0x20); // Commande en mode 4 Bits Aff_Cmde(0x28); // N=1 => 1/16, F=0 =>5x7 points Aff_Cmde(0x0C); // Aff_Cmde // Display clear => tempo longue > 1.64ms Tempo(D4ms); Aff_Cmde(0x06); // Autoincrmentation DDRAM adresse }
2) Rle des deux sous programmes "Aff_Cmd4" et "Aff_Cmde" et explication des lignes "Aff_Cmd4(0x20)" et "Aff_Cmde(0x0C)".
PICLCD5
Page N7
5V C1 C2 100nF J1 3 5V 2 1 R3 Jack 3.5mm D1 1N4001 2 1 Baterrie INTER1 On / Off 12V C4 REG1 IN OUT J2 GND 7805 C5 22uF 16V C6 100nF LED1 Led rouge C7 5V 330 18pF 5V R2 10k RA0 RA1 RA2 RA3 RA4 17 18 1 2 3 C3 18pF Q1 4MHz R1 10M 16 15 4 U1
14
100uF 50V
Vdd OSC1 / CLKIN OSC2 / CLKOUT MCLR / Vpp RB0 / INT RB1 RA0 RB2 RA1 RB3 RA2 RB4 RA3 RB5 RA4 RB6 RB7 Vss PIC16F84 5
6 7 8 9 10 11 12 13
10nF
0
5V
R4 330 5V LED2 Led verte J3 1 2 3 HE14 1x3 J4 1 2 3 4 5 6 HE14 1x6 J5 1 2 3 HE14 1x3 RB1 RA4 5V 5V 12V 5V R5 18k C9 RV1 RB3 2.2k RB2 R7 47k JP1 HE1 Y4 Y3 Y2 Y1 X4 X3 X2 X1 8 7 6 5 4 3 2 1 Y4 Y3 Y2 Y1 X4 X3 X2 X1 Y[1..4] Y1 Y2 Y3 Y4 X1 X2 X3 X4 1 2 3 4 11 10 8 7 U2 VCC ROWY1 ROWY2 ROWY3 ROWY4 CLMX1 CLMX2 CLMX3 CLMX4 GND MM74C922 9 OA OB OC OD DA OE KB OSC 17 16 15 14 12 13 6 5 RA0 RA1 RA2 RA3 RB0 R6 330 C10 100nF C11 LED3 1uF Led Jaune 18 C8 100nF
0
5V T1 BC547
100nF
0
R9 47k
1 2 3 4 5 6 7 8 9 10 11 12 13 14
X[1..4]
HE14 1x8
JP2 X4 X3 X2 X1 Y1 Y2 Y3 Y4 1 2 3 4 5 6 7 8 X4 X3 1 X2 X1 4 Y1 Y2 7 Y3 Y4 *
0
2 5 8 0 3 6 9 A B C D
BTS Electronique Lycee M. GENEVOIX Title Size A4 Date: Document Number 1
CLAVIER16_T
Auteur Mr ROHMER