打印

I2C问题

[复制链接]
2338|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuchongjike|  楼主 | 2010-9-15 14:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用Proteus仿真的I2C读写,可以正常写也可以正常读,下载到我的板子上(和仿真时的线路一样)后,就写不进去了.我用的24C02.
用示波器量测24C02的第5和第6脚,然后一个电平一个电平看,结果都是正常的,也和仿真时的电平是一样的,就是写不进(读出来全为FF).24C02接的是5V,A,B,C接地

仿真时用的是89c51,板子上用的是STC12C5A60S2,在程序的每个改变电平的语句后面都有3个_nop_();

相关帖子

沙发
maychang| | 2010-9-15 15:30 | 只看该作者
1、5脚和6脚必须加上拉电阻。
2、各厂家产品7脚可能不同,有些厂家产品的7脚是写保护。你的芯片7脚接到哪里去了?改变7脚电平试试看。

使用特权

评论回复
板凳
dan.lin| | 2010-9-15 16:07 | 只看该作者
再看看24C02的时序表,有可能时序的问题

使用特权

评论回复
地板
yuchongjike|  楼主 | 2010-9-15 16:11 | 只看该作者
7脚是写保护,低电平为可写.我的是空的,没接东东,默认是低电平

使用特权

评论回复
5
yuchongjike|  楼主 | 2010-9-15 16:21 | 只看该作者
时序应该不会有错,要不然仿真的时候也不可能正常读写了.示波器量出来的也应该不是正常的值了.

使用特权

评论回复
6
yuchongjike|  楼主 | 2010-9-15 22:48 | 只看该作者
5,6脚各加了一个10K的上拉电阻

使用特权

评论回复
7
awey| | 2010-9-16 01:30 | 只看该作者
7脚最好不要悬空。
SCL间加3个nop是否够了?看看MCU的时钟和24C02的速率再定。
间隔可以加大些。
另外,目前的24C02市场上是鱼目混珠,假货非常多,购买时要留意。

使用特权

评论回复
8
dan.lin| | 2010-9-16 08:06 | 只看该作者
时序应该不会有错,要不然仿真的时候也不可能正常读写了.示波器量出来的也应该不是正常的值了.
yuchongjike 发表于 2010-9-15 16:21


示波器能看到,不等于24C02能接收到。。 附件是模拟I2C中间延迟比较多。。 可以参考一下。
模拟I2C总线C51程序软件包.pdf (160.11 KB)

使用特权

评论回复
9
yuchongjike|  楼主 | 2010-9-16 11:28 | 只看该作者
24C02没应答!!!!!

使用特权

评论回复
10
ddtx| | 2010-9-16 13:28 | 只看该作者
本帖最后由 ddtx 于 2010-9-16 13:30 编辑

7脚应该为WR,应该上拉,另外时序很重要,具体时间我记不清楚了, 查查数据和时钟脉冲的宽度,还有就是写入和读出之间要有10MS以上的间隔,否则读出数据不正确,建议去周立功网站上下个例程,一看就明白了

使用特权

评论回复
11
zhaoyu2005| | 2010-9-16 17:20 | 只看该作者
你也用89C51试试就知道了,估计是时钟频率太高了,因为STC大部分指令周期是单时钟周期,而89C51的指令周期是12时钟周期

使用特权

评论回复
12
ddtx| | 2010-9-19 09:20 | 只看该作者
11# zhaoyu2005
这和时钟频率没啥关系,只要时序和保持时间符合要求,都可以正常工作。细节方面处理不好,就会出很多问题

使用特权

评论回复
13
liaozhihua| | 2010-9-20 14:59 | 只看该作者
DATASHEET没吃透,再好好啃啃,或者找个范例移植一下,时钟频率控制在100KHZ~400KHZ之间,最好是100KHZ

使用特权

评论回复
14
zhaoyu2005| | 2010-9-26 09:34 | 只看该作者
12# ddtx
让我怎么说呢!
看你怎么理解了,时序怎么来的?是不是靠单片机产生的吧
同样的外围电路,只是mcu不同,一个能用,另一个不能用,你说差在哪儿了,简单说当然差在时序上了,详细的说,是高低电平的保持时间不符合要求。
为什么产生差别了呢,因为AT89C51的指令周期等于12时钟周期,也就是12MHz的晶振,单字节指令的执行时间是1uS,而STC的是指令周期等于时钟周期,也就是12MHz的晶振,单字节指令的执行时间是1/12uS,同样的程序输出的SCL时钟差太多了
解决方法:
1.如果对程序执行速度要求不高的可以选择频率低的晶振,以接近1/12为好。
2.如果对程序执行速度要求不高的话,同时可以在编程时选择时钟12分频(ISP软件有的型号能选,对这个型号不清楚)的话,直接选上应该就好了
3.调整程序中的高低电平保持时间,也就是延时增加到原来的12倍
4.如果有硬件I2C,建议使用硬件I2C

使用特权

评论回复
15
ddtx| | 2010-9-26 15:59 | 只看该作者
我说的时序是指I2C的时序,就是说不论是单片机是什么,只要符合I2C的时序,都可以成功读写,和单片机的类型以及单片机的晶振没有关系。

使用特权

评论回复
16
zhaoyu2005| | 2010-9-27 09:03 | 只看该作者
LS,你说的,玩过的有几个不知道?
最终不还得归结到单片机差异,得调整程序么,太极!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

11

帖子

1

粉丝