Bonjour,
Après quelques semaines de recherche et détours, j'aimerai sérieusement en finir avec mon problème de lcd...
(J'utilise une PICDEM2 PLUS board de microchip avec un PIC 18f4520 avec C18)
J'ai déjà essayé la quasi totalité des librairies conçus pour l'occasion et trainant sur le web... et celle qui m'a donné le plus de satisfaction est celle ci :
Librairie en C18 pour LCD
www.aqra.ca
La chose qui me satisfait le plus :
J'arrive à "foncer" la première ligne... et a faire clignoter le curseur...
Et encore, il faut que je bidouille... Je dois appeller line (2) puis line (1)
un simple lcdconfig (cursorON) ne fonctionne pas...
Voici le bout de code que j'utilise pour compiler.
Oscillator : EC-Port on RA6Code:#include <p18f4520.h> // for ports declarations #include <delays.h> // for delay routines #include <timers.h> //for interrupts #define LCDdata PORTD // J'ai modifié les pin de sorties #define TRIS_LCDdata TRISD #define LCDenable PORTAbits.RA1 #define TRIS_LCDenable TRISAbits.TRISA1 #define LCDrs PORTAbits.RA3 #define TRIS_LCDrs TRISAbits.TRISA3 #define LCDrw PORTAbits.RA2 #define TRIS_LCDrw TRISAbits.TRISA2 //Defines pour config du lcd #define clear 1 #define home 2 #define cursorON 3 #define cursorOFF 4 #define shift 5 //Délais #define wait Delay10KTCYx(1) #define longwait Delay10KTCYx(15) #define shortwait Delay1KTCYx(1) #define Delay_05ms Delay10TCYx(250) //variables utilisées ds les routines int t; int o; //fonction d'initialisation de l'écran void initlcd (void) { LCDdata = 0b00000000; //toutes les pins de données à 0 LCDrw = 0; LCDenable = 0; //enable à 0 LCDrs = 0; //Register Select à 0 (configuration) longwait; //display ON LCDdata = 0b00001111; wait; LCDenable = 1; wait; LCDenable = 0; wait; // mode 8 bit LCDdata = 0b00000001; wait; LCDenable = 1; wait; LCDenable = 0; wait; // effacer l'écran LCDdata = 0b00111000; wait; LCDenable = 1; wait; LCDenable = 0; wait; } //fonction pour choisir entre quelle ligne d'écran void line (int x) { if (x == 1) { //set display adress au début de l'écran (ligne 1) LCDrs = 0; LCDrw = 0; LCDdata = 0x80; wait; LCDenable = 1; wait; LCDenable = 0; wait; } if (x == 2) { //set display adress au 9e charactère (ligne 2) LCDrs = 0; LCDrw = 0; LCDdata = 0xC0; wait; LCDenable = 1; wait; LCDenable = 0; wait; } } //configuration de l'écran (efface, home, etc) void configlcd (int config) { if (config == clear) { //efface l'écran LCDrs = 0; LCDdata = 0b00000001; shortwait; LCDenable = 1; shortwait; LCDenable = 0; wait; } if (config == home) { //curseur et écran home LCDrs = 0; LCDdata = 0b00000011; wait; LCDenable = 1; wait; LCDenable = 0; wait; } if (config == cursorON) { //curseur ON LCDrs = 0; LCDdata = 0b00001111; wait; LCDenable = 1; wait; LCDenable = 0; wait; } if (config == cursorOFF) { //curseur OFF LCDrs = 0; LCDdata = 0b00001100; wait; LCDenable = 1; wait; LCDenable = 0; wait; } if (config == shift) { //shift display LCDrs = 0; LCDdata = 0b00011000; wait; LCDenable = 1; wait; LCDenable = 0; wait; } } //affichage d'un charactère sur l'écran void printlcd (char text) { LCDrs = 1; shortwait; LCDdata = text; // print text shortwait; LCDenable = 1; shortwait; LCDenable = 0; LCDdata = 0b00000000; //remet toutes les sorties à 0 LCDrs = 0; } char bonjour[] = " Bonjour ! "; //fonction principale du programme void main () { //On désactive l'acquisition analogique ADCON1=6; //définitions des I/O TRIS_LCDdata = 0; TRIS_LCDenable = 0; TRIS_LCDrw = 0; TRIS_LCDrs = 0; initlcd(); //A CE STADE la ligne est foncée line (2); line (1); //A CE STADE le curseur apparait printlcd ("z"); //A CE STADE tout l'écran est blanc (comme éteind= // Au fait c'est : "z" ou 'z' ? A chaque fois je test les deux... while(1) { } }
Fail-Safe Clock Monitor : Enable
Internal External Switch Over Mode : Disabled
...
S'il vous plait je galère avec cette librairie depuis pas mal de semaine (même si je n'ai pas travailler sur ce sujet a temps plein). J'aimerai mettre à profits les vacances pour avancer sérieusement sur le projet...
Un grand merci par avance...
Cordialement
Hoffmann
-----