(南京观海微电子)——OLED驱动与调试

一、OLED DDIC分类

OLED DDIC的技术方向可以分为3类:带Ram【内存】的IC、Ram-less IC和TDDI【显示&触控集成的IC】

1、带Ram的OLED DDIC

OLED DDIC有两个Ram,分别是Demura Ram和Display Ram。

1、带Ram的OLED DDIC

1-1)Demura Ram:屏幕产家会对面板的显示不均等问题进行补偿,补偿的数据存储在Flash IC内,在正常显示时,OLED DDIC会从Flash IC通过SPI协议Reload对应的自己内部的Demura Ram,用于显示的效果补偿。

1-2)Display Ram:系统传输的图片数据会先存在显示Display Ram内,显示时在通过从Display Ram调用。这种显示方式称为Command mode。在显示静态画面时,系统不要持续送图,显示IC自己刷新Ram即可,在静态画面的场景更省功耗,显示效果较优。

1-3)需要注意的是Display Ram的大小也直接决定了显示IC能支持的帧率和分辨率大小,“3每个颜色的bit位OLED IC的压缩倍率”,即可以计算出所需要占用的Ram大小;比如1280✘2800的分辨率,RGB共计3个颜色,是8个bit,DDIC的VESA选择1/3压缩,因此计算出来的Ram大小为:1280✘2800✘8✘3✘1/3=28672000bit=28.7Mbit。【有关OLED显示屏幕能支持的分辨率和帧率计算,这个后面再发光详细讨论】。

1-3)缺点:Ram的大小基本占到到了IC空间上的75%,因此IC的size会比较大,并且Ram较高。

综上,带Ram的OLED DDIC因为功耗低,显示效果好,是目前各家终端量产的主力。

2、OLED Ramless DDIC

2-1)Ram:Ramless是保留了demura Ram,而砍掉了display Ram。

2-2)驱动:主机需要支持送图给OLED DDIC,即只能跑vedieo模式,在视频场景上,预计功耗和带Ram的相差不大,但是静态场景,功耗会较高。虽然国产厂商推出,在AOD【息屏显示】的场景下,可以借用其demura ram去作为AOD的display,在AOD模式下跑无demura效果的commad mode,这样可以降低AOD模式下的功耗水平;但是Vedio mode和command mode的互相切换,以及有无demura效果对实际用户的使用场景影响,需要调试确认,保守的话,不考虑功耗,全程跑vedio 模式是可以的。

2-2)产能&成本:因为减少了Display Ram,IC的size降低接近一半,同一片晶圆的切片量预估可以提升40%,在结合晶圆价格,可以推算出来相同制程的Ram和Ramless的DDIC,成本约有1.5美金的价差。也正是这个价差,以及连任正非老爷子都要喊着活下去的大环境,各家终端,均在重点关注Ramless的验证和量产导入。目前主要进展最为迅速的是“性价比之王”和“非洲之王”两个终端。

综上,Ramless OLED DDIC除了便宜没有什么好处,是后续降本的趋势。

3、TDDI

OLED显示屏的显示和驱动集成芯片,据说前期是华为与Novatek一同开发,华为被制裁后,Novatek将此芯片变成公版,21年下半年即已经出样,目前各家屏厂和终端均基本完成了验证。

3-1)成本:LCD的触控前期也是采用外挂方案,但是已经与LCD的触控pattern是设计在自己的驱动背板内的,因此LCD的TDDI的panel可以减少光照的mask,成本降低显著,收益明显。OLED的触控当前都是“外挂互容”,驱动上面,很难将触控集成在驱动电路内,现在推出来的OLED TDDI芯片也是针对外挂的,因此panel上面并没有省到任何成本。IC制程上,现在量产的触控IC的模拟和数字部分采用的制程不一样,模拟部分用的110nm相对落后的制程,和显示ic合二为一以后,全部采用先进的40nm或者28nm制程的,成本上会有上升。因此针对OLED TDDI在成本维度上并没有实现“1+1<2”反而会“1+1≥2”;

3-2)触控性能:当前在量产的是外挂式的互容方案,而Novatek目推出的自容方案,理论上对比现有的触控的信噪比会有提升,但是基于笔者验证结果看,其触控性能也仅仅是相对于现在外挂式的性能相当,甚至还会略差;后续厂家也有厂家在检讨互容方案,这个可以期待一下;

3-3)外观:同样因为是“外挂自容”方案,相对于“互容”方案,以经验4mm左右需要一个通道,自容方案的触控走线明显增多,直接导致产品的下边框增加,在笔者所在公司,手机的性能全部要给外观让步【注:实际大部分人买手机也确实因为颜值】,这个是产品经理无法接受的,因此产品并不care;

3-4)功耗收益:OLED TDDI相比较与现在量产的外挂的触控IC,触控部分的制程迭代到了28nm,因此在功耗上是有降低的,也是目前笔者能想到的唯一收益。

3-5)量产情况:虽然在手机上目前并未量产OLED TDDI,但是在小尺寸的OLED手表上面已经量产了;当前流行的上下折叠手机的副屏,各家基本在3寸左右,对整机堆叠空间要求极高,是有明确的需求的,但是目前选用手机的TDDI的话,IC的size过大并且成本高,不利于堆叠;选用手表的OLED TDDI,其对应的通道数又无法支持对应的触控需求,因此上下折叠副屏依然选择手表的DDIC和TPIC。

二、调试方式

1.串口调试

通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息

2.显示屏调试

直接将显示屏连接到单片机,将调试信息打印在显示屏上(本节)

3.Keil调试模式

借助Keil软件的调试模式,可使用单步运行、设置断点、查看寄存器及变量等功能

二、硬件电路

7脚就不放上来了

四脚的OLED一般采用I2C的通信协议,上图中的SCL和SDA需要接在32的I2C通信的引脚上(但本节up主教的是GPIO口模拟的I2C通信)

此次接线为:SCL接PB8,SDA接PB9

三、驱动函数

偷懒,直接截图(doge)

使用之前,先初始化一下;函数的第一个为第几行,第二个为第几列

四、代码实现

1.准备驱动函数

OLED驱动函数模块在up提供的程序源码的1-4内,点进去,再次点击4针脚的文件(7脚就选7脚),将里面的三个文件复制粘贴到我们新建的4-1OLED显示屏的hardware文件夹内,并在Keil软件内添加

(1)OLED.c文件只需要更改引脚配置部分和下方初始化的部分(如图),看你自己把SCL和SDA这两个引脚接在了哪两个端口上

我们本次接线外设为GPIOB,端口是8和9

为啥配置为开漏输出:因为标准I2C是有上拉电阻的,没有信号总线高电平,所以要配置成开漏(强制滴)

(开漏输出:仅低电平可以驱动;前面写过的文章3-1GPIO输出)

(2)OLED_Front.h:字库,定义字符的点阵数据,也就是不同的字符有哪些地方需要点亮

2.主函数

(1)老规矩现在main函数最前头include一下OLED.h

(2)在主函数while循环之前进行初始化:OLED_Init();

(3)

①OLED_ShowChar:显示一个字符,第一个参数为第几行,第二参数为第几列,第三个参数为有单引号括起来的字符

②OLED_ShowString:显示字符串,第一、二个参数同上,第三个参数为有双引号括起来的字符串(注意字符串不要超过屏幕了,否则字符串会覆盖或者说字符串乱了,是不会给你第二行接着现实的,自己可以试试)

同时该函数可以用于清除部分,在你想清掉的地方显示空格字符就可以了(OLED_Clear函数局部版)

③OLED_ShowNum:显示无符号十进制数字(全是正的),第一、二个参数同上,第三个参数为数字,第四个参数为显示数字数量

注:若第四个参数大于实际第三个参数的数量,则会在数字前头补0显示(例如,我要显示12345,但是我第四个参数填的6,则OLED显示为012345)如果小于,则会把多余的高位的数据切掉(例如,我还是要显示12345,但是我第四个参数填的4,则OLED显示为2345),这个同样也适用于下面两个函数

④OLED_ShowSignedNum:显示无符号十进制数字,参数和上一个一样,不同的是可以显示负数,第三个参数直接写负数就行(正数不用加正号哦,显示屏显示时会加上正号的,例如,第三个参数写66,显示屏显示为+66)

⑤OLED_ShowHexNum和OLED_ShowBinNum,参数和上面的一样,分别显示十六进制的数和二进制的数(第三个参数都写0x0001,第四个参数:第一个函数写4,第二个函数写16;第一个函数显示为0001,第二个函数显示为0000 0000 0000 0001)

⑥OLED_Clear:清屏;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/652147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一张图文深入了解信息量概念

通信原理第10页最后一段: 概率论告诉我们,事件的不确定程度可以用其出现的概率来描述。因此,消息中包含的信息量与消息发生的概率密切相关。消息出现的概率越小,则消息中包含的信息量就越大。 这句话怎么理解呢? 比如…

安利6款免费又高清的视频转GIF方法,值得收藏

前言 平时我们在聊天的时候会发的很多有趣表情包,其实有些就是视频里面的画面,觉得好玩有趣就被网友转换成了GIF,聊天的时候就可以用这些表情包来代表当时的心情。 如何将视频转成GIF动图?对于还不知道怎么将视频转成GIF的朋友&a…

uniapp微信小程序-秋云u-charts层级过高

一、先说问题 想在这个每个圆环上面定位一些百分比或者定位一些东西,微信小程序端可以,真机调试不行,打算提高层级不行 二、解决 点击底下开启2d就可以, 也就是在你的图表上加上 :canvas2d"true"

Adobe ColdFusion 任意文件读取漏洞复现(CVE-2023-26361)

0x01 产品简介 Adobe ColdFusion是美国奥多比(Adobe)公司的一套快速应用程序开发平台。该平台包括集成开发环境和脚本语言。 0x02 漏洞概述 Adobe ColdFusion平台 filemanager.cfc接口存在任意文件读取漏洞,攻击者可通过该漏洞读取系统重要文件(如数据库配置文件、系统配…

流畅的Python(六)-使用一等函数实现设计模式

一、核心要义 《设计模式:可复用面向对象软件的基础》一书中有23个设计模式,其中有16个在动态语言中"不见了或者简化了"。作为动态语言之一的Python, 我们可以利用一等函数简化其中的某些设计模式,本章主要介绍如何使用一等函数重…

c++ QT 信号的个人理解 信号就是独立文件调用的一种“协议”

一. 简介 就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁。 信号和槽机制是 Qt 的核心机制,可以让编程人员将互不相关的对象绑定在一起&a…

如何用web界面打开华为防火墙

目录 1.创建一个虚拟网卡 2.cloud操作 3.防火墙上操作 4. 登录 1.创建一个虚拟网卡 2.cloud操作 3.防火墙上操作 4. 登录

Netty的解码器和编码器

链路图 一个完整的RPC请求中,netty对请求数据和响应数据的处理流程如下图所示 网络线路中传输的都是二进制数据,之后netty将二进制数据解码乘POJO对象,让客户端或者服务端程序处理。 解码的工具称为解码器,是一个入站处理器InBo…

物联网协议Coap之C#基于Mozi的CoapClient调用解析

目录 前言 一、CoapClient相关类介绍 1、CoapClient类图 2、CoapClient的设计与实现 3、SendMessage解析 二、Client调用分析 1、创建CoapClient对象 2、实际发送请求 3、Server端请求响应 4、控制器寻址 总结 前言 在之前的博客内容中,关于在ASP.Net Co…

node.js 分布式锁看这篇就够用了

Redis SETNX 命令背后的原理探究 当然,让我们通过一个简单的例子,使用 Redis CLI(命令行界面)来模拟获取锁和释放锁的过程。 在此示例中 获取锁: # 首先,设置锁密钥的唯一值和过期时间(秒) 127.0.0.1:6379> SET …

数字三角形(很经典的动态规划问题)

给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 73 88 1 02 7 4 4 4 5 2 6 …

第2章-神经网络的数学基础——python深度学习

第2章 神经网络的数学基础 2.1 初识神经网络 我们来看一个具体的神经网络示例,使用 Python 的 Keras 库 来学习手写数字分类。 我们这里要解决的问题是, 将手写数字的灰度图像(28 像素28 像素)划分到 10 个类别 中(0…

基于多种CNN模型在清华新闻语料分类效果上的对比

该实验项目目录如图: 1、 模型 1.1. TextCNN # coding: UTF-8 import torch import torch.nn as nn import torch.nn.functional as F import numpy as npclass Config(object):"""配置参数"""def __init__(self, dataset, embedd…

【C++类与对象(上)】

C类与对象(上) 1.面向过程和面向对象初步认识2.类的引入3.类的定义4.类的访问限定符及封装4.1 访问限定符4.2 封装 5.类的作用域6.类的实例化7.类的对象大小的计算7.1如何计算类对象的大小7.2 类对象的存储方式猜测7.3结构体内存对齐规则 8.类成员函数的this指针8.1…

Java多线程基础-18:线程安全的集合类与ConcurrentHashMap

Java标准库提供了很多集合类,但有一些集合类是线程不安全的,也就是说,在多线程环境下可能会出问题的。常用的ArrayList,LinkedList,HashMap,PriorityQueue等都是线程不安全的(Vector, Stack, Ha…

Android创建工程

语言选择Java,我用的Java 最小SDK:就是开发的APP支持的最小安卓版本 Gradle 是一款Google 推出的基于 JVM、通用灵活的项目构建工具,支持 Maven,JCenter 多种第三方仓库;支持传递性依赖管理、废弃了繁杂的xml 文件,转而…

关于ArcGIS的Update更新工具的疑问

Update更新工具官方帮助文件解释如下: 但是根据这个插图很让人疑惑,输入要素是蓝色,更新要素是黄色,输出要素为绿色,而且全部是绿色。我一直以为是与更新要素相交(被包含切割)的哪些输入要素都被…

【常用工具】7-Zip 解/压缩软件——基本使用方法

在实际日常工作或项目中,经常会遇到需要在window操作系统上压缩文件,在Linux操作系统上解压缩的场景,一款实用的压缩软件迫在眉睫,经过实际使用总结,7-Zip可以很好的解决很多压缩和解压缩问题,其基本使用方…

WordPress如何自定义日期和时间格式?附PHP日期和时间格式字符串

WordPress网站在很多地方都需要用到日期和时间,那么我们应该在哪里设置日期和时间呢?又如何自定义日期和时间格式呢?下面boke112百科就跟大家一起来学习一下PHP标准化的日期和时间格式字符串。 特别说明:格式字符是标准化的&#…

canvas绘制旋转的大风车

查看专栏目录 canvas实例应用100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…