原创 PIC24F系列单片机I2C通信

2012-12-21 11:42 1753 11 14 分类: 消费电子

近期做了一个运用PIC24F系列单片机内部的I2C模块进行和外界的具有I2C通信接口的温/湿度传感器通信,在项目实施的过程中对PIC单片机内部的I2C模块有了更深的了解,现将其写下,供大家分享,同时也希望各位能发表自己的看法,共同研究。

 

首先简述在这次项目中用到的具有I2C接口的传感器。本次采用的是芯科实验室的最新产品,温/湿度传感器SI7005,该产品利用I2C接口进行通信,功耗低,不需人为在进行校准,测量精度高,线性器件,可直接读出当前的温度,湿度等诸多优点。

 

单片机选择的是MICROCHIP公司的PIC24F32KA304单片机,该种类型的单片机基本上与MICROCHIP公司的PIC24F系列;单片机大同小异,但不支持外部引脚映射功能。在项目过程中遇到了如下的一些问题:

 

(1).项目进行时,开始驱动程序写的很快,但在写完后进行调试时,第一步就无法实施。PIC单片机无法发出起始信号,由于这一问题的出现导致了后面几乎是举步维艰,完全死在了这里。出现这一问题之后首先想到的是程序中关于I2C时序不正确的问题,开始检查程序中关于I2C时序的每一句,进行修修改改,感觉没有什么问题,但运行时依旧不能发出起始信号。自己感觉程序方面没有问题,后来开始检查是否是硬件上的原因,经过查看PIC单片机的数据手册,发现上面所述的要求SDA ,SCL 的上拉电阻不能大于2.5K ,而电路板上却焊接的是10K 的电阻,便猜想是否是电阻过大了,无法将电平拉高。后来经过了解,有的地方说标准的I2C上拉电阻为4.7K ,也有的地方说是2.2K ,自己也不是很明白,就将电路板上的电阻改为了2.2K 可是可怕的事情依旧发生了电阻显然对这个无影响。还是很苦命的用万用表检查电路,有一种考试做不出来,认为试卷出的有问题......,后来看单片机的手册时无意的查看到了这个单片机的I/O端口部分,发现这个单片机和其它的稍微有一点差别,在I/O控制寄存器中多了一个ANSB寄存器,这一寄存器的功能进行I/O端口的模拟,数字功能选择,上电时单片机默认的是模拟功能,也就是说我的程序中根本就没有选通SDA SCL 作为数字通道,也就根本不可能发出正常的数字电平,从而单片机根本就发不出起始信号,此时才大彻大悟,就错在这一个微小的地方啊,天下大事必作于细啊!

 

(2).前面的起始信号是发出去了,可接下来的问题又来了。单片机发出从机的地址字节后得不到从机的应答,又开始找程序问题,找不出来,又接着找硬件的问题,还是一头雾水,纠结啊!后来我们总监给了我厂家技术支持电话,要我学会解决问题的方法与途径。后来经过联系厂家的技术支持,那过边说如果没有应答的话可能是从机没有工作等原因。于是又开始检查硬件,确定从机的供电正常,SDA  SCL 线连接正常,又陷入了一头雾水中。接着又开始看传感器的数据手册,发现是从机的地址发送错了,当初手册上的序列是发送地址0x40,也就没有多想,可现在再次看时发现虽然从机的地址确实是0x40但因为第一位是表明是主机是向从机写还是读,也就是说整体要向左移一位,也就是应该要发送地址字节为0x80,哎,当初看芯片资料时不用心啊,这一错误又浪费了许多时间。我们在对硬件写驱动程序时,当遇到问题时不要自己埋头苦干,也要学会通过各种方法来解决问题,比如通过产品的技术支持就是一个很好的方法,同样一定要仔细的看芯片资料,不要因为一个细节而出错.后来经过对程序的修修改改总算是能读出传感器的数据了,还有一点需要注意,在单片机I2C模块控制器的标志位写1时,一定要确认这一位已经清0,例如 RSEN  RCEN ACKEN ,同样在I2C模块的状态寄存器中也要注意一定要等相关的状态标志位清0或者为1时,才进行下一步的操作,不然会出现冲突的情况出现.

 

    (3).程序算是写完了,也能进行正确的驱动,本来以为没什么问题了,可后来发现在I2C通信速率的选择上出现了问题。PIC24F系列单片机支持400K 100K 两种总线传输速率,但在这个项目中竟然400K的可以,而100K 却不行,很奇怪吧!不过在查找这个问题时还算是比较的轻松。关键在于在I2C寄存器中的TRSTAT ,TBF这两位上的区别,之前我是用TBF来查询主机是否发送完成,这种方式下400K 因为速度比较快,还没有什么影响,但到了用100K 时就出现了当主机的数据还没有完全发完时,主机就开始了下一步的操作,也就认IWCOL(写冲突位)置1,TBF 只能表明单片机内部了发送缓冲器已经空了,并没有表明数据已经在I2C总线上完全的发送完成,也就出现了冲突的出现,而TRSTAT则表示主机是 否已经全部发送完成。这两位的区别需要注意。

 

基本上一个温/湿度监测系统就完成了,但是还需要进一步的对其稳定性和精度进行测试。

 

第一次做项目,第一次写博客,欢迎大家对上述的项目提出建议和批评。

 

 

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户1621497 2012-12-27 16:29

博主的现象和我当时做I2C时遇到的情况都差不多一样了,都是不细心看资料的缘故呀。

用户1012893 2012-12-27 13:08

有意思,值得一读。

用户1602177 2012-12-21 11:43

欢迎博主开博授讲~~感谢您的分享!
相关推荐阅读
huhaomcu_856934054 2014-08-19 20:54
uCOS-Ⅱ
启动uCOS-Ⅱ的学习与移植!...
huhaomcu_856934054 2014-07-20 10:08
多通道电路原理图
简单说说关于Protel中提供的多通道原理绘制与PCB布局布线. Protel(不知99SE是否可以)有提供多通道电路原理图的设计,这项功能在有些方面还是很有用处的,比如说:当部分原理图在一张图...
huhaomcu_856934054 2014-04-07 09:10
IAR制作工程模板
我个人学习新的MCU过程一般会是如下过程,建立一个个的DEMO工程,每个DEMO工程学习一个外设,所以每个DEMO程序都很简单,但是在建立一个个DEMO程序的过程中,会发现开始的步骤基本上就是相同...
huhaomcu_856934054 2014-03-14 18:06
新公司与老公司的比较
在新公司上了几天班真心有点想念以前的老公司了! 下面来比较比较新公司与老公司吧: 1.业务量。新公司的项目更多,人员更多,涉及的面也较广,整体的技术水平要大大强于以前的老公司。以前老公司里...
huhaomcu_856934054 2014-02-24 15:01
辞职了!
辞职了,但愿柳暗花明又一村!!...
huhaomcu_856934054 2014-02-21 09:22
回来啦!
之前因为身体原因一直在家休息,直到今天才来武汉上班。但愿今年个人的工作能有所上升!...
EE直播间
更多
我要评论
3
11
关闭 站长推荐上一条 /3 下一条