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.

[参考译文] MSP430L092:如何结合温度传感器代码和读取模拟值代码?

Guru**** 2561130 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/597832/msp430l092-how-can-i-combine-temperature-sensor-code-and-reading-analog-value-code

器件型号:MSP430L092

我尝试合并两个不同的示例代码。 我打算测量我的传感器值,因此我使用了 ADC 示例代码(msp430x09x_apol_adc_07.c )。 它工作正常。 读取传感器值后、我想测量内置的温度传感器值。  尽管我使用了示例代码(msp430x09x_apol_adc_06.c apol_adc、采样温度并转换为 oC)、但无法测量温度传感器值。 我认为 在测量传感器值后清除 ADC 寄存器 APINT = 0x00;//清除 ADC-DAC-REG,但没有变化。 我得到的温度传感器结果 为 degC=3或5。 首先、我要分别测量我的传感器值和内置温度传感器值。

我不想同时测量我的传感器值和内置温度传感器值。

我已经尝试通过 MSP-FET 闪存仿真工具和 MSP-TS430L092 目标板使用 IAR Embedded Workbench 进行调试。

我将我的代码放在下面。


#include

int ChannelA2;

INT 结果;
挥发性短整型 degC;

int main (空)


WDTCTL = WDTPW + WDTHOLD;//停止 WDT

//开始配置 A-POOL 寄存器
APCTL = 0;//清除 APCTL 寄存器
APCNF = CMPON+DBON+CONVON+EOCBU+APREFON+CLKSEL_MCLK;//配置 A-POOL 元素,选择 MCLK 作为 A-POOL 时钟源
APINT = 0x00;//清除 ADC-DAC-REG
APVDIV=A2DIV_1;

APIE |= EOCIE;//为转换结束启用中断
APTRIM = REFTSEL;
APVDIV = TMPSEN;//启用温度传感器

P1DIR|=BIT4;

while (1)



APIE = EOCIE;//为转换结束启用中断
APINT = 0x00;//清除 ADC-DAC-REG
APCTL = OSEL+CBSTP+RUNSTOP+APNSEL_2+APPSEL_5;//设置通道并开始转换
_bis_SR_register (LPM0_bits + GIE);//启用中断后进入 LPM0
ChannelA2 = APINT;//获取 A2的结果

if (ChannelA2 >85){

APCTL = OSEL+oden+OSWP+APPSEL_4+APNSEL_5;//设置通道并开始转换-+oden+
APINT = 0x00;//清除 ADC-DAC-REG
APIFG = 0;
APCTL |= CBSTP+SBSTP+RUNSTOP;
_bis_SR_register (LPM0_bits + GIE);//启用中断后进入 LPM0

结果= APINT;
degC =(((Result-179)*125)/58)+ 30;//请参阅数据表以了解精度和偏移规格

if (degC>18 & degC<30){
P1OUT|=BIT4;





否则{





__no_operation();//在此处放置断点


//a_pool 中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=APOOL_vector
_interrupt void a_pool (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (APOL_vector)) a_pool (void)
其他
错误编译器不受支持!
#endif

APIFG = 0;//清除中断标志
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出活动状态以对下一个通道进行采样

请帮助我修复错误

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我收到了您的问题、我将仔细检查代码并返回给您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ADC 温度传感器的运行示例代码6是否正常工作并产生了正确的结果?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    短整型 measureTemp()
    {
    INT 结果;
    短整型摄氏度;
    
    APCTL = 0; //清除 APCTL 寄存器
    APIE |= EOCIE; //为转换结束启用中断
    APTRIM = REFTSEL;
    APVDIV = TMPSEN; //启用温度传感器
    APCNF = CMPON+DBON+CONVON+APREFON+CLKSEL_MCLK; //配置 A-POOL 元素,选择 MCLK 作为 A-POOL 时钟源
    
    APCTL = Osel+oden+OSWP+APPSEL_4+APNSEL_5; //设置通道并开始转换-+oden+
    APINT = 0x00; //清除 ADC-DAC-REG
    APIFG = 0;
    APCTL |= CBSTP+SBSTP+RUNSTOP;
    _bis_SR_register (LPM0_bits + GIE); //输入 LPM0并启用中断
    
    结果= APINT;
    degC=(((((Result-179)*125)/58)+30; //有关精度和偏移规格、请参阅数据表
    
    __no_operation(); //在此处设置断点
    
    返回 degC;
    }
    
    int MeasureVoltage()
    {
    int ChannelA0;
    
    APCTL = 0; //清除 APCTL 寄存器
    APCNF = CMPON+DBON+CONVON+EOCBU+APREFON+CLKSEL_MCLK;//配置 A-POOL 元素,选择 MCLK 作为 A-POOL 时钟源
    APINT = 0x00; //清除 ADC-DAC-REG
    
    APIE = EOCIE; //为转换结束启用中断
    APINT = 0x00; //清除 ADC-DAC-REG
    APCTL = OSEL+CBSTP+RUNSTOP+APNSEL_0+APPSEL_5; //设置通道并开始转换
    _bis_SR_register (LPM0_bits + GIE); //输入 LPM0并启用中断
    ChannelA0 = APINT; //获取 A0的结果
    
    返回信道 A0;
    }
    
    

    使用这些函数并在 main 中调用它们。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否尝试过上述代码?