智能车制作

标题: 速度快了OLED会花屏,为什么 [打印本页]

作者: 叫我阿志    时间: 2015-5-2 12:09
标题: 速度快了OLED会花屏,为什么
大家有没有遇到这种情况,跑一下就花屏了[attach]76759[/attach]
作者: 大汤包    时间: 2015-5-2 12:27
花了一般就是接触不好,,你看看排母松了没,,或者虚焊
作者: 我奔跑着。。    时间: 2015-5-2 12:37
你的电源地和数字地有没有接磁珠
作者: 小子你别走    时间: 2015-5-2 13:07
OLED的显示也要占用时间的,跑的时候还是不要显示了吧
作者: aytc100    时间: 2015-5-2 14:23
重新初始化
作者: 叫我阿志    时间: 2015-5-2 14:57
aytc100 发表于 2015-5-2 14:23
重新初始化

什么意思?
作者: 叫我阿志    时间: 2015-5-2 14:58
我奔跑着。。 发表于 2015-5-2 12:37
你的电源地和数字地有没有接磁珠

接了

作者: 叫我阿志    时间: 2015-5-2 14:58
小子你别走 发表于 2015-5-2 13:07
OLED的显示也要占用时间的,跑的时候还是不要显示了吧

这样子,但我想看下标志

作者: 智能车设计    时间: 2015-5-2 15:13
你会发现不仅是显示屏会花屏,单片机复位,摄像头重启,等都会发生, 就是电机加速拉低了其他地方的供电。
作者: aytc100    时间: 2015-5-2 15:18
跑车的时候就不用刷屏了,跑完后重新拉低一次reset,然后再运行一遍OLED_Init()(或者类似的函数,看你的驱动是怎么写的函数名了),再显示就正常了。
作者: 叫我阿志    时间: 2015-5-2 15:44
好的,谢谢啦

作者: 叫我阿志    时间: 2015-5-2 15:45
aytc100 发表于 2015-5-2 15:18
跑车的时候就不用刷屏了,跑完后重新拉低一次reset,然后再运行一遍OLED_Init()(或者类似的函数,看你的驱 ...

好的,谢谢拉

作者: 黑茫茫223    时间: 2015-5-2 19:07
智能车设计 发表于 2015-5-2 15:13
你会发现不仅是显示屏会花屏,单片机复位,摄像头重启,等都会发生, 就是电机加速拉低了其他地方的供电。

那这个要怎么解决

作者: 罗二又进了    时间: 2015-5-2 19:44
跑车时建议不要刷屏
作者: turf456    时间: 2015-5-2 22:36
这种屏抗干扰性能渣到爆。可能需要一些屏蔽处理。话说车跑起来的时候你显示他给谁看呢?
作者: 小小科比    时间: 2015-5-2 23:20
我奔跑着。。 发表于 2015-5-2 12:37
你的电源地和数字地有没有接磁珠

厉害厉害

作者: 叫我阿志    时间: 2015-5-2 23:22
turf456 发表于 2015-5-2 22:36
这种屏抗干扰性能渣到爆。可能需要一些屏蔽处理。话说车跑起来的时候你显示他给谁看呢?

调试时,看下参数

作者: Papaver_somnife    时间: 2015-5-3 00:31
看看 init里面的延时  调长点
作者: 支点305    时间: 2015-5-3 01:38
经常出现 感谢10#大神
作者: quzhanguang    时间: 2015-5-3 12:56
看来不止我一个人遇到这种问题
作者: qing_lang    时间: 2015-5-3 14:22
我的有时也花屏,个人经过实验发现是单片机速度很快,比OLED的反应时间快的多。意思就是在写OLED时序的时候,单片机一个指令过去了,而OLED中对单片机刚过去的一个指令还没反应过来,此时,单片机的下一个指令又来了…这样OLED和单片机的指令不能同步,OLED接收到错误信号,导致花屏…我解决的办法是在写时序的函数中调用延时函数或者空指令延时,等待OLED。
作者: aytc100    时间: 2015-5-3 20:24
qing_lang 发表于 2015-5-3 14:22
我的有时也花屏,个人经过实验发现是单片机速度很快,比OLED的反应时间快的多。意思就是在写OLED时序的时候 ...

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

作者: qing_lang    时间: 2015-5-3 21:19
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总线没发完就直接发了下一条指令  


作者: aytc100    时间: 2015-5-4 09:28
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帧。

作者: qing_lang    时间: 2015-5-4 13:44
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这种单总线的通信方式,对延时有严格要求,如果速度过快,会导致通信协议乱套的。
不知道您有没有通过逻辑分析仪实际进行通信协议的的检测?

作者: qing_lang    时间: 2015-5-4 13:47
aytc100 发表于 2015-5-4 09:28
OLED的硬件SPI和IIC我在不同的单片机上都实现过,都有这种问题。首先,OLED的SPI模式没有从机应答功能(根 ...

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

作者: aytc100    时间: 2015-5-4 14:23
qing_lang 发表于 2015-5-4 13:44
你说的也有道理,但是SPI的通信是按照时序来的,一个脉冲对应一个变化的位。你说的:“有些单片机的硬件S ...

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





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2