|
一直有人问,如何在HD44780类型的液晶或VFD屏幕上显示内容。然后就是如何从电脑上发送内容到液晶或VFD屏幕上。
我以前走了不少弯路,以后也会有不少电子爱好者会做些小工具玩。
我说说我自己的个人看法。
刚开始一般是有了一些电子元件,比如HD44780类型lcd1602,1602的vfd屏幕,128×64,128×32点阵等等.就想把闹钟显示出来。我当时的最终目的是想在电脑听音乐的时候,把歌词发送出来...
如果没有入门单片机的话,用lcd1602这种液晶,直接连接到电脑的并口,并加5v电就可以驱动了,不加的话就从并口io取电。不过背光不一定可以哦,因为并口之有5v的10ma的电流。串口也有10ma,不过是12v的10ma,
为什么并口可以直接驱动lcd1602呢?因为并口其实有一部分io是输出状态的,有一部分是输入状态的,就单片机简单io操作一样。
io读写就是输出的1,0,或判断输入1,0。
电脑上的串口跟并口,其实都是IO操作,也就是单片机的io操作了,读写速度可以达到20us左右的哦,没有单片机的时候,用并口或串口当作几个io就可以了。用来操作18b20,红外接收头,24cxxx存储芯片,avr的isp都可以的哦,
就连10年前就有的并口驱动ps1手柄(其实是用spi协议的),而且有人利用串口的IO读写,加个运放就可以测量电压了。
如果没有单片机,或者没有单片机的下载器,不怕烧电脑的情况下,完全可以用并口或串口做单片机实验。
把液晶连接到并口上了,不会在电脑上编写上位机怎么办?
题外话,用usb芯片转并口或串口的,即使是pl2303,FT232RL芯片,传数据是可以,但想用来做io操作的话,请三思,PonyProg2000这个软件可以用电脑上的串口或并口,直接下载avr芯片或读写24cxx存储芯片,但是用usb转串口来连接的话,我自己测试写个熔丝都要【一两分钟】,写内容的话,网上有耐心的人测试过要2小时左右,但是【没有出错】。我估计usb转串口操作io的话要200ma到400ma一次,而不是电脑主板上自己的20us左右。
如果是用avr转串口的更别想了。
LCD Smartie这个软件提供的并口连接HD44780液晶方法,是用8bit的,要连接很多线,不过LCD Smartie提供显示的内容很多。
有些软件提供了跟LCD Smartie不同的并口连接HD44780液晶方法,有的可以用4bit,可以少连接4跟线,提供显示的内容很少。
不过都证明了并口可以直接操作HD44780液晶。
我一直都当LCD Smartie只是一个协议转换程序。它把电脑上需要显示的各种内容,按一定模式传送到下位机屏幕上,同过插件,可以支持各种液晶屏幕硬件。
它提供有一个【lcd_smartie-5.3.2_final-src】开源的版本。里面有利用并口io驱动HD44780液晶的代码,跟两家生产液晶屏幕硬件公司的两种协议,就是把屏幕装在电脑光驱位上的信息盒这样的,现在一些键盘上也有屏幕了,通过插件,一样可以自定义显示内容。
其中里面的Matrix Orbital协议代码,比较规范,在ULCD_MO.pas文件中,参考后觉得可以利用它的框架设计一个比较规范的协议。
然后怎么设计硬件呢?
我之前走了不少弯路,就是先考虑硬件,才考虑协议,直到我定下来协议,硬件很快就设定好了。
用电脑的并口驱动1602的液晶的话,不开背光又难看,开背光还需要另外加5v电源,连接的线也太粗了。
用了vfd屏幕的人都会立刻不想要液晶了,因为vfd是显像管,点发光的,不是背景发光的,无可代替,加滤片,跟汽车玻璃膜一样,还可以显示出橙色,蓝色。建议有条件一定要留一块vfd给自己用。
用串口的话,数据线细点,但是还是要加5v电,其实串口的1602液晶,一直用在路由一体机上,在电脑机房可以经常看到,Linux系统下有很多软件支持串口1602液晶,前几年开始有usb转串口的成熟芯片出了,pl2303等等,但是是贴片的,不是很好焊。
后来avr芯片可以模拟usb设备了。直接模拟一个rs232串口,我做了一个,直接短路avr的rs232输出输入,测试确实能自发自收。
我之前做有一个用avr芯片加max232芯片连接电脑的下位机,编好程序后,确实可以用LCD Smartie中的Matrix Orbital协议驱动,如果用avr模拟成usb串口再驱动1602液晶行不行呢。
当时已经有好几个用avr模拟usb设备驱动1602液晶的了,有几个Linux是在系统下用的,有一个LCD2USB开发有插件可以在win系统下的LCD Smartie使用。但是都不是模拟成usb转串口,如果模拟成串口的话,开发上位机方便得多,而不需要而外的dll文件做中介。
我看了LCD2USB提供的插件代码,发现LCD Smartie的框架其实很简单,如果用里面的Matrix Orbital协议,很方便驱动一个下位机的屏幕,有多方便,暂时在二楼...
想通思路后,开始做一个用avr驱动1602lcd的硬件,当时我用的avr硬件都是ATTINY2313,结果发现,用avr模拟成其他设备用的代码少点,还够驱动1602,模拟成串口的话,差不多就2k了,去掉缓冲,就容易出错,1602用4bit驱动,代码又要多点,怎么弄都放不下
ATTINY2313,最后只有用m8重新做硬件,又折腾了一阵子。
最后还是把硬件搭好了,程序也编好了,两年前得到的结论是:用avr转串口后,再驱动1602这种lcd是确实可行的,至少我认为如此。
在实现的过程得到了,重要的数据:
avr模拟usb设备的协议现在名字是V-USB,它的例子没有提供usb有效复位的代码,把程序写入avr芯片然后在插入电脑上的usb插座,电脑当然可以识别出硬件来,但是我编程序的时候,随时要修改,不想修改一次拔一次usb插头啊。
需要自己编一段代码,不把usb插头,avr芯片复位后,电脑会重新找到硬件。
usb标准的只能提供500ma左右的电流,刚好可以驱动小的VFD屏幕,烧了自己负责,旧电脑可能200ma都不到。
usb的通讯协议要求1000ms内通信要回复,意思是usb设备需要1000ms回一次话,而显示HD44780类型的lcd是需要一定时间的。也就是说,avr模拟串口后,可以利用的时间很少,比如,18b20转换一次温度要800ms。
但我一直都不满意usb转串口是要装驱动,跟在上位机需要设置com1,com2位置这样的,而且当时我的1602液晶的数据口是单排16针的,我觉得很不合理,双排插针2*8的就合理了,建议如果要搭硬件,尽量用2*8插针的,这样可以用排线。
不过现在我已经会做avr转usb的HID设备,就是免驱动设备,有了usb免驱动设备,跟通信协议,可以用电脑控制许多东西了,编写上下位机又很方便。有时间的话,我也许会陆续公布我的avr做的Hid设备。
说完两年前的事情了,接下来的就头疼了,两年前我用delphi2007编程,现在是用delphi2010。delphi2010是Unicode的,解决了很多问题,带来相当多好处跟方便,方便,如果是新写代码的话。可是如果要重新编译以前的代码,需要重新修改,花的时间肯定比重新编还要多
。不重新编写的话,如果代码修复不完整,错误未发现,会带来各种隐患。
delphi2010的带来Unicode是无可代替的,我不会像有些人留恋delphi2007,因为delphi2010编写的代码更加规范,可以让自己按照更严格的规范来要求自己。
一:如果有lcd_smartie的经验,做有usbasp的实验板的话,可以在usbasp上加个lcd1602上去,修改Yuki_M8_usb_lcd代码,我是用2+4=任意六IO驱动1602lcd的,4bit比8bit需要一倍多一点时间驱动。avr转串口,只能利用1000ms不到的时间,就得返回请求。
二:如果有lcd_smartie的经验,已经有并口或串口lcd的话,可以编译lcd_smartie-5.3.2_final-src_YUKI_2010-3-21看能不能使用。
三:2008-10-18_M8_USB_LCD 只是我Yuki_M8_usb_lcd代码中的硬件设置,板子不太实用的。
四:如果有Proteus(单片机仿真)这个软件的经验,我没有用过里面usb仿真功能,但是!!!另外配合一个【Virtual Serial Port Driver 6.0.1.115】仿真电脑串口的工具,就有了一个超强组合,可以自己搭建一个avr+rs232+lcd1602的实验板,在Proteus软件加虚拟串口运行,然后运行lcd_smartie,一样可以连接到Proteus仿真的串口1602lcd,一样可以实现调试通过,只是一切都是虚拟的,我试过可以的。
五:AVR模拟usb转串口,在Windows下需要安装驱动,如果是win03系统请用【avrcdc_inf_2009-08-24\raw_Win2003】目录下的驱动,不然直接蓝屏。
|
|