Bonjour!
Alors j'ai un problème que je traine depuis plusieurs jours...
J'ai fais l'acquisition d'un écran LCD 4X16 que je n'arrive pas à faire marcher! Je pense que le problème vient de l'initialisation! Rien ne s'affiche à part des gros carré si je mes le contraste à fond et là on peut apercevoir 2 lignes.
Mon souhait c'est de faire afficher du texte en 8bits!
Le curseur ne s'affiche pas, preuve que l'initialisation n'a pas marché!?
Voila le code de mon initialisation:
Code:/* initialise the LCD - put into 4 bit mode */ void lcd_init() { CMCON = 7; //desactive le comparateur sur A TRISA=0; //en sortie TRISB=0; //en sortie PORTA=0; PORTB=0; LCD_RS = 0; LCD_EN = 0; LCD_RW = 0; /*Start*/ __delay_ms(50); //whait /* Function set */ LCD_DATA = 0b00111100; //2 ligne/5x10dot A7-A0=111100 PulseEN(); __delay_us(100); //whait /* Display on/off */ LCD_DATA = 0b00001110; //DB7-DB4 = 1110 (Display on, cursor on, blink off) PulseEN(); __delay_us(100); /*clear display */ LCD_DATA=1; // DB7-DB4=0001 PulseEN(); __delay_ms(2); /*Entry mode set*/ LCD_DATA = 0b00000110; // DB7-DB4=0110 (Incremet mode, entire shif off) PulseEN(); __delay_ms(2); /*End of initialisation*/ }Mes questions:Code:void PulseEN(void){ LCD_EN=1; __delay_us(1); LCD_EN=0; }
1) Vous voyez quelque chose qui cloche?
2) comment initialiser 4 lignes?!
3) Pourquoi le curseur n'apparait pas?
Autre chose, le code d'écriture je l'ai extrait du web et d'un exemple du compilateur, le voila:
A mon avis ça permet de convertir un caractere ASCII en donnée pour le LCD mais je ne comprend pas tout, une petite explication me serait bien utileCode:void lcd_write(unsigned char c) { LCD_DATA = (LCD_DATA & 0xF0) | (c >> 4); PulseEN(); LCD_DATA = (LCD_DATA & 0xF0) | (c & 0x0F); PulseEN(); __delay_us(50); }
Merci à tous!
-----