FORUM Syndrome-OC - Jacky-PC


  Electronique


  LCD


  Probleme d'affichage sur LCD avec un pic

 




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

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme d'affichage sur LCD avec un pic

n°75737
guiguimax
Posté le 04-01-2007 à 20:49:37  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 :
 
 

  • tempo_10ms(4);  // Tempo de 40ms pour laisser le temsp au LCD de s'allumer  

impulsion();    // Impulsion de 1µs sur la ligne E  
PORTA = 0b00000000;  // déclaration du mode de fonctionnement  
Port_Data = 0b00000001;  // Clear Display  
impulsion();    // Impulsion de 1µs sur la ligne E  
tempo_1ms(5);  // Tempo de 5ms avant de passer a l'étap d'init suivante  
PORTA = 0b00000000;  // meme étape, déclaration du
Port_Data = 0b00000010;  // Return home  
impulsion();    // Impulsion de 1µs sur la ligne E  
tempo_1ms(2);  // Tempo de 2ms avant de passer a l'étap d'init suivante  
PORTA = 0b00000000;  //  
Port_Data = 0b00000111;  // Mode d'incrémentation  
impulsion();    // Impulsion de 1µs sur la ligne E  
tempo_10us(4);  // Tempo de 40us avant de passer a l'étape d'init suivante  
PORTA = 0b00000000;  //  
Port_Data = 0b00001111;  // Définition de l'affichage  
impulsion();    // Impulsion de 1µs sur la ligne E  
tempo_10us(4);  // Tempo de 40us avant de passer a l'étape d'init suivante  
PORTA = 0b00000000;  //  
Port_Data = 0b00011100;  // Définition de l'affichage  
impulsion();    // Impulsion de 1µs sur la ligne E  
tempo_10us(4);  // Tempo de 40us avant de passer a l'étape d'init suivante  
PORTA = 0b00000000;  //  
Port_Data = 0b00111000;  // Définition du mode 8 bit, 2 lignes, taille caracteres  
impulsion();    // Impulsion de 1µs sur la ligne E  
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 :
 
 

  • void impulsion(void)  

{  
Bit_E=1;   // Mise a 1 de E  
tempo_10us(10);  
Bit_E=0;   // Mise a 0 de E  
tempo_10us(10);  
}
 
   

 

 
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 :
 
 

  • Bit_E=1;  

tempo_1ms(1);  
Port_Data = 0b11111111;  
tempo_1ms(1);  
Bit_E=0;  
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
 
PS : je précise que j'ai déja posté ce sujet dans la catégorie "programmation", mais qu'il n'a eu aucune réponse, alors peut etre que je l'avais posté dans la mauvaise catégorie. Si ce n'est pas le cas, que celui ci soit supprimé...

mood
Google
Posté le 04-01-2007 à 20:49:37  profilanswer
 


Aller à :
Ajouter une réponse

  FORUM Syndrome-OC - Jacky-PC


  Electronique


  LCD


  Probleme d'affichage sur LCD avec un pic

 

Hit Parade