打印

那位用1t的51,110592晶振驱过24c02

[复制链接]
3192|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chuandaoxy|  楼主 | 2012-4-10 18:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
NE5532| | 2012-4-10 20:17 | 只看该作者
I2C是同步总线,关频率啥事?楼主最好也自己动手写了,软I2C接口也不到200行汇编…………自己写的放心。

使用特权

评论回复
板凳
wuyiduan| | 2012-4-10 20:21 | 只看该作者
1T的51注意一下IO电平变化速度,加NOP

使用特权

评论回复
地板
NE5532| | 2012-4-10 20:28 | 只看该作者
1T的51注意一下IO电平变化速度,加NOP
wuyiduan 发表于 2012-4-10 20:21


24C02 CLK 高电平时间600nS,低电平时间1300nS,楼主如果写C,不一定能赶上这个速度……

使用特权

评论回复
5
Light_David| | 2012-4-11 01:39 | 只看该作者
4# NE5532
哈哈,估计楼上是说STC的1T 51 ,
给一个I/O赋值后,不加NOP立即去读这个I/O,很可能状态还没有变
STC解释说这是因为1T速度太快了,端口还没反映过来。 真是有意思。。

使用特权

评论回复
6
icecut| | 2012-4-11 09:16 | 只看该作者
5# Light_David

他们用的io速度不够....

am3359昨天看见有人也遇到,普通gpio的update速度为260ns....才5M

使用特权

评论回复
7
coody| | 2012-4-11 09:44 | 只看该作者
我说说经验。。。。
如果是STC的,其官网上的技术支持一栏就有24C的程序,也可以用“STC15新ISP专用软件v6.15 “里的延时程序来生成。
STC的10、11、12系列改变一个IO的状态,一般是3T或4T,15系列新版会减少一个T,按前者说,比如:
P10 = 0;    //4T  24MHZ时是166ns
P10 = 1;    //4T  24MHZ时是166ns
这两句就可以输出一次低、高电平,5V时,上升、下降沿大约是10ns(普源DS1052E测量)。
所以,访问I2C,要加比较多的延时,如果加NOP,则24个NOP就是1us,我一般不这样,用的是下面的程序:
void  I2C_Delay(unsigned char n)   //调用4T,返回6T
{
       while(--n);   //编译后是DJNZ   Rn,rel    4T, 延时就是4*n T
}
比如要2us,就是48T, I2C_Delay(10);  //大约50T

呵呵,一家之言,可以参考。

使用特权

评论回复
8
AppBaby| | 2012-4-11 16:51 | 只看该作者
I2C是同步总线,关频率啥事?楼主最好也自己动手写了,软I2C接口也不到200行汇编…………自己写的放心。
NE5532 发表于 2012-4-10 20:17


跟I2C频率有关! 24C02 一般5V时500KHz的总线频率, 差的只有400K.

使用特权

评论回复
9
batsong| | 2012-4-11 17:11 | 只看该作者
示波器贵的话,就买简易的逻辑分析仪,看着调更放心

使用特权

评论回复
10
joyme| | 2012-4-11 17:26 | 只看该作者
24C02是从设备,主由单片机控制,只要不超过它的极限,频率就取决于单片机控制的SCL频率啦,不要真要模拟500K用1T 11M的晶振也够呛,毕竟一个周期只有22个指令周期,我想单片机也不只是做24C02读写

使用特权

评论回复
11
autopccopy| | 2012-4-11 19:49 | 只看该作者
我一般用STC的MCU IO读写I2C,都是模拟时序的,1T延时过快,可以增大DELAY...

使用特权

评论回复
12
chuandaoxy|  楼主 | 2012-4-11 19:57 | 只看该作者
写了各位大侠,改了一把通了

使用特权

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

本版积分规则

855

主题

1044

帖子

4

粉丝