大道自在人心,OLED12864 乱码
大道自在人心,OLED12864 乱码网友A:为什么,当STC单片机控制OLED12864,一开始显示正常,后面10多分钟后就错了
STC: 每秒,控制 OLED12864 复位1次 ?不停刷新他,抢在他乱之前复位他
网友B:网友A 的时序在临界点,不是复位的问题, 是发送数据的时候时序要放慢,
要加延时,不管 SPI/I2C, STC太快了,OLED12864可能跟不上
STC: 网友B 精准定位了网友A 的时序可能的风险错误,原因是现代STC8051太快了 !
STC: 还有一点大家必须知到,关于SPI/I2C 控制的OLED12864, LCD 外部显示模块,
这些显示外设是成本一降再降,降得没有底线,
所以不管实验室稳定不稳定,都要假定他们不稳定,
都要给他们定时复位/反复刷新,防止外部 OLED12864/LCD 死机
这样也将网友A 的时序潜在风险直接解决了,
如他 OLED12864 工作3分钟后异常,你1秒复位他1次,他错误就无出现的机会
STC: 这是中医整体治疗,网友B 是精准治疗,是典型西医高手【头痛医头,脚痛医脚】
大道自在人心
本帖最后由 李皇谛 于 2023-5-21 02:37 编辑
12864的OLED普遍使用SSD1306点阵驱动器。
根据SSD1306的英文手册(8.4章,第23页),这个点阵驱动器有一个输出引脚“FR”,用于读取SSD1306的点阵驱动状态,电平拉高时没有更新点阵,拉低时表示正在更新点阵。但问题是就连使用Intel 8080接口的主板都刻意把这个引脚当NC脚忽略掉了,布线简单到“能不妨碍点着就行”,呵呵,“不炸就行”。
然后页面到第52页“AC CHARACTERISTICS”小节,看“13-4 : 4-wire Serial Interface Timing Characteristics”表格,摘时序。
“Tcycle=≥100ns”,这就说明了一个标准时钟周期至少需要100纳秒,就算后面信号变换前后预留时间都是0ns,最大容许SPI频率(理想频率)都是10MHz(按1kHz用于1.0ms,1MHz用于1.0μs,100MHz用于1.0ns计算)。
Setup时间是信号变换前预留,Hold时间是信号变换后预留,为了保证最大冗余,全部采用最差值“≥20ns”,所以一个不破坏数据有效性的时钟需要同时加上时钟周期、Setup时间和Hold时间。
当然还有Trise和Tfall,用于指示电平变化的最大有效时间,超过这个有效时间才会被端口认为“非有效数据”,取最大值得到“Trise=Tfall=40ns”
这时候我们要比一下SDAT的安全时间窗,按上升沿=下降沿计算,都是Tsetup+Trise+hold(下降沿是Tfall替换Trise),计算得出T=20+20+20=60ns
如果使用低灌电流/拉电流的GPIO去驱动SCLK脚时,就需要考虑SCLK的安全时间窗,是Tfall+TclklTrise+Tclkh,计算得出T=20+40+20+40=120ns
SCLK安全时间窗>标准时钟周期>SDAT安全时间窗,因此需要取最大安全时间窗Tsafe=120ns
换算得出安全频率约等于8.33MHz,但由于SPI外设距离系统核心时钟只有4bit分频器,至多可以达到1/16分频,所以必须要设置成比安全频率更低的频率才能保证持续通信,否则小小的时序延迟就会造成一个大的数据延误。
这是网友B解决办法的要点,如果像我一样仔细看datasheet的话,说话肯定会口若悬河、字字珠玑。
虽然STC官方给的办法看起来不靠谱,但这个办法已经是贴合实情的最佳办法了。手里正好有几个12864的OLED,还有一个小屏的IIC款,自己买的“10元冲量促销款SPI 12864”甚至不内置LDO,之前还见识过了国产代换款LDO空载电压4.1V(说好的3.3V呢?),LDO都不敢恭维,更何况电容电阻都不敢保证稳定了。
既然不稳定,就必须做好故障恢复的准备(就像STC官方说的直接给定期复位),而不是想象自己手里的设备是完美的。有些时候放在实验室里面的理论分析在实际操作中都会有想象不到的偏差。
李皇谛 发表于 2023-5-21 02:32
12864的OLED普遍使用SSD1306点阵驱动器。
根据SSD1306的英文手册(8.4章,第23页),这个点阵驱动器有一个 ...
{:4_250:} 2023年,现在显示外设是成本一降再降,降得没有底线,
显示电路受到干扰死机或乱码/收到的可能部分也已乱码,已很正常 !
有复位控制脚的外设用抗干扰强大的 STC-MCU 控制复位,并且在不影响实际感观的情况下,
定期主动控制外设复位/刷新, 是我的中医整体治疗的主体思想
案例:
1997年,VFD驱动IC, 日本NEC 的 uPD16312换成TW的 PT16312及国产16312, 显示部分乱码已是常态
主控是6寸/0.5um 的 8032
直接8032软件控制各低成本 ***16312定时复位并刷新显示,在主控不死的情况下,
显示部分通过主控定期主动控制外设复位/刷新后,显示再无问题,各种低成本显示电路任意置换
以上是我1997年, 300K/月 以上的实际作战案例 !
所以选则抗干扰强的 STC-MCU, 换来的好处是外设显示可以无底线降低成本
STC为何多年坚持做好抗干扰 !就是为了让大家放心使用无底线降低成本的显示外设
2006年,多个客人的设计,LCD12864大批量显示乱码,也是按我们这个建议解决的
下图 P3.4控制显示外设 LCD12864复位
下图 P2.4控制显示外设 OLED12864复位,
左边的 SPI-OLED12864有拉出外界控制复位PIN, 正确思维,显示只管降成本,STC保证系统可靠就行
中间的 I2C-OLED12864有拉出外界控制复位PIN, 正确思维,显示只管降成本,STC保证系统可靠就行
右边的不将复位受控管脚引出的 I2C-OLED12864淘宝应用工程师是太稚嫩啊
这张图片的左边引脚和右边引脚不一致呢?
电阻跳线适应各种不同的接口 讲的不错,学习了 问题是OLED复位会黑一下,一秒复位一次,那就一直在闪了{:4_194:} OLED12864每次RES之后,都需要再打开显示,但打开显示到真的显示需要至少需要100ms,也就是至少会黑100ms,每秒复位一次的话,看上去就……很奇怪 那就 30分钟主动 复位1次
STC抗干扰强,稳定性好 !!!
现在外围显示驱动IC器件很便宜,偷工减料的太多,
能经常给不放心的外围显示驱动IC器件不定期的复位,
防止外围显示驱动IC工作时间长后死机。
这是个不错的容错技术
页:
[1]
2