C'est parti !!!
-----
C'est parti !!!
Sans oublier de mettre un RETURN à la place de la "boucle"...
David.
Est ce qu'il faut respecter la casse dans un prog asm ?
Par exemple, la routine wmillisecs : dans ta modif c'est écrit "wmilliseCs".
En fait l'affichage clignote de nouveau. Je vois toujours que la moitié gauche.
Donc, tu me confirmes bien qu'avec mon init et la boucle sans fin l'écran semble éteint???
Si oui :
Tu retires la boucle sans fin et tu la remplaces par un RETURN
Ensuite, tu vas dans "mainprog" et tu ajoutes la boucle sans fin comme dans l'exemple et tu retestes...
David.Code:mainprog Call lCdreset ;reset lCd, set for 4 bit ops, Clear, no Cursor ;output opening two-line message and wait 2 seConds to allow CirCuitry to stabiliZe. movlw begin1text-starttext Call textout Call lCdhome2 movlw begin2text-starttext Call textout Call delay1000 Call delay1000 Call lCdClear ;Clear lCd and display "ZERO ALL" message movlw Zerotext-starttext Call textout boucle goto boucle
Donc, tu me confirmes bien qu'avec mon init et la boucle sans fin l'écran semble éteint???
Si oui :
Tu retires la boucle sans fin et tu la remplaces par un RETURN
Ensuite, tu vas dans "mainprog" et tu ajoutes la boucle sans fin comme dans l'exemple et tu retestes...
David.Code:mainprog Call lCdreset ;reset lCd, set for 4 bit ops, Clear, no Cursor ;output opening two-line message and wait 2 seConds to allow CirCuitry to stabiliZe. movlw begin1text-starttext Call textout Call lCdhome2 movlw begin2text-starttext Call textout Call delay1000 Call delay1000 Call lCdClear ;Clear lCd and display "ZERO ALL" message movlw Zerotext-starttext Call textout boucle goto boucle
C'est fait. Ca ne clignote plus. Mais j'ai beau joué avec le contraste j'arrive pas à lire sur la moitié gauche.
Je vois que t'es plu connecté et comme chez moi il est minuit passé je vais au dodo.
A demain peut-être et merci encore.
Je ne sais pas où est le problème, mais maintenant ton init est bonne...
Il faut suivre le programme et tester les routines une à une...
Avec le RETURN en fin de la routine lcdreset, et sans boucle, rien ne fonctionne???
David.
Bonjour,
Effectivement, avec le return et sans boucle ça ne fonctionne pas.
Saurais tu ou trouver un petit programme tout simple avec un minimum de composants juste pour tester le lcd pour voir ?
Ton lcd était un peu dur d'oreille(3h,3h,3h) 3 fois pour lui dire mode 8bits
apres il faut lui envoyer
2h;mode 4bits
2h,8h;modde 4bits,2lignes matrice 5X7
0h,Ch;affichage en fonction,pas de curseur
0h,4h;curseur se déplace vers la droite
Mais regarde TON LCD dans un de mes deniers post je te demande si tu l'as déja vu fonctionné pas de reponse.
bonne journée et bon courage
a bientôt
Salut,Ton lcd était un peu dur d'oreille(3h,3h,3h) 3 fois pour lui dire mode 8bits
apres il faut lui envoyer
2h;mode 4bits
2h,8h;modde 4bits,2lignes matrice 5X7
0h,Ch;affichage en fonction,pas de curseur
0h,4h;curseur se déplace vers la droite
Mais regarde TON LCD dans un de mes deniers post je te demande si tu l'as déja vu fonctionné pas de reponse.
bonne journée et bon courage
a bientôt
Mon LCD est neuf, je l'ai acheté il y a 2 ou 3 ans, et ne l'ai jamais utilisé. Je ne l'ai jamais donc vu fonctionner correctement.
Quand tu dis envoyer 2h,8h, ça se traduit comment, c'est en hexadécimal ?
A +
Salut,
Non, c'est la procédure préconisée par Samsung (hitachi,...) pour pouvoir repasser en mode 4bits après un reset software sans coupure d'alimentation...Ton lcd était un peu dur d'oreille(3h,3h,3h) 3 fois pour lui dire mode 8bits
Voici l'explication :
A l'INIT après établissement de la tension d’alimentation, le LCD est en mode 8bits, on va lui envoyer la commande 3 fois, c'est juste une redondance qui n'affecte en rien l'INIT...
Par contre, en cas de reset sans coupure d'alimentation, le LCD est déjà configuré en mode 4bit, et s'attend donc à recevoir des quartets de deux fois 4bits. Donc les deux premiers quartet ne constituent qu'une instruction (passage en mode 8bits), le troisième quartet est ainsi réellement interprété comme une commande 8bits, avec les LSB à zéro.
On écrit ensuite la commande du mode 4bits, mais juste une fois, car l'afficheur est toujours en mode 8bits, il attend donc une instruction de 8bits. On lui envoie alors les 4bits de poids fort.
Et ensuite seulement, on envoie de nouveau la commande d'INIT du mode 4bits en deux fois 4bits MSB puis LSB, permettant ainsi à l'afficheur d'être initialisé correctement...
Si tu regardes les posts précédents, tu verras que l'init est enfin bonne...apres il faut lui envoyer
2h;mode 4bits
2h,8h;modde 4bits,2lignes matrice 5X7
0h,Ch;affichage en fonction,pas de curseur
0h,4h;curseur se déplace vers la droite
Pour Gaga,
Je regarde le programme et vais apporter une modif pour tester le LCD...
David.
Pour être certain du bon fonctionnement du LCD :
Tu reprends les modifs du post#54 et dans la routine "lcdreset" tu modifies la ligne :
Par :Code:movlw b'00001100' ;display on, cursor off,blink off
movlw B'000011111' ; display on, cursor on, blink on
Et tu regadres si le curseur clignotte bien à l'écran, si c'est le cas, c'est que dans le reste du programme il y a encore des non respects du datasheet à trouver...
David.
Bonjour,
J'essaye ça tout de suite
A +
Attention erreur de frappe lire :
movlw B'00001111' ; display on, cursor on, blink on
Oui, tu laisses LA boucle sans fin
David.
Est ce que je laisse les boucles ?
C'est fait et le curseur ne clignote pas, il y a des carrés noirs et quand je joue avec le contraste on dirait des caractères mais lesquels je sais pas. Toujours sur la moitié gauche.
Au fait la boucle c'était bien celle de lcdreset ?
Oui, mais est-ce que tu as modifié l'erreur que je mentionne dans le post#75
Pour la routine "boucle", tu copies exactement le code du post#54.
David.
J'ai modifié l'erreur et j'ai fait exactement comme dans le post 54.
Peux-tu faire l'essaie avec le LCD 1x16 pour voir si le curseur clignotte?
David.
Avec le 1x16 ça clignotte.
Bon...
Alors, on va essayer d'envoyer un unique caractère au lcd.
Tu reprends le post#54 ou tu retires la boucle sans fin, et tu la remplaces par un RETURN.
Ensuite, dans "mainprog" tu remplaces par les lignes suivantes :
David.Code:mainprog Call lCdreset ;reset lCd, set for 4 bit ops, Clear, no Cursor ;output opening two-line message and wait 2 seConds to allow CirCuitry to stabiliZe. movlw A'S' call lCdout Boucle goto Boucle
Alors,
Le 2x16, ne clignote pas, j'ai des carrés noirs, et en jouant avec le contraste, il me reste 2 carré noirs.
Avec le 1x16, j'ai un S et le curseur attend.
Et si tu remets la ligne suivante dans "lcdreset" sans modifier le reste :
movlw b'00001100' ;display on, cursor off,blink off
Si toujours pas de "S" à l'écran, va falloir changer de LCD. Ce qui est étrange c'est que l'init est bonne vu que l'écran semble éteint ce qui est la preuve d'un init correct...
Au fait, comment sont connectées les broches DB0-3 en hard sur le lcd ?
David.
David.
Pas de S. Touours des carrés.
Les broches DB0-3 sont sur un connecteur.
Oui...Les broches DB0-3 sont sur un connecteur.
Mais les broches sont "en l'air" à "vdd" à "gnd" ou "connectées au PIC" ?
Car sur le schéma, il semble qu'il y ait interconnection entre cetaines broches...
David.
Normalement, elles sont ne sont pas utilisées.
DB0 et 1 ne sont connectées à rien. Par contre DB2 et 3 sont connectées avec DB5 jusqu'à le RB5 du PIC.
J'ai déjà essayé de ne pas les connecter ensemble, et même de mettre DB0 à 3 à la masse. Cest idem.
Actuellement elles sont déconnectées complétement du montage.
A la vue du schéma, je me demande si le fait que la connection de RB5 passant par DB2 et DB3 pour arriver à DB5 ne pose pas un problème en rendant fou le LCD.
Pour moi, il faut une connection directe entre RB5 et DB5 sans passer par les deux autres broches du LCD. Mais je ne sais pas si c'est réellement le problème, c'est peut-être le LCD qui est HS...
A vérifier...
David.
Comme je te l'ai dit j'ai déconnecter ces broches du circuit et DB5 va directement au RB5 du PIC.
Bien, je n'ai pas d'autre idée pour ton problème, surtout que l'init se déroule correctement...
David.