temps d'acquisition d'un signal analogique avec un pic 18f452
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

temps d'acquisition d'un signal analogique avec un pic 18f452



  1. #1
    inviteef3d0fb4

    temps d'acquisition d'un signal analogique avec un pic 18f452


    ------

    Bonsoir à tous et merci d'être indulgent car je suis nouveau sur le site.
    je souhaite être aiguillé s'il vous plait dans mon projet
    je cherche à convertir un signal 0-5v provenant d'un potentiomètre en sortie digitale afin de faire varier la luminosité de ma led. Rien de plus simple me diriez vous. Cela dit ça fait longtemps que je patine la dessus.
    sur le pic 18f4550 par exemple je sais que l'on peut par les registres programmer la valeur des tads ce qui n'est pas le cas du pic 18F452 que je fais tourner avec un quartz de 8Mhz.
    Lors de la simulation, le programme reste bloqué sur l'instruction :"while(ADCON0bits.GO_DONE != 0);"
    merci de m'éclairer sur les tads et surtout comment prend t-on en compte le temps d'acquisition


    .
    Code:
      #include <p18f452.h> //Librairie de notre PIC
    #include <delays.h> //Librairie pour faire des délais (attendre)
    
    
    // Intialisation du PIC
    #pragma config OSC = HS //Oscillateur interne coupé( Quartz de 8MHz)
    #pragma config WDT = OFF //Désactiver le timer du watchdog
    #pragma config DEBUG = ON //Activer le mode débuggage
    #pragma config LVP = OFF //processeur en 5v
    
    #define led0 PORTAbits.RA1
    #define trisled0 TRISAbits.TRISA1
    #define potar PORTAbits.RA0 
    #define trispotar TRISAbits.TRISA0
    
    void Init(void); //Déclaration de la fonction Init
    
    
    void main(void)
    {
    int delay;
    
    void init();
    
    while(1)
    
    {
    
    ADCON0bits.GO_DONE = 1;//Start A/D Conversion
    		
    		while(ADCON0bits.GO_DONE != 0);//attente de la conversion
    		delay = ADRESL;// 
    		
    		led0 =~led0;//faire clignoter la led
    		if (delay > 0)
    			Delay1KTCYx(delay);
    
    
    }
    
    
    
    }
    
    void init(void)
    {
    //INTCON2bits.RBPU = 0;
    //TRISBbits.TRISB0= 0;
    //led0 = 0;
    trisled0 = 0;
    trispotar = 1; // config port A0 en entrée
    //potar = 0;//initialisation de RA0
    
    ADCON1 = 0x0E; //config PORTA en digital sauf  A0 analogique
    /* ADCON1bits.PCFG0 = 0;
    ADCON1bits.PCFG1 = 1;
    ADCON1bits.PCFG2 = 1;
    ADCON1bits.PCFG3 = 1; */
    
     ADCON0 = 0x00;// config selection de canal de conversion AN0
    
    /* ADCON0bits.CHS0 =1; 
    ADCON0bits.CHS1 =1;
    ADCON0bits.CHS2 =1; */
    
    
    ADCON1bits.ADFM = 1;//resultat de conversion ADC dans ADRESL
    
    ADCON0bits.ADCS0= 1; //config horloge de conversion AD: fosc2
    ADCON0bits.ADCS1 = 0;
    ADCON1bits.ADCS2 = 1;
    
    PIE1bits.ADIE = 0;//config annulation de l'interruption ADC
    INTCON = 0x00;// GIE,GIEH, PEIE,INTOIE;RBIE
    
    
    ADCON0bits.ADON= 1; //config validation de la conversion ADC
    
    
    }

    -----

  2. #2
    paulfjujo

    Re : temps d'acquisition d'un signal analogique avec un pic 18f452

    bonsoir

    essaie avec un NOP intercalé entre l'assignation et le test du meme bit

    Code:
    ADCON0bits.GO_DONE = 1;//Start A/D Conversion
    		_asm NOP
    		while(ADCON0bits.GO_DONE ==1);//attente de la conversion

  3. #3
    inviteef3d0fb4

    Re : temps d'acquisition d'un signal analogique avec un pic 18f452

    Merci PAULFJUJO de m'avoir répondu aussi vite.
    j'ai essayé votre solution mais l'instruction "while(ADCON0bits.GO_DONE ==1);//attente de la conversion" connait une erreur de syntaxe d’après le compilateur mplab.
    j'avais intercalé plutôt Delay10TCYx(5) et Delay1TCY() mais ça n'a pas marché.
    J'ai un autre soucis c'est que je compile avec succès le projet, cependant j'ai un fichier .cof qui est crée mais pas de fichier .hex

  4. #4
    RISC

    Re : temps d'acquisition d'un signal analogique avec un pic 18f452

    Salut,

    Tu devrais utiliser le PIC18F4520 car le PIC18F452 est un très vieux produit...et le PIC18F4520 possède le même convertisseur que le PIC18F4520.
    quelques astuces : si tu programmes un champ de bits, il vaut mieux tous les bits en une seule instruction :
    Code:
    ADCON1bits.PCFG = 0bxxx ;   // avec xxx = valeur des bits PCF2 PCF1 PCFG0
    Ci-joint un tutoriel sur les PIC18 : http://arlotto.univ-tln.fr/_archives...18%20v0.91.pdf

    Tu trouveras des exemples de code pour les PIC18 ici dont certains pour le CAN.

    a+

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

    Re : temps d'acquisition d'un signal analogique avec un pic 18f452

    Bonjour RISC,
    Merci vraiment pour la doc et tes conseilles. Je vais potasser rapidement la doc et passer au pic 18f4520. Je possède un picdem 2 plus et une cartede développement easypic 6 de chez mikro elektronika. est-ce possible de programmer le pic avec la carte easypic6 et la transférer sur picdem2 plus pour les essais ou faut-il que j'investisse dans le module ICD2 debugger.

  7. #6
    invitefa96bd8f

    Re : temps d'acquisition d'un signal analogique avec un pic 18f452

    Salut,

    dans ta datasheet il est décrit combien de temps ton module ADC a besoin pour réaliser l'acquisition.
    Par exemple 7,45µs.

    Mon PIC tourne à 64MHz, je décide de prendre fosc/64 pour "nourrir" le module ADC, ce qui veut dire une période de 1µs.

    Comme le PIC a besoin d'au moins 7,45µs, je le configure pour qu'il la fasse en 8µs => 8 Tad
    Rien ne t'empêche de lui laisser plus de temps, mais il ne faut pas aller plus vite par contre.

  8. #7
    inviteef3d0fb4

    Re : temps d'acquisition d'un signal analogique avec un pic 18f452

    Dans la doc du pic 18F452, il est dit ceci concernant le temps d'acquisition:
    1) un minimum de 2TAD nécessaire avant qu'une nouvelle acquisition commence.
    2) on présente un model d'entrée analogique qui permet de calculer le temps d'acquisition minimum TACQ
    TACQ = amplifier settling time+ holding capacitor charging time +temperature coeficient
    A/D minimum charging time:
    VHOLD = 5Vref-(VREF/2048)).(1-e^(-tc/chold(ric+rss+rs)) ) avec Tc = -120pF(1Kohms+rss+rs)ln(1/2048)

    Avec les valeurs suivantes :
    chold = 120pF
    rs= 2.5Kohms
    conversion error <= 1/2LSB
    vdd = 5V donc RSs = 7 Kohms
    temperature = 50°c(système max)
    Vhold = 0V@time= 0

    on obtient TC = 9.61 µs
    TACQ = TAMP +Tc +TCOF = 2µs+9.61µs+[(50°C-25°C).(0.05µs/°C) = 11.61µs+1.25µs
    = 12.86µs

    pour le choix de mon horloge de conversion:
    J'ai un quartz de 8MHz donc fosc = 8MHz
    tosc =1/8MHz = 0.125µs

    le TAD doit être superieur ou égal à 1.6µs d'après le datasheet
    TAD = KTOSC>= 1.6µs => K>= 1.6/0.125= 12.8
    donc mon horloge de conversion doit tourner à 16TOSC = 2µS
    TAD = 2µs

    Resultat:

    TACQ = 12.86µs <=> 7TAD = 14µs // Delay10TCYx(3)= 15µs
    le temps total de conversion est de 12Tad =>12*16TOSC = 24µs

    Ce raisonnement est-il correcte?

  9. #8
    RISC

    Re : temps d'acquisition d'un signal analogique avec un pic 18f452

    Salut PICNARA,

    Surtout n'investis pas dans un ICD2 car il n'est pas compatible avec MPLAB X. L'ICD3 l'a remplacé et il est beaucoup plus rapide en programmation ;=)
    Si tu n'es pas concerné par la consommation, tu devrais activer la PLL x 4 dans les bits de configuration. Cela te permettra de faire tourner le PIC à Fosc = 32MHz (Fcy = 8 MIPS). Je ne connais pas le CAN du PIC18F452 mais dans le PIC18F4520 il a un fréquence max de 100kech.

    Tes calculs semblent corrects.
    Quelle est la résistance Rs de ton système. Que branches-tu sur l'entrée AN du PIC ? un potentiomètre ? un AOP ?

    a+

  10. #9
    inviteef3d0fb4

    Re : temps d'acquisition d'un signal analogique avec un pic 18f452

    Salut RISC

    J'ai fouillé la doc,le pic 18F452 tourne à 40MHZ max.
    Voici le tableaux des fréquences de conversion A/D max

    Pièce jointe 250604

    Je branche un potentiomètre sur l'entrée A0. pour l'instant j'ai suivi les explications de la doc RSS = 7kohms.

    Pièce jointe 250606

    Pièce jointe 250608

    Pour l'instant ce programme marche en le simulant avec ISIS. Par contre la variation de clignotement n'est pas assez visible
    quand j'appui sur le potentiomètre pour varier l'entrée, je constate au niveau du watch que ADRESL varie jusqu'à se stabiliser au bout d'un moment.

    Code:
    #include <p18f452.h> 
    #include <adc.h>   // pour fonctions adc
    #include <delays.h>
    
    
    #pragma config OSC = HS
    #pragma config WDT = OFF
    #pragma config LVP = OFF
    
    
    void main(void)
    {
    
    int result ;
    
    PORTAbits.RA0 = 0;
    TRISAbits.TRISA0 = 1;
    PORTB = 0 ;
    TRISB = 0 ;
              
    OpenADC(ADC_FOSC_16 &
            ADC_RIGHT_JUST &
            ADC_1ANA_0REF,
           	ADC_CH0 &
            ADC_INT_OFF );
                   
            
    Delay10TCYx(5); // temps d'attente après le démarrage de l'adc 
                    //   50 TCY = 50*0.5= 25µs
     
    for( ;; )
    {
         SetChanADC(ADC_CH0);   //Canal A0 patte 2
    
        ConvertADC();
        while( BusyADC() ) ; // delais de Tacq+12Tad = 12.8+24=36.8us max
        result = ReadADC();           
        result = (result/10);
    
    
    
            if (result<10)
                result=10;
    
            if (result>100)
                result=100;
      PORTBbits.RB0 = ~PORTBbits.RB0;
      Delay10TCYx(result);
    
    }
    }


    Bonjour picnara et tout le groupe

    Pour être conforme à l'épinglé

    http://forums.futura-sciences.com/el...ointes-pj.html

    l'image pdf a été supprimée. Elle doit être présentée à nouveau, en extension jpg, gif ou png.

    .
    Dernière modification par gienas ; 04/06/2014 à 13h26. Motif: Suppression des images pdf

  11. #10
    inviteef3d0fb4

    Re : temps d'acquisition d'un signal analogique avec un pic 18f452

    Salut RISC

    J'ai fouillé la doc,le pic 18F452 tourne à 40MHZ max.
    Voici le tableaux des fréquences de conversion A/D max

    Je branche un potentiomètre sur l'entrée A0. pour l'instant j'ai suivi les explications de la doc RSS = 7kohms.

    Pour l'instant ce programme marche en le simulant avec ISIS. Par contre la variation de clignotement n'est pas assez visible
    quand j'appui sur le potentiomètre pour varier l'entrée, je constate au niveau du watch que ADRESL varie jusqu'à se stabiliser au bout d'un moment.

  12. #11
    gienas
    Modérateur

    Re : temps d'acquisition d'un signal analogique avec un pic 18f452

    Ceci est une invitation à proposer à nouveau des pièces jointes.

    Les pdf ont été supprimés à nouveau, ils doivent être convertis en images, non pdf.


Discussions similaires

  1. Réponses: 14
    Dernier message: 28/10/2012, 19h33
  2. [LabView] Déclenchement de l'acquisition commandé via un signal analogique externe
    Par invitefc657255 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 20/04/2012, 11h18
  3. Pic 18F452 et Bus I2C : Aide à l'acquisition
    Par invite00780d1b dans le forum TPE / TIPE et autres travaux
    Réponses: 5
    Dernier message: 23/08/2010, 00h01
  4. acquisition d'un signal avec un µP 6809
    Par invitebcbdc623 dans le forum Matériel - Hardware
    Réponses: 0
    Dernier message: 05/03/2010, 16h51
  5. pic 18f452 @ 40Mhz, plantage de temps en temps
    Par invite9426e977 dans le forum Électronique
    Réponses: 27
    Dernier message: 04/04/2008, 21h19
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...