Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 39

Caractères spéciaux LCD



  1. #1
    Toufinet

    Caractères spéciaux LCD


    ------

    Bonjour,

    Je souhaite créer des caractères spéciaux dans la CGRAM du LCD.
    J'ai trouvé ces 2 sites :
    http://www.geocities.com/dinceraydin/lcd/charcalc.htm
    et
    http://arn.gui.free.fr/LCD.htm
    qui donnent de précieux outils / informations sur le fonctionnement de la CGRAM.

    Cependant, je n'arrive pas à trouver quelle est la suite d'instructions à envoyer au LCD pour pouvoir créer un caractère dans la CGRAM.

    Quelqu'un peut-il me filer un coup de main svp ?

    Merci

    -----

  2. Publicité
  3. #2
    Gérard

    Re : Caractères spéciaux LCD

    Dans le 2ème lien, il est dit en Basic : BUSOUT ...
    je ne sais pas à quoi correspond cette instruction.
    Avec mon compilateur (Proton+), BUSOUT concerne le bus I2C.
    Gérard.

  4. #3
    Toufinet

    Re : Caractères spéciaux LCD

    ouip, j'ai bien vu ça, mais va savoir la correspondance en assembleur ...

  5. #4
    Gérard

    Re : Caractères spéciaux LCD

    Aucune idée.

  6. #5
    umfred

    Re : Caractères spéciaux LCD

    Tout dépend de ton controleur de LCD. a chaque controleur sa méthode qui doit etre décrite sa doc

  7. A voir en vidéo sur Futura
  8. #6
    Toufinet

    Re : Caractères spéciaux LCD

    Je me permet de relancer le sujet car là je bloque ..
    umfred : c'est un LCD classique, qui répond à toutes les doc que l'on trouve partout, et qui sont toutes les mêmes.

  9. Publicité
  10. #7
    umfred

    Re : Caractères spéciaux LCD

    si le problème c'est la description de la commande BUSOUT, c'est tout simple: il s'agit juste de l'envoi de caractère sur le bus de données de l'afficheur de manière séquentielle:

    exemple: BUSOUT &HA5,8,8,4,14,17,31,16,14,0

    il faut envoyer sur le bus de données LCD l'octet de valeur $A5 (registre des octets CGRAM personnalisable) puis un coup d'horloge (ou équivalent) puis l'octet de valeur 8 (coorespondant au 8ème octet, puis encore un coup d'horloge, et on continu en envoyant les valeurs des lignes pour créer le caractère désiré (tout ceci en mettant les lignes R/W, RS et E dans le bon état).

    Enusite pour afficher le caractère enregistrer, il suffit de faire la procédure correspondant à l'affichage d'un caractère classique mais en indiquant l'adresse $00 à $08 correspondant à la position du caractère crée voulu (le $08 pour la caractère entré au dessus).

    Toute cette procédure est normalement décrite dans la doc que tu dois avoir.

    la question est plutot comment as tu cablé cet écran, et avec quel microcontroleur tu veux le commander ( et aussi quel langage)?

  11. #8
    Toufinet

    Re : Caractères spéciaux LCD

    Oui umfred, mais là n'est pas le problème en fait.

    En regardant de plus prêt, j'ai trouvé le problème suivant :

    En 1ière commande, on doit donner l'adresse de la CGRAM sur laquelle on va écrire le caractère (Set CGRAM Adress )
    Cette commande est faite en mettant DB7 à 0, DB6 à 1, et DB5 à DB0 représentent l'adresse.

    RS et RW doivent être à 0.
    Résultat, lorsque j'envoie cette commande, le LCD croit (à juste titre), que je lui envoie un caractère à afficher !

    Donc comment faire pour demander au LCD d'exécuter la commande Set CGRAM Adress ???

    Merci
    Dernière modification par Toufinet ; 06/06/2006 à 20h00.

  12. #9
    umfred

    Re : Caractères spéciaux LCD

    si tu regarde dans le second lien que tu nous a donné, sur le schéma, il y a une ligne commande/donnée donc il faut la passé à 1 (ou 0) pour lui dire qu'il s'agit d'une commande et non d'une donnée.

  13. #10
    Toufinet

    Re : Caractères spéciaux LCD

    oui, il s'agit de RS ...
    Et la datasheet stiplule que RS doit être à 0 lorsque l'on envoie la commande Set CGRAM Adress, tout comme lorsqu'on envoie un caractère à afficher ...

  14. #11
    umfred

    Re : Caractères spéciaux LCD

    En fait apres cette commande il faut envoyer la commande "write data to CG (ou DD)RAM" RS=1, R/W=0,et DB[8..0] la valeur vouluepour les différentes lignes de ton caractères. voir la page 19 de cette doc pour la correspondance des adresses entre la CGRAM et la DD RAM).

    il faut donc suite au "set CGRAM address", envoyer 8 "write to CGRAM" correspondant au 8 lignes du caractère que tu veux définir.

  15. #12
    Toufinet

    Re : Caractères spéciaux LCD

    oui, mais le problème est qu'il considère le "Set CGRAM Adress", pour un "afficher le caractère X", pour les raisons que j'ai expliquer ci-dessus

  16. Publicité
  17. #13
    umfred

    Re : Caractères spéciaux LCD

    "afficher un X" corrrespondrait à l'octet b'0100 1000' avec rs=1 et r/w=0 alors que "set CGRAM adress" correspondrait à l'octet b'0100 1000' pour le caractère personalisable n°1 (sachant que pour le n°0 ca serait b'0100 0000') avec rs=0 et r/w=0.

    la seule différence est donc le signal rs. vérifie que tu lui met bien 0 (regarde dans le logiciel et ensuite l'état du signal réel).
    Si l'état est le bon, il y a peut être un problème de synchronisation. du style, mettre le signal rs à 1 (et r/w à 0), attendre qq instants (1 ou 2 temps avec des non-opération par exemple) et ensuite seulement mettre la valeur sur le bus, réattendre et ensuite faire un top sur la validation E.
    Il y a peu etre juste un temps légèrement trop court entre 2 étapes.

  18. #14
    Toufinet

    Re : Caractères spéciaux LCD

    mmmmhhhh...

    Je viens de m'apercevoir qu'en effet, lorsqu'on envoie un caractère à afficher, on doit mettre RS à 1.
    Hors, depuis le début, je met RS à 0, comme vu sur un site dont j'ai perdu l'adresse, et les caractères s'affichent bien !

    Je suis un peu perdu là lol

  19. #15
    mictour

    Re : Caractères spéciaux LCD

    Bonjour Toufinet,

    RS = 0 pour passé en mode commande et, donc, basculer en mode CGRAM
    puis RS = 1 pour envoyé les données à la dites CGRAM.

    Un petit exemple en cc5x : ( assembleur en C !! )



    Routines pour LCD (CGRAM)

    void cmd(char cm) // envoi d'une commande
    {
    RS = 0; // ...0 pour commande
    PORTD = cm;
    EN = 1;
    nop();
    nop();
    EN = 0; // Validation écriture commande...
    temp1(50); // à voir... selon Xtal
    }

    void carac(char tx) // envoi d'une donnée
    {
    RS = 1; // ...1 pour donnée
    PORTD = tx;
    EN = 1;
    nop();
    nop();
    EN = 0; // Validation Ecriture donnée
    temp1(50); // 50 µs
    }


    // CHARGEMENT DES CARACTERES SPECIAUX ( CGRAM 0 à 3 ) (...petit essai perso...)

    // Tourne sur simulateur, pas encore essayé sur carte...

    cmd(0x47); // dernière ligne du 1er bloc, soit 0X040 (CGRAM) + 7
    carac(0x1F); // avance auto...
    carac(0x1F); // ... vers première ligne du 2ième bloc
    cmd(0x50); // Positionne au début du 3ieme bloc
    carac(0x10);
    carac(0x10);
    carac(0x10);
    carac(0x10);
    carac(0x10);
    carac(0x10);
    carac(0x10);
    carac(0x1F);
    carac(0x1F); // première ligne 4ième bloc
    carac(0x10);
    carac(0x10);
    carac(0x10);
    carac(0x10);
    carac(0x10);
    carac(0x10);
    carac(0x10);
    carac(0x03);
    cmd(0x80); // Retour à la DDRAM
    }

    Pour visualiser des signaux rectangulaires...

    mictour.

  20. #16
    error2

    Re : Caractères spéciaux LCD

    Bonjour, je suis en stage de programmation et moi aussi j'essaye d'afficher un caractère personnalisé en assembleur.j'ai reussi à afficher un seul digit mais là j'essaye d'en afficher sur 6 digit.J'essaye d'utiliser un tableau (TABLAT) mais bon... c'est pas trop ça.Par contre je peux te filer mon .asm pour que t'arrive à afficher sur un seul digit.

    envoi moi juste ton adresse e-mail et je te l'envoi (5 ou 6 pages)

    a bientot

  21. #17
    umfred

    Re : Caractères spéciaux LCD

    Toufinet, est-ce que tu a résolu ton problème?
    si tu dois effectivement mettre rs =0 pour afficher tes caractères ( fais un test avec rs=1 pour vérifier que rien ne s'écrit), alors ton signal rs doit fontionner à l'envers (à cause d'un transistor inverseur, ou autre) et donc doit etre à 1 pour être en commande.

    Citation Envoyé par error2
    moi aussi j'essaye d'afficher un caractère personnalisé en assembleur.j'ai reussi à afficher un seul digit mais là j'essaye d'en afficher sur 6 digit.
    error2, en général (si tu parle bien d'affichage sur un écran LCD à caractère et non en mode graphique) ca se fait tout seul, il incrémente automatiquement son compteur de caractère. si ce n'est pas le cas, il est possible que ca soit configurable dans le registre de configuration. Au pire, il te suffit d'incrémenter toi meme l'adresse du caractère.

  22. #18
    error2

    Re : Caractères spéciaux LCD

    http://www.electroniquepratique.com/...dMg=32&id=401#
    Ca c'est le magazine qui m'a permit de personnaliser mes caractères.Achete le ça vaut le coup.
    Par contre pour la suite d'instructions je vais te faire un petit résumé.Suivre avec ceci d'ouvert : http://www.sparkfun.com/datasheets/LCD/HD44780.pdf

    Tu sélectionne la CGRAM (partie gauche de la table des caractères : CGRAM (1) ( Page 17 )
    (2)
    (3)
    Toutes les parenthéses sont les adresses pour créer tes caractères.Ce sont des emplacements vides.Donc ça va de 0x00 à 0x0F.

    pour en sélectionner un, tu dois mettre RS=1 et R/W=0 (écrire une donnée) et envoyer l'adresse choisie (ex:0x01 correspondant à (2))
    Ensuite, il faut envoyer l'instruction comme quoi on le sauvegarde en CGRAM.C'est simple RS=0 et R/W=0 (ecrrire une instruction) et tu envois 0x40 (page 24)
    ça y est on a notre digit.
    Aprés il y a plusieur façon de procéder :
    - façon "bourrin" :
    tu écris ligne par ligne. (8 ligne par Digit)
    - façon "TABLAT" :
    Plus dure mais moin lourde. (juste une seule ligne)
    Je t'avoue que j'ai d'abord commencer par la méthode bourrin avant de faire le TABLAT.Mais là les deux fonctionnent impek!
    je peux toujours t'envoyer mon .asm si tu veux avec les deux façons de procéder ( Mais en Assembleur).
    Bon si tu n'a pas tout compris j'attends tes questions.

  23. Publicité
  24. #19
    jipe_rey

    Re : Caractères spéciaux LCD

    Bonjour,
    Je suis sur un projet de LCD moi aussi, j ai aussi l intention d ajouter mes propres caractères , et tout comme certains d'entre vous j ai un peu de peine...
    Pr l info je programme en C sur un atmega8.

    error2, tu a dis ceci:

    "pour en sélectionner un, tu dois mettre RS=1 et R/W=0 (écrire une donnée) et envoyer l'adresse choisie (ex:0x01 correspondant à (2))
    Ensuite, il faut envoyer l'instruction comme quoi on le sauvegarde en CGRAM.C'est simple RS=0 et R/W=0 (ecrrire une instruction) et tu envois 0x40 (page 24)
    ça y est on a notre digit."

    Ca voudrai dire que tu choisi l adresse de ton caractère en mode donnée??? t en est sur?

    et je comprend pas pourquoi envoyer 0x40, c est une validation?

    Merci bien pour les infos que tu apportes a cet discuss , fodrai faire un tuto officiel, paske sur le net il n'y a pas trop de sites qui expliquent formellement le processus de mise en mémoire d'un nouveau caractère....


    Merci pour ta/vos réponses.

    JIP£

  25. #20
    umfred

    Re : Caractères spéciaux LCD

    Pour créer un caractère spécial (perso), après la phase d'initialisation du driver, il faut:

    1- envoyer la commande 'set CGRAM address' avec l'adresse du caractère que l'on veut "personaliser" donc:
    - RS=0,
    - R/W=0
    - DB7..DB0= b'01xx xyyy', les x correpondant à l'adresse du caractère à personnaliser et les y à la ligne de ce caractère. Par exemple, 00 1010= ligne 2 du caractère personnalisable d'adresse 0. (Normalement on commence par la première ligne).

    2- envoyer la commande 'Write data to CGRAM/DDRAM" donc:
    - RS=1,
    - R/W=0
    - DB7..DB0= b'***x xxxx', les * signifie n'importe quel valeur (donc 0 pour faciliter la chose) et les x pour la valeur des pixels de la ligne choisie précédemment. Par exemple, DB7..DB0=b'0001 0101' signifie qu'il y a 1 pixel sur deux de noirci sur la ligne sélectionnée.

    NB: il faut avoir préalablement dessiner son caractère dans une grille de 5 colonnes x 8 lignes pour faciliter le codage. (regarder la page 19 du PDF du lien de error2).

    3- recommencer le 2 pour chaque ligne du caracère à personnalisé.

    Pour afficher ce caractère, il suffit ensuite:

    4- d'envoyer la commande 'set DDRAM Addres' (ou clear Display) pour signaler que l'on va afficher un caractère. donc, pour un 'set DDRAM Address', on a:
    - RS=0,
    - R/W=0,
    -DB7..DB0= b'1xxx xxxx', les x correspondent à l'adresse du curseur (de 0x00 à 0x47 si afficheur 1 ligne, de 0x00 à 0x27 pour la 1ere ligne et de 0x40 à 0x67 pour la seconde ligne si afficheur 2 lignes)

    5- envoyer la commande 'Write Data to CGRAM/DDRAM' en envoyant l'adresse du caractère (comme pour n'importe quel autre caractères déja existant en fait). Donc:
    - RS=1,
    -R/W=0
    -DB7..DB0=b'xxxx xxxx', les x correspondant à "l'adresse" du caractère à afficher (qui correspond en fait au code ASCII du caractère). pour les caractères perso, il suffit de rentrer l'adresse 0x00 pour le caractère n°0, 0x01 pour le caractère n°1, etc, etc

    Remarque: il est conseillé de lire le bit BF pour savoir si l'on passer à l'instruction suivante (principalement après un 'write to CGRAM/DDRAM') en envoyant la commande 'Read Busy Flag & Address' c'est à dire :
    - RS=0,
    - R/W=1,
    - DB7..DB0 en entrée avec DB7= bit BF qui doit être à 0 pour qu'e l'on puisse continuer (il est à 1 si une opération est en cours) et DB6..DB0 est l'adresse courante de la CGRAM ou DDRAM selon l'instruction précédente.

    Voila, j'espère que ça vous aidera à comprendre le fonctionnement.

    PS: si vous avez remarquer une erreur dans ce que j'ai dit , signaler la

  26. #21
    error2

    Re : Caractères spéciaux LCD

    oui jipe_rey tu dois écrire ton adresse vierger (ça affichera n'importe quoi) et ensuite tu le "sauvegarde" en mettant 0x40 -> 0100 0000.
    Ou alors tu fais comme umfred (voir 1) c'est plus court.
    Moi je te le dis je suis partis de rien donc mon programme n'est pas encore au TOP c'est des petites imperfections dans ce genre qu'il me manque.
    Sinon je t'envoi un petit shéma qui t'expliquera vite fait comment faire pour écrire ton Digit ligne par ligne. ( voir 2 sur le message de umfred)
    Images attachées Images attachées

  27. #22
    jipe_rey

    Re : Caractères spéciaux LCD

    merci bien pour vos infos. error2, je suis nouveau sur ce forum et je n'ai vraiment aucune idée quant a la manière de prendre la piece que tu a jointe...

    sinon Umfred je suis en train de coder ta marche a suivre, je te tient au courant des que ca tourne

  28. #23
    error2

    Re : Caractères spéciaux LCD

    Tu n'arrive pas à clicker dessus ?
    Moi ça me fait pareil avec les autres
    Alex.

  29. #24
    jipe_rey

    Re : Caractères spéciaux LCD

    non je n arrive pas a cliquer dessus.

    Voila, merci pour votre aide, et la demarche de Umfred, grace a ceci j arrive convenablement a afficher un caractère
    Maintenant, mon but est de recréer un espece de bargraph ascendant, avec le premier caractère qui affiche en noir seulement la derniere ligne, le second avec les deux dernieres, etc. Comment coder ceci en C pour faire le passage de variables a un tableau facile a afficher, de maniere systématique?!?

  30. Publicité
  31. #25
    jipe_rey

    Re : Caractères spéciaux LCD

    enfin je m explique par un ptit schéma ce sera plus clair.. en gros j aimerai passer de maniere simple ces différents caractères dans la CGRAM sans devoir ecrire 10000 lignes en C paske mon microcontroleur a une memoire de 8K et j suis deja presque a la limite...

    merci pour vos conseils!!
    Images attachées Images attachées

  32. #26
    error2

    Re : Caractères spéciaux LCD

    On peut pas accéder à la photo.
    Alex.

  33. #27
    jipe_rey

    Re : Caractères spéciaux LCD

    ?!? moi j y arrive..

    ben imagine ke je veuille afficher un truc du genre : l etat de signal de reception d un telephone portable, ou le niveau de batterie c est a peu pres cela que j avai modelisé sur la photo....

  34. #28
    error2

    Re : Caractères spéciaux LCD

    je vois toujours pas ce que tu veux afficher
    Alex.

  35. #29
    jipe_rey

    Re : Caractères spéciaux LCD

    ARGH!!!

    bon, en gros ceci:

    |
    ||
    |||
    ||||
    |||||
    ||||||

    mais a l horizontale, donc 6 caractères différents ki correspondent a une valeur.. en gros ce serai ppour que l oeil ait une vision analogique d un parametre ( température, etat de batterie, ou dans mon cas: Regime du moteur de ma voiture) et mon but etai de passer en memoire ces caractères sans avoir a coder un programme immense etant donné le peu de place de mémoire qu il me reste.

    Je m adresse donc a toi/vous, qui apparament etes experts en LCD

  36. #30
    error2

    Re : Caractères spéciaux LCD

    Je m adresse donc a toi/vous, qui apparament etes experts en LCD

    pour ma part, je suis qu' en première année de BTS électronique et c'est la première année que je fais de la programmation

    Bon sinon ça a l'air facile d'afficher ça mais bon voila mon aide se termine ici car je connais pas encore le C.
    Au fait t'as quoi en entrée alors ? Si tu viens de ton moteur.C'est quoi le signal entrant ?
    Alex.

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. caracteres speciaux
    Par gourinda dans le forum Mathématiques du supérieur
    Réponses: 11
    Dernier message: 28/06/2007, 09h41
  2. affichage de caractères spéciaux
    Par dwarvespower dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 27/05/2007, 17h41
  3. Caractères Spéciaux
    Par Half-Death dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 03/04/2006, 03h49
  4. Caractères spéciaux de Word
    Par Fistos dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 14/09/2005, 17h21
Découvrez nos comparatifs produits sur l'informatique et les technologies.