EasyPic 4 Conversion Analogique Numérique
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

EasyPic 4 Conversion Analogique Numérique



  1. #1
    invite46e41aed

    EasyPic 4 Conversion Analogique Numérique


    ------

    Bonjour à tous,
    Je suis étudiant en prépa, et cette année j'ai choisi de réaliser un thermocouple, dispositif qui nécessite un convertisseur analogique numérique. J'ai opté pour la CAN 10 bit de la carte Easypic avec laquelle je me suis familiarisé.

    Grâce à l'aide des certains membres du forum j'ai pu élaborer un programme qui convertit la tension analogique aux bornes du potentiomètre et qui l'affiche. Ce programme marche plutôt bien, (juste un problème de puissance de dix ).
    Mon problème aujourd'hui est d'établir la liaison entre la CAN et la véritable tension à mesurer. J'ai relié le port à une source de tension qui peut varier entre 0 et 5v et je voulais faire ma conversion. Seulement voila, le hic, c'est que cela ne fonctionne pas j'ai comme l'impression que le port que j'utilise n'est pas en entrée même si je l'ai déclaré comme tel.
    Voici mon programme (j'ai donc relié la tension que je voulais mesurer au Port A.3.)
    Code:
    sbit LCD_RS at RD2_bit;
    sbit LCD_EN at RD3_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;                      //le lcd est sur le portD
    sbit LCD_RS_Direction at TRISB4_bit;
    sbit LCD_EN_Direction at TRISB5_bit;
    sbit LCD_D4_Direction at TRISB0_bit;
    sbit LCD_D5_Direction at TRISB1_bit;
    sbit LCD_D6_Direction at TRISB2_bit;
    sbit LCD_D7_Direction at TRISB3_bit;
    
    char txt[15]; // on déclare un tableau du type char
    unsigned int temp_res;
    float tension;   // result est une variable decimale de type float.
    void main() {
    ADCON1=0X80;
    TRISA=0xFF; //on met le portA en entrée car les deux potentiomètres sont situés sur le PortA
    TRISD=0; //LCD en sortie
    Lcd_Init();
      Lcd_Cmd(_LCD_CLEAR);
      Lcd_Cmd(_LCD_CURSOR_OFF);
      
    do{
    //on lit la valeur du potentiomètre relié à l'entrée A3
    tension=Adc_Read(3)*(0,48828125/100);
    
    FloatToStr(tension, txt);  // conversion d'un entier non signe en chaine de caracteres
    Lcd_Out(1,1,txt);
    Delay_ms(100);
    }
    while(1);
    }
    Merci d'avance pour vos tuyaux,
    En vous souhaitant une bonne journée,
    Cordialement, Arthur.

    -----

  2. #2
    invite5637435c

    Re : EasyPic 4 Conversion Analogique Numérique

    Bonjour,

    c'est quoi ton µC?

  3. #3
    nornand

    Re : EasyPic 4 Conversion Analogique Numérique

    ton lcd affiche quoi ? rien , n'importe quoi, ou autre ?

    tu devrais dèja tester le lcd au démarrage , un message bateau du style "bonjour" comme cela tu sais qu'il fonctionne et tu vois le déroulement du programme.
    Dernière modification par nornand ; 18/02/2013 à 13h12.

  4. #4
    invite5637435c

    Re : EasyPic 4 Conversion Analogique Numérique

    C'est normal tu as oublié de déclarer Adc_Init();

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

    Re : EasyPic 4 Conversion Analogique Numérique

    Merci, ça avance mais c'est pas encore ça. Alors mon Microcontrolleur c'est un PIC F877. Mon écran Lcd marche très bien.

    Donc j'ai sur le lcd des nombre qui s'affichent, en rapport avec l'entrée. Le truc c'est que quand je mets rien en entrée, mais absolument rien (nappe déconnecté) j'ai comme valeur 488 280.9 ou 976 561.8, la valeur affichée oscille irrégulièrement entre ces deux nombres.
    Ensuite en rajoutant les nappes j'observe le même phénomène mais avec 976 561.8 toujours et avec 14 648 428. J'ai constaté qu'en divisant par 10, 14 648 428 on retrouve exactement la somme des deux valeurs précédentes je ne vois absolument d'ou cela peut provenir.

    En plus le produit que j'effectue grâce à la variable "tension" ne dépend pas du coefficient derrière, mais d'après l'aide de MikroC la multiplication ce note bien * et la division /. En bref j'ai beau changer la valeur de mon "0,48828125/0.100" rien n'y fait.

    Merci d'avance pour l'aide

  7. #6
    invite5637435c

    Re : EasyPic 4 Conversion Analogique Numérique

    Oui, ton problème est lié au formatage de tes données.
    Je vais te réécrire la partie en cause.
    @+

  8. #7
    invite46e41aed

    Re : EasyPic 4 Conversion Analogique Numérique

    C'est très gentil, cela n'est pas urgent urgent, donc pas de stress

  9. #8
    invite5637435c

    Re : EasyPic 4 Conversion Analogique Numérique

    Essaye ça j'ai pas compilé.

    Code:
    sbit LCD_RS at RD2_bit;
    sbit LCD_EN at RD3_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;                      //le lcd est sur le portD
    sbit LCD_RS_Direction at TRISB4_bit;
    sbit LCD_EN_Direction at TRISB5_bit;
    sbit LCD_D4_Direction at TRISB0_bit;
    sbit LCD_D5_Direction at TRISB1_bit;
    sbit LCD_D6_Direction at TRISB2_bit;
    sbit LCD_D7_Direction at TRISB3_bit;
    
    char txt1[15], txt2[6];
    
    int ADC_result, temp;
    int result = 0;
    float mesure_tension;
    void main() {
    ADCON1 = 0;  // toutes les entrées sont déclarées en ADC
    TRISA = 0xFF; //on met le portA en entrée car les deux potentiomètres sont situés sur le PortA
    TRISD = 0; //LCD en sortie
    Lcd_Init();
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Cmd(_LCD_CURSOR_OFF);
    Adc_init();
    Delay_ms(100);
    while(1)
           {
                   for(n=0;n<10;n++)  // On fait une moyenne sur 10 mesures
                      {
                      ADC_result = ADC_Get_Sample(3);
                      result  = result + ADC_result;
                      }
                   temp= result / n;
                   result = 0;
                   mesure_tension = (temp * 5) / 1024.0;
                   FloatToStr(mesure_tension, txt1);
                   WordToStr(temp, txt2);
                   Lcd_Out(1, 4, "V =");
                   Lcd_Out(1,7,txt1);
                   Lcd_Out(1, 2, "ADC =");
                   Lcd_Out(2,7,txt2);
                   Delay_ms(100);
           }
    }

  10. #9
    invite46e41aed

    Re : EasyPic 4 Conversion Analogique Numérique

    Ça marche un peu (faut juste modifier
    Code:
     Lcd_Out(1, 2, "ADC =");
    en
    Code:
     Lcd_Out(2, 2, "ADC =");
    Le truc c'est juste que lorsque j'ai rien en entrée le CAN détecte 1 ou 2 sur une échelle de 1023.
    Une autre question: j'ai vu dans l'aide de MikroC pour la fonction ADC_Get_Sample "Note : This function doesn't work with the external voltage reference source, only with the internal voltage reference. " donc si je comprends bien, il me faut le même zéro, pour la carte et mon système, c'est ça?

    Une dernière chose, j'ai pas trouvé le moyen d'effectuer un test correct, avec une pile 1.5V ça ne marche pas, juste en faisant en sorte que les bons endroits se touchent, une idée de test "maison"?
    Merci encore.

  11. #10
    invite5637435c

    Re : EasyPic 4 Conversion Analogique Numérique

    Citation Envoyé par Nowotny Voir le message
    Le truc c'est juste que lorsque j'ai rien en entrée le CAN détecte 1 ou 2 sur une échelle de 1023.
    Normal, il faut filtrer et améliorer ton câblage sur l'entrée de mesure avec une masse en étoile avec AVss.
    Au besoin tu peux enregistrer l'offset en EEPROM et le soustraire dans ton calcul.

    Une autre question: j'ai vu dans l'aide de MikroC pour la fonction ADC_Get_Sample "Note : This function doesn't work with the external voltage reference source, only with the internal voltage reference. " donc si je comprends bien, il me faut le même zéro, pour la carte et mon système, c'est ça?
    Oui, la fonction toute faite ne sait pas prendre en compte Avref+ et Averf- mais seulement Avdd et Avss.

    Une dernière chose, j'ai pas trouvé le moyen d'effectuer un test correct, avec une pile 1.5V ça ne marche pas, juste en faisant en sorte que les bons endroits se touchent, une idée de test "maison"?
    Merci encore.
    Je n'ai pas compris ta question

  12. #11
    invite46e41aed

    Re : EasyPic 4 Conversion Analogique Numérique

    Citation Envoyé par HULK28 Voir le message
    Normal, il faut filtrer et améliorer ton câblage sur l'entrée de mesure avec une masse en étoile avec AVss.
    Au besoin tu peux enregistrer l'offset en EEPROM et le soustraire dans ton calcul.
    Oui, je vais faire une soustraction, restons modeste

    Citation Envoyé par HULK28 Voir le message
    Je n'ai pas compris ta question
    En gros je voudrais le tester avec autre chose que 0 en entrée mais je vois pas très bien comment m'y prendre.

    Merci

  13. #12
    invite5637435c

    Re : EasyPic 4 Conversion Analogique Numérique

    Tu mets un potentiomètre de 5K relié d'un coté à la masse (Avss idéalement) et de l'autre au +5v.
    Le point milieu sera à relier à ton entrée Ana0.
    Tu auras ainsi une variation de 0 à 5V donc 0 à 1023 en résultat de conversion.

  14. #13
    invite5637435c

    Re : EasyPic 4 Conversion Analogique Numérique

    Si tu veux faire l'essai avec une pile tu relies le - de ta pile à ta masse (Avss) et tu fais entrer ton + sur ton entrée ana0.
    Il n'y aucune raison que ça ne fonctionne pas.

  15. #14
    invite46e41aed

    Re : EasyPic 4 Conversion Analogique Numérique

    Youpi j'avais pas pensé à relier à la masse
    Merci et bonne soirée !

Discussions similaires

  1. Conversion analogique numérique dsPIC33
    Par invitec65d82c7 dans le forum Électronique
    Réponses: 1
    Dernier message: 18/03/2012, 21h32
  2. Conversion Analogique Numerique
    Par invite7e89304e dans le forum Électronique
    Réponses: 12
    Dernier message: 03/06/2009, 19h00
  3. Conversion analogique numerique
    Par invitef0934d70 dans le forum Électronique
    Réponses: 1
    Dernier message: 28/11/2008, 12h50
  4. conversion analogique numérique
    Par inviteecb4107d dans le forum Électronique
    Réponses: 4
    Dernier message: 07/08/2008, 16h12
  5. Conversion analogique numérique
    Par invite5fd1a0ec dans le forum Électronique
    Réponses: 5
    Dernier message: 30/12/2007, 12h06
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...