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.

[参考译文] CCS/MSP430FR6972:msp430fr6972

Guru**** 2199130 points
Other Parts Discussed in Thread: MSP430FR6972
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/850103/ccs-msp430fr6972-msp430fr6972

器件型号:MSP430FR6972

工具/软件: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