智能车制作

 找回密码
 注册

扫一扫,访问微社区

123
返回列表 发新帖
楼主: 叫我阿志
打印 上一主题 下一主题

速度快了OLED会花屏,为什么

[复制链接]

66

主题

2229

帖子

4

精华

超级版主

Rank: 10Rank: 10Rank: 10

积分
17281

论坛元老奖章

威望
8767
贡献
3040
兑换币
4153
注册时间
2011-8-7
在线时间
2737 小时
21#
发表于 2015-5-3 12:56:47 | 只看该作者
看来不止我一个人遇到这种问题
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

注册会员

Rank: 2

积分
83
威望
43
贡献
30
兑换币
27
注册时间
2014-11-7
在线时间
5 小时
22#
发表于 2015-5-3 14:22:31 | 只看该作者
我的有时也花屏,个人经过实验发现是单片机速度很快,比OLED的反应时间快的多。意思就是在写OLED时序的时候,单片机一个指令过去了,而OLED中对单片机刚过去的一个指令还没反应过来,此时,单片机的下一个指令又来了…这样OLED和单片机的指令不能同步,OLED接收到错误信号,导致花屏…我解决的办法是在写时序的函数中调用延时函数或者空指令延时,等待OLED。
回复 支持 反对

使用道具 举报

56

主题

4914

帖子

3

精华

顶级版主

北京科技大学智能汽车队公共主页管理员

Rank: 11Rank: 11Rank: 11Rank: 11

积分
56131

特殊贡献奖章资源大师奖章论坛骨干奖章推广达人奖章优秀版主奖章热心会员奖章论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
19568
贡献
13933
兑换币
3365
注册时间
2010-7-22
在线时间
11315 小时
23#
发表于 2015-5-3 20:24:44 | 只看该作者
qing_lang 发表于 2015-5-3 14:22
我的有时也花屏,个人经过实验发现是单片机速度很快,比OLED的反应时间快的多。意思就是在写OLED时序的时候 ...

那样一般是spi或者iic总线没发完就直接发了下一条指令,这样就会出错。一般来说,发送速度快,需要的延时就短。发送速度慢,需要的延时就长。
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

注册会员

Rank: 2

积分
83
威望
43
贡献
30
兑换币
27
注册时间
2014-11-7
在线时间
5 小时
24#
发表于 2015-5-3 21:19:51 | 只看该作者
aytc100 发表于 2015-5-3 20:24
那样一般是spi或者iic总线没发完就直接发了下一条指令,这样就会出错。一般来说,发送速度快,需要的延时 ...

我用的处理器K60内核时钟200M,外设时钟100M,外部有源晶振:50M。按理论IO口最快反应时间10ns。
应该分两种情况:1,如果OLED的信号线是用GPIO模拟SPI或者IIC的话,就有必要考虑时序的延时问题。因为OLED通常时序要求时间都在十几纳秒或者几十个纳秒以上,而IO口反应时间10ns,假如单片机一条写指令用了10ns,而此时OLED需要几十ns才能反应单片机的写指令,因为IO口速度远大于OLED时序要求。所以,OLED就会导致接受单片机的信号出错。导致花屏。2.如果用SPI或者IIC协议的话,既然是协议,那么SPI和IIC本身就遵循通信的速度问题,有延时的话,其延时本身就包含在通信协议中,当然会等待设备的反应应答。
以上都是我个人的理解。
一般是CPU把数据送到SPI和IIC缓冲器中,让SPI和IIC对设备进行发送,怎么会没发完就发另一条指令。
不明白你这句话什么向表达什么意思?:那样一般是spi或者iic总线没发完就直接发了下一条指令  

回复 支持 反对

使用道具 举报

56

主题

4914

帖子

3

精华

顶级版主

北京科技大学智能汽车队公共主页管理员

Rank: 11Rank: 11Rank: 11Rank: 11

积分
56131

特殊贡献奖章资源大师奖章论坛骨干奖章推广达人奖章优秀版主奖章热心会员奖章论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
19568
贡献
13933
兑换币
3365
注册时间
2010-7-22
在线时间
11315 小时
25#
发表于 2015-5-4 09:28:13 | 只看该作者
qing_lang 发表于 2015-5-3 21:19
我用的处理器K60内核时钟200M,外设时钟100M,外部有源晶振:50M。按理论IO口最快反应时间10ns ...

OLED的硬件SPI和IIC我在不同的单片机上都实现过,都有这种问题。首先,OLED的SPI模式没有从机应答功能(根本没接MOSI那根线)。有些单片机的硬件SPI模式没有缓冲机制,发送太快可能会冲掉数据;或者SPI发送完成后到下一个字节的时间太短,会发出超出波特率的一个位。IIC主要的问题是第九位ACK的时间要留出来,发太快的话,这一位会被抢占,导致后一字节发送失败。
OLED走400k的IIC速率没问题,能做到一秒钟刷接近50帧。
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

注册会员

Rank: 2

积分
83
威望
43
贡献
30
兑换币
27
注册时间
2014-11-7
在线时间
5 小时
26#
发表于 2015-5-4 13:44:19 | 只看该作者
aytc100 发表于 2015-5-4 09:28
OLED的硬件SPI和IIC我在不同的单片机上都实现过,都有这种问题。首先,OLED的SPI模式没有从机应答功能(根 ...

你说的也有道理,但是SPI的通信是按照时序来的,一个脉冲对应一个变化的位。你说的:“有些单片机的硬件SPI模式没有缓冲机制,发送太快可能会冲掉数据”  的意思是不是当SPI发送完一个数据时,OLED还没有接受完这个数据,此时SPI又开始发下个数据了,导致数据被冲掉?
IIC主要的问题是第九位ACK的时间要留出来,这句不明白意思。
第九位ACK应该是从机OLED发给主机MCU的。要把第九位留出来是单片机通过延时预留出来吗?如果“发太快的话,这一位会被抢占,导致后一字节发送失败。”SPI和IIC是严格安照时序脉冲一个个进行的,在脉冲的控制下,第九位ACK怎么会被抢占,如果被抢占的 话,那通信时序岂不是全乱套了?像DS18B20这种单总线的通信方式,对延时有严格要求,如果速度过快,会导致通信协议乱套的。
不知道您有没有通过逻辑分析仪实际进行通信协议的的检测?
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

注册会员

Rank: 2

积分
83
威望
43
贡献
30
兑换币
27
注册时间
2014-11-7
在线时间
5 小时
27#
发表于 2015-5-4 13:47:25 | 只看该作者
aytc100 发表于 2015-5-4 09:28
OLED的硬件SPI和IIC我在不同的单片机上都实现过,都有这种问题。首先,OLED的SPI模式没有从机应答功能(根 ...

OLED走400k的IIC速率没问题,能做到一秒钟刷接近50帧。你是怎么测得这个刷屏速率50帧的?
回复 支持 反对

使用道具 举报

56

主题

4914

帖子

3

精华

顶级版主

北京科技大学智能汽车队公共主页管理员

Rank: 11Rank: 11Rank: 11Rank: 11

积分
56131

特殊贡献奖章资源大师奖章论坛骨干奖章推广达人奖章优秀版主奖章热心会员奖章论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
19568
贡献
13933
兑换币
3365
注册时间
2010-7-22
在线时间
11315 小时
28#
发表于 2015-5-4 14:23:54 | 只看该作者
qing_lang 发表于 2015-5-4 13:44
你说的也有道理,但是SPI的通信是按照时序来的,一个脉冲对应一个变化的位。你说的:“有些单片机的硬件S ...

这些问题是用带逻辑分析功能的示波器调试的。程序写的不当,当然会产生不符合协议的波形。调硬件SPI和IIC的问题常常是不同单片机类似的命令,实际的输出不同,得做专门的适配。
测试帧率的话,连续刷1000屏,然后计时,平均一下就行。
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-20 12:38 , Processed in 0.050835 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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