OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 14144|回复: 16

msp430f149内部温度传感器,怎么换算成温度值呀?摄氏度。

[复制链接]

31

主题

270

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2012-5-18
在线时间
6 小时
发表于 2012-7-27 13:01:26 | 显示全部楼层 |阅读模式

我选用的是REF2_5V(内部2.5V参考电压),读出转换寄存器 res =ADC12MEM0 
 结果为1800,怎么换算成摄氏温度呀?公式?
前几次测的结果为1780。

谁来买我的火柴.....
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1694
金钱
1694
注册时间
2012-5-10
在线时间
437 小时
发表于 2012-7-27 13:50:29 | 显示全部楼层
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-7-27 13:53:54 | 显示全部楼层
这个芯片数据手册有介绍吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

31

主题

270

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2012-5-18
在线时间
6 小时
 楼主| 发表于 2012-7-27 16:37:40 | 显示全部楼层
回复【2楼】xsx127:
---------------------------------
百度上,公式乱七八糟的,简直不知所云!只知道与设的参考电压有关!
谁来买我的火柴.....
回复 支持 反对

使用道具 举报

31

主题

270

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2012-5-18
在线时间
6 小时
 楼主| 发表于 2012-7-27 16:39:20 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
额。。。就是没有耶,数据手册没提怎么用它,只知道有这个功能!
谁来买我的火柴.....
回复 支持 反对

使用道具 举报

28

主题

306

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
1320
金钱
1320
注册时间
2012-6-3
在线时间
353 小时
发表于 2012-7-27 20:49:28 | 显示全部楼层
回复【楼主位】古月:
---------------------------------
#include <msp430x14x.h>
#include "1602.h"
#define  CPU_F ((double) 8000000.0) //当前CPU主频
#define  delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define  delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

#define Num_of_Results  128       //采样次数
uint results[Num_of_Results];    //保存ADC转换结果的数组 
uchar ple[]="0123456789";
uint  results[];
uchar table[];
uint  adcvalue=0;

uint long temp; //测量通道电压值

void init_clk()//时钟初始化
{
   uchar i;
   BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的
   do
   {
     IFG1 &= ~OFIFG;//清振荡器失效标志
     for(i=0xff;i>0;i--);
   }while((IFG1 & OFIFG)!=0);//若振荡器失效标志有效
   BCSCTL2|=SELM_2+SELS;   //使MCLK=XT2=8M,SMCLK=8=8M
}

void display()//测量通道电压显示函数
{
       adcvalue=temp;
       table[0]=adcvalue/1000;
       table[1]=adcvalue%1000/100;
       table[2]=adcvalue%1000%100/10;
       table[3]=adcvalue%1000%100%10;
       write_com(0x80);
       write_data(ple[table[0]]);
       write_com(0x81);
       write_data(ple[table[1]]);
       write_com(0x82);
       write_data(ple[table[2]]);   
       write_com(0x83);
       write_data(ple[table[3]]); 
}

void main(void)

  WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
  4DIR=0XFF;     //8位数据口
  4OUT=0x00;
  3DIR=0XFF;
  3OUT=0x00;
  init_clk();//时钟初始化
  init();    //液晶初始化
  ADC12CTL0 = SHT0_8 + REFON + ADC12ON;//使用内部参考电压,打开ADC12内核
  ADC12CTL1 = SHP; //采样信号来源采样定时器,由采样输入信号的上升沿触发采样定时器 
  ADC12MCTL0 |=SREF_1+INCH_1;//选择参考电压为1.5V,转换通道为测量通道A2
  ADC12IE = 0x01;//允许相应的中断标志位ADC12IFG.0在置位时发生中断请求服务
  while(1)
 {
  display();//显示函数 
  ADC12CTL0 |= ENC + ADC12SC; //允许转换,启动转换
  _EINT();//打开总中断
}
}

#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
  static uint index = 0;
  results[index++] = ADC12MEM0;           // 移动转换结果
  if(index == Num_of_Results)
  {
        uint i;
        index = 0;
        for(i = 0; i < Num_of_Results; i++)//连续采样64次
        {
          temp += results;              //64次采样的结果接在一起
        }
          temp >>= 7;                      //除以64
  }
}















回复 支持 反对

使用道具 举报

28

主题

306

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
1320
金钱
1320
注册时间
2012-6-3
在线时间
353 小时
发表于 2012-7-27 20:52:17 | 显示全部楼层
回复【楼主位】古月:
---------------------------
上面发错了,看下面这个。
#include <msp430x14x.h>
#include "1602.h"
#define  CPU_F ((double) 8000000.0) //当前CPU主频
#define  delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define  delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

#define Num_of_Results  64       //采样次数
uint results[Num_of_Results];    //保存ADC转换结果的数组 
uchar ple[]="0123456789";
uint  results[];
uchar table[];
uint  adcvalue=0;

uint long temp;   //温度测量通道电压值
uint long IntDegC;//温度值

void init_clk()//时钟初始化
{
   uchar i;
   BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的
   do
   {
     IFG1 &= ~OFIFG;//清振荡器失效标志
     for(i=0xff;i>0;i--);
   }while((IFG1 & OFIFG)!=0);//若振荡器失效标志有效
   BCSCTL2|=SELM_2+SELS;   //使MCLK=XT2=8M,SMCLK=8=8M
}

void display()//温度测量通道电压显示函数
{
       adcvalue=temp;
       table[0]=adcvalue/1000;
       table[1]=adcvalue%1000/100;
       table[2]=adcvalue%1000%100/10;
       table[3]=adcvalue%1000%100%10;
       write_com(0x80);
       write_data(ple[table[0]]);
       write_com(0x81);
       write_data(ple[table[1]]);
       write_com(0x82);
       write_data(ple[table[2]]);   
       write_com(0x83);
       write_data(ple[table[3]]); 
}
void disp_wendu()//温度显示函数
{
  table[0]=IntDegC/10;
  table[1]=IntDegC%10;
  write_com(0x80+0x40);
  write_data(ple[table[0]]);
  write_com(0x81+0x40);
  write_data(ple[table[1]]);
}

void main(void)

  WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
  4DIR=0XFF;     //8位数据口
  4OUT=0x00;
  3DIR=0XFF;
  3OUT=0x00;
  init_clk();//时钟初始化
  init();    //液晶初始化
  ADC12CTL0 = SHT0_2 + REFON + ADC12ON;//使用内部参考电压,打开ADC12内核
  ADC12CTL1 = SHP; //采样信号来源采样定时器,由采样输入信号的上升沿触发采样定时器 
  //ADC12MCTL0 = 0x1A;
  ADC12MCTL0 |=SREF_1+INCH_10;//选择参考电压为1.5V,转换通道为片内温度传感器的测量通道
  ADC12IE |= 0x01;//允许相应的中断标志位ADC12IFG.0在置位时发生中断请求服务
  ADC12IE |= BITA; 
  while(1)
 {
  display();//显示函数 
  disp_wendu();//显示温度
  ADC12CTL0 |= ENC + ADC12SC; //允许转换,启动转换
  _EINT();//打开总中断
// oC = ((x/4096)*1500mV)-986mV)*1/3.55mV = x*423/4096 - 278 
// IntDegC = (ADC12MEM0 - 2692)* 423/4096
  IntDegC = (temp - 2692) * 423; 
  IntDegC = IntDegC / 4096; 
}
}

#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
  static uint index = 0;
  results[index++] = ADC12MEM0;           // 移动转换结果
  if(index == Num_of_Results)
  {
        uchar i;
        index = 0;
        for(i = 0; i < Num_of_Results; i++)//连续采样64次
        {
          temp += results;              //64次采样的结果接在一起
        }
          temp >>= 6;                      //除以64
  }
}

不过用内部的温度传感器测量芯片温度,意义不大。














回复 支持 反对

使用道具 举报

31

主题

270

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2012-5-18
在线时间
6 小时
 楼主| 发表于 2012-7-27 21:56:01 | 显示全部楼层
回复【7楼】艾科:
---------------------------------
艾科兄,我测出来ADC12MEM0 为1800,差不多是你的temp吧!
那么:
   IntDegC = (temp - 2692) * 423;  //岂不是负数了,情何以堪呢?
    IntDegC = IntDegC / 4096;  //我用的是2.5V内部参考电压。
所以,怎么回事勒?我用烙铁烫430,ADC12MEM0的值会上升,是正常的。
谁来买我的火柴.....
回复 支持 反对

使用道具 举报

28

主题

306

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
1320
金钱
1320
注册时间
2012-6-3
在线时间
353 小时
发表于 2012-7-27 22:30:44 | 显示全部楼层
上面的程序,选择的是1.5V参考电压,你改改就是了,改为1.5V或者改公式的值,就可以了。烙铁烫,别把芯片烫坏了!
回复 支持 反对

使用道具 举报

8

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2012-5-26
在线时间
0 小时
发表于 2012-7-28 00:13:42 | 显示全部楼层
呵呵,还用烙铁去感受。
回复 支持 反对

使用道具 举报

31

主题

270

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2012-5-18
在线时间
6 小时
 楼主| 发表于 2012-7-28 00:52:30 | 显示全部楼层
回复【9楼】艾科:
---------------------------------
好吧!睡一觉起来看下!谢谢各位师兄弟!
谁来买我的火柴.....
回复 支持 反对

使用道具 举报

31

主题

270

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2012-5-18
在线时间
6 小时
 楼主| 发表于 2012-7-29 20:44:27 | 显示全部楼层
回复【11楼】古月:
---------------------------------
可以适当的烫一下,温度不要太高了就是~~~~
谁来买我的火柴.....
回复 支持 反对

使用道具 举报

22

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2012-12-24
在线时间
0 小时
发表于 2013-4-17 11:14:41 | 显示全部楼层
那请问2.5v基准电压的公式是什么
天道酬勤
回复 支持 反对

使用道具 举报

28

主题

306

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
1320
金钱
1320
注册时间
2012-6-3
在线时间
353 小时
发表于 2013-4-17 23:15:02 | 显示全部楼层
也不是上什么公式拉,直接把上面的代码里面的1500,改为2500
回复 支持 反对

使用道具 举报

22

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2012-12-24
在线时间
0 小时
发表于 2013-4-24 10:19:55 | 显示全部楼层
公式还是这个不变吗? oC = ((x/4096)*1500mV)-986mV)*1/3.55mV = x*423/4096 - 278  ,只要将1500改成2500
天道酬勤
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2015-5-7
在线时间
0 小时
发表于 2015-5-7 14:01:01 | 显示全部楼层
回复【14楼】艾科:
---------------------------------
您好!请问有没有MSP控制sim900a发数据的源码,可否发一份给我,谢谢! 84772825@qq.com
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2015-10-27
在线时间
0 小时
发表于 2015-11-10 15:31:59 | 显示全部楼层
这个应该参考电路图吧,计算分压比?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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