Академический Документы
Профессиональный Документы
Культура Документы
Introduction gnrale :
Dans un pass pas trs lointain, llectronique pour les amateurs (clairs) se rsumait essentiellement aux circuits analogiques et ventuellement en logique cble (portes logiques, compteurs, registres dcalage). Lusage des microprocesseurs tait plutt rserv un public averti dingnieurs sachant les interfacer avec diffrents circuits priphriques (eprom, ram) et programmer en assembleur. Au fil du temps on a vu apparatre de nouveaux circuits regroupant dans une seule puce le microprocesseur et ses circuits priphriques : les microcontrleurs. On en trouve maintenant partout : automobile, lave-vaisselle, rasoir, brosse dent lectrique Loffre en microcontrleurs sest dveloppe dautant : plus de priphriques intgrs, capacit de calcul accrue, plus de mmoire embarque. La technologie est aujourdhui prsente dans tous les domaines et ne constitue plus un mystre pour llve. A tout instant, il est amen utiliser un objet technologique. De la montre au portable et des moyens de transport aux moyens de tlcommunication, la technologie a envahi tous les secteurs de la vie
Prsentation:
Centre dintrt : Interface Homme Machine. De nombreux systmes ncessitent une interface homme machine (appele IHM) afin de permettre lintroduction de consignes et de visualiser les informations utiles pour lutilisateur. Ces IHM disposent frquemment de mini claviers (ou de quelques touches), associs de plus en plus un afficheur LCD, permettant laffichage sous forme de menus afin de simplifier lutilisation. Ainsi on dsire mettre en oeuvre un afficheur LCD (2 lignes de 16 caractres et un clavier 16 touches, sur une carte Millenium l'aide du PIC 16F877. I) Etape N1: On souhaite raliser dans un premier temps le cblage de lafficheur LCD et sa mise en uvre logicielle laide des fonctions proposes par lenvironnement MIKROELEKTRONIKA. On utilisera alors la documentation intgr au logiciel MikroC et celle de lafficheur LCD fourni, pour adapter le cblage et le programme, afin de relier lafficheur LCD au PORTC du PIC16F877. L'afficheur LCD est compatible avec le type dafficheur LCD alphanumrique "intelligent", rfrence 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. Organigramme du programme principal de Gestion de l'afficheur LCD
1
On dsire procder au cblage et la gestion du clavier sur la carte MILLENNIUM en saidant des consignes fournies. Les lignes du clavier (appeles Li1 Li4 sur le schma du clavier ci contre) seront directement gres logiciellement par le portB du pic, et les colonnes seront lues afin den dterminer la touche ventuellement enfonce. Lobjectif est de modifier le programme de ltape N1, afin d'afficher vers la fin de la deuxime ligne de lafficheur LCD (position 14 de la ligne 2), le caractre correspondant la touche enfonce sur le clavier. Les colonnes du clavier (Col1 Col4) seront lues par des broches de port configures en entres. Il est indispensable dutiliser des rsistances de tirage (ici pull up) pour distinguer ltat de repos (ici = 1), de ltat actif ou lon appuie sur un bouton (=> 0 en pensant mettre la ligne 0). Le clavier est ici volontairement connect au PORTB afin de bnficier des rsistances de pull up intgres sur le portB des PIC 16Fxxx. Attention : Pour le PORTB uniquement les sorties peuvent tre configures avec les rsistances 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 ltat bas). Voir commande ci-dessous. OPTION_REG.F7=0; //Car il faut /RBPU = OPTION_REG.F7 0 II.1) Ralisatio de cblage du clavier sur le PORTB pour avoir la correspondance ci -dessous: RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 Col4 Col3 Col2 Col1 Li4 Li3 Li2 Li1
Adaptation du programme :
On modifient le programme daffichage prcdent 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);
le programme principale en c :
#byte kbd = 0xF82 // portc 0xF82 et portD #byte kbd = 6 // portc 7 et portD 8 #define set_tris_kbd(x) set_tris_b(x) #define #define #define #define #define #define #define #define COL0 COL1 COL2 COL3 ROW0 ROW1 ROW2 ROW3 (1 (1 (1 (1 (1 (1 (1 (1 << << << << << << << << 4) 5) 6) 7) 0) 1) 2) 3) 0xF83
#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','/'}, // caractres 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; 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 contrleur d'affichage peut recevoir deux types d'information sur le bus DATA, un ordre (ex: effacer l'cran) ou une donne (ex: le caractre A). Ordres ou donnes sont envoys sur le bus DATA sous forme d'octets (8 bits). Mais pour ne pas utiliser toutes les broches de sorties d'un microcontrleur pour communiquer avec un LCD, les contrleurs d'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 contrleur d'affichage de savoir si le contenu du bus DATA est un ordre ou une donne. Un niveau bas indiquera un ordre et un niveau haut une donne. La ligne RW (Read Write) informe le contrleur si on vient lire ou crire dans sa mmoire, un niveau bas correspondant une action d'criture.
6
La ligne E (Enable) qui informe le contrleur d'affichage qu'un quartet (mode 4 bits) ou un octet (mode 8 bits) est disponible. Cette ligne est active sur front descendant. Elle ralise la syncronisation entre le microcontrleur et l'afficheur. Les connexions entre le contrleur d'affichage et le microcontrleur sont regroupes dans le tableau 1.
Fonctions de gestion
Transfert d'un octet
L'criture d'un ordre ou d'une donne en mode 4 bits se fait selon la squence reproduite en figure 10, l'octet transfrer tant b7b6b5 b4 b3b2b1b0 avec b7 bit de poids fort.
Phase I : RW=0 et E=0. RS et DB7...4 sont positionns la valeur souhaite : quartet de poids fort (MSB) Phase II : E=1.
7
Phase III : E=0, le quartet transfr (poids fort) est pris en compte par le contrleur lors du front descendant. Phase IV : DB7...4 sont positionns la valeur souhaite : quartet de poids faible (LSB) Phase V : E=1. Phase VI : E=0, le quartet transfr (poids faible) est pris en compte par le contrleur lors du front descendant. Commande dafficheurs alphanumrique cristaux liquides : Soit le shma de commande directe de lafficheur alphanumrique a cristaux liquide suivant : figure(5.2)
figure(5.2)
Le PIC 16F877 est gnreusement dot de 5 ports, ce qui est plutt confortable. Un examen plus attentif du schma ci-dessus nous montre cependant que les lignes dentres/sorties (les pattes du composant) correspondantes sont galement utilises par dautres modules du PIC. Ainsi, les pattes du PORTA servent galement au convertisseur Analogique/Numrique, les pattes du PORTD au Port Parallle Esclave, etc. Il faudra faire des choix au moment de la conception du schma lectronique ! On voit galement que les ports B, C et D ont 8 lignes dentre/sortie, alors que le port A nen a que 6 et le port E que 3. Ils sont tous connects au bus de donne (DATA BUS), on pourra donc librement les adresser pour y lire ou crire des donnes, et donc allumer des LED, commander des moteurs pas pas, des afficheurs LCD, lire les donnes envoyes par un clavier ou un bouton poussoir On peut configurer les entres/sorties de chaque port en entre ou en sortie, grce un registre spcial ddi chaque port. De plus, un des ports (le port B) possde des rsistances de pull-up internes qui peuvent tres valides ou non par logiciel.
10