Hi
My customer use TM4C1230H6PM ADC pin PE2 (CH1) , PE3(CH0) , PE4(CH9) , PE5(CH8) , four channels are sampled 10 times each, found the PE3 pin problem,
Test 1 : if ADC PE3 (CH0) to GND , other Channels ADC date as below, data correct.
CH1:0x7283 CH0:0x0007 CH9:0x6DF0 CH8:0x2A29
CH1:0x7262 CH0:0x0017 CH9:0x6E01 CH8:0x2A08
CH1:0x726D CH0:0x0008 CH9:0x6DFB CH8:0x2A08
CH1:0x7263 CH0:0x0007 CH9:0x6E06 CH8:0x29ED
CH1:0x724B CH0:0x0006 CH9:0x6DF2 CH8:0x2A10
CH1:0x7260 CH0:0x0009 CH9:0x6DFE CH8:0x29F7
CH1:0x725A CH0:0x0003 CH9:0x6DF6 CH8:0x2A2E
CH1:0x7247 CH0:0x0004 CH9:0x6DFA CH8:0x2A22
CH1:0x7276 CH0:0x0007 CH9:0x6DF9 CH8:0x2A1E
CH1:0x7269 CH0:0x000A CH9:0x6DFB CH8:0x2A20
---------------------------------------------------------
2. if PE3(CH0) has voltage, will affect other ADC pins data , the other ADC Channels data no correct, other channel data is increasing
CH1:0xAFF5 CH0:0xAD7A CH9:0xADCC CH8:0xAB0
CH1:0xAFF5 CH0:0xAD86 CH9:0xADCF CH8:0xAB38
CH1:0xAFF5 CH0:0xAD5C CH9:0xADB8 CH8:0xAB14
CH1:0xAFF5 CH0:0xAD64 CH9:0xADB9 CH8:0xAB2B
CH1:0xAFF5 CH0:0xAD52 CH9:0xADB0 CH8:0xAB1E
CH1:0xAFF5 CH0:0xAD7C CH9:0xADCF CH8:0xAB16
CH1:0xAFF5 CH0:0xAD8A CH9:0xADCE CH8:0xAB1B
CH1:0xAFF5 CH0:0xAD6F CH9:0xADBD CH8:0xAB20
CH1:0xAFF5 CH0:0xAD8C CH9:0xADC9 CH8:0xAB31
CH1:0xAFF5 CH0:0xAD80 CH9:0xADCA CH8:0xAB24
---------------------------------------------------------
I attached my customer code in the fallowing. Do you have any suggestions?
Thanks for all
//--------------------------------------------------------------------------------------------------------------------------
static void SetADCFunction(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_2);
GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_3);
GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_4);
GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_5);
ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);
ADCSequenceStepConfigure(ADC_BASE, 0, 0, ADC_CTL_CH1);// | ADC_CTL_IE | ADC_CTL_END);
ADCSequenceStepConfigure(ADC_BASE, 0, 1, ADC_CTL_CH0);// | ADC_CTL_IE | ADC_CTL_END);
ADCSequenceStepConfigure(ADC_BASE, 0, 2, ADC_CTL_CH9);// | ADC_CTL_IE | ADC_CTL_END);
ADCSequenceStepConfigure(ADC_BASE, 0, 3, ADC_CTL_CH8 | ADC_CTL_IE | ADC_CTL_END);
ADCSequenceEnable(ADC_BASE, 0);
ADCIntClear(ADC0_BASE, 0);
ADCProcessorTrigger(ADC0_BASE, 0);
}
//--------------------------------------------------------------------------------------------------------------------------
void Measurement(void)
{
static BYTE ADC_Cnt = 0;
static WORD Temp1 = 0;
static WORD Temp2 = 0;
static WORD Temp3 = 0;
static WORD Temp4 = 0;
if(ADCIntStatus(ADC0_BASE, 0, false)) // ADC Done
{
Temp1 += HWREG(ADC_BASE + ADC_O_SSFIFO0);
Temp2 += HWREG(ADC_BASE + ADC_O_SSFIFO0);
Temp3 += HWREG(ADC_BASE + ADC_O_SSFIFO0);
Temp4 += HWREG(ADC_BASE + ADC_O_SSFIFO0);
if(ADC_Cnt < 10) ADC_Cnt++;
else
{
ADC_Data1 = Temp1;
ADC_Data2 = Temp2;
ADC_Data3 = Temp3;
ADC_Data4 = Temp4;
ADC_Cnt = 0;
Temp1 = 0; Temp2 = 0;
Temp3 = 0; Temp3 = 0;
}
ADCIntClear(ADC0_BASE, 0);
ADCProcessorTrigger(ADC0_BASE, 0);
}
}