找回密码
 立即注册
查看: 1311|回复: 10

大道自在人心,OLED12864 乱码

[复制链接]

该用户从未签到

551

主题

9297

回帖

1万

积分

管理员

积分
14043
发表于 2023-5-6 11:50:42 | 显示全部楼层 |阅读模式
大道自在人心,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 是精准治疗,是典型西医高手【头痛医头,脚痛医脚】
           大道自在人心


回复 送花

使用道具 举报

  • TA的每日心情
    慵懒
    前天 00:23
  • 签到天数: 59 天

    [LV.5]常住居民I

    4

    主题

    35

    回帖

    140

    积分

    注册会员

    积分
    140
    发表于 2023-5-21 02:32:14 | 显示全部楼层
    本帖最后由 李皇谛 于 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官方说的直接给定期复位),而不是想象自己手里的设备是完美的。有些时候放在实验室里面的理论分析在实际操作中都会有想象不到的偏差。

    SSD1306_alldatasheet.pdf

    1.8 MB, 下载次数: 49

    参考英文手册

    STC存在的意义?
    凡夫俗子也能创造弑神诛仙的奇迹。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    无聊
    昨天 09:33
  • 签到天数: 136 天

    [LV.7]常住居民III

    17

    主题

    528

    回帖

    1221

    积分

    金牌会员

    积分
    1221
    发表于 2023-5-21 08:11:44 | 显示全部楼层
    李皇谛 发表于 2023-5-21 02:32
    12864的OLED普遍使用SSD1306点阵驱动器。
    根据SSD1306的英文手册(8.4章,第23页),这个点阵驱动器有一个 ...

    不停地学习
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9297

    回帖

    1万

    积分

    管理员

    积分
    14043
     楼主| 发表于 2023-5-21 12:08:33 | 显示全部楼层
    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复位
    1.png


    下图 P2.4控制显示外设 OLED12864复位,
    左边的 SPI-OLED12864有拉出外界控制复位PIN, 正确思维,显示只管降成本,STC保证系统可靠就行
    中间的 I2C-OLED12864有拉出外界控制复位PIN, 正确思维,显示只管降成本,STC保证系统可靠就行
    右边的不将复位受控管脚引出的 I2C-OLED12864淘宝应用工程师是太稚嫩啊

    2.png

    回复 支持 1 反对 0 送花

    使用道具 举报

    该用户从未签到

    10

    主题

    41

    回帖

    420

    积分

    中级会员

    积分
    420
    发表于 2023-6-20 08:41:39 | 显示全部楼层
    122233tan7qn64sx7n50sn.png


    这张图片的左边引脚和右边引脚不一致呢?
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9297

    回帖

    1万

    积分

    管理员

    积分
    14043
     楼主| 发表于 2023-6-20 21:24:17 | 显示全部楼层
    电阻跳线适应各种不同的接口
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 58 天

    [LV.5]常住居民I

    0

    主题

    182

    回帖

    358

    积分

    中级会员

    积分
    358
    发表于 2024-4-5 21:12:23 | 显示全部楼层
    讲的不错,学习了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-1-17 14:27
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    3

    主题

    17

    回帖

    271

    积分

    中级会员

    积分
    271
    发表于 2024-4-15 10:52:07 | 显示全部楼层
    问题是OLED复位会黑一下,一秒复位一次,那就一直在闪了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-1-17 14:27
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    3

    主题

    17

    回帖

    271

    积分

    中级会员

    积分
    271
    发表于 2024-4-15 11:12:56 | 显示全部楼层
    OLED12864每次RES之后,都需要再打开显示,但打开显示到真的显示需要至少需要100ms,也就是至少会黑100ms,每秒复位一次的话,看上去就……很奇怪
    截图202404151107214381.jpg
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9297

    回帖

    1万

    积分

    管理员

    积分
    14043
     楼主| 发表于 2024-4-15 13:04:59 | 显示全部楼层
    那就 30分钟主动 复位1次
    STC抗干扰强,稳定性好 !!!

    现在外围显示驱动IC器件很便宜,偷工减料的太多,
    能经常给不放心的外围显示驱动IC器件不定期的复位,
    防止外围显示驱动IC工作时间长后死机。
    这是个不错的容错技术

    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-3 08:08 , Processed in 0.072134 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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