暑假之前就注意了LCD4Linux这个Project,简单说,这就是个硬件版conky的驱动服务,用户自己DIY各式各样的硬件屏幕,自己编写驱动、编写各种插件来控制输出到屏幕上的信息,LCD4Linux就是这样一个平台,也是一个geek味道非常浓郁的、可玩性相当高的一个Project。 图片里面是LCD4Linux项目页里面收集的部分人实现的一些屏幕,有像我这样一块小小的1602,也有用块10多寸的液晶屏作成很拉风的监控屏,甚至,挂一个户外广告那样的LED阵列,你也可以转换成VGA信号输出给大屏幕的电视机,或者弄个天线发射出外太空都是可能的…… 这个项目的可玩性就在于硬件的多样性,很可能每个人实现的屏幕都不一样,而作为开源项目,geek们只需或多或少地修改一下别人的驱动就可让屏幕跑起来了。 我实现的这块,是用了一块通用AVR单片机,通过USB接口直接取电和传输的数据的架构,硬件和协议参考的是LCD2USB项目。其原来用的是atmega8芯片,而我手边只有atmega48,算是类似吧,但换换IO口还是在所难免的。 实现一个系统,同时也藉此了解一下相关的技术(不然还真的很难做得出来),首先是USB,USB我们天天在用,但是学校的《微机接口》之类的课程可从来不涉及这些“时髦”技术的,虽然USB已经流行了10多年了。通过V-USB库,在AVR单片机上实现USB设备还真没什么难度,只需要填写设备ID设备名称之类的,然后再实现协议处理函数就完了,在Linux下使用是直接支持,一插上运行lsusb就能认出(Win下需要另外装驱动)。我第一个实验USB就是接了几个二极管开关,用libusb的python binding, pyusb,很容易就控制几个灯。(想起The Big Bang Theory S1E9开头那一段,再import个SimpleHTTPServer,然后让单片机连接几个继电器,就能像他们那样让别人用浏览器来开关我的台灯了,哈!) 其实单纯几个LED都能够作为LCD4Linux的一个设备了,比如能够用来做邮件提醒、pidgin消息之类。同样是用V-USB,有个德国人做了个叫USB-LED-Fader的东东,同样是几个LED,人家可实现了每个灯在pwm控制下以独立的方式闪亮,要知道,atmega8只有两个pwm channel,而USB-LED-Fader里面没有用硬件pwm,而是用io口来输出的,为了实现独立波形,还实现了一个message queue,俨然一个操作系统了……所以他的固件编译出来4K多,即使我修改后也刷不进去mega48里面,就没得看看他的效果了。不过赞一下的是,这个项目虽然是玩具级别的,但是人家的电路、电路板、固件代码(注释)、文档、上位机控制(包括win版、win驱动)通通一应俱全,非常规范和详细,俨然一个商业项目。 将USB模块跟显示屏驱动模块合起来并没什么难度,几个月前我自己写过这个1602的驱动程序,虽然当时花了好几天,但实际上都只是很简单的几个函数。不过这次,因为接上USB后这块28针的mega48就没那么多io给我挥霍了,此前的驱动用的都是8位数据线,现在只能用4位,分两次传送。不过还好,这类HD44780的驱动几乎满地都是,一般外国人写的不像国内一些网站上面的,扔几个函数在那里就完事,LCD2USB的代码里面用的是Peter Fleury的LCD Library,封装得很漂亮,不过原来的代码只能讲4位数据线连接在一组io口的高四位上,而接上外置晶振后的mega48仅剩的带高位PortD,刚好又是几个pwm波输出,我打算另外再扩展协议让LCD2USB带有几个漂亮的提示灯,就重写了一下LCD的两个底层函数,当然不是仅仅重写,不然对不起原来那些漂亮的代码,用了宏定义来设置数据线是接在HIGHER_BIT or LOWER_BIT。 其实相比之下,LCD4Linux最精彩的地方在于它的驱动、插件的编写,新版里面其也支持了Python,意味着做个硬件版twitter器不是什么难事了!不过LCD4Linux本身的安装让我困扰了一天,大概作者没有时间吧,这个项目的主代码很几年没更新了,一个版本更新的跨幅有好几年,以致稍旧点的版本在新版本的内核里面编译不了,比如有个rdtscl的宏调用,在新内核里面被移除了……这个问题在LCD4Linux的SVN里面的版本倒是解决了,但是因为autotool的更新,编译过程又出错,折腾了半天,发现原来autoconf检查python的模块ac_python_devel 因为莫名的原因会让configure文件出错,下载一个新版的ax_python_devel.m4覆盖掉就好了。另外发现AUR里面的lcd4linux-svn包是“弃婴”,于是“收养”了回来更新,添加了个编译的patch,现在Archer们直接yaourt lcd4linux就可以编译安装了,O.O . 还是一句,LCD4Linux的可玩性非常高,说技术性嘛,不算高也不算低吧,召唤大家一起玩一起交流哈……
Page optimized by WP Minify WordPress Plugin