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

Probleme écran LCD



  1. #1
    TheMonkey

    Probleme écran LCD


    ------

    Bonjour, j'essaye de faire marcher un ecran LCD 4x20 lignes avec un PIC 18F452... Mais bien sur ca marche pas...

    Je programme en C avec C18, je me suis bien renseigné sur le fonctionnement des LCD avant d'ecrire mon programme mais rien a faire j'arrive pas a le faire marcher...

    Je poste alors mon code si quelqu'un peut me trouver le ou les problemes je lui dirais un grand merci !

    #include "p18f452.h"
    #include "delays.h"

    #define LCD_D0 PORTBbits.RB0
    #define LCD_D1 PORTBbits.RB1
    #define LCD_D2 PORTBbits.RB2
    #define LCD_D3 PORTBbits.RB3
    #define LCD_D4 PORTBbits.RB4
    #define LCD_D5 PORTBbits.RB5
    #define LCD_D6 PORTBbits.RB6

    #define LCD_D7 PORTBbits.RB7
    #define LCD_BF LCD_D7
    #define TRIS_LCD_BF TRISBbits.TRISB7

    #define TRIS_LCD_D TRISB

    #define LCD_RS PORTDbits.RD7
    #define TRIS_LCD_RS TRISDbits.TRISD7

    #define LCD_RW PORTDbits.RD6
    #define TRIS_LCD_RW TRISDbits.TRISD6

    #define LCD_E PORTDbits.RD7
    #define TRIS_LCD_E TRISDbits.TRISD7


    #define DELAY_MS(x) Delay10KTCYx(x); // Avec un quartz 10 MHZ et PLL activé = 10*4 Mhz
    #define DELAY_US(x) Delay10TCYx(x); // 1 Cycle = 0,1 us
    #define DELAY_600NS Delay1TCY();Delay1TCY();Delay1 TCY();Delay1TCY();Delay1TCY(); Delay1TCY();

    #define LIGNE1 0x00
    #define LIGNE2 0x40
    #define LIGNE3 0x14
    #define LIGNE4 0x54

    #define uchar unsigned char

    // Fonction pour envoyer une commande au LCD

    void LCD_Write(uchar Send)
    {

    if (Send & 1)
    LCD_D0 = 1;
    else
    LCD_D0 = 0;

    if (Send & 2)
    LCD_D1 = 1;
    else
    LCD_D1 = 0;

    if (Send & 4)
    LCD_D2 = 1;
    else
    LCD_D2 = 0;

    if (Send & 8)
    LCD_D3 = 1;
    else
    LCD_D3 = 0;

    if (Send & 16)
    LCD_D4 = 1;
    else
    LCD_D4 = 0;

    if (Send & 32)
    LCD_D5 = 1;
    else
    LCD_D5 = 0;

    if (Send & 64)
    LCD_D6 = 1;
    else
    LCD_D6 = 0;

    if (Send & 128)
    LCD_D7 = 1;
    else
    LCD_D7 = 0;

    Delay1TCY(); //équivalent à 1 nop
    LCD_E = 1; // validation avec enable
    DELAY_600NS; // durée necessaire pour qu'enable soit pris en compte
    LCD_E = 0;

    }

    void LCD_Wait(void)
    {
    LCD_RW = 1; // Mode Lecture
    TRIS_LCD_D = 1 ; // D7-D0 en reception

    Delay1TCY();

    LCD_E = 1; // On valide
    DELAY_600NS;
    LCD_E=0;

    Delay1TCY();

    while (LCD_BF) {} // Tant que BF=1, on attend

    TRIS_LCD_D = 0;
    LCD_RW = 0;
    }

    // Fonction pour initialiser le LCD ( indispensable )

    void LCD_Init(void)
    {

    uchar Send;

    LCD_D7 = 0; // On met tout à 0
    LCD_D6 = 0;
    LCD_D5 = 0;
    LCD_D4 = 0;
    LCD_D3 = 0;
    LCD_D2 = 0;
    LCD_D1 = 0;
    LCD_D0 = 0;
    LCD_E = 0;
    LCD_RS = 0;
    LCD_RW = 0;

    DELAY_MS(20); // Nécessaire au démarrage de l'écran

    Send = 0x03; // Init 8 bits
    LCD_Write(Send);

    DELAY_MS(5); // Temps necessaire au déroulement de l'instruction

    LCD_E = 1; // on valide une deuxieme fois
    DELAY_600NS;
    LCD_E = 0;

    DELAY_US(110); // Temps necessaire au déroulement de l'instruction

    LCD_E = 1; // et une troisieme fois
    DELAY_600NS;
    LCD_E = 0;

    LCD_Wait();

    Send = 0x38; // 8 bit mode ON, 2 lines, 5*8 font
    LCD_Write(Send); // envoi des données


    LCD_Wait();

    Send = 0x08; // display OFF, cursor OFF, blink OFF,
    LCD_Write(Send);


    LCD_Wait();

    Send = 0x01; // Clear Display
    LCD_Write(Send);

    LCD_Wait();

    Send = 0x06; // increase cursor position, scroll display OFF
    LCD_Write(Send);

    LCD_Wait();

    Send = 0x0E; // display ON, cursor ON, blink OFF,
    LCD_Write(Send);

    }


    // Fonction pour afficher un caractere a l'écran
    // Exemple : LCD_Char('Z');

    void LCD_Char(uchar Car)
    {
    LCD_Wait();

    LCD_RS = 1;

    LCD_Write(Car);

    LCD_RS = 0;


    }




    void main (void)
    {
    CloseADC(); // On desactive la conversion A/D
    TRIS_LCD_D=0;
    TRIS_LCD_E=0;
    TRIS_LCD_RS=0;
    TRIS_LCD_RW=0;
    LCD_Init();

    LCD_Char('E');

    while(1)
    {
    }
    }

    #pragma romdata CONFIG
    _CONFIG_DECL (
    _CONFIG1H_DEFAULT & _OSC_HSPLL_1H,
    _CONFIG2L_DEFAULT & _PWRT_ON_2L,
    _CONFIG2H_DEFAULT & _WDT_OFF_2H,
    _CONFIG3H_DEFAULT,
    _CONFIG4L_DEFAULT & _STVR_OFF_4L & _LVP_OFF_4L
    & _DEBUG_OFF_4L,
    _CONFIG5L_DEFAULT & _CP0_OFF_5L & _CP1_OFF_5L
    & _CP2_OFF_5L & _CP3_OFF_5L,
    _CONFIG5H_DEFAULT & _CPB_OFF_5H & _CPD_OFF_5H,
    _CONFIG6L_DEFAULT & _WRT0_OFF_6L & _WRT1_OFF_6L
    & _WRT2_OFF_6L & _WRT3_OFF_6L,
    _CONFIG6H_DEFAULT & _WPC_OFF_6H & _WPB_OFF_6H
    & _WPD_OFF_6H,
    _CONFIG7L_DEFAULT & _EBTR0_OFF_7L & _EBTR1_OFF_7L
    & _EBTR2_OFF_7L & _EBTR3_OFF_7L,
    _CONFIG7H_DEFAULT & _EBTRB_OFF_7H
    );
    #pragma romdata
    Voila je pense que le code est assez clair, si vous n'arrivez pas a comprendre quelques chose, dites le moi je posterais de plus amples details !

    Merci d'avance

    -----

  2. #2
    LouR56

    Re : Probleme écran LCD

    Salut éssaye peut être de voir les tempo (j'ai eu des problèmes avec un LCD 2x16 qui nésséssitait des tempo plus longues lors de la routine d'initialisation ainsi que lors de l'écriture d'une donnée).
    @++
    Louis

  3. #3
    L'illuminé

    Re : Probleme écran LCD

    Si ton contrôleur LCD est compatible HD44780, je te conseil de te servir de ce que Microchip a déjà fait. Voir le fichier xlcd.h, il y a quelques modifications à apporter dans ce fichier pour l'adapter.
    Heureux est l'étudiant qui, comme la rivière, peut suivre son cours sans sortir de son lit !

Sur le même thème :

Discussions similaires

  1. [Brun] probleme avec mon ecran lcd help me!!!!
    Par YOYONNE dans le forum Dépannage
    Réponses: 1
    Dernier message: 22/10/2007, 17h25
  2. probleme d'affichage sur ecran lcd
    Par nounours2 dans le forum Dépannage
    Réponses: 2
    Dernier message: 17/12/2006, 20h00
  3. Problème avec écran LCD
    Par Les Ordi c pas mon truc dans le forum Matériel - Hardware
    Réponses: 9
    Dernier message: 30/04/2006, 10h23
  4. probleme alim avec ecran lcd
    Par did dans le forum Dépannage
    Réponses: 7
    Dernier message: 30/03/2005, 22h33
  5. Problème de flou sur un écran LCD
    Par ltaillan dans le forum Matériel - Hardware
    Réponses: 10
    Dernier message: 14/03/2005, 08h13
Découvrez nos comparatifs produits sur l'informatique et les technologies.