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