Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Probleme ADC PIC18F4620



  1. #1
    betty77

    Probleme ADC PIC18F4620


    ------

    Bonjour,

    J'essaye de faire une ADC d'un signal analogique compris entre 0 et 5V grace a un pic 18F4620. Le probleme est que l'adc est faite entre 0 et 2,5V. cad pour 0 j'ai 0 et pour 2,5 j'ai 1023.
    Voila mon code :

    int i=0, j=0;
    unsigned int val;

    int a;

    // Convertion A/N de la tension

    OpenADC( ADC_FOSC_2 &
    ADC_LEFT_JUST &
    ADC_12_TAD,
    ADC_CH0 &
    ADC_INT_OFF & ADC_VREFPLUS_VDD , 15 );
    SetChanADC(ADC_CH0);
    Delay10TCYx( 50 );

    for(i=0;i<18;i++)
    {

    ConvertADC(); // debut de conversion
    while( BusyADC() ); // attente de la conversion ADC
    val=ReadADC();
    }

    merci d'avance

    -----

  2. Publicité
  3. #2
    vede

    Cool Re : Probleme ADC PIC18F4620

    Bonjour,

    VRef+ = VDD (avec VCFG0=0)...
    donc si tu alimentes ton PIC en +5VDC,
    tu auras une plage 0-5V (0-1023) mesurable...

    si non, tu peux choisir une tension VRef+ externe (avec VCFG0=1)
    et en "injectant" du +5VDC sur la broche AN3...

    si non, tu pourrais aussi diviser ta tension à mesurer par 2,
    avec une simple pont diviseur de tension à 2 résistances...

    vede
    ;O]
    __________
    ...

  4. #3
    RISC

    Re : Probleme ADC PIC18F4620

    Salut,

    Je ne vois pas comment en justifiant le résultat à gauche tu peux obtenir une valeur entre 0 et 1023....
    Je pense que tu devrais justifier à droite.

    a+

  5. #4
    betty77

    Re : Probleme ADC PIC18F4620

    Bonjour,
    Merci pour votre reponse. j'ai résolue le probleme que j'avais en mettant VCFG0 et VCFG1 à 0. Cependant j'ai un autre probleme sur un autre PIC cette fois ci c'est un 18f2620.
    Lorsque j'essaye de faire une ADC sur 10 bits. le pic ne convertie que les tension entre 0 et 2.5V.
    ce qui donne :
    0==>0
    2.5=>511

    mon code est le suivant :

    OpenADC( ADC_FOSC_2 &
    ADC_LEFT_JUST &
    ADC_12_TAD,
    ADC_CH1 &
    ADC_INT_OFF &
    ADC_REF_VDD_VSS, 15 );
    SetChanADC(ADC_CH1);
    Delay10TCYx( 50 );
    ADCON1=0b00001011
    ConvertADC();
    while( BusyADC() ); // attente de la fin de la conversion
    x = ReadADC(); // lecture du resultat

  6. #5
    vede

    Cool Re : Probleme ADC PIC18F4620

    Salut,

    c'est tencore très zétrange ;O]
    c'est quoi ton compilateur?
    car là je vois que tu utilises des "fonctions prédéfinies" pour gérer l'ADC...
    et tu dois après rajouter des lignes de codes ADCON car c'est mal configuré...
    c'est "pas top" ce "mélange", soit tu utilises les "fonctions", soit tu codes...
    moi je laisserai tomber "les fonctions", et coderai l'ADC...style :
    Code:
    // init
    ADCON0 = 0bxxxxxxxx;
    ADCON1 = 0bxxxxxxxx;
    
    // lance conversion
    ADCON0.G0 = 1;
    while(ADCON0.G0); // attente fin conversion...
    val_adc = ADRESH*256 + ADRESL;
    vede
    ;O]
    ____________
    ...

    ps : utilises les balises "code", ça le rend plus lisible...

  7. A voir en vidéo sur Futura
  8. #6
    RISC

    Re : Probleme ADC PIC18F4620

    Salut Betty,

    Avant de reposer la même question commence par lire les réponses et à y répondre :

    a+

  9. Publicité
  10. #7
    betty77

    Re : Probleme ADC PIC18F4620

    J'utilise le compilateur c 18. C'est vrai j'ai melangé un peu les fonctions predefinie de la librairie a du code predefini car j'obtenais pas VCFG0 et VCFG1 egale à 1 avec la fonction OpenADC. Je pense que vede a raison, je ferais mieux de laisser tomber les fonctions predefinies et de programmer directement registre par registre.

    Pour ce qui est justification des resultats à gauche j'ai prevu de faire un décalage a droite de 8 bits pour obtenir un resultat sur 8 bits (que j'ai pas mis dans le code que j'ai posté) En plus claire je n'obtiens pas un resultat de 0 à 511 (1 1111 1111) mais de 0 à 127 (0111 1111)
    a+

  11. #8
    vede

    Cool Re : Probleme ADC PIC18F4620

    Salut,

    bon je t'ai codé un petit texemple,
    qui retourne une valeur sur 8 bits,
    entre 0 et 255 selon la tension 0V/+5V...

    si ça ne fonctionne toujours pas (valeur bizarre, tronquée...)
    tentes en "ralentissant" le convertisseur, ceci en modifiant
    les valeurs de TAD et FOsc, exemple 16 TADs et FOsc/8 :
    ADCON2 = 0b00110001; // Left justified + 16TADs + FOsc/8

    vede
    ;O]
    __________________
    ...

    Code:
    char u8bits;
    
    void main()
    {
    
    ADCON0 = 0b00000101; // select channel RA1 + ADC ON
    ADCON1 = 0b00001101; // VRefs=VSS/VDD + select RA1,RA0 as Analog
    ADCON2 = 0b00101000; // Left justified + 12TADs + FOsc/2
    
    while(1)
    {
      ADCON0.GO = 1;          // Start Conversion
      while(ADCON0.GO) nop;   // Attend Fin Conversion
      u8bits = ADRESH;        // Récupère Résultat
      Delay_ms(100);          // Une petite pause... et on recommence...
    }
    
    }
    Dernière modification par vede ; 27/07/2010 à 18h09.

  12. #9
    vede

    Cool Re : Probleme ADC PIC18F4620

    ps :

    et pour être certain que cela puisse fonctionner on va aussi "mettre" RA1 en entrée ;O]
    en rajoutant la ligne:
    TRISA = 0b00000011; // RA0-1 en entrées ;O]
    au "début" du "main(){cad ici..."...

  13. #10
    betty77

    Re : Probleme ADC PIC18F4620

    voila ca fonctionne maintenant. j'ai laissé tomber les fonctions prédéfinis et j'ai suivi votre exemple en paramétrant aussi ADCON2.
    Merci pour l'aide

Sur le même thème :

Discussions similaires

  1. Probleme de variable de type int PIC18F4620
    Par betty77 dans le forum Électronique
    Réponses: 9
    Dernier message: 22/07/2010, 11h52
  2. PIC18F4620 Simulation?
    Par IgiX dans le forum Électronique
    Réponses: 3
    Dernier message: 18/04/2010, 18h31
  3. offsset ADC
    Par viky dans le forum Électronique
    Réponses: 1
    Dernier message: 31/03/2009, 16h13
  4. PIC18F et ADC
    Par boutboutnico dans le forum Électronique
    Réponses: 5
    Dernier message: 04/02/2009, 12h43
  5. interruption pic18f4620
    Par florian85 dans le forum Électronique
    Réponses: 3
    Dernier message: 18/09/2008, 08h33