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

Mesurer les periodes dans un dsPIC30f4013



  1. #1
    intirafael

    Mesurer les periodes dans un dsPIC30f4013


    ------

    Bonjour,
    Je débute dans les dsPIC, j'ai fait un programme pour mesurer les périodes générés par un GBF, mais j'ai trois soucis très basiques:

    1. Je ne sais pas si mon programme vraiment et fait pour cela.
    2. Comment je dois brancher le GBF a mon dspic? est-ce-que simplement je branche en IC1 et pas plus?
    3. Comment lire se qui a mesuré mon dsPIC?

    Code:
    #include "p30f4013.h"
    
    /*************Global Variables and Constants*************/
    /*Variables used for period calculation*/
    unsigned int timePeriod= 0; 
    unsigned int current_value=0,previous_value=0;
    unsigned int new_value=0;
    
    void __attribute__((__interrupt__)) _IC1Interrupt(void); 
    void __attribute__((__interrupt__, __shadow__)) _T2Interrupt(void);
    
    /****FUNCTION PROTOTYPES****/
    void IC1_SETUP(void);
    void TIMER2_SETUP (void);
    
    /******MAIN BODY******/
    int main (void)
    {
    
    TRISD=0x0100; 				/*Setting PortB as input*/
    ADPCFG=0xffff;				/*Setting the analogue pin as digital input*/
    
    
    TIMER2_SETUP();             /*Calling the Timer Setup Function*/
    IC1_SETUP();				/*Calling the Input Setup Function*/
    
    
    while(1)
    {
    }
    return (0);
    }
    /***SETUP_IC****/
    void IC1_SETUP (void)
    {
    IC1CONbits.ICM=0b011;		/*Capture every rising edge*/
    IC1CONbits.ICBNE=0;			/*Input capture buffer is empty*/
    IC1CONbits.ICOV=0;			/*No input capture overflow occured*/
    IC1CONbits.ICI=0b00;		/*Interrupt on every capture event*/
    IC1CONbits.ICTMR=1;			/*TMR2 contents are captured on captured event*/
    IC1CONbits.ICSIDL=0;    	/*Input capture module will continue to operate in CPU Idle mode*/
    //IP0bits.IC1IP = 1;      	/*Setup IC1 interrupt priority level*/
    IFS0bits.IC1IF = 0;       	/*Interrupt bit is cleared*/
    IEC0bits.IC1IE = 1;     	/*Set the IC1 interrupt enable bit */
    }
    
    
    /****INTERRUPT FOR IC7****/
    // Capture Interrupt Service Routine 
    //unsigned int timePeriod= 0; 
    void __attribute__((__interrupt__)) _IC1Interrupt(void) 
    { 
    previous_value=current_value;
    current_value=IC1BUF;
    if(current_value>previous_value)
    { 
    timePeriod = current_value-previous_value; 
    }
    else
    { 
    timePeriod = (PR2 - previous_value) + current_value ;
    } 
    }
    
    /***TIMER_SETUP***/
    void TIMER2_SETUP (void)
    {
    //T2CON = 0x00; //Stops the Timer2 and reset control reg.
    T2CONbits.TCS=1; 			/*Using Internal Clock (Fosc/4)*/
    T2CONbits.T32=0;			/*TMRx and TMRy form a 16-bit timer*/
    T2CONbits.TCKPS=0;  		/*Using 1:1 prescale value*/
    T2CONbits.TGATE=0;			/*Timer Gate Accumulation Disabled*/
    T2CONbits.TSIDL=0;			/*Continue in Idle Mode*/
    T2CON = 0x00; 				//Stops the Timer2 and reset control reg.
    TMR2 = 0x00; 				//Clear contents of the timer register
    PR2 = 0xFFFF; 				//Load the Period register with the value 0xFFFF
    //IPC0bits.IC1IP = 0x01; //Setup Timer2 interrupt for desired priority leve
    // (This example assigns level 1 priority)
    IFS0bits.T2IF = 0;			 //Clear the Timer1 interrupt status flag
    IEC0bits.T2IE = 1;			 //Enable Timer1 interrupts
    T2CONbits.TON = 1;			 //Start Timer1 with prescaler settings at 1:1 and 
    							 //clock source set to the internal instruction cycle
    }
    merci d'avance

    -----

  2. #2
    RISC

    Re : Mesurer les periodes dans un dsPIC30f4013

    Salut,

    Peux-tu montrer les bits de configuration ?
    Pourquoi ne les as-tu pas mis dans ton programme ?
    Quelle est la valeur du quartz externe ?

    Quelle carte utilises-tu ?

    La meilleure façon de connaitre les valeurs serait de les afficher.
    Une méthode simple consiste à les envoyer avec des printf ou autres sur les liaison série que tu connectes à un adaptateur USB <==> série à ton PC. Ensuite tu utilises Hyperterminal pour te connecter à ta carte et lire les chaines envoyées par ta carte

    Tu peux aussi t'aider d'un débogueur (Pickit3 ou ICD3) pour examiner la RAM ou se trouve les valeurs de capture.

    Concernant ton géné BF tu peux effectivement envoyer le signal dans la broche ICx. Vérifies simplement que la tension soit comprise entre 0 et 5V (continu) si ton dsPIC est alimenté en 5V et que ton signal soit carré ;=)

    a+
    Dernière modification par RISC ; 31/05/2011 à 22h26.
    Ma marotte ? les microcontrôleurs ;=)

  3. #3
    intirafael

    Re : Mesurer les periodes dans un dsPIC30f4013

    Bonjour,

    Peux-tu montrer les bits de configuration ?
    Pourquoi ne les as-tu pas mis dans ton programme ?
    Je ne sais pas qu'est-ce-que vous voulais dire par cela.

    Quelle est la valeur du quartz externe ?
    il est de 8 M

    Quelle carte utilises-tu ?
    j'ai un dsPIC30f4013 au quel j'ai relié un quartz et je le relie a mon ordinateur avec le Pickit 2.

    merci.

  4. #4
    RISC

    Re : Mesurer les periodes dans un dsPIC30f4013

    Salut,

    Ton dsPIC30F4013 ne flotte pas dans les airs
    As-tu fais un circuit imprimé, utilises-tu une carte électronique du commerce ou une plaque à trous ?
    Peux-tu montrer le schéma électronique de ta carte ?

    Si tu ne sais pas ce que sont les bits de configuration, lis le chapitre "Special Features" de la datasheet de ton dsPIC car c'est très très important...

    a+
    a+
    Ma marotte ? les microcontrôleurs ;=)

Discussions similaires

  1. [Microbiologie] mesurer un antibiotique dans les conditions d'asepsie rigoureuses
    Par pioua dans le forum Biologie
    Réponses: 11
    Dernier message: 15/05/2011, 12h04
  2. maison bbc en coffrage isolant et confort dans les périodes hors hivers
    Par LILIAN65 dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 13
    Dernier message: 19/06/2010, 15h12
  3. QR - Comment mesurer les distances dans l'Univers ?
    Par RSSBot dans le forum Commentez les actus, dossiers et définitions
    Réponses: 0
    Dernier message: 08/05/2010, 23h16
  4. Les périodes du neutron et du proton
    Par Seirios dans le forum Physique
    Réponses: 2
    Dernier message: 23/08/2006, 17h14
  5. Les périodes chaudes de la Terre ?
    Par Alain28 dans le forum Géologie et Catastrophes naturelles
    Réponses: 23
    Dernier message: 22/07/2006, 19h45
Découvrez nos comparatifs produits sur l'informatique et les technologies.