当前位置:首页 > 电源 > 数字电源
[导读]摘要:本文在简要介绍Solomon公司出品的CMOS OLED/PLED显示驱动SSD1303芯片的基础上,重点讨论台湾铼宝公司最新产品,内嵌SSD1303驱动芯片的超薄OLED显示屏P09703在陀螺经纬仪中的应用问题,给出了硬件电路图和软件流

摘要:本文在简要介绍Solomon公司出品的CMOS OLED/PLED显示驱动SSD1303芯片的基础上,重点讨论台湾铼宝公司最新产品,内嵌SSD1303驱动芯片的超薄OLED显示屏P09703在陀螺经纬仪中的应用问题,给出了硬件电路图和软件流程图,为开发带有显示屏的便携设备提供参考。

关键词:OLED SSD1303 ARM 陀螺仪

陀螺经纬仪通过敏感地球自转的水平分量来测定仪器架设点真北方位的精密仪器,工作情况类似于电子经纬仪,所不同的是电子经纬仪只能测定两个目标的相对夹角,而陀螺经纬仪不仅可以测定目标之间的相对夹角,而且可以测定目标与地理北或真北方位之间的夹角。仪器工作通常在野外进行,环境条件较为恶劣。以前显示部分用液晶实现,带来的问题是除重量和体积外,低温靠加热实现,功耗大,野外作业对电池要求较高。另一个问题是采取任何措施,都无法解决太阳照射下,液晶显示不清楚这个问题,这是由于液晶显示自身特性决定的。

OLED 在显示信息方面有许多吸引人的特点。OLED 无LCD 的视角问题,可提供全视角显示。由于OLED 具有能自发光的特点,在亮度上也比LCD 高得多,也不像LCD 需要背光源,所以不仅提高了电源的有效功率,功耗只有LCD 的一半,而且器件厚度也比LCD 薄。OLED 响应时间比典型LCD 快一千倍。所以,它具有高效率、高对比度、宽视角、工作电压低等优点[1 -2]。台湾铼宝公司生产的内嵌SSD1303驱动芯片的超薄OLED显示屏P09703点阵数128X64,厚度仅2.05毫米,重量仅11.1克,工作温度-40℃到+85℃。在陀螺经纬仪上选用该产品,很好的解决了显示问题。下面重点讨论电路设计的实现问题。

1 SSD1303简介

目前,主要有Solomon 公司和美国的Clare公司等几家公司生产OLED 驱动IC。Solomon 投入市场的SSD1303,是一枚把行驱动、列驱动和控制器集成为一体的OLED 驱动器芯片。这个驱动器为132 × 64点阵OLED 图形显示而设计的,包括行驱动器、列驱动器、电流参考发生器、对比度控制、振荡器和几个MCU 接口模式。工作逻辑电压2.4V~3.5V,具有丰富的软件功能,支持4种颜色选择和每种颜色64级控制,它的软件对比度具有256级控制,内嵌的132 × 64 bit 的图形动态随机存储器( GDDRAM),提供了行remapping、列remapping、垂直滚动和部分显示功能。使该驱动器适合于不同像素尺寸和颜色的多种OLED 显示。

2 P09703与LPC2131的硬件连接

LPC2100/lLPC2105/LPC2106 系列微控制器是飞利浦半导体推出的基于16/32 位ARM7TDMI-S CPU,并带有128/256 k字节(kB)嵌入的高速Flash存储器的微控制器,128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16 位Thumb 模式将代码规模降低超过30%,而性能的损失却很小。由于LPC2100/lLPC2105/LPC2106系列微控制器采用非常小的64脚封装、极低的功耗、多个32位定时器、4路10位ADC PWM 输出以及多达9个外部中断,这使它们特别适用于工业控制、医疗系统、访问控制和电子收款机(POS)等应用领域。因为LPC2100系列微控制器没有外部总线控制器,所以它们外接扩展芯片不是很方便。不过,因为它们的速度很快,所以即使使用软件模拟总线外接扩展芯片也比普通的80c51快得多,而丰富的片内资源也不是普通51能够比拟的。
 
鉴于P09703与P09702具有相同的图形显示控制器SSD1303,而P09702硬件接口适合试验连接,下面以P09702与LPC2131为例进行说明,由于OLED显示屏P09702的逻辑电平为2.4V - 3.5V,我们选用PHILIPS公司生产的基于ARM7TDMI-S、单电源供电的微控制器LPC2131作为控制器,图一给出了包括电源、时钟、复位等一个嵌入式处理系统正常工作的最小电路外,电源电路提供模拟3.3V和数字3.3V,以提高系统工作稳定性。同时绘制了P09702与LPC2131的硬件连接方式。

超薄显示屏OLED在陀螺经纬仪中的应用

图 一

3 软件编程

在与计算机连接方面,SSD1303的接口,包括数据输入缓存器、数据输出锁存器,指令寄存器及译码器,忙状态触发器以及时序控制电路等,具有高性能的接口控制电路。计算机可以随时访问SSD1303而不需要判断其当前状态,与以前用的以T6963C控制器不同,SSD1303判断忙状态在操作上不是那么重要,因为SSD1303的接口部能够适时地接收计算机的访问。只是在计算机对显示存储器大量的数据传输时与控制部向驱动部传输显示数据相冲突,会在显示屏上出现“雪花”。但是由于这个间隙时间很短,加上人眼在视觉上的惰性而看不出“雪花”现象,有时判断忙标志再进行显示数据传输时,忙标志已经消失了。正是由于这些,计算机访问SSD1303的操作流程非常简单。但要注意的是SSD1303的接口控制电路内有几套时序电路以适配不同计算机操作时序的要求。时序适配电路的设置端为BS0,BS1,BS2。在P09703中选择BS1和BS2不同的连接,以确定选择Intel8080时序还是M6800时序。在P09702中由于没有BS1和BS2的选择,出厂时已经设置为Intel8080时序,所以下面的程序为Intel8080时序。

#define  AD0_PIN_NUM    8   //8位数据总线
#define  DC_PIN_NUM     5   //P0.5 数据/指令控制位,低电平—指令操作,高电平—数据操作
#define  WR_PIN_NUM     6   //P0.6 写数据/指令控制位,高电平变低电平时写入
#define  RD_PIN_NUM     7   //P0.7 读数据/指令控制位,低电平有效
#define  CS_PIN_NUM     16  //P0.16 使能位,低电平有效
void ExBusInit(void)    //初始化P09702OLED显示屏总线
{    uint32 temp;
// 设置引脚连接模块:DC_PIN_NUM、WR_PIN_NUM、RD_PIN_NUM、CS_PIN_NUM、 AD0_PIN_NUM为GPIO
    PINSEL0 &= ~(3 << (2 * DC_PIN_NUM)); 
    PINSEL0 &= ~(3 << (2 * WR_PIN_NUM));
    PINSEL0 &= ~(3 << (2 * RD_PIN_NUM));
       PINSEL0 &= ~(3 << (2 * (CS_PIN_NUM-16)));
    for (temp= AD0_PIN_NUM; temp < 16; temp++){
        PINSEL0 &= ~(3 << (2 *temp));
    }
// 设置引脚方向,所有相关引脚为输出
    temp = 0xff << AD0_PIN_NUM;
    IODIR = IODIR | temp;
IODIR = IODIR | (1 << WR_PIN_NUM) | (1 << RD_PIN_NUM) | (1 << DC_PIN_NUM) | (1 << CS_PIN_NUM);
// 设置引脚输出值,除CS_PIN_NUM输出为低电平外,其余均为高电平
       IOCLR = (1 << CS_PIN_NUM);
    IOSET = (1 << DC_PIN_NUM) | (1 << WR_PIN_NUM) | (1 << RD_PIN_NUM);
    temp = 0xff << AD0_PIN_NUM;
    IOSET = IOSET | temp;
}
 
uint8 ReadData(void)     //从P09702OLED显示屏读取数据
{   uint32 temp,temp1;
    temp1 = IODIR;
    IODIR = temp1 & (~(0xff << AD0_PIN_NUM));  // 设置AD0_PIN_NUM为输入
    IOCLR = 1 << RD_PIN_NUM;
    temp = IOPIN;
    IOSET = 1 << RD_PIN_NUM;
    IODIR = temp1 | (0xff << AD0_PIN_NUM);
    temp = temp >> AD0_PIN_NUM;
    return (uint8) temp;
}
 
void WriteCommand(uint8 Data)   //写指令代码到P09702OLED显示屏
{     IOCLR = 1 << DC_PIN_NUM;
    IOSET = Data << AD0_PIN_NUM;
    Data = ~Data;
    IOCLR = Data << AD0_PIN_NUM;
    IOCLR = 1 << WR_PIN_NUM;
    IOSET = 1 << WR_PIN_NUM;
    IOSET = 1 << DC_PIN_NUM;
}
 
void WriteData(uint8 Data)   //写参数及数据到P09702OLED显示屏
{     IOSET = Data << AD0_PIN_NUM;
    Data = ~Data;
    IOCLR = Data << AD0_PIN_NUM;
    IOCLR = 1 << WR_PIN_NUM;
    IOSET = 1 << WR_PIN_NUM;
}
main(){   int j, i;
ExBusInit();       //初始化P09702OLED显示屏总线
InitOled();        //初始化P09702OLED显示屏,由于SSD1303软件控制指令非常丰富,该函数内容较长,在这里不做描述,详情见P09702应用笔记,这里要说明的是:InitOled()中的comm_out2()函数用WriteCommand()函数替代
for(i=0;i<8;i++)
WriteCommand (0xB0+i);    //设置显示位置—行
WriteCommand (0x02);      //设置显示位置—列低地址
WriteCommand (0x10);      //设置显示位置—列高地址
for(j=0;j<128;j++)        
WriteData((0xFF);        //屏幕显示,全亮
}
}

上述仅是对P09702基本的应用,有关更多的SSD1303软件控制指令,通过该文介绍的方法,并结合SSD1303的指令集[4],读者能够对P09702应用自如。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭