clavie

13
Gestion d’un afficheur avec un clavier Introduction générale : Dans un passé pas très lointain, l’électronique pour les amateurs (éclairés) se résumait essentiellement aux circuits analogiques et éventuellement en logique câblée (portes logiques, compteurs, registres à décalage…). L’usage des microprocesseurs était plutôt réservé à un public averti d’ingénieurs sachant les interfacer avec différents circuits périphériques (eprom, ram…) et programmer en assembleur. Au fil du temps on a vu apparaître de nouveaux circuits regroupant dans une seule puce le microprocesseur et ses circuits périphériques : les microcontrôleurs. On en trouve maintenant partout : automobile, lave-vaisselle, rasoir, brosse à dent électrique… L’offre en microcontrôleurs s’est développée d’autant : plus de périphériques intégrés, capacité de calcul accrue, plus de mémoire embarquée. La technologie est aujourd’hui présente dans tous les domaines et ne constitue plus un mystère pour l’élève. A tout instant, il est amené à utiliser un objet technologique. De la montre au portable et des moyens de transport aux moyens de télécommunication, la technologie a envahi tous les secteurs de la vie Présentation: Centre d’intérêt : Interface Homme Machine. De nombreux systèmes nécessitent une interface homme machine (appelée IHM) afin de permettre l’introduction 1

Transcript of clavie

Page 1: clavie

Gestion d’un afficheur avec un clavier

Introduction générale :

Dans un passé pas très lointain, l’électronique pour les amateurs (éclairés) serésumait essentiellement aux circuits analogiques et éventuellement en logiquecâblée (portes logiques, compteurs, registres à décalage…). L’usage desmicroprocesseurs était plutôt réservé à un public averti d’ingénieurs sachant lesinterfacer avec différents circuits périphériques (eprom, ram…) et programmer en assembleur.Au fil du temps on a vu apparaître de nouveaux circuits regroupant dans une seule puce le microprocesseur et ses circuits périphériques : les microcontrôleurs. On en trouve maintenant partout : automobile, lave-vaisselle, rasoir, brosse à dent électrique…L’offre en microcontrôleurs s’est développée d’autant : plus de périphériquesintégrés, capacité de calcul accrue, plus de mémoire embarquée.La technologie est aujourd’hui présente dans tous les domaines et ne constitue plus un mystère pour l’élève. A tout instant, il est amené à utiliser un objet technologique. De la montre au portable et des moyens de transport aux moyens de télécommunication, la technologie a envahi tous les secteurs de la vie

Présentation:Centre d’intérêt : Interface Homme Machine. De nombreux systèmes nécessitent une interface homme machine (appelée IHM) afin de permettre l’introduction de consignes et de visualiser les informations utiles pour l’utilisateur.Ces IHM disposent fréquemment de mini claviers (ou de quelques touches), associés de plus en plus à un afficheur LCD, permettant l’affichage sous forme de menus afin de simplifier l’utilisation.Ainsi on désire mettre en oeuvre un afficheur LCD (2 lignes de 16 caractères et un clavier 16 touches, sur une carte Millenium à l'aide du PIC 16F877.I) Etape N°1:On souhaite réaliser dans un premier temps le câblage de l’afficheur LCD et sa mise en œuvre logicielle à l’aide des fonctions proposées par l’environnement MIKROELEKTRONIKA. On utilisera alors la documentation intégré au logiciel MikroC et celle de l’afficheur LCD fourni, pour adapter le câblage et le programme, afin de relier l’afficheur LCD au PORTC du PIC16F877.L'afficheur LCD est compatible avec le type d’afficheur LCD alphanumérique "intelligent", référence LTN 211 (référence PHILIPS), comportant 2 lignes de 16 caractères et utilisant le contrôleur Hitachi HD44780, utilisé pour les afficheurs de 1 à 4 lignes de 16 à 40 caractères.Organigramme du programme principal de Gestion de l'afficheur LCD

1

Page 2: clavie

On désire procéder au câblage et à la gestion du clavier sur la carte MILLENNIUM en s’aidant des consignes fournies.Les lignes du clavier (appelées Li1 à Li4 sur le schéma du clavier ci contre) seront directement gérées logiciellement par le portB du pic, et les colonnes seront lues afin d’en déterminer la touche éventuellement enfoncée.L’objectif est de modifier le programme de l’étape N°1, afin d'afficher vers la fin de la deuxième ligne de l’afficheur LCD (position 14 de la ligne 2), le caractère correspondant à la touche enfoncée sur le clavier.Les colonnes du clavier (Col1 à Col4) seront lues par des broches de port configurées en entrées. Il est indispensable d’utiliser des résistances de tirage (ici pull up) pour distinguer l’état de repos (ici = ‘1’), de l’état actif ou l’on appuie sur un bouton (=> ‘0’ en pensant à mettre la ligne à ‘0’).Le clavier est ici volontairement connecté au PORTB afin de bénéficier des résistances de pull up intégrées sur le portB des PIC 16Fxxx.Attention : Pour le PORTB uniquement les sorties peuvent être configurées avec les résistances de pull up, en mettant dans un registre appelé « OPTION », le bit 7 nommé /RBPU (= poRtB Pull Up bar) à 0 (car ce bit est actif à l’état bas). Voir commande ci-dessous.OPTION_REG.F7=0; //Car il faut /RBPU = OPTION_REG.F7 à 0II.1) Réalisatio de câblage du clavier sur le PORTB pour avoir la correspondance ci -dessous:RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0Col4 Col3 Col2 Col1 Li4 Li3 Li2 Li1

2

Page 3: clavie

Adaptation du programme : On modifient le programme d’affichage précédent en ajoutant un sous programme de gestion du clavierb sous forme de fonction.

#include "C:\clavier16touches\testclavier.h"#include "C:\clavier16touches\clavier16T.c"#include "C:\clavier16touches\lcd.c"void main(){char k;byte const t[10]={63,6,91,79,102,109,125,7,127,111}; setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(FALSE); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); port_b_pullups(true); kbd_init(); lcd_init(); lcd_putc("\fApuiez...\n"); set_tris_c(0x00); output_c(0x00); DO { k=kbd_getc(); if(k!=0) if(k=='c') lcd_putc('\f'); else { lcd_putc(k); if (k>57){k=48;} if (k<48){k=48;} output_c(t[k-48]); output_A(k-48); } } while (true);

3

Page 4: clavie

le programme principale en c :

#byte kbd = 0xF82 // portc 0xF82 et portD 0xF83#byte kbd = 6 // portc 7 et portD 8#define set_tris_kbd(x) set_tris_b(x) #define COL0 (1 << 4)#define COL1 (1 << 5)#define COL2 (1 << 6)#define COL3 (1 << 7) #define ROW0 (1 << 0)#define ROW1 (1 << 1)#define ROW2 (1 << 2)#define ROW3 (1 << 3) #define ALL_ROWS (ROW0|ROW1|ROW2|ROW3)#define ALL_PINS (ALL_ROWS|COL0|COL1|COL2|COL3) // Keypad layout:char const KEYS[4][4] = {{'7','8','9','/'}, // caractères de votre clavier {'4','5','6','*'}, {'1','2','3','-'}, {'c','0','=','+'}}; #define KBD_DEBOUNCE_FACTOR 50 void kbd_init() {} char kbd_getc( ) { static BYTE kbd_call_count; static short int kbd_down; static char last_key; static BYTE col; BYTE kchar; BYTE row; kchar='\0'; if(++kbd_call_count>KBD_DEBOUNCE_FACTOR) { switch (col) { case 0 : set_tris_kbd(ALL_PINS&~COL0); kbd=~COL0&ALL_PINS; break; case 1 : set_tris_kbd(ALL_PINS&~COL1); kbd=~COL1&ALL_PINS; break; case 2 : set_tris_kbd(ALL_PINS&~COL2); kbd=~COL2&ALL_PINS; break; case 3 : set_tris_kbd(ALL_PINS&~COL3); kbd=~COL3&ALL_PINS; break; } if(kbd_down) { if((kbd & (ALL_ROWS))==(ALL_ROWS)) { kbd_down=FALSE;

4

Page 5: clavie

kchar=last_key; last_key='\0'; } } else { if((kbd & (ALL_ROWS))!=(ALL_ROWS)) { if((kbd & ROW0)==0) row=0; else if((kbd & ROW1)==0) row=1; else if((kbd & ROW2)==0) row=2; else if((kbd & ROW3)==0) row=3; last_key =KEYS[row][col]; kbd_down = TRUE; } else { ++col; if(col==4) col=0; } } kbd_call_count=0; } set_tris_kbd(ALL_PINS); return(kchar);}

Le circuit réalisé en isis :

Les afficheurs LCD :

5

Page 6: clavie

Les afficheurs à cristaux liquides généralement appelés LCD (Liquide Crystal Display) sont des modules compacts qui nécessitent peu de composants pour leur mise en oeuvre. Plusieurs afficheurs sont disponibles sur le marché, ils se différencient les uns des autres par leurs dimensions (de 1 à 4 lignes de 6 à 80 caractères). Certains sont également dotés de fonctions de rétroéclairage. L'afficheur du kit PICDEM 2 Plus est un afficheur 16 × 2 c'est à dire 2 lignes de 16 caractères avec des caractères de 5×8 pixels.Pour communiquer avec l'extérieur tout afficheur à besoin d'un circuit spécialisé de gestion appelé « contrôleur d'affichage », il en existe différents modèles sur le marché mais ils ont tous le même fonctionnement. La carte d'évaluation est équipée du modèle HD44780U de SHARP. Le contrôleur sert donc d'interface entre le microcontrôleur et l'afficheur (cf. figure 9). Le but du driver est de gérer le bus CONTROL afin que le contrôleur d'affichage comprenne le bus DATA et affiche ce que l'on souhaite sur l'écran LCD.

Le contrôleur d'affichage peut recevoir deux types d'information sur le bus DATA, un ordre (ex: effacer l'écran) ou une donnée (ex: le caractère A). Ordres ou données sont envoyés sur le bus DATA sous forme d'octets (8 bits). Mais pour ne pas utiliser toutes les broches de sorties d'un microcontrôleur pour communiquer avec un LCD, les contrôleursd'affichage fonctionnent également en 4 bits, un nombre codé sur 4 bits s'appelle un quartet. En mode 4 bits, un octet est envoyé en deux fois : le quartet de poids fort puis le quartet de poids faible.Le bus CONTROL est constitué de trois lignes :– La ligne RS (Register Select) qui permet au contrôleur d'affichage de savoir si le contenu du bus DATA est un ordre ou

6

Page 7: clavie

une donnée. Un niveau bas indiquera un ordre et un niveau haut une donnée.– La ligne RW (Read Write) informe le contrôleur si on vient lire ou écrire dans sa mémoire, un niveau bas correspondant à une action d'écriture.– La ligne E (Enable) qui informe le contrôleur d'affichage qu'un quartet (mode 4 bits) ou un octet (mode 8 bits) est disponible. Cette ligne est active sur front descendant. Elle réalise la syncronisation entre lemicrocontrôleur et l'afficheur.Les connexions entre le contrôleur d'affichage et le microcontrôleur sont regroupées dans le tableau 1.

Tableau 1: Connexion entre le contrôleur d'affichage et le microcontrôleur

Fonctions de gestion

Transfert d'un octet

L'écriture d'un ordre ou d'une donnée en mode 4 bits se fait selon la séquence reproduite en figure 10, l'octet à transférer étant b7b6b5 b4 b3b2b1b0 avec b7 bit de poids fort.

7

Page 8: clavie

Figure 10: Transfert d'un octet en mode 4 bits

– Phase I : RW=0 et E=0. RS et DB7...4 sont positionnés à la valeur souhaitée : quartet de poids fort (MSB)– Phase II : E=1.– Phase III : E=0, le quartet transféré (poids fort) est pris en compte par le contrôleur lors du front descendant.– Phase IV : DB7...4 sont positionnés à la valeur souhaitée : quartet de poids faible (LSB)– Phase V : E=1.– Phase VI : E=0, le quartet transféré (poids faible) est pris en compte par le contrôleur lors du front descendant.Commande d’afficheurs alphanumérique à cristaux liquides :

Soit le shèma de commande directe de l’afficheur alphanumérique a cristaux liquide suivant : figure(5.2)

figure(5.2)

Choix d’un PIC : le 16F877Pour apprendre, la meilleurs solution est de se faire la main sur du concret. On va donc étudier un vrai microcontrôleur, sachant que ce qui aura été vu sera assez facilement transposable à d’autres PIC. Le 16F877 est un PIC de la série « Midrange » qui se prête particulièrement bien à la programmation en C. Les PIC de la série inférieure sont un peu justes en performance et en capacité mémoire pour accueillir un programme issu d’un compilateur C ; mieux vaut les programmer enassembleur. Les gammes supérieures (16 ou 32 bits) supportent sans problème la programmation en C, mais comme

8

Page 9: clavie

se sont des circuits plus complexes (et plus chers), commençons par quelque chose de plus simple et de plus didactique. Le 16F877 (F comme « Flash ») convient parfaitement : mémoire programme de taillesuffisante (8K), nombreux périphériques intégrés, fréquence de fonctionnement jusqu’à 20 MHz. Tout ce qu’il faut pour créer des applications sympa en s’amusant !

Les Ports d’Entrées/Sorties généraux : (PORTA, PORTB, PORTC,PORTD, PORTE)

Le PIC 16F877 est généreusement doté de 5 ports, ce qui est plutôt confortable. Un examen plus attentif du schéma ci-dessus nous montre cependant que les lignes d’entrées/sorties (les pattes du composant) correspondantes sont également utilisées par d’autres modules du PIC. Ainsi, les pattes du PORTA servent également au convertisseur Analogique/Numérique, les pattes du PORTD au Port ParallèleEsclave, etc. Il faudra faire des choix au moment de la conception du schéma électronique ! On voit également que les ports B, C et D ont 8 lignes d’entrée/sortie, alors que le port A n’en a que 6 et le port E que 3. Ils sont tous connectés au bus de donnée (DATA BUS), on pourra donc librement les adresser pour y lire ou écrire des données, et donc allumer des LED, commander des moteurs pas à pas, des afficheurs LCD, lire les données envoyées par un clavier ou un bouton poussoir…On peut configurer les entrées/sorties de chaque port en entrée ou en sortie, grâce à un registre spécial dédié à chaque port.De plus, un des ports (le port B) possède des résistances de « pull-up » internes qui peuvent êtres validées ou non par logiciel.

9

Page 10: clavie

10