FORUM Syndrome-OC - Jacky-PC


  Programmation


  Microcontrolleur &co


  Probleme d'initialisation et d'affichage d'un LCD 16*2 avec un 16F84A

 




Il y a 41 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme d'initialisation et d'affichage d'un LCD 16*2 avec un 16F84A

n°7119
guiguimax
Posté le 30-12-2006 à 13:38:17  profilanswer
 

Bonjour a tous,  
Voila, depuis 2 jours je me heurte a un probleme. J'ai cablé (en simulation) un LCD 16*2 a base de KS0066 (ou HD44780, c'est pareil) sur un pic16F84A, et j'essaye d'en tirer quelque chose. J'ai lu et relu les différentes datasheet des différents composant, notament du KS et du HD. J'ai lu et relu les cours trouvé sur internet, ainsi que les differents post sur ce forum et d'autres qui traitaient du sujet, mais je n'ai pas trouvé de réponse a mes questions.
 
Je vous expose mon souci :
Je souhaite utiliser le LCD en mode 8 bit, j'ai donc cablé les 8 bits de données sur le port B de mon pic. Les bits de controles sont géré par RA0,1 et 2 (respectivement RS,RW et E). Jusque la je ne pense pas avoir fait d'erreur.
Ensuite j'initialise le LCD en suivant la procedure, et en respectant les timing, je pense d'ailleur que l'initialisation se passe bien, puisque je vois le curseur a la fin de l'init. Je vous fournis le code d'init : (le tout en C) :
 
 

Code :
  1. tempo_10ms(4);  // Tempo de 40ms pour laisser le temsp au LCD de s'allumer
  2. impulsion();    // Impulsion de 1µs sur la ligne E
  3. PORTA = 0b00000000;  // déclaration du mode de fonctionnement
  4. Port_Data = 0b00000001;  // Clear Display
  5. impulsion();    // Impulsion de 1µs sur la ligne E
  6. tempo_1ms(5);  // Tempo de 5ms avant de passer a l'étap d'init suivante
  7. PORTA = 0b00000000;  // meme étape, déclaration du
  8. Port_Data = 0b00000010;  // Return home
  9. impulsion();    // Impulsion de 1µs sur la ligne E
  10. tempo_1ms(2);  // Tempo de 2ms avant de passer a l'étap d'init suivante
  11. PORTA = 0b00000000;  //
  12. Port_Data = 0b00000111;  // Mode d'incrémentation
  13. impulsion();    // Impulsion de 1µs sur la ligne E
  14. tempo_10us(4);  // Tempo de 40us avant de passer a l'étape d'init suivante
  15. PORTA = 0b00000000;  //
  16. Port_Data = 0b00001111;  // Définition de l'affichage
  17. impulsion();    // Impulsion de 1µs sur la ligne E
  18. tempo_10us(4);  // Tempo de 40us avant de passer a l'étape d'init suivante
  19. PORTA = 0b00000000;  //
  20. Port_Data = 0b00011100;  // Définition de l'affichage
  21. impulsion();    // Impulsion de 1µs sur la ligne E
  22. tempo_10us(4);  // Tempo de 40us avant de passer a l'étape d'init suivante
  23. PORTA = 0b00000000;  //
  24. Port_Data = 0b00111000;  // Définition du mode 8 bit, 2 lignes, taille caracteres
  25. impulsion();    // Impulsion de 1µs sur la ligne E
  26. tempo_10us(4);  // Tempo de 40us avant de passer a l'étape d'init suivante


Pour la compréhension : les "tempo_" sont des temporisations, dont le coeff multiplicateur est dans la parenthese. et "impulsion" est la fonction suivante :  
 
 

Code :
  1. void impulsion(void)
  2. {
  3. Bit_E=1;   // Mise a 1 de E
  4. tempo_10us(10);
  5. Bit_E=0;   // Mise a 0 de E
  6. tempo_10us(10);
  7. }

 

 
 
Par la suite, j'essaye un truc tout bete, je met le LCD en mode "data" et en reception, j'envoi une trame de donnée (par exemple tout le port B à 1), et j'envoi un signal sur E (bas-haut-bas puisque la donnée est active sur front descendant), en respectant encore une fois les temps de maintient. Je pensais ainsi faire apparaitre un caracatere sur le LCD, a la premiere ligne premiere colonne. Mais rien ne se passe. Pourtant en simulation avec un scope, j'ai bien l'impulsion sur E, et j'ai bien les données sur les bits de data.
Voila ce que je fais lorsque j'envoi mes données :
 
 

Code :
  1. Bit_E=1;
  2. tempo_1ms(1);
  3. Port_Data = 0b11111111;
  4. tempo_1ms(1);
  5. Bit_E=0;
  6. tempo_1ms(1);


(ca manque un peu de commentaire, mais c'est suffisament simple poru etre compris je pense...ah oui, c'est en C, et j'utilse CC5X)
 
 
Par contre, chose étrange, lorsque dans mon programme, "j'englobe" le code ci dessus par une boucle "infinie", et bien j'affiche bien le caractere, mais bien sur il s'affiche sur tout l'écran, et ca "défile" sur l'écran.
Par tatonement je me suis rendu compte qu'une boucle avec environs 50 bouclage suffisait a afficher les caracteres. Moins rien ne s'affiche, plus ca défile.  
 
Je suis perdu, et j'ai beau relire les differentes datasheet, je ne vois pas d'ou vient mon erreur. En relisant les librairies dispo sur le net, j'ai l'impression que tout le monde fait comme moi, mais pourtant j'ai vérifié...les programmes du net fonctionnent, les miens non :-(
 
Si vous avez une piste...
 
Je vous remercie d'avance
 
Cordialement
Guillaume

mood
Google
Posté le 30-12-2006 à 13:38:17  profilanswer
 

n°7120
guiguimax
Posté le 02-01-2007 à 13:59:01  profilanswer
 

Mon post ne fais pas fureur  :sweat:  
Personne ne voit le probleme ?
Personne ne sait comment le résoudre ?
Personne ne veut y répondre ?
Je me suis trompé de catégorie ?
J'ai fait quelque chose de mal ?  
Vous avez trop arrosé le passage a la nouvelle année ? :ange:  
 
Allez, un petit geste pour une personne dans le besoin  :jap:  
 
Merciii :)

n°7133
lolo05
Posté le 26-02-2007 à 10:31:24  profilanswer
 

J'essaie de faire la même chose que toi
As-tu réussi depuis ta mise en ligne?
Laurent

n°7134
RISC
Posté le 26-02-2007 à 23:54:00  profilanswer
 

Bonjour Lolo et Guigui,
 
Google est ton ami : http://www.piclist.com/techref/io/lcd/pic.htm
 
La plupart des PB avec le pilotage du HD44780 viennent du respect des timings SURTOUT dans la phase d'initialisation. Vérifie bien à quelle fréquence tu fonctionnes et donne un peu de gras dans les tempos.
 
La seule chose qui fait foi c'est la datasheet de l'afficheur que tu utilises. Vérifies bien les tempos....
 
Bonne chance


Message édité par RISC le 26-02-2007 à 23:58:16
mood
Google
Posté le 26-02-2007 à 23:54:00  profilanswer
 


Aller à :
Ajouter une réponse

  FORUM Syndrome-OC - Jacky-PC


  Programmation


  Microcontrolleur &co


  Probleme d'initialisation et d'affichage d'un LCD 16*2 avec un 16F84A

 

Hit Parade