Affichage lcd avec un p18f4550
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Affichage lcd avec un p18f4550



  1. #1
    invite55f558c3

    Affichage lcd avec un p18f4550


    ------

    Salut,


    Je débute la prog sur un pic18f4550 et l'on m'a demandé de ne pas utiliser les .h spécifique à l'affichage pour que je me familiarise à l'utilisation des registres des pics etc... Je dois faire un CAN et l'afficher à l'écran... Mon lcd est un LCM1602A-NSW-BBS, même si d'après les datasheet je ne vois pas trop la différence entre tous les LCD.

    J'ai fait ce code et l'ai testé sur mon easypic5, rien ne s'affiche à part les carreaux blancs de la première ligne de mon écran ( je suppose que la deuxième est morte mas bon... ).
    Quoiqu'il en soit, je ne vois pas trop ce qu'il manque à mon prog...
    Si vous pouvez me donner des conseils ^^.




    // déclaration :

    #include <p18f4550.h>
    #include <delays.h>

    /* Variables*/

    #pragma config WDT = OFF // WatchDog désactivé.
    #pragma config LVP = OFF // Mode basse consommation désactivé.
    #pragma config FOSC = INTOSC_HS // Oscillateur interne.

    //int i;
    //int Anl;
    //int affichage;
    // Code :


    void config(void);
    //int analogique();

    void initLcd(void) // TRISB étant en sortie Nous utilisons LAT plutot que PORT
    {

    TRISB = 0x00;

    Delay10KTCYx(1); // Démarrage de l'écran.
    LATBbits.LATB4 = 0; // RS en niveau bas : config du LCD.
    //LATBbits.LATB6 = 0; // R/W en mode écriture. A zéro par défault ( à la masse )...
    Delay10KTCYx(1);

    // Mode 8 bits / 1 ligne / matrice 5*8. (*3)

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 1; // DB5.
    LATBbits.LATB0 = 1; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0; // E validation.
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 1; // DB5.
    LATBbits.LATB0 = 1; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0; // E validation.
    Delay10KTCYx(1);


    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 1; // DB5.
    LATBbits.LATB0 = 1; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0; // E validation.
    Delay10KTCYx(1);

    // Mode 4 bits (*2);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 1; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(10);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(10);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(10);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(10);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(10);

    // Etape 3 : Mode 4 bits / 2 lignes / 5*8.

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(10);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 1; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 1; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(1);
    PORTBbits.RB5 = 0;
    Delay10KTCYx(1);



    }



    // display on, curseur off, blink off :

    void display_on(void)
    {

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 1; // DB7.
    LATBbits.LATB2 = 1; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    }


    void clearDisplay(void)
    {

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 1; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);


    }

    void waitData(void)
    {

    LATBbits.LATB4 = 1; // RS en niveau haut : le LCD attend des données (et non des instructions).
    //LATBbits.LATB6 = 0; // R/W en mode écriture.
    Delay10KTCYx(1);


    }


    void config(void){

    // horloge à 8Mhz :
    OSCCONbits.IRCF2=1;
    OSCCONbits.IRCF1=1;
    OSCCONbits.IRCF0=0;

    //ADCON1 = 15;
    /*
    // comparateur par défaut :
    CMCONbits.CM2=1;
    CMCONbits.CM1=1;
    CMCONbits.CM0=1;
    */

    }

    void main(void)
    {

    config();
    initLcd();
    clearDisplay();
    waitData();

    while(1)
    {

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 1; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 1; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    }

    }



    Une dernière question, je vais devoir afficher un long dans mon écran, quel est la méthode à suivre. faut il passer les bits 4 par 4 comme pour un octet ou faire autrement.



    Merci.

    -----

  2. #2
    invitefaaca50b

    Re : Affichage lcd avec un p18f4550

    Deja, si tu as une ligne de carrés et pas l'autre, c'est que ton afficheur est pas initialisé comme il faut. Il faua a l'initialisation de l'afficheur lui envoyer des commandes permettant de definir le mode de fonctionnement, 8 bits, 4 bits, et si on utilise le mode 4 bits, on se sert uniquement des bits 7 a 4 de l'afficheur et on transmet les octets en quartets a la suite. il existe des centaines de liens qui parlent de l'initialisation des LCD a base de controleurs HD44800. Attention, pour un LCD graphique, il y a dautres infos a rentrer pour l'initialisation.

    Si tu avais regardé un peu sur google, tu aurais pu par exemple aller ici: http://www.aurel32.net/elec/lcd.php qui explique les LCD

    Pour les longs ou autre, il faut decoder le contenu de la variable grace a une routine qui te sortira par exemple une suite de 3 caracteres pour une variable sur 8 bits, 5 caracteres pour une variable sur 16 bits, etc jusqu'a 24 ou 32 bits...

  3. #3
    invite55f558c3

    Re : Affichage lcd avec un p18f4550

    oki,

    merci de m'avoir poussé à vérifier par moi même, j'avais en effet initialiser qu'une seule ligne. Et mon affichage marche (d'octet j'ai pas encore essayé avec des doubles)

    le site dit qu'il faut forcer le passage en 8 bits et le faire plusieurs fois pour bien valider la commande ok. Mais je n'ai pas compris pourquoi il n'envoyait pas des multiples d'octets

    par exemple 03h, 03, 03h pour le 8 bits puis 02h pour le 4 bits

    au lieu de 03h, 03h, 03h, 03h puis 02h, 00h....


    soit 1 octets et demi puis un demi octet ( ce qui donne deux commandes incomplètes ). au lieu de refaire deux fois la commande entière pour le 8bits.

    bref ça marche mais bon...

  4. #4
    invitefaaca50b

    Re : Affichage lcd avec un p18f4550

    Desole, mais tu n'avais pas initialisé qu'une ligne. un afficheur ca s'initialise en entier, pas a moitié. En fait si ton init se fait pas comme il faut, tu as une ligne de carreaux qui apparait. Donc tu as pas encore tout saisi des bases du LCD... Mais ca va venir...

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

    Re : Affichage lcd avec un p18f4550

    ok... mais en relisant j'avais fais cette erreur aussi, enfin maintenant j'ai ça.


    /* Programmation d'un convertisseur analogique numérique avec affichage sur LCD pour le pic18f4550 */


    // déclaration :

    #include <p18f4550.h>
    //#include <aquisiAna_p18f4550.h>
    #include <delays.h>

    /* Variables*/

    #pragma config WDT = OFF // WatchDog désactivé.
    #pragma config LVP = OFF // Mode basse consommation désactivé.
    #pragma config FOSC = INTOSC_HS // Oscillateur interne.

    int i;
    int Anl;
    int affichage;
    // Code :


    void config(void);
    //int analogique();

    void initLcd(void) // TRISB étant en sortie Nous utilisons LAT plutot que PORT
    {

    TRISB = 0x00;

    Delay10KTCYx(1); // Démarrage de l'écran.
    LATBbits.LATB4 = 0; // RS en niveau bas : le LCD attend des instructions (et non des données).
    //LATBbits.LATB6 = 0; // R/W en mode écriture. A zéro part défault ( à la masse )...
    Delay10KTCYx(1);

    // Mode 8 bits / 1 ligne / matrice 5*8. (1ere fois) function set 8 bits

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 1; // DB5.
    LATBbits.LATB0 = 1; // DB4 sur 8 bits.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0; // E validation.
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7 sur une ligne.
    LATBbits.LATB2 = 0; // DB6 taille 5*7.
    LATBbits.LATB1 = 1; // DB5.
    LATBbits.LATB0 = 1; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0; // E validation.
    Delay10KTCYx(1);

    // Mode 8 bits / 1 ligne / matrice 5*8. (forçage) function set 8 bits

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 1; // DB5.
    LATBbits.LATB0 = 1; // DB4 sur 8 bits.


    // Mode 4 bits (*2) function set 4 bits :

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // D7.
    LATBbits.LATB2 = 0; // D6.
    LATBbits.LATB1 = 1; // D5 function set.
    LATBbits.LATB0 = 0; // D4 sur 4 bits.

    Delay10KTCYx(10);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(10);
    /*
    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(20);

    LATBbits.LATB3 = 0; // DB7 sur une lignes.
    LATBbits.LATB2 = 0; // DB6 taille 5*7.
    LATBbits.LATB1 = 1; // DB5.
    LATBbits.LATB0 = 1; // DB4.

    Delay10KTCYx(20);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(20);
    */

    // Etape 3 : Mode 4 bits / 2 lignes / 5*8.

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(10);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 1; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 1; // DB7 sur deux lignes.
    LATBbits.LATB2 = 0; // DB6 taille 5*7.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    }


    // display on, curseur off, blink off :

    void display_on(void)
    {

    LATBbits.LATB4 = 0; // RS à 0, envoie de commande.
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 1; // DB7.
    LATBbits.LATB2 = 1; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    }


    void clearDisplayDebut(void)
    {


    LATBbits.LATB4 = 0; // RS à 0, envoie de commande.
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 1; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);


    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 1; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    }

    void clearDisplay(void)
    {
    LATBbits.LATB4 = 0; // RS à 0, envoie de commande.
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(1);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 1; // DB4.

    Delay10KTCYx(1);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(1);
    }

    void returnHome(void)
    {

    LATBbits.LATB4 = 0; // RS à 0, envoie de commande.
    Delay10KTCYx(2);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(2);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(2);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(2);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(2);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 1; // DB5.
    LATBbits.LATB0 = 1; // DB4.

    Delay10KTCYx(2);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(2);


    }

    void curseurGauche(void)
    {

    LATBbits.LATB4 = 0; // RS à 0, envoie de commande.
    Delay10KTCYx(2);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(2);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(2);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(2);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(2);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 1; // DB6 entry mode set.
    LATBbits.LATB1 = 1; // DB5 curseur vers la gauche.
    LATBbits.LATB0 = 1; // DB4 accompagne dans son déplacement.

    Delay10KTCYx(2);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(2);

    }

    void curseurDroite(void)
    {

    LATBbits.LATB4 = 0; // RS à 0, envoie de commande.
    Delay10KTCYx(2);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(2);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(2);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(2);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(2);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 1; // DB6 entry mode set.
    LATBbits.LATB1 = 0; // DB5 curseur vers la gauche.
    LATBbits.LATB0 = 1; // DB4 accompagne dans son déplacement.

    Delay10KTCYx(2);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(2);

    }

    void waitData(void)
    {

    LATBbits.LATB4 = 1; // RS en niveau haut : le LCD attend des données (et non des instructions).
    //LATBbits.LATB6 = 0; // R/W en mode écriture.
    Delay10KTCYx(2);


    }

    void main(void)
    {
    config();
    clearDisplayDebut();
    initLcd();
    display_on();
    curseurGauche();
    clearDisplay();
    curseurDroite();
    waitData();

    while(1)
    {

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(2);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 1; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 0; // DB4.

    Delay10KTCYx(2);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(2);

    LATBbits.LATB5 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
    Delay10KTCYx(2);

    LATBbits.LATB3 = 0; // DB7.
    LATBbits.LATB2 = 0; // DB6.
    LATBbits.LATB1 = 0; // DB5.
    LATBbits.LATB0 = 1; // DB4.

    Delay10KTCYx(2);
    LATBbits.LATB5 = 0;
    Delay10KTCYx(2);

    }
    /* unsigned char mode = "EIGHT_BIT";
    TRISB=0;
    OpendXLCD(mode);

    affichage = analogique();
    */
    // for(;;

    }

    void config(void){

    // horloge à 8Mhz :
    OSCCONbits.IRCF2=1;
    OSCCONbits.IRCF1=1;
    OSCCONbits.IRCF0=0;

    //ADCON1 = 15;
    /*
    // comparateur par défaut :
    CMCONbits.CM2=1;
    CMCONbits.CM1=1;
    CMCONbits.CM0=1;
    */

    }




    Cela m'affiche un a sur les 8 premières cases de chaque ligne.
    (pourquoi pas juqu'au bout hum...)

    j'pense que c'est la façon dont il traite les bits fort et faible que j'ai pas comprise. Mais ça avance oui.

  7. #6
    invitefaaca50b

    Re : Affichage lcd avec un p18f4550

    Attention au piege a con sur certains afficheurs LCD:

    Afficheur LCD 1x16
    La ligne 1 est en fait constituee de 8 caracteres aux adresses comprises entre 0x80 et 0x87 (tableau ligne 1), suivi de 8 caracteres aux adresses comprises entre 0xc0 et 0xc7 (tableau ligne 2)
    Si on est en position 0x87 et qu'on continue d'envoyer des caracteres, il ne s'afficheront plus a partir de 0x88... Ce genre d'afficheur non initialisé affiche aussi que 8 carres sombres a gauche de la ligne... Du aux specifications de la map d'affichage...
    Afficheur LCD 2x16
    La ligne 1 contient les 16 caracteres aux adresses comprises entre 0x80 et 0x8f
    La ligne 2 contient les 16 caracteres aux adresses comprises entre 0xc0 et 0xcF

    Pour les LCD4x20 les adresses changent encore...

    Pas vraiment de normes dans les afficheurs...

  8. #7
    invite55f558c3

    Re : Affichage lcd avec un p18f4550

    Reee !

    une petite question encore : je veux faire une union de champ de bit :
    d'après moi et après vérification sur aix-mrs (pour voir si il y avait une différence sur compilateur C18). J'ai tapé ceci (variable globale).

    volatile near union
    {
    struct
    unsigned POS0 : 1;
    unsigned POS1 : 1;
    unsigned POS2 : 1;
    unsigned POS3 : 1;
    unsigned POS4 : 1;
    unsigned POS5 : 1;
    unsigned POS6 : 1;
    unsigned POS7 : 1;
    };
    struct
    {
    unsigned x : 8;
    };
    }POSbits;

    j'ai essayé de rajouter stdio.h et string.h.

    j'ai l'erreur suivante :

    'near' symbol defined in non-access qualified section.

    ok... donc j'ai fini par le déclarer comme variable locale (dans une méthode)... Mais maintenant ça m'arrangerai de l'avoir en globale quand même... comment faire ?


    Merci

Discussions similaires

  1. [Brun] Moniteur LCD Samtron 73v en 17" : affichage blanc avec bandes !
    Par invitea529513a dans le forum Dépannage
    Réponses: 5
    Dernier message: 11/03/2010, 08h30
  2. affichage LCD avec pic 16F84
    Par spray_kim dans le forum Électronique
    Réponses: 3
    Dernier message: 26/01/2010, 18h37
  3. affichage LCD
    Par invite49e42dcb dans le forum Électronique
    Réponses: 1
    Dernier message: 05/06/2008, 13h57
  4. Affichage LCD
    Par invite0cebd2e1 dans le forum Électronique
    Réponses: 1
    Dernier message: 29/08/2007, 09h39
  5. affichage LCD
    Par inviteeab4d8e2 dans le forum Électronique
    Réponses: 1
    Dernier message: 10/03/2005, 14h21
Découvrez nos comparatifs produits sur l'informatique et les technologies.