[Outils/Fab/Comp] utilisation d'afficheur 2x16 - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 50 sur 50

utilisation d'afficheur 2x16



  1. #31
    davidif

    Re : utilisation d'afficheur 2x16


    ------

    Citation Envoyé par paulfjujo Voir le message
    bonjour,



    revoir la taille à 17 pour les messages1 2 et 3
    16 caracteres + terminateur 0

    char message1[17]="";
    char message2[17]="";
    char message3[17]="";
    Merci , je fais la modif

    Citation Envoyé par paulfjujo Voir le message
    nota: tu peux utiliser une seule table message pour tous les textes à afficher !
    à moins d'en avoir besoin par ailleurs
    j'aimerai bien, cela voudrait dire quel soit de la taille de l'écran +0 , c'est ça : char message1[33]="";

    Code:
    char message[17]="";
    
    char corps[10]="Corps";
    char jambes[10]="Jambes";
    char temps[10]="temps"
    
    if (val.Gdome!=old_val.Gdome)
     {  
      clear_lcd ();
    
    //calibre tes affichages sur 16 cars
    // 1234567890123456
    //"Corps:XXXX Temps"  <-  16 cars 
        sprintf (message,"%s:%4d %s",corps,val.Gdome,temps);
        xy_lcd (1,1);
        aff_txt(message);
        
    //"Jambes: YYYY  ZZ"  <- 16 cars
       sprintf (message,"%s: %4d  %2d",jambes,val.Pdome,val.tempo);
        xy_lcd (1,2);
        aff_txt(message);
         
        old_val.Gdome=val.Gdome;
     }

    Je vois que tu conserve l'effacement total du LCD ???[/QUOTE]

    Oui pour le moment, je vais par étape et éviter les complications , merci

    -----

  2. #32
    davidif

    Re : utilisation d'afficheur 2x16

    désolé mais là, je comprend pas trop :

    j'ai fais les changements, mais a priori j'ai compris ce que tu me disais à propos des tableaux message 16+0 pour remplir la ligne
    par contre, de quel taille devrai être les texts que j'affiche, par exemple :

    char corps[10]="Corps";
    char jambes[10]="Jambes";
    char temps[10]="temps";

    merci

  3. #33
    davidif

    Re : utilisation d'afficheur 2x16

    j'ai bien mes déclarations, respecter la taille des lignes

    Code:
    char message1[17]="";
    char message2[17]="";
    char message3[17]="";
    char corps[10]="Corps";
    char jambes[10]="Jambes";
    char temps[10]="temps";
    
        if (val.Gdome!=old_val.Gdome)
        {  
        uint16_t i;    
        
        i=1000;
            
        clear_lcd ();
        
        sprintf (message1,"%s:%4d %s",corps,val.Gdome,temps);
        xy_lcd (1,1);
        aff_txt(message1);
        
        sprintf (message2,"%s:%4d %2d",jambes,val.Pdome,val.tempo);
        xy_lcd (1,2);
        aff_txt(message1);
    
        old_val.Gdome=val.Gdome;
        
        }
    et je n'arrive qu'à afficher une ligne à chaque fois, soit la première , soit la deuxième mais pas les deux

    mon code aff_txt, serait en cause ?

    Code:
    void xy_lcd (uint8_t x, uint8_t y)
    {
          
    uint8_t  tempo;
    tempo=200;
        
        
    if (y==1)
         SPI_Exchange8bit(0x80+x-1); //positionne la ligne 1 aux coordonnées (x, 1).
    if (y==2)
         SPI_Exchange8bit(0xC0+x-1); //positionne la ligne 2 aux coordonnées (x, 2).
    
    while(tempo!=0){ tempo--;}  
        
    }
    
    
    void aff_txt(uint8_t *message)
    {
        while(*message!= '\0')
        { 
            if(*message=='\r')
            xy_lcd(1,2);
            else
            write_lcd (*message); //écriture sur le LCD d'un caractère du message.
            message++;
        };
    }
    Merci pour ton aide

  4. #34
    paulfjujo

    Re : utilisation d'afficheur 2x16

    Citation Envoyé par davidif Voir le message
    désolé mais là, je comprend pas trop :

    j'ai fais les changements, mais a priori j'ai compris ce que tu me disais à propos des tableaux message 16+0 pour remplir la ligne
    par contre, de quel taille devrai être les texts que j'affiche, par exemple :

    char corps[10]="Corps";
    char jambes[10]="Jambes";
    char temps[10]="temps";

    merci

    taille suffisante puisque le message ne fait que 6 cars maxi

    le curseur etait mal repositioné !

    Code:
    void aff_txt_ici ( uint8_t x,  uint8_t y, uint8_t *message)
    {
        
        xy_lcd(x,y);
       while(*message!= '\0')
        { 
            write_lcd (*message); //écriture sur le LCD d'un caractère du message.
            message++;
        };
    }
    
    
    
    
    ........
    
      if (val.Gdome!=old_val.Gdome)
        {  
        uint16_t i;    
        
        i=1000;   // used for what ?
            
        clear_lcd ();
        
        sprintf (message1,"%s:%4d %s",corps,val.Gdome,temps);
         aff_txt_ici(1,1,message1);
        
        sprintf (message2,"%s:%4d %2d",jambes,val.Pdome,val.tempo);
        aff_txt_ici(1,2,message1);
    
        old_val.Gdome=val.Gdome;
        
        }
    Dernière modification par paulfjujo ; 15/08/2016 à 13h42.

  5. #35
    davidif

    Re : utilisation d'afficheur 2x16

    Merci pour ton aide ,

    j'ai toujours le problème, j'ai bien repris ce que tu m'as dit mais je ne peux toujours pas afficher sur les deux lignes

    je ne t'es pas montré mon code XY :

    Code:
    void xy_lcd (uint8_t x, uint8_t y)
    {
          
    uint8_t  tempo;
    tempo=200;
        
        
    if (y==1)
         SPI_Exchange8bit(0x80+x-1); //positionne la ligne 1 aux coordonnées (x, 1).
    if (y==2)
         SPI_Exchange8bit(0xC0+x-1); //positionne la ligne 2 aux coordonnées (x, 2).
    
    while(tempo!=0){ tempo--;}  
        
    }
    j'ai peut-être un problème à ce niveau là , je vais chercher

    si je souhaite afficher indépendamment sur une des deux lignes , j'y arrive mais bizarrement pas les deux en même temps ,

  6. #36
    davidif

    Re : utilisation d'afficheur 2x16


  7. #37
    satinas

    Re : utilisation d'afficheur 2x16

    fais un essai en multipliant par 10 toutes les tempos.
    si c'est bon, les tempos sont peut être un peu limites pour certaines des instructions.

  8. #38
    davidif

    Re : utilisation d'afficheur 2x16

    je mes également mon init afficheur, en cas ou j'aurai loupé quelque chose

    Code:
    void init_afficheur(void)
    {
        uint16_t m,n,a ;
        
        a=1000;
        n=200;
        m=n;
    
        RS_AFF_SetLow();
               
        
        while(a!=0){  
        a--;}
        //m=n;
        SPI_Exchange8bit(0x39);  //Fonction set
        while(m!=0){  
        m--;}
        m=n;
        //tempo de 26.3us
        SPI_Exchange8bit(0x1C);  //Bias set  
        while(m!=0){  
        m--;}
        m=n;
        //tempo de 26.3us
        SPI_Exchange8bit(0x52);  //power control
        while(m!=0){  
        m--;}
        m=n;
        //tempo de 26.3us
        SPI_Exchange8bit(0x69);  //follow controle
        while(m!=0){  
        m--;}
        m=n;
        //tempo de 26.3us
        SPI_Exchange8bit(0x74);  //contraste
        while(m!=0){  
        m--;}
        m=n;
        //tempo de 26.3us
        
        SPI_Exchange8bit(0x38);  //fonction set 
        while(m!=0){  
        m--;}
        m=n;
        //tempo de 26.3us
        SPI_Exchange8bit(0x0F);  //Dysplay
        while(m!=0){  
        m--;}
        m=n;
        //tempo de 26.3us
        SPI_Exchange8bit(0x01);  //clear
        while(m!=0){  
        m--;}
        m=n;
        //tempo de 1.08ms
        SPI_Exchange8bit(0x06);  //Entry mode
        while(m!=0){  
        m--;}
        m=n;
        //tempo de 1.08ms
        SPI_Exchange8bit(0x0C);  //Entry mode
        while(m!=0){  
        m--;}
      
        
        
    }

  9. #39
    davidif

    Re : utilisation d'afficheur 2x16

    Citation Envoyé par satinas Voir le message
    fais un essai en multipliant par 10 toutes les tempos.
    si c'est bon, les tempos sont peut être un peu limites pour certaines des instructions.
    Merci , c'est que j'avais déjà fais mais ça change rien

  10. #40
    paulfjujo

    Re : utilisation d'afficheur 2x16

    Est-ce un LCD en mode SPI ?
    ou classique LCD en mode parallele ?
    utilises-tu une bibliotheque pour le LCD ?

    0x80 correspond bien normalement à ligne 1
    et 0xC0 à la ligne 2
    ..mais il peut y avoir des CAS SPECIAUX..


    Tes tempos sont trop faibles !

    il faut environ >= 2,5mS pour deplacer le curseur .
    test avec 65000 , quite à reduire ensuite

    FOSC = ???

    Code:
    void xy_lcd (uint8_t x, uint8_t y)
    {
          
    unsigned int  tempo;   // cvariable 16 bits non signée
    tempo=65500;
        
        
    if (y==1)
         SPI_Exchange8bit(0x80+x-1); //positionne la ligne 1 aux coordonnées (x, 1).
    if (y==2)
         SPI_Exchange8bit(0xC0+x-1); //positionne la ligne 2 aux coordonnées (x, 2).
    
    while(tempo!=0){ tempo--;}  
        
    }

  11. #41
    paulfjujo

    Re : utilisation d'afficheur 2x16

    D'accord avec Satinas ...
    Les LCD recalcitrants necessite des tempos importantes en mS et non en µS
    surtout sur la phase d'init .. qui n'est faite qu'une seule fois en principe.

  12. #42
    davidif

    Re : utilisation d'afficheur 2x16

    ça y est , j'ai trouvé !!
    En fait, il fallait effectivement repositionné le curseur après l'affichage

    Code:
    void aff_txt( uint8_t x,  uint8_t y, uint8_t *message)
    {
    
        
        xy_lcd(x,y);
       while(*message!= '\0')
        { 
            write_lcd (*message); //écriture sur le LCD d'un caractère du message.
            message++;
        };
        
        RS_AFF_SetLow();               //Je repositionne mon curseur ici 
        SPI_Exchange8bit(0x02);
        
    }

  13. #43
    paulfjujo

    Re : utilisation d'afficheur 2x16

    En fait, il fallait effectivement repositionné le curseur après l'affichage
    c'est pourtant le role de " xy_lcd(x,y);" de positionner le curseur..
    je ne vois pas pourquoi il faudrait faire une commande goto HOME (code 02)

    il doit y avoir un smilblick ailleurs..
    ton clear_lcd (); remet -il le curseur au debut apres effacement ?


    exemple utilisé avec un LCD en I2C (et non SPI)

    Code:
    void LCD_Write_Text_At(unsigned int Ligne,unsigned int col,char * t1)
    { //.. ligne 1 ou 2
      //.. col de 1 à 16
      int i;
      I2Cx_Start();
      I2Cx_Wr(LCD_ADR); // i2c slave Address
      I2Cx_Wr(0x00); // Control byte for Instruction
      if(col>NbCarPL) col=NbCarPL;
      switch (Ligne)
      {
      case 1:
          I2Cx_Wr(0x80+col-1); // DDRAM Address 1ere ligne
          break;
      case 2:
          I2Cx_Wr(0xc0+col-1); // DDRAM Address 2em ligne
          break;
      default:
          break ;
      }
      I2Cx_Repeated_Start();
      I2Cx_Wr(LCD_ADR); // i2c slave Adress
      I2Cx_Wr(0x40); // Control byte for Data
      i=col;
      while(*(t1))
      {
      I2Cx_Wr(0x80+*(t1));
      t1++;
      i++;
      if (i>NbCarPL) break;
      }
      I2Cx_Stop();
    }

  14. #44
    davidif

    Re : utilisation d'afficheur 2x16

    Bah, normalement le clear remet le curseur à 0 effectivement, après je sais pas si ça fait une différence mais je suis en SPI
    Mais je vais creuser ça

    Code:
    void clear_lcd (void)
    
    {
        
        uint8_t  tempo;
        tempo=2000;
        
        
        RS_AFF_SetLow();
        SPI_Exchange8bit(0x01);
        while(tempo!=0){  
        tempo--;}
        
        
    }
    Dernière modification par davidif ; 15/08/2016 à 17h16.

  15. #45
    davidif

    Re : utilisation d'afficheur 2x16

    Bonjour,

    oui le clear s'occupe bien de replacer le curseur, seulement je le met au début de la fonction d'affichage, après je fais plusieurs affichages dont le curseur n'est pas replacé

    Code:
         if (val.Gdome!=old_val.Gdome)
        { 
    
               
        clear_lcd ();  // mon clear est placé en début 
        
        sprintf (message1,"%s:%4d %s",corps,val.Gdome,temps);
        aff_txt(1,1,message1);
        
        // ici le curseur n'est pas repositionné pour ré-afficher la prochaine commande
    
        sprintf (message1,"%s:%4d %2d",jambes,val.Pdome,val.tempo);
        aff_txt(1,2,message1);
    
        old_val.Gdome=val.Gdome;
        
        }

  16. #46
    satinas

    Re : utilisation d'afficheur 2x16


  17. #47
    davidif

    Re : utilisation d'afficheur 2x16

    intéressant, bon sur ma carte principal (wifi) je suis sur un pic32mx plutôt mais c'est le même environnement, c'est sur cette carte là d'ailleurs que je branche en option une commande filaire(via rs232) qui est équipé du lcd.

    J'ai réussi pas mal de fonction nouvelle pour moi , tout comme la pile TCPIP et ça liaison http, avec une application (IOS, ANDROID) Mon seul gros problème que je n'ai toujours pas résolu et ça fait parti d'une question d'un autre poste, c'est l'utilisation de la flash interne pour mémoriser mes paramètres réseau modifier via la page web, et donc là je galère.

  18. #48
    davidif

    Re : utilisation d'afficheur 2x16

    Bonjour,

    Petit question :

    mes valeurs à afficher varie de 0 à 100 par pas de 5
    et je souhaiterai afficher des valeurs comprise entre 0 et 10 par pas de 0.5, au premier abord je me suis dis divisons et affichons un float seulement ça n'a pas eu l'effet escompter (: trop de 0 derrière la virgule avec un chiffre afficher bizzard

    ex : val.Gdome=95;


    i=val.Gdome/10;

    sprintf (message1,"%s:%f %s",corps,i,temps);

    alors

    c=val.Gdome/100;
    d=val.Gdome/10;
    u=val.Gdome/1;

    j'ai pensé décomposer le nombre en plusieurs chiffres, enfin de faire comme ça

    sprintf (message1,"%s:%d%d.%d %s",corps,c,d,u,temps);

    mais ça ne donne pas de résultat concluant

    j'avoue avoir été vite dans ma réflexion, après est-ce qu'une instruction en c permettrait de le faire sans avoir à coder quelques chose de plus complexe

    merci

  19. #49
    davidif

    Re : utilisation d'afficheur 2x16

    en fait , quand je fais ça

    float d=val.Gdome/10;

    sprintf (message1,"%s:%.1f %s",corps,d,temps);

    le chiffre derrière la virgule reste à 0 ?

  20. #50
    davidif

    Re : utilisation d'afficheur 2x16

    Autant pour moi , trouvé (:

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. Afficheur LCD 2X16 COG
    Par foudefoot dans le forum Électronique
    Réponses: 12
    Dernier message: 20/09/2012, 09h25
  2. Affichage répeté sur mon afficheur LCD 2x16 ?!
    Par badr-MOB dans le forum Électronique
    Réponses: 4
    Dernier message: 22/02/2012, 15h07
  3. Afficheur LCD 2x16 caractères
    Par invite958adb57 dans le forum Électronique
    Réponses: 9
    Dernier message: 22/02/2012, 12h00
  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 Roukben dans le forum Électronique
    Réponses: 4
    Dernier message: 01/02/2006, 15h11
Découvrez nos comparatifs produits sur l'informatique et les technologies.