Soucis afficheur LCD
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Soucis afficheur LCD



  1. #1
    invite4e24a71d

    Soucis afficheur LCD


    ------

    Bonsoir,

    J'ai fait une petite platine avec un afficheur LCD, et quand je la branche sur ma carte mère, et bien rien ne se passe...
    L’écran reçoit bien le 5V, mais la ligne supérieur n'est pas noir, et le rétroéclairage ne s'allume même pas..

    Voici la datasheet:

    Et mon schéma électronique: Nom : Capture.JPG
Affichages : 95
Taille : 77,7 Ko

    Le connecteur 16 broches représente l'écran, et les autre les départs pour ma carte mère. J'ai mit une résistance de 66 Ohms pour le rétroéclairage.
    Bon l'écran trainait dans un tiroir depuis assez longtemps, mais il est en bonne état. Vous pensez que ça vient de lui, ou d'un soucis de montage ?

    -----

  2. #2
    PIXEL

    Re : Soucis afficheur LCD

    et gné koi la mobo ?

    la programmation ad-hoc a été faite ?

  3. #3
    invite4e24a71d

    Re : Soucis afficheur LCD

    C'est un PIC18F458, le soft n'est pas fait, mais quand on branche l'écran sans l'init, la ligne du haut devrait être noir ?

  4. #4
    PIXEL

    Re : Soucis afficheur LCD

    si le micro n'envoie rien à l'afficheur , je ne pense pas qu'il se passe quoi que ce soit.

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

    Re : Soucis afficheur LCD

    bonjour,


    C'est un PIC18F458, le soft n'est pas fait, mais quand on branche l'écran sans l'init, la ligne du haut devrait être noir ?
    Je ne sais pas si on peut generaliser ceci,
    mais c'est un fait que sur mes appli à base de LCD 1602 (2 lignes de 16cars) la 1ere ligne du haut est noire
    lors de la mise sous tension..mais j'ai deja mon programme installé
    ce n'est pas le cas sur un reset pin 1 MCLR (montage deja alimenté)
    ce qui laisserait penser que ce n'est pas l'init du LCD qui provoque la ligne noire , mais bien la logique interne du LCD.

  7. #6
    invite4e24a71d

    Re : Soucis afficheur LCD

    Bonjour,

    Alors j'ai fait ma routine d'initialisation, mais l’écran ne bouge pas d'un poil... Je ne comprend pas pk, sauf si celui ci est HS..

  8. #7
    invite4e24a71d

    Re : Soucis afficheur LCD

    Bon j'ai brancher un autre afficheur et j'ai ma ligne de caractère noir qui s'affiche cette fois ci.
    J'ai essayer de lancer ma routine d'initialisation, j'ai suivi les étapes donner par le constructeur de l'écran (http://radiospares-fr.rs-online.com/...633D4E4F4E4526) mais rien ne change encore une fois. Je laisse 10ms entre chaque étape, mais rien n'y fais...

    Le code de l'initialisation est le suivant:
    Code:
    unsigned char init = 1;
    unsigned char state = 1;
    unsigned int count = 0;
    unsigned int tmp_count = 0;
    
    
    void testLCD(unsigned char _clk)
    {
    #define DATA  LATD
    #define RS LATAbits.LA0 // 0 = Instruction 1 = Data
    #define RW LATAbits.LA1 // 0 = Write 1 = Read
    #define E LATAbits.LA2 // Start Action
    
        if(_clk == 1)
        { count++; }
    
        if(init)
        {
            TRISD = 0x00;
            TRISA = TRISA & 0x11111000;
            init = 0;
        }
    
        if(count == 100)
        {
            switch(state)
            {
                    case 1:
                    {
                        LATD = 0x00110000;
                        RS = 0;
                        RW = 0;
                        E = 1;
                        tmp_count = count + 10;
                        state = 2;
                        break;
                    }
                    case 2:
                    {
                        if(tmp_count == count)
                        {
                            E = 0;
                            state = 3;
                        }
                        break;
                    }
                    case 3:
                    {
                        LATD = 0x00110000;
                        RS = 0;
                        RW = 0;
                        E = 1;
                        tmp_count = count + 10;
                        state = 4;
                        break;
                    }
                    case 4:
                    {
                        if(tmp_count == count)
                        {
                            E = 0;
                            state = 5;
                        }
                        break;
                    }
                    case 5:
                    {
                        DATA = 0x00110000;
                        RS = 0;
                        RW = 0;
                        E = 1;
                        tmp_count = count + 10;
                        state = 6;
                        break;
                    }
                    case 6:
                    {
                        if(tmp_count == count)
                        {
                            E = 0;
                            state = 7;
                        }
                        break;
                    }
                    case 7:
                    {
                        DATA = 0x001110;
                        RS = 0;
                        RW = 0;
                        E = 1;
                        tmp_count = count + 10;
                        state = 8;
                        break;
                    }
                    case 8:
                    {
                        if(tmp_count == count)
                        {
                            E = 0;
                            state = 9;
                        }
                        break;
                    }
                    case 9:
                    {
                        DATA = 0x00001000;
                        RS = 0;
                        RW = 0;
                        E = 1;
                        tmp_count = count + 10;
                        state = 10;
                        break;
                    }
                    case 10:
                    {
                        if(tmp_count == count)
                        {
                            E = 0;
                            state = 11;
                        }
                        break;
                    }
                    case 11:
                    {
                        DATA = 0x00000001;
                        RS = 0;
                        RW = 0;
                        E = 1;
                        tmp_count = count + 10;
                        state = 12;
                        break;
                    }
                    case 12:
                    {
                        if(tmp_count == count)
                        {
                            E = 0;
                            state = 13;
                        }
                        break;
                    }
                    case 13:
                    {
                        DATA = 0x00000111;
                        RS = 0;
                        RW = 0;
                        E = 1;
                        tmp_count = count + 10;
                        state = 14;
                        break;
                    }
                    case 14:
                    {
                        if(tmp_count == count)
                        {
                            E = 0;
                            state = 15;
                        }
                        break;
                    }
                default :
                {}
            }
        }
    }

  9. #8
    invite4e24a71d

    Re : Soucis afficheur LCD

    Lire : if(count < 100) au lieu de if(count == 100)

  10. #9
    spown

    Re : Soucis afficheur LCD

    Bonjour/bonsoir tout le monde,

    @petitnul12, qui t'as proposé cette méthode de programmation pour l'afficheur ??!

    Bref, elle va pas marcher, je vois pas pourquoi parfois on complique les choses pour "nothing" .

    Ton Count++ comment il va s’incrémenter ( _clk toujours doit être égal à 1 )?? impossible dans ton cas ! donc il rentre jamais au switch.

    Bon, je vois pas comment tu as raisonné pour ton code

    Essaye cette exemple. Mais il te faut une routine de "delay" pour les millisecondes, est ce que tu sais le faire ?

    Code:
    void lcd_init(){
    
    //Clear Display
    PORTD= 0b00000001;
    RS = 0;
    RW = 0;
    E = 1;
    __delay_ms(1); 
    E = 0;
    
    //Return Home
    PORTD = 0b00000010;
    RS = 0;
    RW = 0;
    E = 1;
    __delay_ms(1); 
    E = 0;
    
    __delay_ms(4); 
    
    //Function Set
    PORTD = 0b00111000;
    RS = 0;
    RW = 0;
    E = 1;
    __delay_ms(1); 
    E = 0;
    
    //Display On, Cursor Off, No Blinking Cursor
    PORTD = 0b00001100;
    RS = 0;
    RW = 0;
    E = 1;
    __delay_ms(1); 
    E = 0;
    
    //Entry Mode Set
    PORTD= 0b00000110;
    RS = 0;
    RW = 0;
    E = 1;
    __delay_ms(1); 
    E = 0;
    
    }
    Enleve la fonction testLCD(), et laisse les difinitions
    Code:
    #define RS LATAbits.LA0 // 0 = Instruction 1 = Data
    #define RW LATAbits.LA1 // 0 = Write 1 = Read
    #define E LATAbits.LA2 // Start Action
    Déclarées en haut de la page.

    Note: ce code il va juste initialiser ton LCD, pour afficher des caractères, il te faut une autre fonction (" write") par exemple, puis l'appeler dans le main().

    Voila n’hésite pas si t'as des questions

  11. #10
    invite4e24a71d

    Re : Soucis afficheur LCD

    En fait mon _clk est géré par le reste du programme qu'il y a dans le main, il passe à 1 toutes les 1ms.

  12. #11
    spown

    Re : Soucis afficheur LCD

    Mais comment tu veux qu'on sache ton/tes erreur(s) son voir tout le code, ou la partie concerné ?!!

    Pour l'initialisation des LCD faut respecté un délai entre les instructions, que je le vois pas dans ton programme. d’après ce que tu dis "state" change après quelques millisecondes ( dépend de _clk ) ??

    Bref, je vois pas pourquoi faire toutes ces lignes de codes et utiliser "switch" qui est censé à être utiliser pour faire un choix, alors dans ce cas c'est juste des instructions à exécuter

    Note : Tous les LCD du marché ( 20x2 ou 20x4 16x4... ) peuvent fonctionné avec le même code. Ils ont le même principe .

    Mais si tu insistes à faire fonctionner ce "shadoko code " . bon courage..

  13. #12
    invite4e24a71d

    Re : Soucis afficheur LCD

    Le code est un peu compliqué, parce que j'ai fait ma bibliothèque "d'objet" qui interagisse par évènement entre eux, c'est très simple à utiliser une fois que c'est bien en place, et rien n'est bloquant. C'est pour cette raison que je n'utilisais pas de __delay_ms()

    Pour faire fonctionner l’écran, j'ai fait un code tourne tout seul sur la carte. Mais ma ligne supérieur reste toujours noir, rien ne se passe sur l'afficheur... Je ne comprend pas, j'ai revérifié les connexion et rien... Vais aller au lit, la nuit porte conseil dit on...

    Voici le programme, suivant les instructions de la datasheet:

    Code:
    #include <xc.h>        /* XC8 General Include File */
    #include "system.h"        /* System funct/params, like osc/peripheral config */
    #include "user.h"          /* User funct/params, such as InitApp */
    
    #define _XTAL_FREQ 10000000
    #define RS LATAbits.LA0 // 0 = Instruction 1 = Data
    #define RW LATAbits.LA1 // 0 = Write 1 = Read
    #define E LATAbits.LA2 // Start Action
    
    
    void lcd_init(){
    __delay_ms(50);
    __delay_ms(50);
    
    
    LATD = 0b00110000;
    RS = 0;
    RW = 0;
    E = 1;
    __delay_ms(5);
    E = 0;
    LATD = 0b00110000;
    RS = 0;
    RW = 0;
    E = 1;
    __delay_ms(5);
    E = 0;
    LATD = 0b00110000;
    RS = 0;
    RW = 0;
    E = 1;
    __delay_ms(5);
    E = 0;
    
    
    
    LATD = 0b00111000;
    RS = 0;
    RW = 0;
    E = 1;
    __delay_ms(5);
    E = 0;
    
    LATD = 0b00001000;
    RS = 0;
    RW = 0;
    E = 1;
    __delay_ms(5);
    E = 0;
    
    LATD = 0b00000001;
    RS = 0;
    RW = 0;
    E = 1;
    __delay_ms(5);
    E = 0;
    
    //Display On, Cursor Off, No Blinking Cursor
    LATD = 0b00000110;
    RS = 0;
    RW = 0;
    E = 1;
    __delay_ms(5);
    E = 0;
    }

Discussions similaires

  1. Afficheur LCD
    Par invite5a645688 dans le forum Électronique
    Réponses: 5
    Dernier message: 23/05/2009, 15h06
  2. Afficheur LCD
    Par invite29c9be93 dans le forum Électronique
    Réponses: 3
    Dernier message: 07/04/2008, 22h15
  3. afficheur lcd en afficheur 7 segment
    Par invite3cc40cdb dans le forum Électronique
    Réponses: 3
    Dernier message: 04/02/2008, 09h43
  4. Afficheur Lcd
    Par invite436dc8ee dans le forum Électronique
    Réponses: 5
    Dernier message: 22/05/2006, 09h54
  5. Afficheur lcd
    Par invite3837a451 dans le forum Électronique
    Réponses: 4
    Dernier message: 17/11/2003, 20h12
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...