Bonsoir, c'est la première fois que je poste sur ce forum, mais je m'y suis souvent référencé par le passé. Cependant c'est un problème assez ennuyeux qui me pousse à poser ma question aujourd'hui, je m'explique.
Je dois réaliser un montage qui doit permettre l' affichage de caractères sur un écran Lcd (16x2 162d displaytech) à partir d'un pic 16f877.
J'ai terminé le cablage et ça va faire maintenant plus de trois jours que je me casse la tête à chercher une solution pour réussir à initialiser l' écran.
Le cablage est propre et j'ai du le vérifier au moins quatre fois donc le problème doit venir du programme (en pièce jointe). J'ai essayé tout les exemples trouvables d'initialisation sur le net, sans succès.
Je précise que le bus de données de l'écran est connecté sur le port D et que je ne peux que écrire sur le LCD parce que le R/W est à la masse . Les bits E et RS sont connectés sur le port A.0 et A.1.
Je souhaite une configuration en 8 bits.
Au démarrage du circuit , la ligne du haut est noire et reste ainsi alors qu'elle devrait être effacé en attendant un caractère à afficher.
voila les datasheets :
LCD http://docs-europe.origin.electrocom...6b806dda17.pdf
PIC http://ww1.microchip.com/downloads/e...Doc/30292c.pdf
J'espère que quelqu'un pourra m'aider parce que là je suis vraiment coincé et je ne sait plus quoi faire. En vous remerciant d'avance pour vos réponse.
Bonsoir polkii et tout le groupeCode:#include<16F877.h> #include<defines.h> #USE delay(clock=20000000) #BIT E=PORTA.0 #BIT RS=PORTA.1 #BIT LED=PORTE.1 #BYTE LCD=PORTD void init_PIC(); void init_LCD(); void E_front(); void main() { init_PIC(); init_LCD(); while(1) { init_LCD(); RS=1; LED=~LED; LCD=0x02; //display ON E_front(); delay_ms(500); } } void init_PIC() { TRISA=0x00; TRISE=0x0F; TRISD=0x00; } void init_LCD() { delay_ms(500); LCD=0x30; //demmarage RS=0; //Selected command register E_front(); delay_ms(5); E_front(); delay_us(150); E_front(); delay_us(100); LCD=0x38; // 2 Line, 8-bit, 5x7 dots E_front(); delay_us(100); LCD=0x0F; //display ON E_front(); delay_us(100); LCD=0x01; //display CLEAR E_front(); delay_ms(2); LCD=0x06; //mode set increase et no shift E_front(); delay_us(100); } void E_front() { E=1; delay_us(1); E=0; }
Bienvenue sur le forum.
J'ai supprimé le fichier .txt, et rapatrié le listing entre les balises code, comme c'est l'usage.
.
-----