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

LCD et PIC18F45K22



  1. #1
    Poutch10

    LCD et PIC18F45K22


    ------

    Salut !

    Je cherche à utilise mon afficheur LCD à l'aide d'un PIC18F45K22.
    J'ai essayé d'utiliser des quelques bibliothèques sous deux différents compilateur mais cela ne fonctionne pas.
    J'ai donc finalement créé mes propres fonctions pour mieux cerner le problème mais l'afficheur n'affiche toujours rien à part une ligne dont la luminosité se modifie bien avec le potentiomètre.

    J'ai regardé l'état des pins de l'afficheur et ils semblent corrects. Pour afficher un '0' j'ai RS = 1 / RW = 0 / E = 0 / D[7:0] = "00110000".

    J'utilise MPLABX avec un ICD 3.
    Compilateur : XC8.

    Le schéma :



    Le code :
    Code:
    #define _XTAL_FREQ 16000000
    
    #define LCD_RS LATBbits.LATB5
    #define LCD_RW LATBbits.LATB4
    #define LCD_E  LATBbits.LATB3
    
    #define LCD_D  LATA
    #define LCD_D0 LATAbits.LATA0
    #define LCD_D1 LATAbits.LATA1
    #define LCD_D2 LATAbits.LATA2
    #define LCD_D3 LATAbits.LATA3
    #define LCD_D4 LATAbits.LATA4
    #define LCD_D5 LATAbits.LATA5
    #define LCD_D6 LATAbits.LATA6
    #define LCD_D7 LATAbits.LATA7
    
    #include <xc.h>
    
    #pragma config FOSC = INTIO67   // Oscillator Selection bits (Internal oscillator block)
    void delay_ms(unsigned int X);
    
    void LCD_Init();
    void LCD_Busy();
    void LCD_Write(char c);
    void LCD_SetPos(char c);
    
    int main()
    {
      TRISA = 0x00;
      TRISB = 0x00;
      OSCCON = 0b01110111;
      
      LCD_Init();
      LCD_SetPos(0x80);
      LCD_Write(0x30);
      while(1);
      
    }
    
    void delay_ms(unsigned int X)
    {   do{     X--;
                __delay_ms(1);
        } while(X  > 0);
    }
    
    void LCD_Busy(){
        LCD_RW = 1;
        LCD_RS = 0;
        LCD_E  = 1;
        delay_ms(1);  
        while(LCD_D7 = 1); // Busy Flag
        LCD_E  = 0;  
    }
    
    void LCD_Write(char c){
        LCD_Busy();
        LCD_RW = 0;
        LCD_RS = 1;
        LCD_D = c;
        LCD_E  = 1;
        delay_ms(1); 
        LCD_E  = 0;
    }
    
    void LCD_SetPos(char c){
        LCD_Busy();
        LCD_RW = 0;
        LCD_RS = 0;
        LCD_D = c;
        LCD_E  = 1;
        delay_ms(1); 
        LCD_E  = 0;
    }
    
    void LCD_Init(){
        // 8 bits / 2 lignes / Fonte 5x8
        LCD_Busy();
        LCD_D = 0x38;
        LCD_E  = 1;
        delay_ms(1); 
        LCD_E  = 0;
        // Aff ON / Curseur OFF / Pas de clign.
        LCD_Busy();
        LCD_D = 0x0C;
        LCD_E  = 1;
        delay_ms(1); 
        LCD_E  = 0;
        // Incrément de G à D / Pas de scroll
        LCD_Busy();
        LCD_D = 0x06;
        LCD_E  = 1;
        delay_ms(1); 
        LCD_E  = 0;
    }
    J'essayerais Lundi un autre afficheur mais cela me paraitrai bizarre qu'il soient mort alors qu'il s'allume.

    Merci d'avance !

    -----

  2. Publicité
  3. #2
    spown

    Re : LCD et PIC18F45K22

    Bonjour/bonsoir,

    On ne peut pas donner de réponses sans savoir le type du contrôleur du LCD. Donne lien du datasheet.

    Tu voulais dire la contraste qui change avec le poto et non la luminosité ?

  4. #3
    Poutch10

    Re : LCD et PIC18F45K22

    Le contrôleur est un SPLC780D (doc de l'afficheur).
    Et oui je voulais dire contraste.

    Merci.

  5. #4
    paulfjujo

    Re : LCD et PIC18F45K22

    bonjour,


    Le hardware a bien l'air STANDARD.. mais pas d'info sur les codes de commandes dans ta doc.. que l'on supposera donc, standard.
    Dans la phase d'init du LCD , ne pas hesiter à mettre des tempos elevées ex: 100mS au lieu de 1 ms !
    à chaque etape.
    y a pas le feu ! d'autant que cette init n'est faite qu'une fois.

    et une bonne tempo de 200 à 500ms juste au demarrage (apres mise sous tension et config I/O ),
    de sorte que l'electronique du LCD soit stabilisée avant l'init .

    La plupart des problemes constatés sur les LCD ... probleme de timing..

  6. #5
    Poutch10

    Re : LCD et PIC18F45K22

    Okay je vais modifier les tempos et je test Lundi quand j'aurais le matériel sous la main.

    Merci

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

    Re : LCD et PIC18F45K22

    Dans votre code vous oubliez de désactiver les entrées analogique du pic (voir doc section IOport)
    Normalement la biblio lcd fournie avec xc8 fonctionne bien avec ce type de lcd , mais il faut adapter selon le pic utilisé.

  9. Publicité
  10. #7
    Jack

    Re : LCD et PIC18F45K22

    je n'ai pas trop compris le rôle de ta fonction LCD_Busy(). En principe, le flag "busy" doit être lu alors que tu cherches à l'écrire.

  11. #8
    paulfjujo

    Re : LCD et PIC18F45K22

    bonsoir,

    Citation Envoyé par Jack Voir le message
    je n'ai pas trop compris le rôle de ta fonction LCD_Busy(). En principe, le flag "busy" doit être lu alors que tu cherches à l'écrire.
    je pense que c'est plutot une faute (bloquante ?) du TEST bit Busy flag via un "==" plutot qu'une affectation "="

    Code:
     while(LCD_D7 == 1); // Busy Flag

  12. #9
    Jack

    Re : LCD et PIC18F45K22

    Bien vu!

    Du coup, le programme restait bloqué au niveau du while et la fonction ne se terminait donc jamais.

    D'où l'intérêt d'utiliser un débogueur ou de placer des marqueurs (sortie console ou changement d'état d'une sortie) pour essayer d'isoler les lignes qui foirent dans le code.

  13. #10
    Poutch10

    Re : LCD et PIC18F45K22

    Vous allez rire ... Mon pic était mal enfoncé dans ma breadboard -> Le RS n'était pas relié à l'afficheur
    J'ai fait les modifs que vous m'avez conseillé et tout fonctionne !

    Merci

Sur le même thème :

Discussions similaires

  1. CAN sur PIC18F45K22
    Par flolarajasse dans le forum Électronique
    Réponses: 25
    Dernier message: 05/11/2014, 14h08
  2. PIC18F45K22, kit de développement EASYPIC7
    Par woodelectro dans le forum Électronique
    Réponses: 2
    Dernier message: 08/05/2013, 21h47
  3. codage protocole ressemblant à I²C sur PIC18F45K22
    Par denver60 dans le forum Électronique
    Réponses: 2
    Dernier message: 11/07/2012, 14h22
  4. Problème Résistances PULL UP sur sorties PIC18F45K22
    Par denver60 dans le forum Électronique
    Réponses: 44
    Dernier message: 05/07/2012, 18h00
  5. Problème CAN PIC18F45K22
    Par denver60 dans le forum Électronique
    Réponses: 4
    Dernier message: 09/06/2012, 14h59
Découvrez nos comparatifs produits sur l'informatique et les technologies.