找回密码
 立即注册
查看: 711|回复: 6

0.96 OLED隔行不亮(已解决)

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:35
  • 最近打卡:2025-05-02 12:58:45

6

主题

47

回帖

302

积分

中级会员

积分
302
发表于 2024-9-28 20:26:17 | 显示全部楼层 |阅读模式
本帖最后由 芯征程 于 2024-10-10 14:55 编辑

各位大佬,有没有遇到OLED 隔行不亮的问题,是我设置有问题,还是屏有问题?
1fcc8af5eac26bba5c83b8af88e887c.jpg
f5d7f22dbbd7d05d7353bc3589837c9.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-9-28 21:03:50 | 显示全部楼层
一般来说是显示模式的问题,比如12864的屏用了12832的代码
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2025-05-02 08:15:40
已绑定手机

13

主题

1257

回帖

2975

积分

金牌会员

积分
2975
发表于 2024-9-28 21:19:16 | 显示全部楼层
代码贴出来看看
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-02 14:37:11
已绑定手机

77

主题

4849

回帖

8382

积分

超级版主

DebugLab

积分
8382
发表于 2024-9-28 22:06:14 | 显示全部楼层
一般OLED有个隔行逐行设置,必须和面板ITO走线匹配
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-02 14:37:11
已绑定手机

77

主题

4849

回帖

8382

积分

超级版主

DebugLab

积分
8382
发表于 2024-9-28 22:09:19 | 显示全部楼层
Debu*** 发表于 2024-9-28 22:06
一般OLED有个隔行逐行设置,必须和面板ITO走线匹配

截图202409282207375919.jpg

截图202409282208292025.jpg

截图202409282208449633.jpg

截图202409282208568979.jpg

截图202409282209084527.jpg

DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:393
  • 最近打卡:2025-05-02 13:12:00

24

主题

305

回帖

2560

积分

荣誉版主

积分
2560
发表于 2024-9-30 10:52:24 | 显示全部楼层
本帖最后由 大明狐 于 2024-9-30 10:53 编辑

如果楼主使用的驱动程序是12832分辨率的屏幕的,就会出现这样的情况。
12832和12864屏幕的硬件结构不同。
在初始化的时候12832和12864的配置区别主要有两处:

1、屏幕硬件的行引脚的配置(指令0xDA)
  
DA
  
1
1
0
1
1
0
1
0
A[5:4]
0
0
A[5]
A[4]
0
0
1
0

其中第二字节是里的A[4]位产生这个影响的位。
A[4]的默认值1,也就是配置结果是0x12,是使用所有的64行;
当A[4]的值是0的时候,也就是配置结果是0x02,是使用所有偶数行(0、2、4、6……)。
所以如果初始化函数里的相关指令是
OLED_WR_Byte(0xDA, OLED_CMD);
OLED_WR_Byte(0x02, OLED_CMD);
那么在12864屏幕上就会出现这种隔行显示的问题,64行内容只有32行以这样的方式显示出来,其余32行则“显示”在了屏幕以外。

2、屏幕复用率的设置(指令0xA8)
  
A8
  
1
0
1
0
1
0
0
0
A[5:0]
*
*
A[5]
A[4]
A[3]
A[2]
A[1]
A[0]

其中A[5:0]这六个位,是设置使用屏幕行数的位。
A[5:0]的数值范围是0x0F~0x3F,也就是屏幕芯片支持最少使用行数是16行(0~15),最多使用64行(0~63)。
从楼主的屏幕显示结果来看,驱动程序里的这一项应该设置的是64行,或者使用的是没有配置这一项,屏幕使用的默认值0x3F
OLED_WR_Byte(0xA8, OLED_CMD);
OLED_WR_Byte(0x3F, OLED_CMD);
所以这一项可以不用考虑。
但是如果是比较严谨的12832的驱动程序,这一项会设置成0x1F,也就是只是用屏幕的32行,这样芯片就不会额外去扫描其余“不存在”的32行。
如果是这样,屏幕只会有一半显示,那么在使用12864屏幕的时候,这一条指令也需要修改成0x3F。

能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:35
  • 最近打卡:2025-05-02 12:58:45

6

主题

47

回帖

302

积分

中级会员

积分
302
发表于 2024-10-9 22:43:47 | 显示全部楼层
感谢,下面这两条指令居然都错了。已经解决问题了。
OLED_WR_Byte(0xDA, OLED_CMD);
OLED_WR_Byte(0x02, OLED_CMD);

OLED_WR_Byte(0xA8, OLED_CMD);
OLED_WR_Byte(0x3F, OLED_CMD);
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 20:34 , Processed in 0.146294 second(s), 88 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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