【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工程:
金小豆 发表于 2013-4-8 10:49 static/image/common/back.gif
这两个我之前添加了我发现自己出了一个很低级的问题:液晶屏的排针没有焊稳,所以显示的时候总是不稳定 ...
不客气,一起学习 ming1006 发表于 2013-4-8 00:12 static/image/common/back.gif
刚才试了下发现代码没给全,应该少了个宏定义#define THERM_RREF 10000,还有两个引脚都要是analogy port ...
这两个我之前添加了我发现自己出了一个很低级的问题:液晶屏的排针没有焊稳,所以显示的时候总是不稳定、乱码。谢谢你哦 以后有问题还要随时请教,发现很有意思。 ming1006 发表于 2013-4-7 23:30 static/image/common/back.gif
还没有,我可以试下
刚才试了下发现代码没给全,应该少了个宏定义#define THERM_RREF 10000,还有两个引脚都要是analogy port,不要用数字的 金小豆 发表于 2013-4-7 21:38 static/image/common/back.gif
楼主有没有做过直接把样板上热敏电阻测得的温度直接显示到LCD1602上的实验呢?可不可以给大家共享一下? ...
还没有,我可以试下 楼主有没有做过直接把样板上热敏电阻测得的温度直接显示到LCD1602上的实验呢?可不可以给大家共享一下?
RE: 【PSoC3心得】I2C应用之简易温度计
wangku001wei 发表于 2012-11-9 08:00 static/image/common/back.gif不错不错 V5
呵呵,谢谢,还是在你洗写的教程中学习了很多的
RE: 【PSoC3心得】I2C应用之简易温度计
wangku001wei 发表于 2012-11-9 08:00 static/image/common/back.gif不错不错 V5
呵呵,谢谢,还是在你洗写的教程中学习了很多的 不错不错 V5 先把沙发自己占了吧:lol
页:
[1]