Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Afficheur LCD 2x16 caractères



  1. #1
    LouR56

    Afficheur LCD 2x16 caractères


    ------

    Salut à tous,
    Depuis peu j'ai décidé de me lancer dans les application à base d'afficheur LCD (2*16 caractères pour commencer) couplés avec un PIC (16F877).
    J'ai donc écrit un programme simple qui m'affiche "coucou" sur la première ligne et "Louis !!!" sur la 2ème ligne mais voilà sur la platine, ça ne marche exactement comme je le voudrait: Il me faut réinitialiser plusieurs fois le PIC avant d'arriver à lire qqc sur l'afficheur car l'afficheur ne démarre pas du premier coup à chaque fois.
    Je suis donc obligé de passer plusieurs fois (4 fois dans mon programme) dans la routine d'initialisation (et 2 fois dans les routines de commande) du LCD avant que ce dernier soit prêt et même avec ça il ne m'affiche pas forcément le message du premier coup. Parfois, je ne vois apparaître que le "coucou", d'autres fois l'afficheur s'efface et reste dans cet état ou encore rien ne s'affiche.
    J'ai augmenté les tempos au démarrage (2 à 5s), entre 2 appels de routines et lors de la validation sur la broche "enable". Rien n'y fait...

    Est-ce qu'une âme charitable pourrais m'aider ? ou me dire d'ou vient le problème ?
    Merci
    Louis

    -----

  2. Publicité
  3. #2
    Jack
    Modérateur

    Re : Afficheur LCD 2x16 caractères

    salut,

    quels sont les octets que tu envoies dans le LCD pour l'initialiser?

    A+

  4. #3
    LouR56

    Re : Afficheur LCD 2x16 caractères

    Pour l'initialisation, je me sert d'une routine que j'ai trouvé sur le site de Bigonoff. Il s'agit du programme permettant de connecter un afficheur LCD en attribuant nous même les pin une à une (l'afficheur peut par exemple avoir une pin de connectée sur le PORTA, 3 sur le PORTB et les autres sur le PORTD, le programme se charge de la gestion de toutes ces pin).
    Le LCD fonctionne en 4 bit.

    Je peux affirmer que le problème vient de l'initialisation puisque j'ai modifié mon programme et que j'arrive à faire défiler plusieurs messages sur chaque ligne sans aucun problème. Il me suffit même de ne passer qu'une seule fois dans les routines de positionnement, et d'effacage, je viens de faire le test. (au moment ou j'écris ces ligne le LCD est sous mes yeux en train de faire défiler les messages en boucle => aucun problème)

    Bref ça marche très bien uniquement quand le LCD est bien initialisé.

    Je pensais peut être à un problème: les pins du LCD ne servant pas (D0 à D3 et RW) doivent-elles être reliées à la masse par des résistances de rappel ?
    Mais si le problème vient de là (dû aux parasites ou aux impulsions électromagnétiques) alors dans ce cas là l'affichage des messages aussi devrait être faussé non ?

    Je vais décortiquer la routine pour te donner les octets envoyés

    @+
    Louis

  5. #4
    Jack
    Modérateur

    Re : Afficheur LCD 2x16 caractères

    je pense qu'on ne mettra pas en cause la routine si tu l'as reprise scrupuleusement, sinon il y aurait déjà eu des retours signalant un problème.

    D'après ce que tu dis, j'en déduis que tu es en mode 4 bits. En principe le contrôleur de ton LCD est un HD44780 ou compatible (c'est un des 2 boitiers noirs sur le circuit imprimé). Dans ce cas les pattes D3 à D0 et R/W possèdent des pull up intégrées.

    Mais, ça ne te coutera pas grand chose d'en souder, juste pour être fixé.

    Commence par çà et vérifie le résultat.

    A+

  6. A voir en vidéo sur Futura
  7. #5
    LouR56

    Re : Afficheur LCD 2x16 caractères

    Le LCD étant un classique acheté chez Selectronic, le contrôleur est donc sûrement un HD44780 (il n'y a pas les références sur les puces).
    Je te tiens au courant.
    Louis

  8. #6
    Bigonoff

    Re : Afficheur LCD 2x16 caractères

    Salut
    -----

    Le source n'est pas de moi, je n'ai pas vérifié, mais je n'ai eu aucun retour.
    Par contre, voici une routine d'initialisation de moi, et qui fonctionne :

    Les macros sont assez explicites, mais si tu veux les déclarations, le logiciel complet est sur mon site dans la page domotique, il s'agit de la carte horloge mère.

    En général un problème d'initialisation aléatoire provient d'un défaut dans les délais nécessaire entre les différentes étapes

    A+
    Bigonoff


    ; initialiser afficheur
    ; ---------------------
    movlw B'10100001' ; timer 1 ON, prédiviseur = 4, soit 26ms
    movwf T1CON ; dans registre de contrôle
    clrf TMR1H ; effacer buffer MSB TMR1
    clrf TMR1L ; effacer TMR1
    bcf PIR1,TMR1IF ; effacer flag timer 1
    clrwdt ; reset watchdog
    btfss PIR1,TMR1IF ; tester si 26ms écoulées
    bra $-4 ; non, attendre (20ms nécessaires)

    movlw CMD_8B ; mode 8 bits (procédure reset soft)
    call lcd1q ; envoyer un seul quartet

    bcf T1CON,T1CKPS1 ; prédiviseur = 1, soit 6,5ms
    clrf TMR1H ; effacer buffer MSB TMR1
    clrf TMR1L ; effacer TMR1
    bcf PIR1,TMR1IF ; effacer flag timer 1
    clrwdt ; reset watchdog
    btfss PIR1,TMR1IF ; tester si 6,5ms écoulées
    bra $-4 ; non, attendre (4,1ms nécessaires)

    movlw CMD_8B ; mode 8 bits (suite procédure reset soft)
    call lcd1q ; envoyer un seul quartet

    call tempo40 ; attendre 40µs
    call tempo40 ; attendre
    call tempo40 ; attendre (minimum 100µs)

    movlw CMD_8B ; mode 8 bits (suite procédure reset soft)
    call lcd1q ; envoyer un seul quartet

    clrf TMR1H ; effacer buffer MSB TMR1
    clrf TMR1L ; effacer TMR1
    bcf PIR1,TMR1IF ; effacer flag timer 1
    clrwdt ; reset watchdog
    btfss PIR1,TMR1IF ; tester si 6,5ms écoulées
    bra $-4 ; non, attendre (4,1ms nécessaires)

    movlw CMD_4B ; commande set 4 bits
    call lcd1q ; envoyer un seul quartet

    CMD CMD_4B ; paramètres de fonctionnement
    CMD CMD_OFF ; afficheur éteint
    CMD CMD_ON ; afficheur en service, fin de l'initialisation
    CMD CMD_SET ; mode de fonctionnement curseur/afficheur
    CMD CMD_CLR ; effacement complet
    movlw HIGH(.15200) ; pour délai de 1,52ms
    movwf TMR1H ; dans buffer TMR1H
    movlw LOW(.15200) ; poids faible
    movwf TMR1L ; dans TMR1
    bcf PIR1,TMR1IF ; effacer flag timer 1
    clrwdt ; reset watchdog
    btfss PIR1,TMR1IF ; tester si 1,52 ms écoulées
    bra $-4 ; non, attendre

    WRITE "C" ; message d'accueil
    WRITE "L"
    WRITE "O"
    WRITE "C"
    WRITE "K"
    WRITE " "
    WRITE "D"
    WRITE "C"
    SETADD LCDCAR9 ; adresse mémoire seconde partie de la ligne du LCD
    WRITE "F"
    WRITE " "
    WRITE "V"
    WRITE VER1 + 0x30 ; version logiciel
    WRITE "."
    WRITE VER2 + 0x30
    WRITE "."
    WRITE VER3 + 0x30
    Vive l'Internet libre

  9. Publicité
  10. #7
    LouR56

    Re : Afficheur LCD 2x16 caractères

    Salut,
    ça y est j'ai trouvé le problème, il venait bien de la routine d'initialisation.
    J'ai doubblé la tempo du "busy flag" ainsi que certaines tempo dans la routine d'initialisation et ça marche impeccable, le LCD démarre du premier coup; tu avais raison Bigonoff, merci beaucoup.
    Sinon la routine qui a été placée sur ton site est fonctionnelle mise à part cette petite modification (uniquement en cas de non utilisation de la pin R/W).
    @+
    Louis

  11. #8
    Bigonoff

    Re : Afficheur LCD 2x16 caractères

    Salut
    ------

    Merci pour le retour d'infos.
    Tu peux envoyer un mail à l'auteur pour lui signaler cette modif, il sera probablement content.

    A+
    Bigonoff
    Vive l'Internet libre

  12. #9
    badr-MOB

    Re : Afficheur LCD 2x16 caractères

    Bonjour a vous tous !
    Je viens de me lancer aussi a la gestion de ce type d'afficheur qu'est le LCD 2x16 , j'ai juste un manque d'info sur comment faire pour ce deplacer d'une ligne a une autre
    par exemple (on ecrit sur ligne 1 puis on saute vers ligne 2) . Je serai tellement content si quelqu'un pourra m'expliquer .
    Merci cordinalement .

  13. #10
    hoffmann

    Re : Afficheur LCD 2x16 caractères

    Ils vont pas être content que tu déterres ce topic

    http://www.aurel32.net/elec/lcd.php

    Il faut agir sur les bits de la commandes "Set DD RAM address" (tableau dans le lien)

    Amuses toi bien !
    Hoffmann

Discussions similaires

  1. Afficheur LCD 2X16 caractères en mode 4 bits
    Par socomajor dans le forum Électronique
    Réponses: 8
    Dernier message: 11/02/2013, 11h28
  2. Branchement d'un potentiometre pour afficheur LCD 2x16
    Par altea dans le forum Électronique
    Réponses: 4
    Dernier message: 23/02/2007, 17h52
  3. Branchement d'un potentiometre pour afficheur LCD 2x16
    Par altea dans le forum TPE / TIPE et autres travaux
    Réponses: 1
    Dernier message: 23/02/2007, 15h08
  4. Afficheur LCD 2x16
    Par Roukben dans le forum Électronique
    Réponses: 4
    Dernier message: 01/02/2006, 15h11
  5. LCD 2x16 caractères
    Par Patrick dans le forum Électronique
    Réponses: 1
    Dernier message: 22/05/2004, 15h33
Découvrez nos comparatifs produits sur l'informatique et les technologies.