سلام دوستان. من برد آموزشی LPC1788 کویر الکترونیک رو تهیه کردم و میخوام دو تا کانال ADC رو توی LPC1788 بخونم همزمان و روی LCD نمایش بدم! ولی متاسفانه هر طوری که میشد بنویسم برنامشو نوشتم نمیتونم تفکیک شده بخونم این دوتا کانال رو ومتاسفانه روی هم تداخل دارن! چطور میتونم بدون تداخل بخونم اینارو؟ ببینین وقتی من یه کانالم تغییر داره دقیقا همون تداخل روی کانال دیگه هم هست! حتی توی حالتی که با مود burst کار میکنم نهمون نتیجه تداخل رو دارم و علاوه بر اون میکرو بعد از چند ثانیه هنگ میکنه و توی یه خطی که تو دیباگر هم نشون نمیده گیر میکنه!!!!!!!!!! البته نمیدونم مود burst رو درست انجام دادم یا نه. ولی بهرحال اگه از قسمت تعیین مقادیر اولیه و ابتداییات کد بگذریم، باقی کدی که با حالت Burst نوشتم به این صورته:
SDRAM_32M_16BIT_Init();
GLCD_Init();
CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCADC, ENABLE);
GLCD_Clear(Black);
خوب حالا طی این خطها کانالهایADCروفعال میکنم:
//Initialize ADC0.0 --------- p0.23
PINSEL_ConfigPin(0,23,3);
PINSEL_SetAnalogPinMode(0,23,ENABLE);
PINSEL_SetFilter(0,23,ENABLE);
//Initialize ADC0.3 --------- p0.26
PINSEL_ConfigPin(0,26,3);
PINSEL_SetAnalogPinMode(0,26,ENABLE);
PINSEL_SetFilter(0,26,ENABLE);
کانفیگ اولیه ADC :
// Config
ADC_Init(LPC_ADC, 200000);
ADC_BurstCmd (LPC_ADC , ENABLE); // channel 1
بعد حلقه اصلی شروع میشه:
while (1)
{
ADC_ChannelCmd (LPC_ADC , ADC_CHANNEL_0, ENABLE);
ADC_StartCmd(LPC_ADC,ADC_START_NOW);
while (!(ADC_ChannelGetStatus(LPC_ADC, ADC_CHANNEL_0, ADC_DATA_DONE)));
adc_value1 = ADC_ChannelGetData(LPC_ADC , 0);
cof1=(4100-adc_value1)/(4100); // reversed and scaled factor
sprintf(p,"%f",cof1);
GUI_Text( GLCD_X_SIZE-100, GLCD_Y_SIZE -15, p, White, Black);
sprintf(p,"%f",adc_value1);
GUI_Text( GLCD_X_SIZE-100, GLCD_Y_SIZE -30, p, White, Black);
ADC_ChannelCmd (LPC_ADC , ADC_CHANNEL_0, DISABLE);
Delay (100);
ADC_ChannelCmd (LPC_ADC , ADC_CHANNEL_3, ENABLE);
ADC_StartCmd(LPC_ADC,ADC_START_NOW);
while (!(ADC_ChannelGetStatus(LPC_ADC, ADC_CHANNEL_3, ADC_DATA_DONE)));
adc_value2 = ADC_ChannelGetData(LPC_ADC , 3);
cof2=(4100-adc_value2)/(4100); // reversed and scaled factor
//**************************************************
sprintf(p,"%f",cof2);
GUI_Text( GLCD_X_SIZE-100, GLCD_Y_SIZE -45, p, White, Black);
sprintf(p,"%f",adc_value2);
GUI_Text( GLCD_X_SIZE-100, GLCD_Y_SIZE -60, p, White, Black);
ADC_ChannelCmd (LPC_ADC , ADC_CHANNEL_3, DISABLE);
Delay (100);
}
}
نکته ای که هست اینه که من بعد از اینکه مقدار ها رو خوندم غیر فعال کردم اون کانال رو و کانال بعدی رو فعال کردم ولی بازم این مشکل هست! لطفا کمکم کنین ممنون!