J'utilise un module LCD clone HD44780 un KS0066U. Tout fonctionne bien sur le module, sauf lorsque je rallume rapidement l'appareil (on-> off-> on). Pour une raison quelconque, une très courte interruption de l'alimentation entraîne l'initialisation incorrecte du module d'affichage en tant qu'écran LCD à 1 ligne au lieu d'un écran LCD à 2 lignes. Quelle serait la cause de ce comportement? Existe-t-il un moyen de l'empêcher dans le logiciel?
EDIT: J'utilise le contrôleur d'affichage en mode 4 bits et non en mode 8 bits.
Réponses:
J'ai changé mon code d'initialisation pour qu'il envoie deux fois le quartet supérieur de la commande set de fonctions. Après quoi j'en veux au quartet supérieur de 4 bits suivi du quartet inférieur de 4 bits. Cela ne correspond pas à la fiche technique qui semble indiquer que vous pouvez envoyer le quartet supérieur de 4 bits, puis envoyer la commande set de fonctions 4 bits supérieurs suivi de 4 bits inférieurs.
// Fonctionne parfois avec un
port pseudo-code = 0x20;
e = 1; e = 0;
port = 0x20;
e = 1; e = 0;
port = 0xC0;
e = 1; e = 0;
// Fonctionne tout le temps pseudo-code
port = 0x20;
e = 1; e = 0;
e = 1; e = 0;
port = 0x20;
e = 1; e = 0;
port = 0xC0;
e = 1; e = 0;
la source
Je suppose que vous manquez un délai nécessaire dans votre séquence d'initialisation. Si l'affichage est occupé lorsque vous essayez d'envoyer une commande, cette commande sera ignorée. Si lorsque vous démarrez votre procédure, l'affichage est en mode quatre bits et vient d'avoir "0000" cadencé en tant que première moitié d'une commande, puis lorsque vous synchronisez en "0011", l'affichage verra la commande entière comme "00000011" , ce qui aura pour effet que l'écran soit occupé pendant 1,6 ms maximum.
Soit dit en passant, il est bon si possible de câbler les fils de données de faible ordre de l'écran de telle manière que lorsqu'une commande "0011" est envoyée à l'écran, les 8 bits entiers vus par l'écran forment une commande de mode défini ce qui est correct pour le type d'affichage que vous utilisez. Cela aidera à éviter tout problème d'affichage lors de la réinitialisation d'un écran qui est déjà en cours d'utilisation (la réinitialisation périodique de l'écran est une bonne idée, si cela peut être fait sans problème, car cela garantira que si l'écran passe en quelque sorte dans un mauvais mode, il sera corrigé lui-même).
la source
J'ai trouvé une solution de contournement pour le problème:
J'ai ajouté un délai de 1000 millisecondes au démarrage, avant d'initialiser / configurer le contrôleur LCD. Cela a plutôt bien fonctionné pour moi.
Un retard plus faible (100, 200 ms) ne fonctionnait pas si bien. Juste une note: cela ne s'est produit que dans le bus de données 4 bits.
Bonne chance!
la source
L'insertion d'un retard dans votre code pour qu'il s'allume donne à l'écran LCD suffisamment de temps pour s'initialiser au démarrage. Un maximum de quelques centaines de millisecondes.
Vous pouvez également essayer de connecter l'alimentation LCD au microcontrôleur et d'éteindre l'écran LCD pendant une seconde après le démarrage.
la source
Je ne sais pas si cela aide du tout, mais j'ai joué avec le KS0066U sur un projet Arduino. Voici le lien .
la source