Fréquence de mesure d'une CAN (Easypic 4)
Répondre à la discussion
Affichage des résultats 1 à 29 sur 29

Fréquence de mesure d'une CAN (Easypic 4)



  1. #1
    Nowotny

    Fréquence de mesure d'une CAN (Easypic 4)


    ------

    Bonjour,
    Je travaille actuellement sur un projet qui nécessite une conversion analogique, je dois convertir une tension variant entre 0 et 5V. Le programme est fait et marche. Ma question est d'ordre technologique: A quelle fréquence mesure la CAN sachant que j'utilise un PIC 16F877 de fréquence 8 Mhz. Est-ce aussi la fréquence de mesure?
    Sur le site de Mikroelectronikia, j'ai trouvé une explication, que je ne comprends malheureusement pas elle est ici .
    On y parle de temps d'acquisition qui est, dans le pire des cas de 20 us, et si on transforme ça en fréquence ça donne 50 kHz. Ainsi rien qu'avec le temps d'acquisition la fréquence de mesure est réduite à 50kHz?

    Je dois avouer que dans la suite de l'explication, j'ai décollé du fait de l'anglais mais surtout de mes connaissances limitées en électronique.

    Merci d'avance pour vos futures réponses,
    Cordialement, Arthur.

    -----

  2. #2
    Jack
    Modérateur

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Un traducteur automatique donne déjà une petite idée.
    the analog input and before starting conversion it is necessary to provide at least 20uS time delay to enable the ACD maximal conversion accuracy
    Il faut au moins 20 µs pour rendre LE (convertisseur est masculin) CAN opérationnel.

    One full 10-bit A/D conversion is a bit longer than expected and amounts to 11 TAD periods
    Il faut 11 périodes d'horloge pour effectuer une conversion complète de 10 bits. Prends dans le tableau la période qui correspond à ton PIC et à ta configuration d'horloge.
    Je te laisse calculer la période maxi d'échantillonnage ainsi obtenue.

    A+

  3. #3
    Nowotny

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Tout d'abord merci, j'avais pas compris que le tableau donnait les périodes qu'ils appellent TAD. Mais je reste bloqué pour la lecture de ce tableau Nom : Tableau.jpg
Affichages : 113
Taille : 83,1 Ko
    Donc j'ai bien une fréquence de 8 Mhz sur mon PIC, je peux donc régler le temps de mesure entre 250nS et 6uS en gros?
    Que représente concretement ADCS1 et ADSC0, j'ai rien trouvé sur internet ou dans l'aide du logiciel MikroC sur ces deux réglages? Comment agir dessus?
    Merci encore

  4. #4
    Jack
    Modérateur

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Donc j'ai bien une fréquence de 8 Mhz sur mon PIC, je peux donc régler le temps de mesure entre 250nS et 6uS en gros?
    Je ne pense pas:
    Time needed to complete a one-bit conversion is defined as TAD. The required TAD must be at least 1,6 uS. One full 10-bit A/D conversion is a bit longer than expected and amounts to 11 TAD periods
    Il faut 11 TAD et comme TAD doit être de 1,6µs mini, à ti de configurer ton horloge en conséquence.

    Que représente concretement ADCS1 et ADSC0, j'ai rien trouvé sur internet
    Je ne suis pas expert en PIC, mais je suis quasiment certain qu'il s'agit des bits 0 et 1 du registre ADCS. Tu ne cherches visiblement pas où il faut: la seule vrai source d'info, c'est la doc officielle de microchip.

    A+

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

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Je confirme pour les registres ADCS à configurer, par exemple, en C:

    ADCON0bits.ADCS = 0b00;

    pour choisir fosc/2

  7. #6
    Nowotny

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Merci à vous pour vos explications, alors j'ai trouvé mon bonheur dans la doc : Nom : tableau 2 ADCON0.jpg
Affichages : 108
Taille : 79,0 Ko

    Donc je vais paramétrer ADCON0 de telle manière à avoir ADCS1 à1 et ADCS0 à 0, ce qui me permet d'avoir un TAD de 4us, compatible avec le minimum de 1.6us je rajoute donc dans mon programme
    Code:
     ADCON0 = 0x80;
    et puis c'est bon?
    Veuillez pardonner ma naïveté

  8. #7
    Jack
    Modérateur

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    pour la suite, je te laisse entre les mains de spécialistes de PICs.

    A+

  9. #8
    Nowotny

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Merci pour ton aide. J'attends l'avis des spécialistes.

  10. #9
    Jack
    Modérateur

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Pourquoi ne fais-tu pas des essais pour voir si ça marche? C'est ma meilleure méthode pour apprendre.

  11. #10
    Nowotny

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    J'y ai pensé, mais je suis actuellement en vacances, donc chez moi à la maison, je n'ai aucun moyen de simuler une tension qui varie si rapidement, déjà que pour tester le CAN j'utilise les piles usagées. L'ajout de la ligne de code ne change rien au programme en soi, pas d'erreur de compilation, donc en théorie c'est possible que ça marche.
    Merci de votre attention à mon sujet.

  12. #11
    invite03481543

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Bonsoir,

    tu peux aussi tester le bit de ADCON0 (GO/DONE) qui t'indiquera que ta conversion est bien terminée (lorsque GO/DONE=0).
    Par exemple avec une mesure sur AN3:

    Code:
    void init_can(void)
    {
    ADCON1 = 0b10000100;     /* Justifié à droite Fosc/16 RA3=AN3 analogique */
    ADCON0 = 0b01011001;     /* Fosc/16 AN3 ADC=activé */
        
    TRISA = 0b00001011;      /* RA0, RA1 et RA3 en entrée le reste en sortie */
    }
     
    unsigned int conversion(void)
    {
    Delay_us(50);
    ADCON0.F1 = 1;        /* lancement de la conversion */
    while(ADCON0.F1);     /* attente fin de conversion, on attend que ce bit passe à 0 */
        
    return (resultat);    /* retour du resultat */
    }
    Dernière modification par HULK28 ; 01/03/2013 à 01h14.

  13. #12
    Nowotny

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Bonsoir, tout d'abord merci.
    Cependant j'ai encore beaucoup d'interrogation d'une part, sur le site de MikroC je vois ça Tableau.jpg suivi de ça Tableau 2.jpg, ces deux tableaux me paraissent contradictoires puisqu'avec deux commande différentes on obtient la même chose, c'est à dire Fosc/32 (en prenant soit ADCS0=?,ADCS1=1 et ADCS2=0 soit ADCS0=0, ADCS1=1 et ADCS2=?)
    bon j'ai pas trouvé dans la doc l'histoire du /16 mais ça n'est pas grave.

    J'ai encore un problème, pour l'indexage dans ADCON 1 : Adcon 1.jpg vous indiquez ADCON1:=Ob1100 0100; que représente ce 1? Et sur mon programme classique, basé sur votre aide, j'avais déclaré ADCON1=0. Que cela change-t-il dans la pratique que le résultat soit justifié à gauche ou à droite?
    Plein de remerciements en tous cas.

  14. #13
    invite03481543

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Mon exemple porte sur le PIC16F877, le registre ADCON1 que tu me montres n'est pas pour ce µC.
    Il faut que tu regardes la doc du PIC.
    Les 4 premiers bits en partant du LSB sont PCFG0 à PCFG3 et permettent de sélectionner les ports A/D, le MSB est le bit de sélection de format du résultat (justifié à droite ou à gauche).

    Pour la justification du résultat à droite ou à gauche peu importe ce que tu décides de choisir l'important est de ne pas te tromper quand tu vas concaténer le registre L et le registre H.

    Pour extraire le résultat de ces deux registres il va te falloir faire des masques et des décalages.
    Dernière modification par HULK28 ; 01/03/2013 à 01h22.

  15. #14
    invite03481543

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Dans le programme que tu avais fait avant, le fait que ADCON1 soit à 0 faisait simplement que toutes les entrées étaient déclarées en analogiques.
    Par exemple si je veux me servir uniquement de Ana3 j'ai plusieurs configurations possibles selon ce que je décide d'attribuer aux autres I/O.
    J'aurai pu écrire dans ADCON1: 0 ou 0010 ou encore 1001, dans tous les cas j'ai bien ana3 activée, donc ça dépendra uniquement de ce que tu comptes faire avec les autres I/O.

  16. #15
    spown

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Bonsoir/Bonjour tout le monde,

    Je vais essayer de clarifier quelques points.

    1- Pour faire une conversion AD dans un uC faut savoir la vitesse maximale du convertisseur , afin de choisir l'horloge nécessaire ( soit externe ou interne ). Dans ton cas, tu peux choisir les 8 Mhz interne ( maximale).

    Si on lit sur le Datasheet du constructeur ( microchip.com ), on va conclure que le Tad ( qui est la période nécessaire pour convertir un seul bit ) minimum requise est de 1.6 uS. Donc pour une résolution de 10 bit = 1,6*10. Mais faut ajouter le 11éme bit qui est le "Holding Capacitor " c'est en sorte, un condensateur qui devrait se charger pour l’échantillonnage, juste après l'entrée du pin analogue.

    2- Tu dois choisir forcement FOSC/32 pour avoir une conversion à chaque 4uS. ( je répète si tu choisis les 8mhz interne )

    3- Pour les 2 tableaux. Ils ont commis une erreur , il y a pas de ADCS2 ( essaye de voir la source pour mieux comprendre ==> microchip.com ). Le constructeur dit : ADCS<1:0> , ça veut dire ADCS0=0, ADCS1=1 pour FOSC/32.
    4- Pour t'aider un peu à la programmation voici les étapes pour faire une conversion ( extrait du http://www.mikroe.com/chapters/view/...nalog-modules/ ) :

    <1>: Configure tes port TRIS nécessaire par 1 pour désigner que c'est des entrées ( bien sur puisque tu comptes faire une lecture de tension )
    <2>: Configure le registre ANSEL pour les pins nécessaires par 1 pour dire que c'est analogue ( non digital)
    <3>: Choisis la fréquence de conversation ( le Tad ) qui est FOSC/32 dans le registres ADCON0
    <4>: Choisi la channel nécessaire ( depend de la pin que tu vas utiliser
    <5>: Choisi la format des données à partir du bit ADFM dans le registre ADCON1 ( mets 1 pour une lecture plus facile, j’espère que t'as compris pourquoi )
    <6>: Activer le convertisseur A/D par le bit ADON dans le registre ADCON0
    {
    <7>: Dans le cas d'interruption, initialise ADIF et configure les bits ADIE, PEIE and GIE.
    }
    <8>: délai de 20 uS
    <9>: Démarre la conversion via le bit GO/DONE dans le registre ADCON0
    <10>: Lire tes données stockés dans les registres ADRESH et ADRESL ( Attention c'est en binaires )


    Voila, laisse nous savoir de ton avancement.

  17. #16
    invite03481543

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Oui spown à tout à fait raison c'est Fosc/32 et non pas Fosc/16, par contre le tableau donné par Mikroe ne fait pas référence au PIC16F877 mais au PIC16F88.
    Comme quoi il faut toujours avoir sous la main la bonne doc, sans quoi on a vite fait de ne pas comprendre pourquoi ça ne fonctionne pas.

  18. #17
    Nowotny

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Pour les suivant la bonne doc du PIC16F87 est ici vers la page 114 et ici vers la page 23-1. Alors tout est là à mon avis pour calculer le temps qu'il faudra au minimum pour la conversion. Nom : datasheet temps de conversion.jpg
Affichages : 91
Taille : 375,1 Ko
    Il me reste un souci, j'ai beau essayer toutes les manières possibles, l'équation 23-2 est fausse selon moi. En supposant Vhold=0 à t=0 comme indiqué (bien que la formule ne dépende pas du temps mais permette de calculer un temps caractéristique), en partant de VHOLD = (VREF - (VREF/2048)) • (1 - exp(-Tc/CHOLD(RIC + RSS + RS))) j'arrive à Tc=0 si Vhold =0 tout simplement. Je crains d'avoir oublier des élements.

    En tous cas merci spown et Hulk mais je crois que je n'ai pas encore le niveau pour arriver à de telles réalisations, je ne dispose pas non plus de beaucoup de temps, je vais me restreindre au calcul de temps de conversion minimum et ce sera déjà très bien si j'arrive à l'obtenir.
    Dernière modification par Nowotny ; 01/03/2013 à 10h16.

  19. #18
    spown

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Bonjour tout le monde,

    Pour Nowotny, j'aimerais savoir ce que t'attends après avoir remplacer Vhold par 0 ?

    L'exemple illustré sur le datasheet de microchip, c'est pour dire que le temps d’acquisition pour un échantillonnage d'une impédance variable ( comme dans le cas de thermocouple ) peu se varier par quelques uS et non pour calculer Tc minimum. ( c'est environ 1,6uS par bit, et c'est constant)

    Donc ton cas tu veux mesurer une tension de 0-5V. Donc oubli cet équation

    Question qu'est ce que tu vas faire avec la tension mesuré ?

  20. #19
    Nowotny

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Une fois la tension mesurée, je la convertis en numérique donc et puis j'affiche le résultat sur le lcd. Je peux te fournir mon programme si tu veux. J'aimerai connaitre le temps d'acquisition pour pouvoir faire des estimations au niveau du bruit que j'aurai pour la mesure.

    PS: sur un thermocouple, la résistance n'est pas variable, c'est un autre phénomène (Effet Seebeck)

  21. #20
    spown

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Dans le thermocouple la résistance n'est pas variable !!!! je vais faire comme j'ai rien lu

    Prend un multimètre est mesure la résistance ( en ohm ) d'une sonde CTN en 0 et 30 dégrées. Et dis moi si t'as vu un changement ou pas.

    J'ai pas bien compris ce que tu comptes faire, après avoir calculer le temps d'acquisition . ( de quel bruit tu parles ? )

    Pour ton programme, est ce que t'as réussi à afficher quelque chose au moins ?

  22. #21
    Nowotny

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Citation Envoyé par spown Voir le message
    Dans le thermocouple la résistance n'est pas variable !!!! je vais faire comme j'ai rien lu

    Prend un multimètre est mesure la résistance ( en ohm ) d'une sonde CTN en 0 et 30 dégrées.
    Une CTN ce n'est pas un thermocouple, enfin bref, là n'est pas le propos, je parle du bruit au niveau de la mesure de la tension.
    Voila mon programme QUI MARCHE avec l'aide de HULK:
    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 n,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, 1, "V =");
                   Lcd_Out(1,4,txt1);
                   Lcd_Out(2, 2, "ADC =");
                   Lcd_Out(2,7,txt2);
                   Delay_ms(100);
           }
    }

  23. #22
    spown

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Re-Bonjour/Bonsoir,

    Et c'est quoi ça ==> http://www.kimocanada.com/Francais/p...%20compost.pdf ?!!

    Bref, Si tu veux améliorer la prise des échantillons, tu peux ajouter un suiveur juste avant l'entré analogue ( pour éliminer les chutes de tensions.)

  24. #23
    Nowotny

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    D'une part merci pour ton aide, je vais essayer avec mon binôme.
    Cependant d'autre part je suis au regret de m'opposer sur la définition d'un thermocouple -je réalise un thermocouple lié avec ce programme-. Il existe plusieurs capteurs de température qui mettent en oeuvre des phénomènes physiques différents. Et justement le titre les sépare bien :
    thermocouple K / CTN / Pt100
    C'est totalement différents au niveau de la structure du capteur mais on arrive au même résultat, à savoir la température
    Pour le divertissement http://fr.wikipedia.org/wiki/Thermocouple
    et http://fr.wikipedia.org/wiki/Thermom...nce_de_platine
    Dernière modification par Nowotny ; 02/03/2013 à 20h40.

  25. #24
    spown

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Peut tu me dire le rôle de cette fonction ==> ADC_Get_Sample(3) dans ton programme ? ( c'est pas l'environnement MPLAB non ?? )

  26. #25
    Jack
    Modérateur

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Citation Envoyé par spown Voir le message
    Peut tu me dire le rôle de cette fonction ==> ADC_Get_Sample(3) dans ton programme ?
    A vue de nez, cette fonction permet de lancer une conversion sur l'entrée analogique 3 et de récupérer le résultat.

    c'est pas l'environnement MPLAB non ??
    Ca n'a aucun rapport. mplab est un environnement de développement alors que l'on parle d'une fonction appartenant à une librairie destinée à être compilée par un compilateur. mplab permet d'utiliser différents compilateurs.

    A+

  27. #26
    Nowotny

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Citation Envoyé par Jack Voir le message
    A vue de nez, cette fonction permet de lancer une conversion sur l'entrée analogique 3 et de récupérer le résultat.
    C'est ça !

  28. #27
    spown

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Oui je me suis dis qu'elle sert pour la conversion A/D. Bref, je voulais une confirmation

    J'ai mentionné l'environnement MPLAB, où on déclare tout le nécessaire pour faire fonctionner un programme. Parce que je vois pas ==> #include<adc.h>, à part si Nowotny n'a pas montré tout le code.

    Bref, ma remarque c'est pour te dire, que la routine (for) pour faire la moyenne sert à rien, puisque la vitesse de cette dernière va s’exécuter plus rapidement que la conversion des 10 valeurs convertis

  29. #28
    invite03481543

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    Non, la fonction de mesure est prioritaire c'est elle qui effectue la conversion donc c'est elle qui donne le tempo de la routine, la boucle for ne fait que répéter la mesure x fois et s'exécute au rythme qu'impose la routine de conversion.
    La méthode de décimation est une méthode mathématique bien connue pour augmenter artificiellement le nombre de bits

  30. #29
    spown

    Re : Fréquence de mesure d'une CAN (Easypic 4)

    C'est raisonnable ce que tu dis. J'ai aucune idée ce qui se passe dans la fonction ADC_Get_Sample. Parce que, je me suis dit que la lecture se fait directement du buffer AD afin de faire l'affectation vers ADC_result. Puisque y a pas un bit de contol ( SAMP ) du buffer, donc y aura parfois plusieurs lecture sur le meme chiffre.

Discussions similaires

  1. Mesure d'une fréquence
    Par invite94160da0 dans le forum Électronique
    Réponses: 3
    Dernier message: 30/09/2012, 15h05
  2. Réponses: 4
    Dernier message: 23/12/2011, 10h51
  3. [PIC] Mesure d'une fréquence
    Par invite91ed4b59 dans le forum Électronique
    Réponses: 8
    Dernier message: 18/02/2007, 21h31
  4. Réponses: 11
    Dernier message: 15/03/2006, 15h17
Découvrez nos comparatifs produits sur l'informatique et les technologies.