个人总结之基于MSP430F5510的TMP275驱动

来源:互联网 发布:淘宝联盟可以招代理吗 编辑:程序博客网 时间:2024/05/16 05:56

1.TMP275是什么?

TMP275是一款精度为 ±0.5°C 且具有 12 位模数转换器 (ADC) 的集成数字温度传感器, 可在低至 2.7V 的电源供电下运行, 并且与德州仪器 (TI) 的 LM75、TMP75、 TMP75B 和 TMP175 引脚和寄存器兼容。

2.TMP275有什么用?我们拿来干嘛?

温度传感器当然是拿来测温的,不过测温也有很多种,比如测液态,测人体,测固态等

当然我们这款主要是拿来测大气的温度。

3.这款芯片怎么用?

第一反应当然是看数据手册,查看引脚和时序

 

 

软件方面主要了解SDA数据线SCL串行时钟

 

 

总 线 闲 置: :SDA SCL 线路都保持高电平。

开 始 数 据 传 送: SDA 线路的一个状态变化,从高电平到低电平,同时SCL 线路为高电平,定义了一个启动条件。

每个数据 传送由一个启动条件启动。

停 止 数 据 传 送: : SDA 线路从低电平到高电平的一个状态变化,同时SCL 线路为高电平,定义了一个停止条件。

每个数据传送 都由一个重复的启动或停止条件终止。

数 据 传 输 :在一个启动条件和一个停止条件之间传送的数据字节的数量 没有限制并且由主器件确定。 接收器确认

数据传送。

确 认: 每一个接收器件,当被寻址时, 必须生成一个确认位。 做出确认的器件必须在确认时钟脉冲期间下拉 SDA

线路, 这样,在确认时钟脉冲的高 周期,SDA 线路为稳定低电平。 必须将建立和保持时间考虑在内。 在一个主

器件 接收数据时,通过在从器件已发出的最后一个字节上生成一个 不确认,主器件可发出数据传输终止信号。

4.代码怎么实现?

可以通过I2C开启中断读取

unsigned char tmpValues[2];//tmp取温度值  tmpValues[0]8位  tmpValues[1]8

unsigned char tmpNum=0;     //tmpNum个数据

 

//tmp275的初始化

void TMP_init()

{

   P3SEL|=0x03;                         //设定P3.0P3.1  SDA SCL  I2C接口

   UCB0CTL1|=UCSWRST;                   //使能SW复位

   UCB0CTL0=UCMST+UCMODE_3+UCSYNC;      //SMCLK,SW复位

   UCB0CTL1=UCSSEL_2+UCSWRST;   

   UCB0BR0=12;                          //fSCL=SMCLK/12=~100kHZ

   UCB0BR1=0;

   UCB0I2CSA=0X48;                      //设从机地址

   UCB0CTL1&=~UCSWRST;                  //SW

   UCB0IE=0X01;                         //允许接收中断

   __bis_SR_register(GIE);              //开总中断

}

//读取TMP

void TMP_readValue(unsigned char *readBuf)

{

    unsigned int t;

    int i;

    UCB0CTL1|=UCTXSTT;           //I2C开始条件

    t= tmpValues[0]*100 + (unsigned int)(tmpValues[1]*0.0625*0.0625*100);

    for(i=0;i<4;i++,readBuf++)

    switch(i)

    {

    case 1:

      *readBuf=t/1000;

      break;

    case 2:

     *readBuf=t%1000/100;

      break;

    case 3:

      *readBuf=t%100/10;

      break;

    case 4:

      *readBuf=t%10;

      break;

    default :

      break;

    }

}

//中断接收温度数据

#pragma vector=USCI_B0_VECTOR

__interrupt void TMP_RE_ISR()

{

  if(UCRXIFG)

  {

    tmpValues[tmpNum] = UCB0RXBUF;                  // TX -> RXed character

    tmpNum++;

    if(tmpNum == 2)

      tmpNum = 0;

    UCB0IFG &= ~UCRXIFG;

  }  

}

 

0 0
原创粉丝点击