sky-Hawk where 发表于 2012-11-8 23:51:50

【PSoC3心得】I2C应用之简易温度计

   今天我们通过制作一个简易温度计来学习怎么使用PSoC3的I2C。我使用的温度传感器点点taptap安卓是TI的TMP275,它与单片机的通讯方式为I2C,关于TMP275的使用,请大家自己查阅TI提供的datasheet(后面附件有),这里我们主要讲解PSoC3的I2C的使用。
   PSoC3的I2C使用非常方便,添加一个I2C Master(官方提供的I2C还有其他IP,具体可以看相应的datasheet):

   相应配置如下:

   选择Master模式,通讯速率设为100kbps,其他的默认。
编译完之后,系统会生成相应的API函数。I2C在主模式下的使用方式有两种,一种是自动模式,一种是手动模式,这里我给出手动模式的使用方法(自动模式在代码注释中有),首先是数据的发送,代码如下:/*配置275*/
u8 Config275(u8 configuration)
{
        u8 status,i;
    u8 message;
        message = CONF_REG;
        message = configuration;

    status = I2C_MasterSendStart(ADDR, I2C_WRITE_XFER_MODE);/* Send Start */
    if (status == I2C_MSTR_NO_ERROR) /* Check if start generation completed without errors */
    { /* Send array of 2 bytes */
      for(i=0; i<2; i++)
         {
            status = I2C_MasterWriteByte(message);
                if (status != I2C_MSTR_NO_ERROR)
                  { break; }
         }
   }
   I2C_MasterSendStop(); /* Send Stop */

/*        I2C_MasterClearStatus();
        I2C_DisableInt();
        I2C_MasterWriteBuf(ADDR,message,2,I2C_MODE_COMPLETE_XFER);
        I2C_EnableInt();
        for(;;)
        {CyDelay(1);
        //        if((I2C_MasterStatus() & I2C_MSTAT_WR_CMPLT))
                {
                        break;
                }
        }*/
       
        return 1;
}接收数据的代码也很类似,核心代码如下:status = I2C_MasterSendStart(ADDR, I2C_READ_XFER_MODE); /* Send Start */
    if(status == I2C_MSTR_NO_ERROR) /* Check if transfer completed without errors */
    {
      /* Read array of 2 bytes */
      for(i=0; i<2; i++)
      {
            if(i < 1) { rdData = I2C_MasterReadByte(I2C_ACK_DATA); }
            else { rdData = I2C_MasterReadByte(I2C_N***_DATA);}
      }
    }
    I2C_MasterSendStop(); /* Send Stop */ 相信代码还是应该很容易看懂的,所以我就不多解释了,下面给出效果图:

下面是完整的工程,硬件连接在头文件里都有示说明:

这里是TMP275的datasheet:

最后再附上用时序模拟I2C的简易温度计的PSoC3工程:



ming1006 发表于 2013-4-8 11:11:39

金小豆 发表于 2013-4-8 10:49 static/image/common/back.gif
这两个我之前添加了我发现自己出了一个很低级的问题:液晶屏的排针没有焊稳,所以显示的时候总是不稳定 ...

不客气,一起学习

金小豆 发表于 2013-4-8 10:49:33

ming1006 发表于 2013-4-8 00:12 static/image/common/back.gif
刚才试了下发现代码没给全,应该少了个宏定义#define THERM_RREF 10000,还有两个引脚都要是analogy port ...

这两个我之前添加了我发现自己出了一个很低级的问题:液晶屏的排针没有焊稳,所以显示的时候总是不稳定、乱码。谢谢你哦   以后有问题还要随时请教,发现很有意思。

ming1006 发表于 2013-4-8 00:12:09

ming1006 发表于 2013-4-7 23:30 static/image/common/back.gif
还没有,我可以试下

刚才试了下发现代码没给全,应该少了个宏定义#define THERM_RREF 10000,还有两个引脚都要是analogy port,不要用数字的

ming1006 发表于 2013-4-7 23:30:11

金小豆 发表于 2013-4-7 21:38 static/image/common/back.gif
楼主有没有做过直接把样板上热敏电阻测得的温度直接显示到LCD1602上的实验呢?可不可以给大家共享一下? ...

还没有,我可以试下

金小豆 发表于 2013-4-7 21:38:12

楼主有没有做过直接把样板上热敏电阻测得的温度直接显示到LCD1602上的实验呢?可不可以给大家共享一下?

sky-Hawk where 发表于 2012-11-9 09:09:56

RE: 【PSoC3心得】I2C应用之简易温度计

wangku001wei 发表于 2012-11-9 08:00 static/image/common/back.gif
不错不错 V5

呵呵,谢谢,还是在你洗写的教程中学习了很多的

sky-Hawk where 发表于 2012-11-9 09:09:54

RE: 【PSoC3心得】I2C应用之简易温度计

wangku001wei 发表于 2012-11-9 08:00 static/image/common/back.gif
不错不错 V5

呵呵,谢谢,还是在你洗写的教程中学习了很多的

sky-Hawk where 发表于 2012-11-9 08:00:52

不错不错 V5

sky-Hawk where 发表于 2012-11-9 00:20:01

先把沙发自己占了吧:lol
页: [1]
查看完整版本: 【PSoC3心得】I2C应用之简易温度计

Baidu
map