afficheur LCD 2x16 controlé avec un pic18F45K22 (langage C)
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

afficheur LCD 2x16 controlé avec un pic18F45K22 (langage C)



  1. #1
    cosmoff

    afficheur LCD 2x16 controlé avec un pic18F45K22 (langage C)


    ------

    bonjour,

    voila j'essaye de créer ma propre bibliotheque pour afficher d'abord une lettre sur mon ecran LCD,
    j'ai suivi la page 1 et 2 de ce site que je trouve bien fait: http://nalhossri.free.fr/LCD4bits.h/LCD4bits.h.html

    mais j'ai un probleme, je veux afficher la lettre "e" mais celle ci s'allume tres peu alors que mon curseur lui a beaucoup de lumiere est je comprend pas pourquoi ( voir photo)?

    je vous donne mon code :
    Code:
    #define E LATDbits.LATD1
    #define RS LATDbits.LATD0
    void aff_car(void)
    {
        RS = 1;
       // octet pour la lettre e :
        LATCbits.LATC0 = 1;
        LATCbits.LATC1 = 0;
        LATCbits.LATC2 = 1;
        LATCbits.LATC3 = 0;
        LATCbits.LATC4 = 0;
        LATCbits.LATC5 = 1;
        LATCbits.LATC6 = 1;
        LATCbits.LATC7 = 0;
    
        E = 1;
        __delay_ms(0.1);
        E = 0;
        __delay_ms(0.1);
    }
    void main(void)
    {
        
            init_pic();
            
            Clear_display();// clean the memory
            __delay_ms(2);
            function_set();// init 8bits/ init 2x16
            __delay_ms(2);
            entry_mode();// apres lapparition dun char on deplace le curseur a droite
            __delay_ms(2);
            Display();//active screen/ curseur&clignottement on
            __delay_ms(2);
            
            Return_home();// put curseur en position 00
            __delay_ms(2);
    
    
            aff_car();//affiche la lettre "e"
            __delay_ms(2);
    }
    avez vous une idée pour ma lettre est si peu eclairée ?

    merci d'avance

    -----
    Images attachées Images attachées  

  2. #2
    spown

    Re : afficheur LCD 2x16 controlé avec un pic18F45K22 (langage C)

    Bonjour/bonsoir FUTURIEN,

    C'est probablement un problème de délai. Je vois pas la fonction ( initialisation LCD ) ?? Le code est mal structuré. Apres l'initialisation on laisse minimum 20 ms .

    Si tu utilise pas la pin R/W mets la au ground.

  3. #3
    invite03481543

    Re : afficheur LCD 2x16 controlé avec un pic18F45K22 (langage C)

    Bonjour,

    il peut y avoir une multitude de raisons.
    Un problème hardware? vu que tu ne postes aucun schéma difficile de savoir (découplage, contraste).
    Problème software, tu utilises des fonctions toutes faites, ce qui n'est pas la bonne manière de créer sa bibliothèque, pour cela il faut connaitre le contenu sans quoi rien n'est maitrisé.
    Tu ne dis pas non plus quel compilateur tu utilises.
    Bref, comment veux-tu qu'on te réponde avec autant d'inconnues....?

  4. #4
    invitea2d82c8f

    Re : afficheur LCD 2x16 controlé avec un pic18F45K22 (langage C)

    Hello,
    Que se passe il à la sortie du main?? Reset ?
    Mets une while(1) pour stopper ton programme...

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

    Re : afficheur LCD 2x16 controlé avec un pic18F45K22 (langage C)

    Voici à quoi devrait ressembler ton code dans un esprit librairie écrit en C ANSI:

    Code:
    #define LCD_RS RD0 // Register select
    #define LCD_EN RD1 // Enable
    #define LCD_D4 RC0 // Data bits
    #define LCD_D5 RC1 // Data bits
    #define LCD_D6 RC2 // Data bits
    #define LCD_D7 RC3 // Data bits
    #define LCD_STROBE    ((LCD_EN = 1),(LCD_EN=0))
    
    
    /* écrire un octet en mode 4 bits sur le LCD */
    
    void lcd_write(unsigned char c)
    {
    
        if(c & 0x80) LCD_D7=1; else LCD_D7=0;
        if(c & 0x40) LCD_D6=1; else LCD_D6=0;
        if(c & 0x20) LCD_D5=1; else LCD_D5=0;
        if(c & 0x10) LCD_D4=1; else LCD_D4=0;    
        LCD_STROBE;
        if(c & 0x80) LCD_D7=1; else LCD_D7=0;
        if(c & 0x40) LCD_D6=1; else LCD_D6=0;
        if(c & 0x20) LCD_D5=1; else LCD_D5=0;
        if(c & 0x10) LCD_D4=1; else LCD_D4=0;    
         LCD_STROBE;  
        DelayUs(40);
    }
    
    
    /* Effacement et curseur à l'origine  */
    
    void lcd_clear(void)
    { 
        LCD_RS = 0;
    
        lcd_write(0x01);
        DelayMs(2);
    }
    
    
    /* écrire une chaine de caractères sur le LCD */
    void lcd_puts(const char *s)
    { 
        LCD_RS = 1;   
    
        while(*s) lcd_write(*s++);
    }
    
    
    /* écrire un caractère sur le LCD */
    
    void lcd_putch(unsigned char c)
    { 
        LCD_RS =1;  
        lcd_write(c);
    }
    
    
    
    /* mette le curseur sur une position  */
    
    void lcd_goto(unsigned char pos)
    { 
        LCD_RS =0; 
        lcd_write(0x80+pos);
    }
    
        
    /* initialisation du LCD en mode 4 bits */
    
    void lcd_init(void)
    { 
        LCD_RS =0;
    
        DelayMs(15);
    
        LCD_D4 =1;   
        LCD_D5 =1;
        LCD_STROBE;    
        DelayMs(5);
    
        LCD_STROBE;    
        DelayUs(100);
    
        LCD_STROBE;
        DelayMs(5);
    
        LCD_D4 =0;    
        LCD_STROBE;    
        DelayUs(40);
        
        lcd_write(0x28);// mode 4 bits, 1/16 duty, font 5x8 font, 2lignes
        lcd_write(0x0C);// LCD on
        lcd_write(0x06);
        lcd_write(0x01);// effacement du LCD et reste du curseur
    
    }
    Tu peux l'adapter en 8 bits facilement et ajouter des perfectionnements, comme par exemple utiliser le "bit flag" (BF) qui permet de s'affranchir des délais, dans ce cas il faut gérer R/W et se mettre à l'écoute de ce fameux bit flag qui indique si le controleur du LCD à terminé son travail.
    Les timings dépendent trop du modèle du LCD et donc un code qui ne tient pas compte de cela ne sera pas forcément fonctionnel à tous les coups et donc ce sera un code bricolo comme 90% au moins de ce qui traine sur le net.
    Donc bien lire la doc comme à chaque fois qu'on veut utiliser comme il faut un composant
    @+

  7. #6
    cosmoff

    Re : afficheur LCD 2x16 controlé avec un pic18F45K22 (langage C)

    alors le probleme a été résolu parce qu'il n'y avait pas de while(1); a la fin du programme (bien vu _asm_).
    merci a tous pour votre aide et je vais tenir compte de vos remarques

  8. #7
    invite03481543

    Re : afficheur LCD 2x16 controlé avec un pic18F45K22 (langage C)

    Tu peux reposter une photo pour voir la différence?

  9. #8
    cosmoff

    Re : afficheur LCD 2x16 controlé avec un pic18F45K22 (langage C)

    la voici la voila
    Images attachées Images attachées  

  10. #9
    invite03481543

    Re : afficheur LCD 2x16 controlé avec un pic18F45K22 (langage C)

    Tu utilises quoi comme compilateur C?

  11. #10
    invite03481543

    Re : afficheur LCD 2x16 controlé avec un pic18F45K22 (langage C)

    Tu as changé de lettre?
    Dans ton code c'est un 'e' que tu devais afficher.

  12. #11
    cosmoff

    Re : afficheur LCD 2x16 controlé avec un pic18F45K22 (langage C)

    oui oui j'ai changé de lettre, comme compilateur j'utilise XC8 avec MPLABx

  13. #12
    invite03481543

    Re : afficheur LCD 2x16 controlé avec un pic18F45K22 (langage C)

    Ok, ça explique les fonctions exotiques...
    Bon courage!

Discussions similaires

  1. Programmation microncontroleur PIC18F45K22, afficheur 7 segment 4 digit
    Par invite64bb2dc2 dans le forum Électronique
    Réponses: 12
    Dernier message: 04/05/2013, 22h02
  2. Afficheur LCD 2X16 COG
    Par foudefoot dans le forum Électronique
    Réponses: 12
    Dernier message: 20/09/2012, 09h25
  3. Problème avec afficheur 2X16 caractères
    Par foudefoot dans le forum Électronique
    Réponses: 23
    Dernier message: 04/03/2012, 09h34
  4. Afficheur lcd 2x16 programmation
    Par invite960f35e5 dans le forum Électronique
    Réponses: 32
    Dernier message: 29/08/2008, 22h51
  5. Afficheur LCD 2x16
    Par invite308aa073 dans le forum Électronique
    Réponses: 4
    Dernier message: 01/02/2006, 15h11
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...