Initialisation à la mise sous tension du module LCD HD44780


10

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.


Il semble que personne ne pense que votre question mérite un vote positif, assez étrange.
Kortuk

Les fiches techniques de certains des clones HD44780 sont assez mal écrites. Mon objectif était d'entamer une conversation sur la bonne façon de les initialiser. Je suis peut-être le seul à avoir eu des problèmes à les utiliser en mode 4 bits.
mjh2007

Non, je passe par le même problème en ce moment en mode 4 bits. Cela fait environ 15 ans que j'ai programmé pour la dernière fois un écran LCD à caractère simple, et je me souviens que c'était vraiment pénible de déboguer quand j'étais à l'école. Je ne suis pas aussi loin que vous, cependant - je ne peux même pas obtenir l'initialisation correcte car je ne peux pas encore afficher un seul caractère. :)
Dave

Réponses:


4

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;


2

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).


1

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!


0

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.


Vous avez déjà un retard de 100 ms au démarrage
mjh2007

Essayez alors mon autre suggestion. Vous pouvez même contrôler directement la puissance de l'écran LCD à partir d'une broche; il ne devrait pas tirer plus de quelques mA.
Thomas O

y a-t-il vraiment un délai maximum autorisé? Je pensais que la principale chose avec ces écrans LCD est que vous attendiez le minimum, mais si vous ne pouvez pas obtenir le bon timing, vous pouvez jouer en toute sécurité et attendre plus longtemps.
Dave

@Dave, vous avez peut-être mal interprété "délai maximum", c'est juste un délai raisonnable que je recommanderais. Par exemple, attendre quelques heures serait un peu extrême ...
Thomas O

LOL! Eh bien, je pensais que c'était ce que vous vouliez dire, mais je voulais m'assurer de ne rien manquer, car je n'ai pas encore initialisé mon LCD. Je me demande si je devrais aller chercher un pot pour m'assurer que ce n'est pas le contraste qui me foutre ici. :)
Dave

0

Je ne sais pas si cela aide du tout, mais j'ai joué avec le KS0066U sur un projet Arduino. Voici le lien .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.