首页 资讯 招标 项目 展会 更多

位置:首页 > 新闻频道 > 技术动态


一种新型液晶显示系统的设计

2016-05-13 11:14:29 安装信息网

相关链接: 中国安全网 中国质量网 中国论文网 中国资讯网

 陈  峰  叶一枝  刘家乐

 (上海电气集团股份有限公司中央研究院,上海200070)

摘要:针对嵌入式显示技术在低成本应用场合的需求,设计了一套新型的液晶显示系统。以TIL138 - EVM开发板为实验平台,采用较低成本的超扭曲向列型液晶显示器( STN - LCD),并开发了其在ARM端的驱动程序;利用TCP/IP的数据传输协议,实现了通信数据在液晶屏上的显示。实验结果验证了该系统应用于低成本场合的可行性,为嵌入式技术及显示技术的应用提供了更多参考。

关键词:嵌入式技术液晶显示系统微处理单元数据采集数据传输通信协议软硬件设计

中图分类号:TP399;TH6  DOI:10. 16086/j.cnki. issnl000 - 0380. 201604022

 0引言

 随着现代电子技术的不断发展,嵌入式技术已经广泛地渗透到人们生活的各个方面,各种新型的嵌入式设备在应用数量和应用场合上已经远远超过了通用计算机。在一些需要交互性和内存空间的场合,传统的基于微处理控制单元(MCU)+液晶显示模块的解决方案就不能很好地满足要求。此外,ARM技术的发展已经趋于成熟,内部采用的Linux操作系统由于拥

有性能优良、源码开放、内核定制、运行速度快等优点,逐渐在对传统解决方案的更新换代中突显优势。

 本文设计了一种新型的基于ARM+LCD显示系统的解决方案,其中采用性价比较高的STN - LCD代替常见但较贵的TFT - LCD作为显示模块。系统中编写的基于GPIO的液晶屏驱动程序的移植性很强,可将其移植到类似的液晶屏显示系统中,并为一些对性价比要求较高的场合提供参考和实践价值。

1硬件平台搭建

 系统以OMAP - L138中的ARM9为核心搭建硬件平台,将采集到的数据通过内嵌的TCP/IP通信链路传送给基于STN - LCD的液晶屏,并实时显示。此系统采用模块化独立设计,从功能上可以分成三个模块:数据采集模块、数据转发模块和数据显示模块。其系统结构框图如图1所示。

 其中,数据采集模块可以根据需要和实际情况进行设计(包括ARM端的程序实现和DSP端的程序实现)。本实验中,采用在ARM核运行的示例程序进行模拟实现。

1.1 0MAP - L138介绍

 核心处理模块采用TI公司推出的双核低功耗处理器OMAP - L138,其芯片内部集成了300 MH的ARM926EJ和300 MHz的TMS320C674X浮点DSP,片上资源也相当丰富,包括多种通信接口,芯片的集成度非常高。本实验主要介绍基于ARM核实现的显示系统,包括采集、转发和显示。此外,系统的数据采集模块也可使用DSP实现。

1.2液晶屏显示

 液晶显示器(liquid crystal display,LCD)是一种采用了液晶控制透光度技术来实现色彩的显示器。LCD有很多类型,如TN、STN、TFT、OLED等。TN、STN和TFT型显示器因为液晶分子扭转原理的不同,在彩化、动画和视角上都有明显的差异,使得这3类产品的应用范围有所不同。其中,STN较于TN画面切换速度快,较于TFT成本低,因此在信息控制设备中应用广泛。基于性能和成本的考虑,本实验采用STN -LCD来进行设计。

2系统软件设计

 系统硬件平台的搭建相对简单,核心为软件设计。系统的软件设计主要分为最小自启动系统设计、液晶屏驱动模块及应用程序设计和内部通信链路设计3个部分。首先,搭建一个自启动的最小系统,让整个平台能够自动地运行;接着,编写液晶屏的驱动程序,以及上层的液晶屏应用程序;最后,调用嵌入式系统内部的TCP/IP协议,打通程序之间的通信链路。

2.1最小自启动系统

 一个典型的嵌入式Linux系统按照存储空间的划分通常包括引导区、内核区和文件系统区。引导区存放引导加载程序Boot Loader与系统参数;内核区存放特定嵌入式平台定制的Linux内核;文件系统区存放根文件系统,用户应用程序就存放在文件系统区中。

 在本实验中,使用TI官方提供的通用的BootLoader(U - BOOT)以及Linux3.3.0的内核镜像文件ulmage,主要对根文件系统中的几个文件进行修改。一方面,修改/etc/iruttab文件。注释语句S:2345:respawn:/sbin/getty 115200 ttyS2。增加语句:S:2345:respawn:/sbin/mingetty -  autologin=root ttyS2,使之能自动进入拥有root权限的系统。另一方面,修改/etc/profle文件。首先在最后一行添加语句:insmod/home/root/lcd.  ko,用来加载编译的液晶显示屏的驱动程序。然后添加语句:/home/root/thread_ server&,用来运行上层的数据转发程序。最后添加以下语句:/home/root/setup/ lcddemo &,以启动LCD屏的上层应用程序。自此,通过串口调试助手,即可在PC上看到系统启动过程打印的信息,并正常地自动运行程序。

2.2液晶屏驱动模块及应用程序

2.2.1  XRD G160160D26

 欣瑞达电子的XRD G160160D26,是一款在工业控制上普遍应用的液晶显示模块,使用UC1698作为液晶显示控制器。液晶屏的外形尺寸为83.8mm×78.5 mm×11.6 mm,点阵为160 mm x160 mm,其支持的工作温度为- 40~+80℃,引脚数为17个。引脚的分类主要包括以下三类:控制引脚、数据引脚和电源引脚。接口引脚定义如表1所示。

2.2.2液晶屏驱动模块

 设备驱动程序是操作系统内核和系统硬件的接口,是嵌入式系统不可或缺的组成部分。设备驱动程序为应用程序隐藏了硬件实现的细节,使其可以像操作普通文件一样操作外围设备。设备驱动程序在内核中的存在方式主要有两种:一种是直接编译到内核中;另一种是游离于内核而不占用系统资源,在需要时动态加载,不用时又可以卸载。本实验中选择的是第二种,将驱动程序做成一个模块,以增加程序的灵活性和可移植性。

 在本实验中,基于GPIO的字符设备的驱动模块主要包括字符设备的驱动程序、对GPIO管脚的配置文件,以及对驱动模块的编译文件3个部分,分别集成在lcd. c、lcd. h和Makefile这3个文件中。

 字符设备的驱动程序包括以下几个部分:第一,字符设备驱动模块的加载函数static int_ _init lcd_init( void),实现设备号的申请以及向内核注册驱动程序,当使用insmod加载模块时被调用;第二,字符设备驱动模块的卸载函数static int 一一exit lcd_ exit( void),实现对设备号的释放以及对驱动程序的注销;第三,字符设备驱动模块的file_ operations结构体及其成员函数。本实验中定义的一个file_ o perations实例如下所示:

 其中,在static long lcd_ ioctl (struct file*file,unsigned int cmd,unsigned long arg)的I/O控制函数中,实现对GPIO的接口,将对LCD屏的调用解析成lcd_ outcmd()和lcd_ outdata()两个函数。

 对GPIO管脚的配置文件包括以下几个部分:第一,设置复用管脚函数int pinmux_  seup( unsigned charpinmux_ num),使液晶显示模块的控制引脚和数据引脚处于GPIO的功能;第二,设置管脚数据流方向函数int gpio_ setdir( unsigned char lcd_ pin),使对应的引脚处于要求的输入或者输出状态;第三,输出数据函数intlcd_outdata(unsigned char val),用来解析字符设备的驱动程序的lcd_ ioctl函数中cmd  =1时的情况;第四,输出命令函数int lcd_ outcmd( unsigned char val),用来解析字符设备的驱动程序的lcd_ ioctl函数中cmd =0时的情况。

 在Linux中,驱动程序的编译和链接规则由Makefile指定,在基本的框架下改动一部分关键信息即可。程序如下所示:

 其中,lcd.o是实际设备驱动程序的模块,KDIR表示内核所在目录,PWD为内核的版本。最后将lcd.c、lcd.h和Makefile文件放于同一目录下,执行make指令就可以得到相应的lcd. ko文件,这个文件就是要用于目标板的液晶屏驱动模块。

2.2.3液晶屏应用程序

 液晶屏应用程序主要用来接收其他客户端程序发送的数据,然后将其按指定格式在液晶屏上显示。其软件流程图如图2所示。

 由图2可知,应用程序在软件代码上面的实现主要由以下3个部分组成:第一,对LCD设备的操作,包括使用open(“/dev/lcd”,0)语句来打开LCD设备,其中/dev/lcd就是液晶屏驱动模块的设备名,并使用init()函数来完成对LCD屏的复位、配置及使能;第二,遵循TCP/IP的套接字规范,进行基于客户端的创建、设置及连接套接字操作,并向内部的TCP Server注册ID,便于区分不同的客户端;第三,多线程部分操作,包括调用pthread_create()函数来创建子线程,并实现子线程的接收函数void*recv_msg(void*arg),在接收函数中实现对接收数据的判断,并调用驱动模块的ioctl函数实现正确的数据在LCD屏上的显示。

2.3内部通信链路

 在Linux中,基于TCP/IP协议的应用程序通常都采用UNIX BSD的套接字(Socket),来实现进程之间的通信。Socket是Internet网络编程中通用的API,最基本的Socket通信模型即客户端一服务器(C -S)模型。通常,客户端应用程序的数量比服务器应用程序要多,而服务器较于客户端程序则要复杂得多,需要考虑并发、执行效率、网络状况等。因此,一个网络通信程序的关键在于服务器应用程序的开发。

 本实验中,需要有两个以上的程序作为客户端与服务器程序通信。所以,服务器程序需要考虑并发性,使用多线程的技术来实现。在Linux中,就需要在程序的开头增加以下语句:#include<pthread.h>。

 通信的软件框架如图3所示。在图3中,中间是TCP Server的软件流程,用来将从左侧lcdtest客户端程序接收到的数据转发给右侧的lcddemo客户端程序,以显示在LCD屏上。在实际应用中,右侧的lcddemo客户端程序就接收其他客户端发送过来的要显示在LCD屏上的数据。其中,在TCP Server的Accept()阶段,服务器程序一直在while(1)循环等待客户端的连接,每连接一个客户端,就为该客户端分别建立一个接收线程,并将该客户端的注册ID保存到内部数组中。最后,以TCP Server来示例涉及多线程通信程序的编译:arm -arago - linux - gnueabi - gcc server.c  -o server  -lpthread,就可以生成server的可执行文件。

3  系统验证及测试

 首先,将编译好的液晶屏驱动模块lcd. ko和应用程序(包括TCP Server程序thread_server、液晶屏应用程序lcddemo以及液晶屏测试程序lcdtest)载人OMAP - L138开发板,放于/home/root目录下;其次,在当前目录下执行命令insmod lcd. ko,加载驱动模块;接着,执行命令,/thread _server&,后台运行TCP Server程序;然后,执行命令./lcddemo&,后台运行液晶屏应用程序;最后,执行命令,/lcdtest,运行液晶屏测试程序,即可在STN - LCD液晶屏上看到数据显示。

4结束语

 本文设计了一种基于OMAP - L138和STN - LCD的液晶显示系统,主要完成了STN - LCD的液晶驱动模块、驱动程序以及内部通信的链路。驱动模块通过控制GPIO来实现,内部通信的链路使用基于Linux的多线程Socket来实现,使得系统具有很强的可移植性及可操作性。本设计为数据显示设备提供了一种新的方案,可应用于工控等领域。

关键字:

上一篇:一种热释电红外探测器的单目设计

下一篇:优化PDCCH盲检测的功率检测法的实现

行业资讯月点击排行

展会信息月点击排行

招商信息月点击排行

首页 资讯 招标 项目 展会
关于我们 | 广告服务 | 友情连接 | 联系我们
触屏版 电脑版
安装信息网 www.36qyk.cn.