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
Other Parts Discussed in Thread: MSP-FET

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/597022/msp430l092-temperature-sensor-measuring-error

器件型号:MSP430L092
主题中讨论的其他器件:MSP-FETMSP430WARE

我想测量内部温度传感器值。 我使用 了 msp430x09x_apol_adc_06.c ( APOL_ADC、采样温度并转换为 oC)示例代码 、但它无法正常工作。  我观察 到 APINT (A-POOL 整数转换值寄存器)值刚刚增加一秒。 我已经尝试通过 MSP-FET 闪存仿真工具和 MSP-TS430L092目标板使用 IAR Embedded Workbench 进行调试。 请帮助我解决此类问题。 我尝试打开将 LED 与温度传感器值连接在一起的 P1.4引脚。 如果 degC 值介于15和30之间、则会点亮 LED、否则无法正常工作。 我看到我的 LED 在20秒后亮起。 首先、它闪烁三次、然后一直打开、直至40秒。 最后、它会显著关闭、因为我的 APINT 值正在增加。 它为什么起作用? 有人可以帮帮我吗?

/*-版权所有-、BSD_EX
*版权所有(c) 2012、德州仪器(TI)公司
*保留所有权利。
*
*以源代码和二进制形式重新分发和使用、有无
*如果满足以下条件、则允许进行修改
符合*:
*
**源代码的重新分发必须保留上述版权
*注意、此条件列表和以下免责声明。
*
**二进制形式的再发行必须复制上述版权
*请注意、中的此条件列表和以下免责声明
*随分发提供的文档和/或其他材料。
*
**德州仪器公司的名称和名称均不相同
*其贡献者可用于认可或推广衍生产品
*未经特定的事先书面许可。
*
*本软件由版权所有者和贡献者"按原样"提供
*以及任何明示或暗示的保证、包括但不限于:
*特定适销性和适用性的隐含保证
*不承认目的。 在任何情况下、版权所有者不得或
*派遣国应对任何直接、间接、偶然、特殊、
*典型或必然的损害(包括但不限于
*采购替代货物或服务;丧失使用、数据或利润;
*或业务中断)、无论原因是什么以及任何责任理论、
*无论是合同、严格责任还是侵权行为(包括疏忽或)
*否则)因使用本软件而以任何方式产生、
*即使被告知可能会发生此类损坏。
*
秘书长的报告
*
* MSP430代码示例免责声明
*
* MSP430代码示例是通常包含的低级程序
*高度演示单个外设功能或器件功能
*简明扼要。 为此、代码可能依赖于器件的加电默认值
*寄存器值和设置、如时钟配置和注意
*在组合多个示例中的代码时应采取这种方法、以避免潜在的问题
*效果。 有关 GUI、另请参阅 www.ti.com/grace 和 www.ti.com/msp430ware
*用于外设配置的 API 函数库方法。
*
*--/版权--*/
/*说明:ADC 温度采样*
/********* A_POOL ADC 转换********* /
/**//
/**//
/*+--L092--+*/
/*|*1 14 |*/
/*| 2 13 |*/
/*| 3 12 |*/
/*| 4 11 |*/
/*| 5 10 |*/
/*| 6 9 |*/
/*| 7 8 |*/
/*+--- +*/
/**//
/* D.Dang/D.Archbold/D.Szmulewicz /F. Chen */
/*德州仪器(TI)公司 *
/*使用 IAR 版本5.51.1和 CCS 版本5.3.00090构建*/
/ /

#include

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


int main (空)

WDTCTL = WDTPW + WDTHOLD;//停止 WDT

//开始配置 A-POOL 寄存器

APCTL = 0;//清除 APCTL 寄存器
APIE |= EOCIE;//为转换结束启用中断
APTRIM = REFTSEL;
APVDIV = TMPSEN;//启用温度传感器
APCNF = CMPON+DBON+CONVON+APREFON+CLKSEL_MCLK;//配置 A-POOL 元素,选择 MCLK 作为 A-POOL 时钟源

P1DIR |= BIT0 + BIT1 + BIT4;

while (1)

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>15&degC<30){
P1OUT|=BIT4;


否则{
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);//退出活动状态以计算温度


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

    我收到了你的问题。 请允许我花些时间浏览代码、我将会返回给您。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    #include 
    
    int 结果;
    volatile short int degC;
    unsigned int log [50]={0};
    unsigned int index = 0;
    
    int main (void)
    {
    WDTCTL = WDTPW + WDTHOLD;//停止 WDT
    
    //开始配置 A-POOL 寄存器
    
    APCTL = 0;//清除 APCTL 寄存
    器 APIE |= EOCIE; //转换结束时启用中断
    APTRIM = REFTSEL;
    APVDIV = TMPSEN;//启用温度传感器
    APCNF = CMPON+DBON+CONVON+APREFON+CLKSEL_MCLK;//配置 A-POOL 元素,选择 MCLK 作为 A-POOL 时钟源
    
    P1DIR |= BITSEL+4
    
    
    
    
    + APOSL+4;//将 APCOPSL+4 + 4 + 1 + APCOPSL+ 1 + 1;同时设置 APOSLE+4 + APCOTB+4通道 +oden+
    APINT = 0x00;//清除 ADC-DAC-REG
    APIFG = 0;
    APCTL |= CBSTP+SBSTP+RUNSTOP;
    __bis_register (LPM0_bits + GIE);//输入 LPM0,启用中断
    
    的结果= APINT;
    log[index+]=结果;
    if (+)*(=50
    
    
    ()+)(+)+125 ()+)(=()+)(+)(+)(+)+)(+)+)(+)(+)+)+(=125
    ()+)+)+)+(=(+)+)+ //如果
    
    (degC>15&degC<30){
    P1OUT|=BIT4;
    }
    
    否则{
    P1OUT&&~BIT4;
    }
    ___ no_operation ();//在此处设置断点
    
    }
    
    
    
    
    
    
    
    
    
    void //a_pool 中断服务例程#if defined (_TI_Compiler_version__)_ void (_ap_op_vector
    
    (_ void)_ void _op_interrupt (_op_op_en_en_en_opt)_(_ void)_ vector (_ void)_ void _op_op_op_op_op_en_en_op_en_en_en_en_en_en_en_en_en_opt (_(_)_ void (_op_op_op_op_op_
    #endif
    {
    APIFG = 0;//清除中断标志
    __BIC_SR_REGISTER_ON_EXIT (LPM0_Bits);//退出活动状态以计算温度
    
    
    } 

    请稍后暂停调试器、运行上述代码。 它应被夹在 while (1)中;。 然后、请向我发送 log[50]变量中的值。

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