IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

pic 16f877 avec LCD 16*2


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    université
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : université
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Par défaut pic 16f877 avec LCD 16*2
    Bonjour tout le mode
    mon schema c'est un pic 16f877 relié a 2 barregraph et 2 resistance variable pour donner en temps reel le niveau d'un liquide (simulation)
    sur les barregraphe a 10 leds j'ai utiliser que les 8 premiere
    voila le schema :
    Nom : Forum2.jpg
Affichages : 7501
Taille : 287,7 Ko

    et voila le programme pour les 2 barregraph :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    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 pour faire fonctionner le LCD pour qu'il affiche le niveau aussi
    qui peut me donner le programme SVP sa m'aidera beacoup

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 289
    Billets dans le blog
    48
    Par défaut
    salut,

    tu utilises mikroC, non ? Il y a une Lcd Library avec un exemple.

  3. #3
    Membre averti
    Homme Profil pro
    université
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : université
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Par défaut
    Citation Envoyé par f-leb Voir le message
    salut,

    tu utilises mikroC, non ? Il y a une Lcd Library avec un exemple.
    oui justement je suis aller dans l'index des example mais sa ne marche pas
    j'ai jamais programmer j'ai juste vue des tuto sur internet

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 289
    Billets dans le blog
    48
    Par défaut
    Hé bien inspire-toi de l'exemple qui figure dans le lien que je t'ai donné. Tu définis les connexions du LCD et tu insères les commandes nécessaires dans ton code, un truc comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char txt[] = "Hello World"; 
     
    Lcd_Init();                        // Initialize LCD
    Lcd_Cmd(_LCD_CLEAR);               // Clear display
    Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
     
    Lcd_Out(1,1,txt);                 // Write text in first row

  5. #5
    Membre averti
    Homme Profil pro
    université
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : université
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Par défaut
    mais je dois utiliser quel example pour mon montage ?

  6. #6
    Membre averti
    Homme Profil pro
    université
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : université
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Par défaut
    j'ai commancer sur le mikroC pour le lcd avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // 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 pour le faire fonctioner ?
    Merci

  7. #7
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 289
    Billets dans le blog
    48
    Par défaut
    Voilà les déclarations des connexions faites. Pour la suite, un truc comme :

    Citation Envoyé par f-leb Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char txt[] = "Hello World"; 
     
    Lcd_Init();                        // Initialize LCD
    Lcd_Cmd(_LCD_CLEAR);               // Clear display
    Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
     
    Lcd_Out(1,1,txt);                 // Write text in first row
    un copier/coller de l'exemple de la library lcd adapté à l'affichage d'un magnifique "Hello World" sur la 1ère ligne du lcd.
    Avec les commentaires en plus (certes en angliche) dans le code tu devrais comprendre les instructions et commencer à afficher quelque chose

  8. #8
    Membre averti
    Homme Profil pro
    université
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : université
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Par défaut
    Citation Envoyé par f-leb Voir le message
    Voilà les déclarations des connexions faites. Pour la suite, un truc comme :



    un copier/coller de l'exemple de la library lcd adapté à l'affichage d'un magnifique "Hello World" sur la 1ère ligne du lcd.
    Avec les commentaires en plus (certes en angliche) dans le code tu devrais comprendre les instructions et commencer à afficher quelque chose
    mais je veut pas afficher hello word

  9. #9
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 289
    Billets dans le blog
    48
    Par défaut
    Citation Envoyé par zapollon Voir le message
    mais je veut pas afficher hello word
    Ben oui, je me doute bien, mais il faut bien commencer . Tu pourrais au moins afficher un "Hello world" dans ton programme pour vérifier que ton lcd est bien connecté.

  10. #10
    Membre averti
    Homme Profil pro
    université
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : université
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Par défaut
    Citation Envoyé par f-leb Voir le message
    Ben oui, je me doute bien, mais il faut bien commencer . Tu pourrais au moins afficher un "Hello world" dans ton programme pour vérifier que ton lcd est bien connecté.
    oui merci mais j'ai deja tester avec un programe et il est bien branché

  11. #11
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 289
    Billets dans le blog
    48
    Par défaut
    par exemple pour le 1er bargraphe...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    niv_bac1= Adc_Read(0); // lecture du niveau de fluide du bac1
     
    j= VnDuNiveau(niv_bac1);  // j entre 0 et 7
     
    Lcd_Out(1,1, "niveau 1 :");  // afficher le texte sur la 1re ligne
    Lcd_Chr(12,1,48+j);           // puis a coté le caractère ascii correspondant au numéro du niveau: 48='0', 49='1', 50='2' etc

  12. #12
    Membre averti
    Homme Profil pro
    université
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : université
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Par défaut
    j'ai ecris un autre code sa marche mais le resultat sur les barre graph utilise que les 7 premier leds alors que moi je veut les 8 premiere
    et sur le lcd sa affiche pas normalement voila l'image :
    Nom : forum.jpg
Affichages : 2307
Taille : 289,1 Ko
    et voila le nouveau code programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
     
     
    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);
     }
    merci

  13. #13
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 289
    Billets dans le blog
    48
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char niveau1[4];
    ...
     
      floattostr(niv_bac1,niveau1) ;
      lcd_out(1,6,niveau1) ;
    Le problème avec le float c'est que le résultat 1023 te retourne en fait 1022.999. Il faut augmenter la taille du tableau, 4 ce n'est pas assez (nb de caractères maxi +1)

    http://www.mikroe.com/download/eng/d...htm#floattostr
    Destination string should be at least 14 characters in length.

  14. #14
    Membre averti
    Homme Profil pro
    université
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : université
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Par défaut
    donc je fait comment ?

Discussions similaires

  1. [PIC] [PIC 16F877] Contrôle d'accès,LCD 2*16,clavier 3*4,2 led
    Par Ma nel dans le forum Embarqué
    Réponses: 2
    Dernier message: 20/02/2015, 18h11
  2. pic 16f877 avec mikroC
    Par zapollon dans le forum C
    Réponses: 9
    Dernier message: 13/05/2014, 16h19
  3. Réponses: 8
    Dernier message: 04/05/2012, 12h58
  4. [PIC] Pause avec les timers
    Par Ekinoks dans le forum Assembleur
    Réponses: 1
    Dernier message: 08/05/2005, 00h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo