OpenEdv-开源电子网

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

求助,如何用GPIO口模拟I2C时序,在示波器上看波形

[复制链接]

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-12-26
在线时间
0 小时
发表于 2013-12-26 15:49:11 | 显示全部楼层 |阅读模式

          想要实现的功能是,用GPIO口模拟两个信号,一个是时钟,一个是我可以任意给定的数据

然后,在示波器上,直接看GPIO端口的波形图

我已经看了I2C的那个实验,但是出来的波形图不对啊,

1、时钟不是占空比1:1的?

2、SDA信号出来的不是我输入的8位数据啊?

我的主程序代码如下,请各位指点一下啊:
 int main(void)
 { 
 u8 key;
 u16 i=0;
 u8 datatemp[SIZE];
 delay_init();       //延时函数初始化  
 NVIC_Configuration();   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
 uart_init(9600);   //串口初始化为9600
 KEY_Init();
  LED_Init();        //LED端口初始化
 //LCD_Init(); 
 usmart_dev.init(72); //初始化USMART     
  AT24CXX_Init();   //IIC初始化

 while(1)
 {

  IIC_Send_Byte(10101010);

 }
}

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

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2013-12-26 20:24:22 | 显示全部楼层
模拟IIC对了么,这部分代码么看到,先用J-Link把IIC模拟调对,检测24Cxx,如果检测到说明读写没问题了,IIC时序没问题
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-26 20:52:34 | 显示全部楼层
回复【楼主位】慧慧:
---------------------------------
都有代码了,楼主可以进去每个函数,一看究竟。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-12-26
在线时间
0 小时
 楼主| 发表于 2013-12-27 08:51:13 | 显示全部楼层
回复【2楼】hechao3225:
---------------------------------
请问,模拟IIC指的是myiic的代码吗?
IIC的时序中,时钟的占空比是不是1:1的呢?
我是跑的战舰的例程,出来的时钟占空比就不是1:1的啊,但是看到好多资料上的时序图上的时钟占空比是1:1,这到底是怎么回事啊?
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2013-12-27 08:55:17 | 显示全部楼层
回复【4楼】慧慧:
---------------------------------
时钟占空比不一定非要1:1的,主要是时钟信号的频率,数据手册上面画的都是1:1的占空比的,方便讲解的,你写代码的时候主要看器件数据手册上面的电气规格里面的官方测试参数(或给定的范围)进行,符合他的范围值一般都没问题的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-12-26
在线时间
0 小时
 楼主| 发表于 2013-12-27 09:11:00 | 显示全部楼层
回复【5楼】Badu_Space:
---------------------------------
那如果我发送的数据比如说是:101010
在示波器的波形图上是不是能看到101010的波形呢?
这些数据变化是在时钟上升沿变的,还是时钟下降沿变的呢?
回复 支持 反对

使用道具 举报

18

主题

128

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2013-2-4
在线时间
214 小时
发表于 2013-12-27 09:45:24 | 显示全部楼层
回复【6楼】慧慧:

回复【5楼】Badu_Space:
---------------------------------
那如果我发送的数据比如说是:101010
在示波器的波形图上是不是能看到101010的波形呢?
这些数据变化是在时钟上升沿变的,还是时钟下降沿变的呢?

---------------------------------


SDA线上的数据在时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。
回复 支持 反对

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-12-26
在线时间
0 小时
 楼主| 发表于 2013-12-27 09:50:42 | 显示全部楼层
回复【7楼】sunday151640:
---------------------------------
意思就是说我在示波器上看gpio口的数据波形,是看不出来数据的变化的吗?
我在例程上改动输入的数据,看到的两个gpio口的波形,示波器上显示的,波形都没有变化,所以就不明白
回复 支持 反对

使用道具 举报

18

主题

128

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2013-2-4
在线时间
214 小时
发表于 2013-12-27 10:08:54 | 显示全部楼层
回复【8楼】慧慧:
---------------------------------
我是用 逻辑分析仪 看波形的。 示波器 好贵啊。用不起。。

不过要是你想看 101010 波形的话,尝试一下只输出这个数
回复 支持 反对

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-12-26
在线时间
0 小时
 楼主| 发表于 2013-12-27 10:12:51 | 显示全部楼层
回复【9楼】sunday151640:
---------------------------------
是啊,我就是想只输出这个数,就是我帖子上在while中只写了一个输出这个数的语句,但是出不来啊
能麻烦你帮我看看代码怎么写吗
我就是只想看到这个101010的波形,就是随着时钟的变化,信号在变而已
回复 支持 反对

使用道具 举报

18

主题

128

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2013-2-4
在线时间
214 小时
发表于 2013-12-27 10:54:39 | 显示全部楼层
你试试 把IIC_Send_Byte(10101010); —— 改为IIC_Send_Byte(0xaa); 
IIC_Send_Byte(0xaa);


IIC_Send_Byte(10101010);








回复 支持 反对

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-12-26
在线时间
0 小时
 楼主| 发表于 2013-12-27 11:11:55 | 显示全部楼层
回复【11楼】sunday151640:
---------------------------------
恩恩,谢谢你啊,真是出来这样的波形呢
不过这是为什么啊,这两种格式不是数值都一样吗,怎么出来的波形不一样了呢?
回复 支持 反对

使用道具 举报

18

主题

128

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2013-2-4
在线时间
214 小时
发表于 2013-12-27 11:45:13 | 显示全部楼层
回复【12楼】慧慧:
---------------------------------


我也是菜鸟,希望有高手可以解答一下。可能跟编码有关
回复 支持 反对

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-12-26
在线时间
0 小时
 楼主| 发表于 2013-12-27 11:50:46 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥,11楼和12楼的疑惑,可以帮忙给解释下吗?
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2013-12-27 12:20:57 | 显示全部楼层
回复【14楼】慧慧:
---------------------------------

我怀疑就是个进制问题,你发送的10101010编译器默认为10进制,跟你转换16进制再发送。10101010转16进制0x9A2112,IIIC发送时截取一个字节(低八位)也就是0x12,这就和逻辑分析仪对应上了。从第一个CLK开始:00010010,没问题是吧。那个瞬时冲激信号只是个干扰而已。见下图。
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2013-12-27 12:21:25 | 显示全部楼层


回复 支持 反对

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-12-26
在线时间
0 小时
 楼主| 发表于 2013-12-27 12:45:18 | 显示全部楼层
回复【16楼】hechao3225:
---------------------------------
哦哦,原来是这样,感谢感谢啊,终于明白了
就是这个干扰很奇怪啊,怎么就出现了个干扰呢
IIC_Send_Byte(0xaa);时没有干扰
IIC_Send_Byte(10101010);时就有干扰
这是怎么回事呢?
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2013-12-27 21:42:21 | 显示全部楼层
回复【17楼】慧慧:
---------------------------------
所以以后要用16进制。。呵呵,16进制才是“芯片语言”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-7 08:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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