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

Converstion simultané 2 voies DSPic



  1. #1
    marvinc

    Converstion simultané 2 voies DSPic


    ------

    bonjour,

    Je voudrais être sûr de ma programmation pour lancé un sample simultané sur AN0 et AN1 de mon 30f4012 pour les stocké dans ADCBUF1 et 0, merci.

    Voici ma config ADC
    Code:
    	//ADPCFG: A/D Port Configuration Register
    	ADPCFG = 0xFFFF;	//set all digital
    	_PCFG0 = 0;		//AN0 analog input
    	_PCFG1 = 0;		//AN1 analog input
      
    	//ADCON1: A/D Control Register 1
    	ADCON1 = 0;		//clear register	A/D off
    	_FORM = 2;		//fractional 0 - 0.999
    	_SSRC = 3;		//Motor Control PWM interval ends sampling and starts conversion
    	_SIMSAM = 1;	//simultaneous sample
    	_ASAM = 1;		//Sampling begins immediately, SAMP bit is auto set
    	
    	//ADCON2: A/D Control Register 2
    	ADCON2 = 0;		//clear register
    	_VCFG = 0;		//VrefH = Avdd, Vref- = AVss
    	ADCON2bits.CHPS = 1;		//convert CH0 & CH1
    	   
    	//ADCON3: A/D Control Register 3
    	ADCON3 = 0;		//clear register
    	_ADRC = 0;		//use system clock (TCY = 34 ns)
    	_ADCS = 5;		//TAD min = 84ns => TCY * (ADCS + 1 ) /2 = 100ns
    	
    	//ADCHS: A/D Input Select Register
    	ADCHS = 0;		//clear register, all CHx- to Vref-
    	_CH0SA = 1;		//CH0 <- AN1
    	_CH123SA = 0;	//CH1 <- AN0, CH2-3 don't care	
    	
    	//ADCSSL: A/D Input Scan Select Register
    	ADCSSL = 0;		//clear register
    	
    	//A/D interrupt config
    	IFS0bits.ADIF = 0;		//clear ADC interrupt flag
    //	IEC0bits.ADIE = 1;		//enable A/D conversion interrupt
    
    	ADCON1bits.ADON = 1;    //Turn on A/D

    -----

  2. Publicité
  3. #2
    marvinc

    Re : Converstion simultané 2 voies DSPic

    personnne ne peut m'aider ?

  4. #3
    kronanberg

    Re : Converstion simultané 2 voies DSPic

    Salut !!

    Moi je réalise mes conversion en séquentiel l'une après l'autre. Mais de toute manière on ne peut pas réaliser 2 conversions en simultané ?( Il n'y a qu'un ADC ??)

    Moi j'ai programmer un timer pour aller faire mes conversions toutes les 100 ms par exemple. Voila un bout du code :

    Code:
    void init_ADC()
    {
    	ADPCFG = 0xF1FF; 	// all PORTB = Digital
    				// RB10 to RB8 = analog(0) 
    	ADCON1 = 0x00E0; 	// SSRC bit = 111 implies internal
    				// internal counter ends sampling and starts conversion (auto convert)
    	ADCHS = 0x0009; 	// Connect RB9/AN9 as CH0 input
    				// RB9/AN9 is the input
    	ADCSSL = 0;		// 
    	ADCON3 = 0x1F02; 	// Sample time = 31Tad, Tad = internal 2 Tcy so Tad = 500 ns
    	ADCON2 = 0;	        // use MUX A
    				// one 16-word buffer
    				// interrupt to each sample/convert sequence
    	ADCON2bits.VCFG = 1;		
    	ADCON1bits.ADON = 1; 	// enable module ADC 
    }
    
    /**********************************************
    *		Interruption du Timer 2				  *
    **********************************************/
    void __attribute__((__interrupt__)) _T2Interrupt(void)
    {
    		T2CONbits.TON = 0;	//Stop the timer
    		IFS0bits.T2IF = 0 ;	//Reset Timer2 interrupt flag
    
    		/**************************************
    		*		CONVERSION PIN RB9			  *
    		**************************************/
    		ADCHS = 0x0009;		        // Selection de la broche RB9
    		ADCON1bits.SAMP = 1; 		// demarrer l'échantillonnage
    				// Après 31 Tad faire la conversion
    		while (!ADCON1bits.DONE);	// Attend la fin de la conversion
    		ADCON1bits.DONE = 0;
    		valeur1 = ADCBUF0; 	// lecture de la valeur convertie
    
    		/**************************************
    		*		CONVERSION PIN RB10			  *
    		**************************************/
    		ADCHS = 0x000A;			// Selection de la broche RB10
    		ADCON1bits.SAMP = 1; 		// demarrer l'échantillonnage
    									// Après 31 Tad faire la conversion
    		while (!ADCON1bits.DONE);	// Attend la fin de la conversion
    		ADCON1bits.DONE = 0;
    		valeur2 = ADCBUF0; 			// lecture de la valeur convertie
    
    		/**************************************
    		*		CONVERSION PIN RB11			  *
    		**************************************/
    		ADCHS = 0x000B;				// Selection de la broche RB11
    		ADCON1bits.SAMP = 1; 		// demarrer l'échantillonnage
    									// Après 31 Tad faire la conversion
    		while (!ADCON1bits.DONE);	// Attend la fin de la conversion
    		ADCON1bits.DONE = 0;
    		valeur3 = ADCBUF0; 			// lecture de la valeur convertie
    
    
    
    		T2CONbits.TON = 1 ;	//Start the timer
    }

    Voila si ça peut t'aider !!!

    a+

  5. #4
    kronanberg

    Re : Converstion simultané 2 voies DSPic

    J'ai oublié de préciser !!
    Je travaillais avec un dsPIC30f6014 !!!!

    Voila Voila

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    marvinc

    Re : Converstion simultané 2 voies DSPic

    c'est bon j'ai trouvé le pb le nouveau code
    Code:
    void Setup_ADC(void)
    {
    	
    	//ADPCFG: A/D Port Configuration Register
    	ADPCFG = 0xFFFF;	//set all digital
    	_PCFG0 = 0;		//AN0 analog input
    	_PCFG1 = 0;		//AN1 analog input
    	
      
    	//ADCON1: A/D Control Register 1
    	ADCON1 = 0;		//clear register	A/D off
    	_FORM = 2;		//fractional 0 - 0.999 (2)
    	_SSRC = 2;		//timer 3
    	_SIMSAM = 1;	//simultaneous sample
    	_ASAM = 1;		//Sampling begins immediately, SAMP bit is auto set
    	
    	//ADCON2: A/D Control Register 2
    	ADCON2 = 0;		//clear register
    	_VCFG = 0;		//VrefH = Avdd, Vref- = AVss
    	_SMPI = 1;
    	ADCON2bits.CHPS = 1;		//convert CH0 & CH1
    	   
    	//ADCON3: A/D Control Register 3
    	ADCON3 = 0;		//clear register
    	_SAMC = 12;		//Tsample = 12 TAD
    	_ADRC = 0;		//use system clock (TCY = 34 ns)
    	_ADCS = 5;		//TAD min = 84ns => TCY * (ADCS + 1 ) /2 = 100ns
    	
    	//ADCHS: A/D Input Select Register
    	ADCHS = 0;		//clear register, all CHx- to Vref-
    	_CH0SA = 1;		//CH0 <- AN1
    	_CH123SA = 0;	//CH1 <- AN0, CH2-3 don't care	
    	
    	//ADCSSL: A/D Input Scan Select Register
    	ADCSSL = 0;		//clear register
    	
    	//A/D interrupt config
    	IFS0bits.ADIF = 0;		//clear ADC interrupt flag
    //	IEC0bits.ADIE = 1;		//enable A/D conversion interrupt
    
    	ADCON1bits.ADON = 1;    //Turn on A/D
    }

Discussions similaires

  1. Tirage simultané (probabilité)
    Par chimio-TermS dans le forum Mathématiques du collège et du lycée
    Réponses: 24
    Dernier message: 28/02/2010, 09h04
  2. [dsPIC]-la famille des dsPIC chauffe t'elle??
    Par jorg1n dans le forum Électronique
    Réponses: 7
    Dernier message: 02/07/2009, 06h50
  3. Coefficient de converstion Propane
    Par Isabelle.s dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 20
    Dernier message: 23/04/2009, 11h03
  4. Acces simultané à une ressource
    Par EspaceVectoriel dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 18/03/2009, 11h15
  5. Programmation dsPIC sous mikroC for dsPIC
    Par flash68 dans le forum Électronique
    Réponses: 8
    Dernier message: 10/03/2009, 08h31
Découvrez nos comparatifs produits sur l'informatique et les technologies.