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

Problême Affichage sur LCD




  1. #1
    Paulochon

    Problême Affichage sur LCD

    Bonjour à tous,

    Voila depuis quelque temps que je programme mn petit projet je mettais chargé de tout dabord faire ma routine de gestion de LCD,
    Proteus m'avait permis de simuler ce LCD

    Hors aujourd'hui je vien de programmé mon Atmega165 et la surprise mon LCD n'affiche rien
    Cette routine fonctionne en mode 8bit et avait été réalisé ultérieuremnt grace a m'enfin qui m'avait aider

    Mais je vous reposte cette routine pour l'enlevé d'un doute,
    Peut-il y avoir une erreur dans ce programme ????

    J'espère que vous allez pouvoir m'aider,
    Cordialement Paulochon

    #define PORT_AFFICHEUR PORTC
    #define DIRECTION_PORT_AFFICHEUR DDRC
    #define PORT_COMMANDE PORTA
    #define DIRECTION_PORT_COMMANDE DDRA


    #define val_bit(bit) (1<<bit)
    #define set_bit(port,bit) port|=(1<<bit)
    #define clear_bit(port,bit) port&=(~(val_bit(bit)))

    #define BIT_ENABLE 1
    #define BIT_RS 0

    // Routine de gestion de l'afficheur LCD
    unsigned char lcd_x=0, lcd_y=0;

    void lcd_delay (unsigned int t)
    {
    while ( t -- )
    _delay_loop_2(8000 /4.0); // valeur pour un quartz de 8MHz
    }
    void lcd_ready (void)
    {
    clear_bit (PORT_COMMANDE, BIT_RS);

    lcd_delay(1);
    }

    void lcd_write_nibble (unsigned char data)
    {
    PORT_AFFICHEUR=data;

    set_bit (PORT_COMMANDE, BIT_ENABLE);
    lcd_delay(1);
    clear_bit ( PORT_COMMANDE, BIT_ENABLE);
    lcd_delay(1);
    }

    void lcd_write_data (unsigned char data)
    {
    unsigned char d;

    lcd_write_nibble(data);
    }

    void lcd_gotoXY (unsigned char x, unsigned char y)
    {
    unsigned char base_y[2] = { 0x80, 0xc0 };

    lcd_ready ();
    lcd_write_data (x + base_y[y]);
    lcd_x = x;
    lcd_y = y;
    }

    void lcd_clear (void)
    {

    lcd_ready ();
    lcd_write_data (0x0C);
    lcd_ready ();
    lcd_write_data (1);
    lcd_ready ();
    lcd_x =0;
    lcd_y = 0;

    }

    void lcd_putchar (unsigned char c)
    {
    if (c == 10)
    goto newline;
    ++lcd_x;

    if (lcd_x > 16)

    {
    newline:
    ++lcd_y;
    lcd_gotoXY (0, lcd_y);
    if (c == 10)
    return;
    }

    lcd_ready ();
    set_bit (PORT_COMMANDE, BIT_RS);
    lcd_write_data(c);
    }

    void lcd_puts (unsigned char * str)
    {
    while(* str)
    {
    lcd_putchar (* str);
    str++;
    }
    }

    void lcd_init (void)
    {
    lcd_ready();
    lcd_write_data (0x38);
    lcd_ready();
    lcd_write_data (0x38);
    lcd_write_data (6);
    lcd_clear();
    lcd_ready();
    }
    void aff_ligne0 (char * m)
    {
    lcd_gotoXY (0, 0);
    lcd_puts (m);
    }

    void aff_ligne1 (char * m)
    {
    lcd_gotoXY (0, 1);
    lcd_puts (m);
    }
    Aidez moi SVP je suis dans l'impasse et j'aimerai savoir si vous ne voyer quelque erreur notable que je n'ai pas vue
    Merci

    -----

    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

  2. Publicité
  3. #2
    Paulochon

    Re : Problême Affichage sur LCD

    OUpsssss j'ai oublier c'est un afficheur 2ligne 16 caractère

    Merci d'avace
    Paulochon
    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

  4. #3
    SiNeRgY

    Re : Problême Affichage sur LCD

    Bonjour
    Si Proteus t'a simulé l'LCD donc je ne crois par qu'il y est un probleme dans ton code, parcontre j'ai eu deja eu ce probleme et la solution etait toute bete, c'est que je n'avais pas réglé le contraste (la pate 2 ou 3, je ne m'en souvient pas, faut voir la datasheet). Comme PROTEUS ne prend pas ca en charge, je suis resté pas mal de jour bloquer.

    Lors de l'alimentation ece que la premiere ligne est foncé ?
    Bon courage


  5. #4
    m'enfin

    Re : Problême Affichage sur LCD

    Salut,
    comme dit Sinergy, si ce code a fonctionné en simulation, vois le contraste, sinon vérifie le circuit (soudures, alimentation ..)
    A+

  6. #5
    Paulochon

    Re : Problême Affichage sur LCD

    J'ai tou vérifié

    Continuité, Contraste réglé plusieurs fois
    Mais mon LCD n'affiche rien du tout,
    il reste comme sil était éteint

    1 GND
    2 VCC
    3 (contraste)
    4 RS
    5 RW ( mis a la masse)
    6 E

    7 D0
    .
    .
    .
    14 D7

    Voila comment j'ai branché mn Afficheur

    Je pensé a une solution
    Mettre de pull-down sur la pin E et RS
    Quand Pensez vous???

    Cordialement
    Paulochon
    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

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

    Re : Problême Affichage sur LCD

    Salut,
    Je pensé a une solution
    Mettre de pull-down sur la pin E et RS
    Quand Pensez vous???
    Si le niveau logique n'est pas assuré par le PIC, alors il faut effectivement mettre une pull-down, pour forcer la patte à l'état bas, et éviter de la sorte tous parasites superflus inéscomptés.

    Mais toutefois je doute que le problème provienne de la, car en principe lors du branchement (correct) une des deux lignes de l'afficheur est remplie de carrés noirs, ce qui ne semble pas le cas chez toi.

    Essaye de brancher et de régler le contraste sans microcontroleur, et quand tout sera OK, continue avec le BUS D0....D7

    Es-tu sûr que l'afficheur n'est pas déféctueux ?

    a+
    L'éxpérience de chacun est le trésor de tous

  9. #7
    HULK28

    Re : Problême Affichage sur LCD

    Salut,

    le problème est que ton programme en l'état ne fera rien sans un main() et une boucle while(1) dans laquelle un programme doit s'exécuter en utilisant judicieusement les fonctions que tu nous montres pour écrire un texte.

    Ici tu ne nous montres que les fonctions destinées à formater des commandes pour l'afficheur mais si tu ne donnes pas des instructions qui les mettent en actions il ne se passera........ rien du tout.
    @+
    Dernière modification par HULK28 ; 09/07/2007 à 00h06.
    Tout est bien qui finit.

  10. Publicité
  11. #8
    Paulochon

    Re : Problême Affichage sur LCD

    Bonjour Hulk28,

    Je sais je n'est posté que la routine de l'afficheur dans mon main, je fais les instruction suivante

    lcd_init();
    lcd_clear();

    aff_ligne0("mon texte ")

    Je vous juste faire vérifié si toute fois je n'avais pas de problême dansla routine elle même

    PS: je n'ai pas tout marqué mais je décalre mes port dans le début du programme principal

    Cordialement
    Paulochon
    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

  12. #9
    Paulochon

    Re : Problême Affichage sur LCD

    Je poste le bout de mon rpgramme principal de test

    void ioInit (void)
    {
    DDRD=0xFF;
    DDRB=0x00;
    DDRC=0x00;
    DDRE=0x00;
    DDRG=0x00;
    }

    int main (void)
    {
    DIRECTION_PORT_AFFICHEUR=0xFF;
    DIRECTION_PORT_COMMANDE=0xFF;
    ioInit();

    lcd_init ();
    lcd_clear();

    do
    {

    aff_ligne0(" bonjour ");

    aff_ligne0(" Aurevoir ");

    }while(1);


    }
    Cordialement
    Paulochon
    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

  13. #10
    m'enfin

    Re : Problême Affichage sur LCD

    Salut,
    Je n'ai pas pris le temps d'examiner dans le détail le listing mais j'ai une remarque: Il n'y a pas de temporisation entre les 2 lignes d'affichage du main(), je ne sais pas comment réagit l'afficheur (niveau persistance) lorsqu'on lui change en permanence va valeur.

    ce programme a l'air assez différent de celui que tu avais proposé dans une discussion précédente, as-tu essayé avec l'ancienne version?

    Lorsque je développe une application, je prévois toujours (si le nombre d'entrées/sorties me l'autorise) une ligne avec une led. Je commande en permanence le clignotement de cette led dans certaines portions de programme, ça permet de s'assurer du fonctionnement de certaines routines car il n'est pas toujours évident de savoir où le programme est planté (j'ai pris cette habitude à l'époque où je développais d'assez gros programmes en assembleur )
    A+

  14. #11
    Paulochon

    Re : Problême Affichage sur LCD

    Mon programme d'origine était prévue pour une commande 4bit puis enssuite je ll'ai modifié grâce a ton aide pour pouvoir faire une commande 8bit,

    Sur la simul de proteus sa tourne y a pas de soucieMais cependant mon afficheur reste éteint on diré

    Même quand je l'alimente sans rien il ne mais aucun caractère en noir,
    Je commence a me demandé si sa ne pourrai pas venir tout simplement de mon afficheur que serai mort???

    Comment savoir si un afficheur lcd est mort ?? Voila ma question parceque avant de cherché dans le programme en lui même j'aimerai m'asuré du bon fonctionnement du LCD

    Si quelqu'un a une astuce pour sa ?? je suis preneur
    Je crois que sa m'enleverrai deja un poid et sa m'éviterai de chercher la ou il n'y a pas d'erreur forcement

    Cordialement
    Paulochon
    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

  15. #12
    m'enfin

    Re : Problême Affichage sur LCD

    Salut,
    le seul moyen pour contrôleur un afficheur est de le faire fonctionner sur une carte dont on est sûr avec un programme dont on est sûr aussi, je ne leur connais pas de fonction d'auto-test.
    Mais es-tu sûr que ton µC tourne (horloge présente ...)? Essaie quelque chose de simple comme, j'y reviens, faire clignoter une led.
    A+

  16. #13
    invite76a

    Re : Problême Affichage sur LCD

    Bonjour, Paulochon

    Quand tu appliques le +5V à l'afficheur (même sans le raccorder à un uC), la ligne du dessus devient immédiatement toute noire. Si ce n'est pas le cas, c'est en général du à un problème de réglage du contraste qui doit être réglé près du 0V.
    Si tu ne vois pas cette ligne noire, c'est normal que tu ne voies rien.

    th.

  17. #14
    Paulochon

    Re : Problême Affichage sur LCD

    Merci thm je vais voir sa tout de suite,
    je tien le poste au courant

    Cordialement
    Paulochon
    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

  18. #15
    HULK28

    Re : Problême Affichage sur LCD

    Salut,

    thm à raison, d'autant que certains afficheurs nécessitent une tension négative sur le Vo de la broche de contraste et donc un potar entre +Vee et -Vee (+5V/-5V), au lieu du +5V/0V classique.

    Sinon si tu as un oscilloscope ça peux aider grandement aussi pour voir ce que tu as sur E/RS et R/W, et sur le bus de data.

    @+
    Tout est bien qui finit.

  19. #16
    invite76a

    Re : Problême Affichage sur LCD

    L'idéal étant également d'avoir une sonde JTAG pour l'atmel de Paulochon (il y en a à pas cher sur Ebay) : On peut "suivre" le programme et l'envoi des commandes pas par pas.

    thierry

  20. #17
    Paulochon

    Re : Problême Affichage sur LCD

    Bonjour a tous,

    Merci thm et Hulk21
    J'ai une grande nouvelle c'est bon je vien de réglé le contraste, enfin j'ai bien une ligne noir sur le première ligne, le réglage du contraste c'est effevtué en dessous de 1V.
    Je vais sortir mon oscilloscope je crois bien, car rien ne se passe quand le programme est lancé la ligne reste noire,

    Le problême c'est que le programme a était simuler pour un Atmega8535 et sa marche nikel alors que la j'utilise un Atmega165,


    ais dans pas longtemps je vais le testé aussi avec un atmega8,
    Maintenant je coirs que je peux me penché sur le programme
    Si quelqu'un voi une erreur toute fois sur le programme

    Je vous remercie de l'aide que vous m'avais deja apporté vos conceil on été très précieus

    Cordialement
    Paulochon
    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

  21. #18
    Paulochon

    Re : Problême Affichage sur LCD

    Bonjour a tous,

    Après quelque jour de recul et une méthode de dépannage hummm mafois mes effort on payé,
    Le LCD fonctionne et l'erreur etait toute bête,
    Un simple faux contact (une soudure séche) a suffit pour semer la panique lol,
    La routine 8bit fonctionne très très bien,
    Je tien a remercié tout le Forum qui ma permis d'arriver au bout de se projet,

    C'est émouvant de faire fonctionner le premier LCD de sa vie ( sorter les mouchoir, )

    Un GRAND MERCRI a tout le monde
    Cordialement
    Paulochon
    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

Sur le même thème :

Discussions similaires

  1. [Brun] Probleme résolution affichage TV LCD LG 32LC45
    Par rezeda dans le forum Dépannage
    Réponses: 4
    Dernier message: 22/12/2007, 18h00
  2. Problème affichage LCD 2x16
    Par gaga2410 dans le forum Électronique
    Réponses: 113
    Dernier message: 06/10/2007, 19h56
  3. affichage clignotant sur LCD
    Par arzew dans le forum Électronique
    Réponses: 11
    Dernier message: 21/09/2007, 09h39
  4. Affichage d'un message sur afficheur lcd
    Par Grosso dans le forum Électronique
    Réponses: 3
    Dernier message: 23/12/2006, 11h01
  5. [Moniteur lcd]Probleme affichage caractéres en DVI...
    Par Fred dans le forum Matériel - Hardware
    Réponses: 0
    Dernier message: 03/07/2006, 15h54