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

ADC Conversion et le "temps" !!



  1. #1
    Hichamrol

    ADC Conversion et le "temps" !!

    salut les amis, j’espère que vous allez bien,
    Alors, J'ai un petit soucis à propos de l'ADC de mon Pic 24f , mon projet consiste à échantillonner un signal analogique, et calculer 16k échantillonne pour une second de mon signal, j'arrive à configurer le throughput de l'adc à à peut prés ~~ 16keps , la chose qui m'a cassé la tète et comment jouer avec la boucle For et la lecture des données pour bien avoir exactement l’acquisition d'une second, car l’incrémentation de la boucle va prend tu temps aussi (n'est ce pas ) , et moi , je veux pas perdre quelque données de mon signal analogique , pour le moment j'utilise l'horloge interne de mon pic Fast RC 8MHZ ,
    ce programme est juste ou non ?
    Code:
     for(i=0;i<16000;i++)
                 {
                   AD1CON1bits.SAMP = 1; //
                   while (!AD1CON1bits.DONE){}; // conversion done? Flag
                   tab[i] = ADC1BUF0; // yes then get ADC value 
    }

    -----

    Dernière modification par Vincent PETIT ; 08/08/2019 à 18h10. Motif: Ajout des balises [CODE]...[/CODE]

  2. Publicité
  3. #2
    Seb.26

    Re : ADC Conversion et le "temps" !!

    Citation Envoyé par Hichamrol Voir le message
    je veux pas perdre quelque données de mon signal analogique , pour le moment j'utilise l'horloge interne de mon pic Fast RC 8MHZ ,
    Donc déjà, fais tourner ton uCPU plus vite
    Ensuite, relance la prochaine conversion avant de stoker dans ton tableau, ou alors utilise un ponteur, tu devrais gagner quelques cycles :
    Code:
    uint??_t temp_adc_value;
    ...
    AD1CON1bits.SAMP = 1;
    for(i=0;i<16000;i++)
    {
      while (!AD1CON1bits.DONE);
      temp_adc_value = ADC1BUF0;
      AD1CON1bits.SAMP = 1;
      tab[i] = temp_adc_value;
    }
    Après tu vois ce que ça donne en terme de vitesse ... ... mais il va bien aussi falloir traiter les données ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  4. #3
    Hichamrol

    Re : ADC Conversion et le "temps" !!

    Citation Envoyé par Seb.26 Voir le message
    ... ... .
    Mercii , J'ai bien compris ce que vous avez programmé, c'est mieux que le mien .....

  5. #4
    sandrecarpe

    Re : ADC Conversion et le "temps" !!

    Salut,
    Si tu échantillonnes à 16 kHz, ça signifie que tes signaux ne dépassent pas les 8 kHz
    8 MHz = 125 ns par instruction
    8 kHz => T = 125 µs

    Donc pour moi tu as 1000 instructions de marge

  6. #5
    Hichamrol

    Re : ADC Conversion et le "temps" !!

    Sandrecarpe , Vous pouvez bien expliquer , j'ai pas bien capté ce que vous avez dis

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

    Re : ADC Conversion et le "temps" !!

    D'après le théorème de Shannon, la fréquence d'échantillonnage doit être au moins 2 fois supérieure à la fréquence maximale de ton signal à échantillonner, sinon il y a recouvrement de spectre et tu ne retrouveras pas ton signal.
    Donc pour une fréquence d'échantillonnage de 16 kHz (ce qui correspond à une période T= 62.5µs), la fréquence maximale de tes signaux de ne doit pas dépasser les 8 kHz

    Heureusement ton pic tourne à 8 MHz, soit une instruction toutes les 125 ns. Donc il a le temps de faire 62.5µs / 125 ns = 500 cycles avant d'échantillonner à nouveau

  9. Publicité
  10. #7
    HULK28

    Re : ADC Conversion et le "temps" !!

    Bonsoir,
    quel est la nature exacte du signal à mesurer?
    Il faudrait déjà commencer par là avant d'invoquer Shannon.
    Le génie est fait d'un pour cent d'inspiration et de 99% pour cent de transpiration.

  11. #8
    Vincent PETIT

    Re : ADC Conversion et le "temps" !!

    Bonsoir tout le monde,
    Il faudrait aussi connaître le référence du PIC24, il y a peut un DMA qui va sacrément t'aider et concernant l'ADC, il n'y a pas moyen de le lier à un TIMER pour qu'il échantillonne tout seul (sans boucle for) ?
    Là où il n'y a pas de solution, il n'y a pas de problème.

  12. #9
    Hichamrol

    Re : ADC Conversion et le "temps" !!

    HULK , c'est un signal analogique d'une frequence varie entre 10 à 300HZ,
    à propos du boucle j'en ai besoin pour stocker les données dans mon tableau ...

  13. #10
    Hichamrol

    Re : ADC Conversion et le "temps" !!

    Citation Envoyé par Vincent PETIT Voir le message
    Bonsoir tout le monde,
    il y a peut un DMA qui va sacrément ?
    Oui il'ya DMA , vous avez des idées sur ça ? et il me permet de stocker directement les donnée sur la ram sans passer par le CPU ?

  14. #11
    Vincent PETIT

    Re : ADC Conversion et le "temps" !!

    Si tu lis la datasheet de ton micro que je ne connais pas, mais d'autres micro le font, tu peux peut être affecter un TIMER à ton ADC pour qu'il échantillonne tout seul sur interruption et peut être, voir surement, que ton DMA est capable d'aller chercher l'information échantillonnée pour aller la ranger tout seul à l'emplacement mémoire de ton tableau = tout automatique = plus besoin de boucle for qui monopolise ton CPU et l'empêche de faire le traitement de l'information.

    Y a plein de micros qui savent faire ça, regarde ta doc.
    Là où il n'y a pas de solution, il n'y a pas de problème.

  15. #12
    Hichamrol

    Re : ADC Conversion et le "temps" !!

    Citation Envoyé par Vincent PETIT Voir le message
    Y a plein de micros qui savent faire ça,.
    D'accord Merci à vous ,

  16. Publicité

Sur le même thème :

Discussions similaires

  1. VB mettre le micro en mode " ecoute" "veille" et "stop" sous visual basic
    Par mattlander dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 14/12/2015, 12h45
  2. "trame asynchrone"= "frame relay" ou "Asynchronous transfer mode (ATM)"?
    Par JulienVictor dans le forum Internet - Réseau - Sécurité générale
    Réponses: 2
    Dernier message: 07/04/2015, 20h45