OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10406|回复: 15

i2c延时时间针对24c64如何计算

[复制链接]

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-5-11
在线时间
8 小时
发表于 2015-5-11 11:22:48 | 显示全部楼层 |阅读模式
5金钱
言简意赅求教各位大神尤其原子很正点

目前状态是有数据但是跟实际数据对不上....
按照原子哥例程修改的...里面延时4us...我想问问针对64我该怎么计算这个延时时间

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11546
金钱
11546
注册时间
2014-4-1
在线时间
1315 小时
发表于 2015-5-11 13:50:03 | 显示全部楼层
时间参数非常多,不知要问哪一个?
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-5-11
在线时间
8 小时
 楼主| 发表于 2015-5-11 13:57:31 | 显示全部楼层
回复【2楼】xuande:
---------------------------------
老师好...主要就是iic_start iic_stop iic_wait_ack这几个函数里都有一个延时delay_us函数....具体的延时时间应该有不同....我直接套用原子的例程在24c64上使用读出的数据有错误...我变化不同的延时长度每次数据也不一样....所以想问问这个延时时间针对不同的片子该怎么计算...
原子这个延时4us
void IIC_Stop(void) 

 SDA_OUT();//sda 线输出 
 IIC_SCL=0; 
 IIC_SDA=0;//STOP:when CLK is high DATA change form low to high 
  delay_us(4); 
 IIC_SCL=1;  
 IIC_SDA=1;//发送 I2C 总线结束信号 
 delay_us(4);            
}
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11546
金钱
11546
注册时间
2014-4-1
在线时间
1315 小时
发表于 2015-5-11 14:05:28 | 显示全部楼层
最后一句延时,要和上一行语句调换一下位置。
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11546
金钱
11546
注册时间
2014-4-1
在线时间
1315 小时
发表于 2015-5-11 14:09:33 | 显示全部楼层

看画圈的地方,去查下这个值。



回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-5-11
在线时间
8 小时
 楼主| 发表于 2015-5-11 14:33:29 | 显示全部楼层
回复【5楼】xuande:
---------------------------------
老师好,查了下1.8v 2.5v 5.0v 分别有一个最小值...4.7us。4.7us。0.6us...实际取值怎么取?求教
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-5-11
在线时间
8 小时
 楼主| 发表于 2015-5-11 15:49:00 | 显示全部楼层
回复【5楼】xuande:
---------------------------------
void IIC_Start(void)

{

       SDA_OUT();     //sda线输出

       IIC_SDA=1;IIC_SCL=1;

       delay_us(4);

      IIC_SDA=0;//START:when CLK is high,DATA change form high to low

       delay_us(4);

       IIC_SCL=0;//钳住I2C总线,准备发送或接收数据

}      

//产生IIC停止信号

void IIC_Stop(void)

{

       SDA_OUT();//sda线输出

       IIC_SCL=0;

       IIC_SDA=0;//STOP:when CLK is high DATA change form low to high

      delay_us(4);

       IIC_SCL=1; IIC_SDA=1;//发送I2C总线结束信号

       delay_us(4);                                                  

}

//等待应答信号到来

//返回值:1,接收应答失败

//        0,接收应答成功

u8 IIC_Wait_Ack(void)

{

       u8 ucErrTime=0;

       SDA_IN();      //SDA设置为输入 

       IIC_SDA=1;delay_us(1);        

       IIC_SCL=1;delay_us(1);      

       while(READ_SDA)

       {

              ucErrTime++;

              if(ucErrTime>250)

              {

                     IIC_Stop();

                     return 1;

              }

       }

       IIC_SCL=0;//时钟输出0        

       return 0; 

}

//产生ACK应答

void IIC_Ack(void)

{

       IIC_SCL=0;SDA_OUT();

       IIC_SDA=0;delay_us(2);

       IIC_SCL=1;delay_us(2);

       IIC_SCL=0;

}

//不产生ACK应答                 

void IIC_NAck(void)

{

       IIC_SCL=0;

       SDA_OUT();

IIC_SDA=1;delay_us(2);

       IIC_SCL=1;delay_us(2);

       IIC_SCL=0;

}                                                                

//IIC发送一个字节

//返回从机有无应答

//1,有应答

//0,无应答                  

void IIC_Send_Byte(u8 txd)

{                       

    u8 t;  

       SDA_OUT();            

    IIC_SCL=0;//拉低时钟开始数据传输

    for(t=0;t<8;t++)

    {             

        IIC_SDA=(txd&0x80)>>7;

        txd<<=1;         

              delay_us(2);   //对TEA5767这三个延时都是必须的

              IIC_SCL=1;delay_us(2);

              IIC_SCL=0;    delay_us(2);

    }    

}         

//读1个字节,ack=1时,发送ACK,ack=0,发送nACK  

u8 IIC_Read_Byte(unsigned char ack)

{

       unsigned char i,receive=0;

       SDA_IN();//SDA设置为输入

    for(i=0;i<8;i++ )

       {

        IIC_SCL=0; delay_us(2);

              IIC_SCL=1;

        receive<<=1;

        if(READ_SDA)receive++;  

              delay_us(1);

    }                                

    if (!ack) IIC_NAck();//发送nACK

    else IIC_Ack(); //发送ACK  

    return receive;

}

这些延时的参数是atc02到atc512都适用还是具体的时间要根据shijiqingkuanglai算
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11546
金钱
11546
注册时间
2014-4-1
在线时间
1315 小时
发表于 2015-5-11 16:44:51 | 显示全部楼层
回复【6楼】pmemory:
---------------------------------

按道理,应当是根据实际的供电电压选择,这样的操作速度是最快的。

如果嫌麻烦,直接按三个数值的最大值来延时。操作速度降低一点点,也没什么大不了的。
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11546
金钱
11546
注册时间
2014-4-1
在线时间
1315 小时
发表于 2015-5-11 16:46:35 | 显示全部楼层
给你提个问题,想一想,会对你理解“时序”有好处:

为什么这个参数只给出“最小值”,没有给出最大值呢?
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-5-11
在线时间
8 小时
 楼主| 发表于 2015-5-11 17:38:09 | 显示全部楼层
回复【8楼】xuande:
---------------------------------
我按照原子总的例程读写感觉都有问题...读出的数据跟实际的不符...感觉是时序延时某些地方的问题...实在查不出来...看了网上有些帖子说貌似跟iic速率有关系
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11546
金钱
11546
注册时间
2014-4-1
在线时间
1315 小时
发表于 2015-5-11 17:46:05 | 显示全部楼层
写的时候,两次写操作中间要加 5 毫秒的延时。

估计你这里有问题。
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-5-11
在线时间
8 小时
 楼主| 发表于 2015-5-11 17:54:19 | 显示全部楼层
回复【9楼】xuande:
---------------------------------
最小值可以满足时序要求的话,最大值的概念就弱化了
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-5-11
在线时间
8 小时
 楼主| 发表于 2015-5-11 17:55:38 | 显示全部楼层
回复【11楼】xuande:
---------------------------------
我只写一个字节,马上读出来就不对...囧
回复

使用道具 举报

6

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-7-12
在线时间
2 小时
发表于 2015-11-4 16:24:17 | 显示全部楼层
回复【3楼】pmemory:
---------------------------------
你好,请问下你的延时函数计算解决了吗?我也怀疑我在驱动程序在这个地方有问题
回复

使用道具 举报

10

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
金钱
417
注册时间
2014-12-10
在线时间
46 小时
发表于 2016-5-14 11:27:34 | 显示全部楼层
pmemory 发表于 2015-5-11 14:33
回复【5楼】xuande:
---------------------------------
老师好,查了下1.8v&nbsp;2.5v&nbsp;5.0v&nbsp;分 ...

你好,请问你这几个时间值是怎么计算出来的?或者在哪里查得的?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2020-6-25
在线时间
3 小时
发表于 2021-10-9 15:19:33 | 显示全部楼层
延时的没找到哪个帖子有具体说法
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 18:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表