社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 2176|回复: 5

[求助] 430F5438自带温度传感器问题

[复制链接]

898

TA的帖子

0

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

发表于 2012-12-5 17:28:36 | 显示全部楼层 |阅读模式
#include  <msp430x54x.h>
#include  <stdio.h>
/*******************************************************************************
全局变量的定义
*******************************************************************************/
unsigned int results[4];                                          // 转换值存取变量
/*************************************************************************
** 函数名称:主函数
** 工作环境: iar 4.11B
** 相关文件:
** 修改日志:
*************************************************************************/
void main(void)
{
  unsigned int i;
  WDTCTL = WDTPW+WDTHOLD; // 关闭看门狗

  
  P7SEL |= 0x03;                                                  // 使能时钟端口
  UCsctL6 |= XCAP_3;                                              // 配置晶振电容
  while ( (sfrifg1 &OFIFG))                                       // 判断晶振是否起振
  {   
    UCSCTL7 &= ~(XT1LFOFFG + DCOFFG);                             // 清除失效标志位
    SFRIFG1 &= ~OFIFG;                                            // 清除失效中断标志位
  }
  UCSCTL4 = SELM__DCOclk + SELS__DCOCLK;                          // 选择时钟源
  
  
  P7DIR &= ~(BIT4 + BIT5);                                        // P6.7口A7输入
  P7SEL |= (BIT4 + BIT5);                                         // P7口第二功能
  
  adc12CTL2 = ADC12RES_2 + ADC12REFOUT;                           // AD基本配置
  ADC12CTL0 = ADC12ON + ADC12MSC + ADC12SHT03 + ADC12REFON + ADC12REF2_5V;  
  
  
  ADC12MCTL0 |= ADC12SREF_1 + ADC12INCH_10;                       // 采样温度
  ADC12MCTL1 |= ADC12SREF_1 + ADC12INCH_11;                       // 采样VACC/2
  ADC12MCTL2 |= ADC12INCH_12;                                     // 通道12输入
  ADC12MCTL3 |= ADC12INCH_13 + ADC12EOS;                          // 通道13输入
  
  
  ADC12CTL1 = ADC12SHP + ADC12CONSEQ_3;                           // 选择转换模式                  
  for (i=0;i<0xFFFF;i++);                                         // 等待基准电压建立                       
  UCSCTL8 |= MODoscREQEN;  
  ADC12IE |= 0X08;                                                // 使能通道4中断
  ADC12CTL0 |= ADC12ENC;                                          // 开启转换
  _EINT();                                                        // 打开总中断
  ADC12CTL0 |= ADC12SC;                                           // 转换开始
  LPM3;                                                           // 进入低功耗3
}
/*************************************************************************
** 函数名称:AD转换中断函数
** 工作环境: IAR 4.11B
** 功能:     保存转换值
** 相关文件:
** 修改日志:
*************************************************************************/
#pragma vector = ADC12_VECTOR
__interrupt void ADC12ISR(void)
{
  results[0] = ADC12MEM0;                                         // 保存第一通道值
  printf("\n%d",results[0]);
  
  results[1] = ADC12MEM1;                                         // 保存第二通道值
   printf("\n%d",results[1]);
  
   results[2] = ADC12MEM2;                                         // 保存第三通道值
   printf("\n%d",results[2]);
   
   results[3] = ADC12MEM3;                                         // 保存第四通道值
printf("\n%d",results[3]);
}



第一通道打印出来的温度值是1632,实际温度大概是22度。不知道这个怎么对应过来的?请教各位高手!
第二通道打印出来的是2771,这个也没看明白是啥?
第三、四通道风别是1925、1818?请高手指点.
此帖出自MSP430论坛


回复

使用道具 举报

898

TA的帖子

0

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

 楼主| 发表于 2012-12-5 17:29:14 | 显示全部楼层
自己顶


回复

使用道具 举报

2856

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2012-12-5 19:32:36 | 显示全部楼层
看错了,5438没搞过

[ 本帖最后由 huo_hu 于 2012-12-5 19:53 编辑 ]

点评

你搞得哪款?是怎么看温度的?类比下。  详情 回复 发表于 2012-12-7 09:17


回复

使用道具 举报

898

TA的帖子

0

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

 楼主| 发表于 2012-12-7 09:17:41 | 显示全部楼层
原帖由 huo_hu 于 2012-12-5 19:32 发表
看错了,5438没搞过

你搞得哪款?是怎么看温度的?类比下。


回复

使用道具 举报

2856

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2012-12-7 09:32:43 | 显示全部楼层
G2553;内部参考;adval=七次累计和(第一次切换不准)

void Cal_Temp(unsigned int adval) {
    // oC = ((A10/1024)*1500mV)-986mV)*1/3.55mV
        // =A10/1024*2500/3.55*25600-986/3.55*25600=(A10*17606-7102976)/25600        17606/7=2515.14
        Current_Temperature = (Current_Temperature+(unsigned int)(((unsigned long)adval*2515-7102976)>>8))/2;
}

[ 本帖最后由 huo_hu 于 2012-12-7 09:34 编辑 ]

点评

谢谢  详情 回复 发表于 2012-12-7 12:45


回复

使用道具 举报

898

TA的帖子

0

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

 楼主| 发表于 2012-12-7 12:45:50 | 显示全部楼层
原帖由 huo_hu 于 2012-12-7 09:32 发表
G2553;内部参考;adval=七次累计和(第一次切换不准)

void Cal_Temp(unsigned int adval) {
    // oC = ((A10/1024)*1500mV)-986mV)*1/3.55mV
        // =A10/1024*2500/3.55*25600-986/3.55*25600=(A10*17606- ...

谢谢


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-11-20 17:36 , Processed in 0.332170 second(s), 19 queries , Redis On.

快速回复 返回顶部 返回列表