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.
工具/软件:Code Composer Studio
您好!
我在 ADC 程序中的 MSP430FR6972有问题。
我正在使用两个 ADC (ADC15和 ADC30/集成温度传感器。)
我在两个不同的存储器(ADC12MEM0和 ADC12MEM1)中取两个值。
我将得到一个正确的值、即"ADC12MEM0"。
但是在"ADC12MEM1"的情况下、第一次获得正确的值。
但是、如果我断开电池并再次连接电池。
"ADC12MEM1"中的值错误。
我的 ADC 函数为 :
void battery_check (void) { P9SEL1 |= BIT7;//对于 A15 P9SEL0 |= BIT7; while (REFCTL0和 REFGENBUSY); //如果参考生成器忙,请等待 REFCTL0 |= REFVSEL_0 + REFON; ADC12CTL0 = ADC12SHT0_8 | ADC12ON | ADC12MSC; //采样时间、S&H=16、ADC12打开 ADC12CTL1 = ADC12SHP | ADC12CONSEQ_1; //使用采样计时器 ADC12CTL3 = ADC12TCMAP; //A30 ADC12CTL2 |= ADC12RES_2; // 12位转换结果 ADC12MCTL0 |= ADC12INCH_15 | ADC12VRSEL_1; ADC12MCTL1 |= ADC12INCH_30 | ADC12VRSEL_1 | ADC12EOS; while (!(REFCTL0 & REFGENRDY)); // ADC12IER0 |= ADC12IE1 + ADC12IE0; ADC12CTL0 |= ADC12ENC | ADC12SC; BAT_Outline; //This line ..can ignore..it is for battery value to display on LCD purpose (//此行 n 用于 LCD 显示电池值) ADCvar = ADC12MEM0; //读取转换结果 STATUS_METER = STATUS_METER 和0xf0; //////此行..can ignore..it 用于在 LCD 上显示电池值 如果 (ADCvar >= level_3){STATUS_METER |= 0x05;BAT_L1;BAT_L2;BAT_L3;////此行..can ignore..it 用于在 LCD 上显示电池值 } 否则、如果(ADCvar >= LEVEL_2){STATUS_METER |= 0x03;BAT_L1;BAT_L2;//此行..can ignore..it 用于在 LCD 上显示电池值 } 否则、如果(ADCvar >= level_1){STATUS_METER |= 0x01;BAT_L1; //This line ..can ignore...it is for battery value to display on LCD Purpose }(//此行 n 用于在 LCD 上显示电池值) if (STATUS_METER & 0x80) SET_LCD_NON_USE;否则 CLR_LCD_NON_USE;//此行..can ignore..it 用于在 LCD 上显示电池值 if (status_meter & 0x10) set_lcd_leakage;else CLR_LCD_leakage;//此行..can ignore...it 用于在 LCD 上显示电池值,目的 //====temp sensor TEMP1 = ADC12MEM1; temperatureDegC=(float)(((long) temp1 - CALADC12_12V_30C)*(85 - 30))/ (CALADC12_12V_85C - CALADC12_12V_30C)+ 30.0f; TemperatureDegF = temperatureDegC * 9.0f / 5.0f + 32.0f; temp_meter |=温度抗尖峰脉冲; LCD[0]= digit[(temperatureDegC/100)]; //内置传感器值以在 LCD 上显示 LCD[1]=数字[((temperatureDegC%100)/10)];//将传感器值显示在 LCD 上 LCD[2]=数字[(temperatureDegC %10)]; //内置传感器值以在 LCD 上显示 ADC12CTL0 = 0; ADC12CTL0 = ADC12IFGR0; ADC12CTL1 = 0; } # LCD 正常。 “温度传感器”的#:程序下载后...显示实际数据... 但是,在电池断开连接后...传感器数据不正确。
#我不想使用中断、
请帮帮我。
此致、
Srijit。
您好 Srijit、
我想知道您甚至不会检查 ADC12BUSY 位以完成 ADC 转换。
如果我看到的是正确的、您将 ADC12OSC 时钟用于 ADC。
您的采样时间为256个时钟。
我看不到您为 CPU 使用的时钟。
在读取存储器之前检查 BUSY 位是否有意义?
Lukas
尊敬的 Lukas 先生:
非常感谢您的支持。
它确实帮助我解决了问题、
此致、
Srijit