Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

test de l'ADC sur un pic24
Asterix
Membre
Membre
Messages : 18
Âge : 27
Enregistré en : janvier 2017

#1 Message par Asterix » mar. 7 févr. 2017 21:56 lien vers la Data-Sheet : Cliquez ici

Bonjour,
J'essaye de faire marcher l'ADC sur un PIC24FJ64GB202 mais comme je ne l'ai pas encore reçu, je ne sais pas si ce que j'ai fait devrait fonctionner...
J'essaye tout simplement de faire passer l'état d'une broche à 1 si la tension appliqué à une broche réglée en analogique est superieur ou égal à 2V:

Code : Tout sélectionner

int main(void)
{
    // initialize the device
    SYSTEM_Initialize();
    
    int conversion
;
    
    ADC1_Initialize
();
    
    ADC1_ChannelSelect
(ADC1_CHANNEL_AN0);
    
    ADC1_Start
();
    //Provide Delay
    for(int i=0;<1000;i++)
    {
    }
    ADC1_Stop();
    while(!ADC1_IsConversionComplete())
    {
        ADC1_Tasks();   //on baisse le flag   
    }
    conversion = ADC1_ConversionResultGet();
    if (conversion >2)
    {
        PORTA = 0x10;
    }

    while (1)
    {
       
        
// Add your application code
    }

    return -1;


Le problème, c'est que je me sert de code configurator pour gagner du temps, j'ai quasiment recopié l'exemple donné mais la fonction ADC1_ConversionResultGet() me parait louche parceque le commentaire semble indiqué une tout autre utilité à la fonction que de récupérer le résultat de la valeur:

Code : Tout sélectionner

@Summary
    Returns true when the conversion is completed

  
@Description
    This routine is used to determine if conversion is completed
. This routine
    returns the value of the DONE bit
. When conversion is complete the routine
    returns 1
. It returns 0 otherwise.
 
  
@Preconditions
    ADC1_Initializer
() function should have been 
    called before calling this function
.
 
  
@Returns
    Returns true if conversion is completed

  
@Param
    None
  
  
@Example
    Refer to ADC1_Initializer
(); for an example
 
*/ 


mais le code lui semble indiquer que la fonction renvoie la valeur d'un registre

Code : Tout sélectionner

uint16_t ADC1_ConversionResultGet(void)
{
    return ADC1BUF0;


du coup je me dit que c'est peut être le commentaire qui est faux .

Qu'en pensez vous ?

test de l'ADC sur un pic24
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » mer. 8 févr. 2017 10:33 lien vers la Data-Sheet : Cliquez ici

bonjour,



J'essaye tout simplement de faire passer l'état d'une broche à 1 si la tension appliqué à une broche réglée
en analogique est superieur ou égal à 2V:


Je ne conais pas les PIC24 ,mais je doute que la fonction renvoie un resultat en volts..

Code : Tout sélectionner

 conversion = ADC1_ConversionResultGet();
    if (conversion >409)   // was 2
    {
        PORTA = 0x10;   // a voir s'il  vaut mieux utiliser LATA4_bi=1t; ou LATA=0x10
    } 
    else
    
{
    LATA4_bit=0;
     }


le resultat de la conversion devrait etre en points 0 à 1023 ,
si alim en 5V ( +VREF=VDD, -VREF=VSS) , 2V correspondrait à environ 409 points.


le commentaire semble indiqué une tout autre utilité à la fonction que de récupérer le résultat de la valeur:

En effet le commentaire s'appliquerait plutot à
la fonction ADC1_IsConversionComplete qui retourne un etat logique (DONE_bit)


mais le code lui semble indiquer que la fonction renvoie la valeur d'un registre



Code : Tout sélectionner

uint16_t ADC1_ConversionResultGet(void)
{
    return ADC1BUF0;
}


je poussoie, en effet, la valeur retournée est un entier 16 bits
de meme le label ADC1BUF0 est assez parlant

il y a peut etre un ERRATA émit posterieurement par microchip.. ?
Aide toi, le ciel ou FantasPic t'aidera

test de l'ADC sur un pic24
Asterix
Membre
Membre
Messages : 18
Âge : 27
Enregistré en : janvier 2017

#3 Message par Asterix » mer. 8 févr. 2017 18:49 lien vers la Data-Sheet : Cliquez ici

Merci pour ta correction, je crois que je comprends mieux comment fonctionne l'ADC maintenant.

Je suis un peu rassurer par rapport aux commentaires parce que comme je n'ai pas encore le pic je ne peux pas tester pour voir qui a raison entre le commentaire et l'exemple mais comme tu penses la même chose que moi je me dit que la bonne solution est celle donné dans l'exemple :-)


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 37 invités