一两年前买了一个OLED模块,当时跑了个例程能正常显示就放着不管,前几天拿出来玩玩怎么搞都是花屏,如下图。
一开始以为是OLED初始化的问题,在网上搜了好几个版本的初始化代码都不行。
然后以为是iic时序的问题,因为代码中的iic协议与我当时学习的时候有点差别,当时学习iic协议的时候,在时钟线拉高的时候,我记得是需要有一定的时间稳定,再将数据线拉低,原先使用的代码都没有体现这个,可能是因为跟MCU的运行速度有关。
后面就将一开始学习的iic协议代码移植过来,仍然还是会出现花屏或者是乱码,不能正常显示。
第三个问题就是应答响应,在官方的SSD1306中,进行iic协议通信的时候,写入命令后都需要等待从机有一个响应ACK,但是后面我发现这个ACK响应是可以忽略的,加上ACK后反而不能正常显示,目前还不太明白是因为什么。
在网上搜索解决方案,修改了好几天代码,都无法解决花屏问题。最后看到帖子说5v供电会烧(虽然我都没烧),于是我就换成了3.3V供电,意外地顺利,画面很流畅地显示出来。
终于解决问题,OLED应该使用3.3V供电而不是5V。
比较奇怪的是,当时刚买回来时,我用的就是5V供电,当时的显示是正常的,过了两年,同样的接线,同样的代码,反而无法正常显示,不然我也就不会调试好多天了。