autodétection de la résolution d'un LCD type HD44780

Bonjour,

oui je sais c'est la version fran=E7aise de ce que je viens d'envoyer sur comp.arch.embedded mais je m'aper=E7ois qu'en =E9crivant, =E7a met les id=E9es au clair et me fait aussi avancer.

Donc voil=E0 : dans le pass=E9, j'ai eu =E0 connecter des modules alphanum=E9riques =E0 des PICs (par exemple) et =E7a risque de recommencer (j'esp=E8re avec YASEP). J'ai donc amass=E9 une petite collection de LCD standards chin=E9s =E0 droit et =E0 gauche, avec des r=E9solutions de 1 =E0 8 lignes, de 8 =E0 40 caract=E8res.

A chaque fois qu'un nouveau module est essay=E9, au moins la r=E9solution change, et il faut recompiler le logiciel du CPU. Ce qui n'est pas tr=E8s pratique par exemple si je livrais un projet =E0 un client, et que ce dernier d=E9sirait dans le futur changer de r=E9solution (c'est une hypoth=E8se).

Dans ce cas on ajoute sur le circuit imprim=E9 un ou des jumpers, ou des pads de soudure, ou d'autres trucs qui prennent des broches pour rien.

Je me suis dit (il y a =E0 peine qqs heures donc c'est tout frais et pardonnez-moi l'id=E9e brouillon) que ce n'=E9tait pas n=E9cessaire et que quelques r=E9sistances de pull-up et pull-down (>100K) soud=E9s sur le LCD lui-m=EAme font tout simplement l'affaire.

En effet, ces modules sont souvent utilis=E9s en "mode nibble" (4 bits de donn=E9es) avec la broche d'=E9criture c=E2bl=E9e en =E9critur= e (donc le module LCD n'=E9crit jamais sur le bus). Et avec 4 bits on peut encoder quasiment toutes les r=E9solutions trouvables :

bits 4 & 5 : car/ligne : 0 0 8 1 0 16 0 1 20 1 1 40 ?

bits 6 & 7 : lignes : 0 0 1 1 0 2 0 1 4 1 1 erreur ?

Donc au moment du d=E9marrage, le CPU met le bus en lecture, lit les 4 bits et d=E9tecte si la combinaison est correcte (si le LCD est absent ou non-"patch=E9"). Ensuite les routines d'affichage sont mises =E0 jour avec le bon nombre de lignes et de caract=E8res, avec une valeur de 1x8 si erreur.

L=E0 o=F9 je commence un peu =E0 douter, c'est que je me souviens d'avoir trouv=E9 des courants de fuite ou des r=E9sistances de tirage lors de mes exp=E9rimentations. J'avais mis des petites LEDs rouges =E0 tr=E8s haut rendement, avec une forte r=E9sistance, sur le bus de donn=E9e, et elles s'allumaient parfois (sans que le CPU le demande) mais je ne me souviens plus dans quelles conditions.

Quelqu'un pourrait donner plus d'infos et d'autres retours d'exp=E9riences =E0 ce sujet ? Est-ce que =E7a vaut la peine que je "patche" ma collection de modules pour tester ce syst=E8me, ou bien c'est vou=E9 directement =E0 l'=E9chec en raison de param=E8tres que j'aurais oubli=E9 ?

YG

--=20

formatting link
/
formatting link

Reply to
whygee
Loading thread data ...

whygee a écrit :

L'idée est très intéressante.

la datasheet du hd44780 parle de pull-up resistances sur les fils de data et de contrôle qui génèrent un courant de 125uA, donc 40kohms vers le plus.

pour mettre des pull-down efficaces, il te faut mettre du 22k ou du 10k.

JJ

Reply to
jj

es

cool :-)

s vers=20

ah, j'avais donc bien oubli=E9 un d=E9tail. c'est dingue d'arriver =E0 alimenter une LED avec 125uA :-)

=2E effectivement. selon la tension, =E7a va faire des fuites de courant. pour les montages =E0 =E9conomie d'=E9nergie, =E7a peut =EAtre un souci. Cependant, s'il y a d=E9j=E0 des pull-ups, =E7a simplifie tout :-) d'abord pour d=E9tecter si les r=E9sistances de config sont l=E0 (on lit 1111), et aussi pour r=E9duire le nombre de r=E9sistances (on met juste celles vers 0V).

Bonne nuit,

YG [qui a encore 10 PCB =E0 construire pour demain ;-)]

--=20

formatting link
/
formatting link

Reply to
whygee

s vers=20

=2E d'apr=E8s mes calculs pour un syst=E8me compatible 3,3V, il faut une r=E9sistance inf=E9rieure =E0 8Kohms. Je vais voir si j'ai des CMS en 7,5K.

Aussi, afin de r=E9duire la consommation, j'ai commenc=E9 =E0 faire une table des combinaisons pour que les r=E9solutions les plus courantes n=E9cessitent le moins de r=E9sistances.

valeur bits 4-7 fonction 0 "0000" : R=E9serv=E9 (extension, lire bits 0 =E0 3 ?) 1 "1000" : 4x16 2 "0100" : 4x40 3 "1100" : 1x20 4 "0010" : R=E9serv=E9 (configuration alternative d'une r=E9solut= ion) 5 "1010" : 1x40 6 "0110" : 2x24 7 "1110" : 4x20 8 "0001" : R=E9serv=E9 (configuration alternative d'une r=E9solut= ion) 9 "1001" : 2x8 10 "0101" : 2x32 11 "1101" : 2x20 12 "0011" : 2x40 13 "1011" : 2x16 14 "0111" : 1x16 15 "1111" : 1x8 / LCD absent

chaque '0' correspond donc =E0 1 r=E9sistance.

J'=E9cris actuellement un document qui fait le point sur tout =E7a, je le mettrai en ligne dans les prochains jours.

YG

--=20

formatting link
/
formatting link

Reply to
whygee

sitodisitof=E9 :

formatting link

YG encore

--=20

formatting link
/
formatting link

Reply to
whygee

Bonjour, Bravo, merci pour ton efficacité ! Bonne nuit ?! henry

Reply to
Henry

Bel effort, mais j'ai deux petites remarques:

- dans le "summary" tu devrais preciser l'ordre car il est a l'envers de l'usage ( poids faible a droite, forts a gauche) . exemple en lisant 1000, pour moi par défaut c'est 8 et pas 1.

- il y a une erreur dans la liste precedente ce summary: le 1x20 apparait deux fois (1100 et 1011) et le 2x16 n'y est pas. Je pense que c'est , selon le summary 1011.

Sinon bon boulot.

--

Alain
Reply to
alain denis

e=20

00,=20

effectivement.

it=20

elon=20

=E7a m'apprendra =E0 faire ce genre de trucs =E0 des heures innommables.

ouais, mais va surtout falloir le faire marcher un de ces jours :-)

merci pour les corrections, YG

--=20

formatting link
/
formatting link

Reply to
whygee

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.