This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

two ADC simoultaneous sampling with TMS320F2808

Other Parts Discussed in Thread: TMS320F2808

Hello everybody,

I'm working with the TMS320F2808 microcontroller ,I'm programming two ADC's  following the CCv4 example ,concretelly ADC_seq_mode_test and I would like to represent the signal with the graph tool of the program,when I do this ,I put the parameter sample rate that I have found in the datasheet  t=(3+Adqps)*tADCclk ,but the frequency of the digital signal is greater than the analog signal,how can I solve this problem?

In my test I have used a tADCclk=(1/6.25MHz),and a Adqps=1,solving the equation I understant that I must to put  the sample rate parameter at 1562500Hz but it doesn't work good,if I put this parameter at 5820833Hz I obtain the wished result but I don't understand why.

 

Thus is my modified programme:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#define

 

 

ADC_MODCLK 0x4

// HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*4) = 12.5MHz

 

 

// for 60 MHz devices: HSPCLK = 60/(2*4) = 7.5 MHz

#define

 

 

ADC_CKPS 0x1

// ADC module clock = HSPCLK/(2*ADC_CKPS) = 12.5MHz/(1*2) =6.25MHz

 

 

// for 60 MHz devices: ADC module clk = 7.5MHz/(1*2) = 3.75MHz

#define

 

 

ADC_SHCLK 0x1

// S/H width in ADC module periods = 1 ADC clocks(valor minimo)

#define

 

 

AVG 1000

// Average sample limit

#define

 

 

ZOFFSET 0x00

// Average Zero offset

#define

 

 

BUF_SIZE 2048

// Sample buffer size*/

// Global variable for this example

Uint16 SampleTable1[BUF_SIZE];

Uint16 SampleTable2[BUF_SIZE];

 

main()

{

Uint16 i;

 

// Step 1. Initialize System Control:

// PLL, WatchDog, enable Peripheral Clocks

// This example function is found in the DSP280x_SysCtrl.c file.

InitSysCtrl();

 

// Specific clock setting for this example:

EALLOW;

SysCtrlRegs.HISPCP.all = ADC_MODCLK;

 

// HSPCLK = SYSCLKOUT/ADC_MODCLK

EDIS;

 

// Step 2. Initialize GPIO:

// This example function is found in the DSP280x_Gpio.c file and

// illustrates how to set the GPIO to it's default state.

// InitGpio(); // Skipped for this example

 

// Step 3. Clear all interrupts and initialize PIE vector table:

// Disable CPU interrupts

DINT;

 

// Initialize the PIE control registers to their default state.

// The default state is all PIE interrupts disabled and flags

// are cleared.

// This function is found in the DSP280x_PieCtrl.c file.

InitPieCtrl();

 

// Disable CPU interrupts and clear all CPU interrupt flags:

IER = 0x0000;

IFR = 0x0000;

 

// Initialize the PIE vector table with pointers to the shell Interrupt

// Service Routines (ISR).

// This will populate the entire table, even if the interrupt

// is not used in this example. This is useful for debug purposes.

// The shell ISR routines are found in DSP280x_DefaultIsr.c.

// This function is found in DSP280x_PieVect.c.

InitPieVectTable();

 

// Step 4. Initialize all the Device Peripherals:

// This function is found in DSP280x_InitPeripherals.c

// InitPeripherals(); // Not required for this example

InitAdc();

 

// For this example, init the ADC

 

// Specific ADC setup for this example:

AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;

AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;

AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;

 

// 1 Cascaded mode

 

 

//AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;

AdcRegs.ADCTRL1.bit.CONT_RUN = 1;

 

// Setup continuous run

 

AdcRegs.ADCTRL3.bit.SMODE_SEL = 0x1;

 

// Setup simultaneous sampling mode

AdcRegs.ADCTRL1.bit.SEQ_CASC = 0x1;

 

// Setup cascaded sequencer mode

AdcRegs.ADCMAXCONV.all = 0x0002;

 

// 8 double conv's (16 total)

AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;

 

// Setup conv from ADCINA0 & ADCINB0

//AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // Setup conv from ADCINA1 & ADCINB1

//AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; // Setup conv from ADCINA2 & ADCINB2*/

 

// Step 5. User specific code, enable interrupts:

 

 

// Clear SampleTable

 

 

for

(i=0; i<BUF_SIZE; i++)

{

SampleTable1[i] = 0;

SampleTable2[i] = 0;

}

 

 

 

// Start SEQ1

AdcRegs.ADCTRL2.all = 0x2000;

 

 

 

// Take ADC data and log the in SampleTable array

 

 

for

(;;)

{

 

 

for

(i=0; i<AVG; i++)

{

 

 

while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {}

// Wait for interrupt

AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;

SampleTable1[i] =((AdcRegs.ADCRESULT0>>4) );

SampleTable2[i] =((AdcRegs.ADCRESULT1>>4) );

}

}

}

 

Thank you,

 

María