Partage
  • Partager sur Facebook
  • Partager sur Twitter

pic 16f877 avec LCD 16*2

    30 mai 2014 à 15:01:58

    Bonjour tout le monde

    mon schema c'est un pic 16f877 relié a 2 resistance variable et 2 barregraph pour aficher le niveau d'un fluide dans 2 bacs en temps reel , et relié aussi a un LCD 16*2 , j'ai utiliser les 8 premieres leds du barregraphe a 10 leds voici le schema : 

    et voila le programme en C sur mikroC pour les 2 barregraph : 

    unsigned int niv_bac1;
    
    unsigned int niv_bac2;
    
    unsigned char i,j;
    
    unsigned int  niveaux[8] = {127, 254, 382, 510, 638, 776, 894, 1022};
    
     
    
    unsigned char VnDuNiveau(unsigned int val) {
    
       unsigned char i = 0;
    
       while (i < sizeof(niveaux)) {
    
          if (val < niveaux[i])
    
             return i;
    
          else i++;
    
       }
    
       }
    
     
    
     
    
     
    
     
    
       void main() {
    
       // Configuration des pins 2 et 3 en analogique
    
     
    
      TRISA  = 0xFF;  // programmtion du PORTA en entrée
    
      TRISB  = 0;  // programmtion du PORTB en sortie
    
      TRISC  = 0;  // programmtion du PORTC en sortie
    
      TRISD  = 0;  // programmtion du PORTD en sortie
    
      OPTION_REG.NOT_RBPU = 0;
    
     
    
      do {
    
      adcon0=0x80;
    
      niv_bac1= Adc_Read(0); // lecture du niveau de fluide du bac1
    
      //portB=niv_bac1>>2;  //Affichage en binaire du niveau de fluide
    
      j= VnDuNiveau(niv_bac1);
    
     
    
       switch ( j ) {
    
       case 0:
    
            // Code
    
            portB = 0x01;
    
         break;
    
     
    
       case 1:
    
            // Code
    
            portB = 0x03;
    
            break;
    
       case 2:
    
            // Code
    
            portB = 0x07;
    
       break;
    
     
    
       case 3:
    
            // Code
    
            portB = 0x0F;
    
       break;
    
       case 4:
    
        // Code
    
        portB = 0x1F;
    
       break;
    
       case 5:
    
        // Code
    
        portB = 0x3F;
    
       break;
    
       case 6:
    
        // Code
    
        portB = 0x7F;
    
       break;
    
       case 7:
    
        // Code
    
        portB = 0xFF;
    
       break;
    
     
    
            }
    
     
    
     
    
     
    
       adcon0=0x88;                    //du bac1 sur le portB
    
       niv_bac2= Adc_Read(1);   // lecture du niveau de fluide du bac2
    
     
    
     
    
     
    
       //PORTC = niv_bac2>>2;  //Affichage en binaire du niveau de fluide
    
                               //du bac2 sur le portC
    
        j= VnDuNiveau(niv_bac2);
    
     
    
       switch ( j ) {
    
       case 0:
    
            // Code
    
            portC = 0x01;
    
         break;
    
     
    
       case 1:
    
            // Code
    
            portC = 0x03;
    
            break;
    
       case 2:
    
            // Code
    
            portC = 0x07;
    
       break;
    
     
    
       case 3:
    
            // Code
    
            portC = 0x0F;
    
       break;
    
       case 4:
    
        // Code
    
        portC = 0x1F;
    
       break;
    
       case 5:
    
        // Code
    
        portC = 0x3F;
    
       break;
    
       case 6:
    
        // Code
    
        portC = 0x7F;
    
       break;
    
       case 7:
    
        // Code
    
        portC = 0xFF;
    
       break;
    
     
    
            }
    
     
    
                               
    
                               
    
                               
    
                               
    
                               
    
                               
    
                               
    
                               
    
                               
    
                               
    
                               
    
                               
    
                   } while(1);
    
     }



    je cherche le programme de l'ecran LCD pour qu'il affiche lui aussi le niveau de fluide mais je ne trouve pas 
    qui peut m'aider SVP 
    je ne suis pas programateur 

    -
    Edité par zapollon 1 juin 2014 à 18:30:24

    • Partager sur Facebook
    • Partager sur Twitter
      30 mai 2014 à 17:54:39

      Salut,

      Je ne suis pas un expert dans la programmation des PIC, donc je pourrais pas trop t'aider dans ton problème malheureusement, mais avec un peu de recherche, j'ai trouver ceci, et ceci.

      Ensuite, a toi de faire correspondre les différentes sorties de ton PIC aux différentes entrées de ton écran LCD, pour ensuite afficher les informations que tu souhaite ;)
      Analyse bien le code que je t'ai fournit (voir le lien) pour faire correspondre les entrées/sorties de t'es composants.

      Cependant, la prochaine fois, merci d'utiliser les balises de code pour un affichage plus clair :)
      Désolé de pas t'aider plus, car c'est pas vraiment ma spécialité.

      PS : Soit un peu patient ;)

      EDIT : J'ai une autre piste qui pourra t'aider : il faut que tu fasse correspondre les broches D4, D5, D6 et D7 de ton écran LCD aux broches RD4, RD5, RD6 et RD7 de ton PIC, et ensuite, utilise les fonctions nécessaires pour initialiser la connexion et l'affichage des données.

      -
      Edité par vegnagun 30 mai 2014 à 18:02:07

      • Partager sur Facebook
      • Partager sur Twitter
        30 mai 2014 à 22:13:19

        vegnagun a écrit:

        Salut,

        Je ne suis pas un expert dans la programmation des PIC, donc je pourrais pas trop t'aider dans ton problème malheureusement, mais avec un peu de recherche, j'ai trouver ceci, et ceci.

        Ensuite, a toi de faire correspondre les différentes sorties de ton PIC aux différentes entrées de ton écran LCD, pour ensuite afficher les informations que tu souhaite ;)
        Analyse bien le code que je t'ai fournit (voir le lien) pour faire correspondre les entrées/sorties de t'es composants.

        Cependant, la prochaine fois, merci d'utiliser les balises de code pour un affichage plus clair :)
        Désolé de pas t'aider plus, car c'est pas vraiment ma spécialité.

        PS : Soit un peu patient ;)

        EDIT : J'ai une autre piste qui pourra t'aider : il faut que tu fasse correspondre les broches D4, D5, D6 et D7 de ton écran LCD aux broches RD4, RD5, RD6 et RD7 de ton PIC, et ensuite, utilise les fonctions nécessaires pour initialiser la connexion et l'affichage des données.

        -
        Edité par vegnagun il y a environ 4 heures

        je suis nouveau dans le forum

        et encore merci je vais eseyé :/



        • Partager sur Facebook
        • Partager sur Twitter
          30 mai 2014 à 23:14:11

          j'ai eseyé mais meme les code dans les lien sont faux 

          pas d'autre aide svp ?

          • Partager sur Facebook
          • Partager sur Twitter
            31 mai 2014 à 13:07:11

            zapollon a écrit:

            j'ai eseyé mais meme les code dans les lien sont faux 

            Qu'est-ce qu'il ne marche pas ? Obtient tu des erreurs, quelques chose s'affiche sur ton écran LCD ? Un peu plus t'aide de t'a part nous aiderais aussi ;) . Montre nous au moins ton code pour qu'on puisse t'aider (n'oublie pas la balise de code).

            Il faut pas faire un simple copier-coller des codes, il faut l'adapter à ton propre programme.

            -
            Edité par vegnagun 31 mai 2014 à 13:10:51

            • Partager sur Facebook
            • Partager sur Twitter
              31 mai 2014 à 14:42:35

              vegnagun a écrit:

              zapollon a écrit:

              j'ai eseyé mais meme les code dans les lien sont faux 

              Qu'est-ce qu'il ne marche pas ? Obtient tu des erreurs, quelques chose s'affiche sur ton écran LCD ? Un peu plus t'aide de t'a part nous aiderais aussi ;) . Montre nous au moins ton code pour qu'on puisse t'aider (n'oublie pas la balise de code).

              Il faut pas faire un simple copier-coller des codes, il faut l'adapter à ton propre programme.

              -
              Edité par vegnagun il y a environ 1 heure

              oui je sais , j'ai pas encore le code , je cherche un montage qui ressemle au mien pour pouvoir adapter mon code sur mon montage , je suis pas programateur c pour cela que je peut pas ecrire un code tout seul 

              • Partager sur Facebook
              • Partager sur Twitter
                31 mai 2014 à 16:36:50

                zapollon a écrit:

                oui je sais , j'ai pas encore le code , je cherche un montage qui ressemle au mien pour pouvoir adapter mon code sur mon montage , je suis pas programateur c pour cela que je peut pas ecrire un code tout seul

                Je comprend pas trop, tu cherche le code en C qui fait va te permettre d'afficher les informations sur ton écran LCD ? Si oui, je pense pas que tu va vraiment trouver un code déjà tout fait, et faire un simple copier-coller, cependant, tu peut tout de même apprendre le C.

                Désolé, mais je ne vais pas pouvoir t'aider sur ton problème. Bonne chance pour t'es recherches ;)

                • Partager sur Facebook
                • Partager sur Twitter
                  1 juin 2014 à 13:35:59

                  Je déplace en section électronique ;)

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Retrouvez moi sur mon blog et ma chaine Youtube !

                    1 juin 2014 à 15:00:25

                    bonjour,

                    il faut poster le code entre des balises code (ça fait peut-être 3 ou 4 fois qu'on te le dit et que c'est toujours pas fait...). sinon, le code est illisible, et nous bah on a pas envie d'aider quelqu'un qui fait pas les efforts simples relevant du clic-bouton et de la recherche google.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    oui. non. enfin je regarde et je te dis.

                      1 juin 2014 à 18:50:24

                      j'ai commancer avec ça 

                      // Lcd pinout settings
                      sbit LCD_RS at RD1_bit;
                      sbit LCD_EN at RD0_bit;
                      sbit LCD_D7 at RD7_bit;
                      sbit LCD_D6 at RD6_bit;
                      sbit LCD_D5 at RD5_bit;
                      sbit LCD_D4 at RD4_bit;
                      
                      // Pin direction
                      sbit LCD_RS_Direction at TRISD1_bit;
                      sbit LCD_EN_Direction at TRISD0_bit;
                      sbit LCD_D7_Direction at TRISD7_bit;
                      sbit LCD_D6_Direction at TRISD6_bit;
                      sbit LCD_D5_Direction at TRISD5_bit;
                      sbit LCD_D4_Direction at TRISD4_bit;

                      mais que faire ensuite ?

                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 juin 2014 à 22:53:00

                        Pourquoi ? Le dernier jour c'est demain ? Tu postes un message le dimanche à 19h, faire un up à 23h ne sert à rien (et transgresse la règle des up toute les 24h...)

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Retrouvez moi sur mon blog et ma chaine Youtube !

                          2 juin 2014 à 16:54:35

                          j'ai ecris un autre programme ça marche mais pas comme il faut ,

                          sur les barregraph ya que les 7 premiere leds qui s'activ alors que normalement c'est les 8 premiere 

                          et sur le lc ya des chiffre bizzare voila une image sur proteus :

                          et voila le nouveau code programme :

                          float niv_bac1;
                          float niv_bac2;
                          unsigned char i,j;
                          float  niveaux[8] = {127, 255, 383, 511, 639, 777, 895, 1023};
                          sbit LCD_RS at RD1_bit ;
                          sbit LCD_EN at RD0_bit ;
                          sbit LCD_D4 at RD4_bit ;
                          sbit LCD_D5 at RD5_bit ;
                          sbit LCD_D6 at RD6_bit ;
                          sbit LCD_D7 at RD7_bit ;
                          
                          sbit LCD_RS_Direction at TRISD1_bit ;
                          sbit LCD_EN_Direction at TRISD0_bit ;
                          sbit LCD_D4_Direction at TRISD4_bit ;
                          sbit LCD_D5_Direction at TRISD5_bit ;
                          sbit LCD_D6_Direction at TRISD6_bit ;
                          sbit LCD_D7_Direction at TRISD7_bit ;
                          
                          
                          
                          char niveau1[4];
                          char niveau2[4];
                          unsigned char VnDuNiveau(float  val) {
                             unsigned char i = 0;
                             while (i <= sizeof(niveaux)) {
                                if (val <= niveaux[i])
                                   return i;
                                else i++;
                             }
                             }
                          
                          
                          
                          
                            void initialisation(){
                          TRISA  = 0xFF;  // programmtion du PORTA en entrée
                          TRISB  = 0;  // programmtion du PORTB en sortie
                          TRISC  = 0;  // programmtion du PORTC en sortie
                          TRISD  = 0;  // programmtion du PORTD en sortie
                          OPTION_REG.NOT_RBPU = 0;
                          lcd_init() ;
                          lcd_cmd(_lcd_clear) ;
                          lcd_cmd(_lcd_cursor_off) ;
                          lcd_out(1,1,"Bac1: ") ;
                          lcd_out(2,1,"Bac2: ") ;
                          adc_init() ;
                          portd=0X00 ;
                          
                          }
                          
                             void main() {
                              initialisation() ;
                              OPTION_REG.NOT_RBPU = 0;
                          
                            do {
                            adcon0=0x80;
                            niv_bac1= Adc_Read(0); // lecture du niveau de fluide du bac1
                          
                            j= VnDuNiveau(niv_bac1);
                          
                             switch ( j ) {
                             case 0:
                                  // Code
                                  portB = 0x00;
                               break;
                          
                             case 1:
                                  // Code
                                  portB = 0x01;
                                  break;
                             case 2:
                                  // Code
                                  portB = 0x03;
                             break;
                          
                             case 3:
                                  // Code
                                  portB = 0x07;
                             break;
                             case 4:
                              // Code
                              portB = 0x0F;
                             break;
                             case 5:
                              // Code
                              portB = 0x1F;
                             break;
                             case 6:
                              // Code
                              portB = 0x3F;
                             break;
                             case 7:
                              // Code
                              portB = 0x7F;
                             break;
                            case 8:
                              // Code
                              portB = 0xFF;
                             break;
                                  }
                          
                            floattostr(niv_bac1,niveau1) ;
                            lcd_out(1,6,niveau1) ;
                          
                             adcon0=0x88;
                             niv_bac2= Adc_Read(1);   // lecture du niveau de fluide du bac2
                          
                             j= VnDuNiveau(niv_bac2);
                          
                             switch ( j ) {
                             case 0:
                                  // Code
                                  portC = 0x00;
                               break;
                          
                             case 1:
                                  // Code
                                  portC = 0x01;
                                  break;
                             case 2:
                                  // Code
                                  portC = 0x03;
                             break;
                          
                             case 3:
                                  // Code
                                  portC = 0x07;
                             break;
                             case 4:
                              // Code
                              portC = 0x0F;
                             break;
                             case 5:
                              // Code
                              portC = 0x1F;
                             break;
                             case 6:
                              // Code
                              portC = 0x3F;
                             break;
                             case 7:
                              // Code
                              portC = 0x7F;
                             break;
                             case 8:
                              // Code
                              portC = 0xFF;
                             break;
                          
                            }
                          
                          
                            floattostr(niv_Bac2,niveau2) ;
                            lcd_out(2,6,niveau2) ;
                          
                          
                           } while(1);
                           }

                          aider moi SVP 

                          • Partager sur Facebook
                          • Partager sur Twitter

                          pic 16f877 avec LCD 16*2

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown