<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>apt-blog.net   无证程序员的PT桑 &#187; LCD4Linux</title> <atom:link href="http://apt-blog.net/tag/lcd4linux/feed" rel="self" type="application/rss+xml" /><link>http://apt-blog.net</link> <description>潜逃中。</description> <lastBuildDate>Sun, 05 Feb 2012 10:35:00 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>完成一个LCD4Linux的USB屏幕</title><link>http://apt-blog.net/the_lcd4linux_project</link> <comments>http://apt-blog.net/the_lcd4linux_project#comments</comments> <pubDate>Sat, 05 Sep 2009 16:21:53 +0000</pubDate> <dc:creator>BOYPT</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[单片机]]></category> <category><![CDATA[Arch]]></category> <category><![CDATA[atmega]]></category> <category><![CDATA[atmega48]]></category> <category><![CDATA[AUR]]></category> <category><![CDATA[AVR]]></category> <category><![CDATA[LCD]]></category> <category><![CDATA[LCD4Linux]]></category> <category><![CDATA[Linux]]></category> <guid
isPermaLink="false">http://apt-blog.net/archives/540.html</guid> <description><![CDATA[暑假之前就注意了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的可玩性非常高，说技术性嘛，不算高也不算低吧，召唤大家一起玩一起交流哈……]]></description> <content:encoded><![CDATA[<p
style="text-align: center;"><a
href="http://apt-blog.net/wp-content/uploads/2009/09/pt_lcd2usb.jpg" target="_blank" rel="lightbox[540]" title="LCD2USB with 1602 LCD"><img
class="aligncenter size-full wp-image-548" title="LCD2USB with 1602 LCD" src="http://apt-blog.net/wp-content/uploads/2009/09/pt_lcd2usb.jpg" alt="LCD2USB with 1602 LCD" width="476" height="261" /></a></p><p>暑假之前就注意了<a
href="http://lcd4linux.bulix.org/" target="_blank">LCD4Linux</a>这个Project，简单说，这就是个硬件版conky的驱动服务，用户自己DIY各式各样的硬件屏幕，自己编写驱动、编写各种插件来控制输出到屏幕上的信息，LCD4Linux就是这样一个平台，也是一个geek味道非常浓郁的、可玩性相当高的一个Project。</p><p>图片里面是LCD4Linux项目页里面收集的部分人实现的一些屏幕，有像我这样一块小小的1602，也有用块10多寸的液晶屏作成很拉风的监控屏，甚至，挂一个户外广告那样的LED阵列，你也可以转换成VGA信号输出给大屏幕的电视机，或者弄个天线发射出外太空都是可能的……<br
/> <a
href="http://apt-blog.net/wp-content/uploads/2009/09/lcd4linux.jpg" rel="lightbox[540]" title="LCD4Linux"><img
class="alignright" style="margin: 10px; max-width: 800px;" title="LCD4Linux" src="http://apt-blog.net/wp-content/uploads/2009/09/lcd4linux.jpg" alt="" width="288" height="480" /></a><br
/> 这个项目的可玩性就在于硬件的多样性，很可能每个人实现的屏幕都不一样，而作为开源项目，geek们只需或多或少地修改一下别人的驱动就可让屏幕跑起来了。</p><p>我实现的这块，是用了一块通用AVR单片机，通过USB接口直接取电和传输的数据的架构，硬件和协议参考的是<a
href="http://www.harbaum.org/till/lcd2usb/index.shtml" target="_blank">LCD2USB</a>项目。其原来用的是atmega8芯片，而我手边只有atmega48，算是类似吧，但换换IO口还是在所难免的。</p><p>实现一个系统，同时也藉此了解一下相关的技术（不然还真的很难做得出来），首先是USB，USB我们天天在用，但是学校的《微机接口》之类的课程可从来不涉及这些“时髦”技术的，虽然USB已经流行了10多年了。通<a
href="http://www.obdev.at/products/vusb/index.html" target="_blank">过V-USB</a>库，在AVR单片机上实现USB设备还真没什么难度，只需要填写设备ID设备名称之类的，然后再实现协议处理函数就完了，在Linux下使用是直接支持，一插上运行lsusb就能认出（Win下需要另外装驱动）。我第一个实验USB就是接了几个二极管开关，用libusb的python binding， pyusb，很容易就控制几个灯。（想起<a
href="http://v.youku.com/v_show/id_XNTc5OTMxNjg=.html" target="_blank">The Big Bang Theory S1E9开头那一段</a>，再import个SimpleHTTPServer，然后让单片机连接几个继电器，就能像他们那样让别人用浏览器来开关我的台灯了，哈！）</p><p>其实单纯几个LED都能够作为LCD4Linux的一个设备了，比如能够用来做邮件提醒、pidgin消息之类。同样是用V-USB，<a
href="http://www.schatenseite.de/index.php?id=216&amp;L=2" target="_blank">有个德国人做了个叫USB-LED-Fader的东东</a>，同样是几个LED，人家可实现了每个灯在pwm控制下以独立的方式闪亮，要知道，atmega8只有两个pwm channel，而USB-LED-Fader里面没有用硬件pwm，而是用io口来输出的，为了实现独立波形，还实现了一个message queue，俨然一个操作系统了……所以他的固件编译出来4K多，即使我修改后也刷不进去mega48里面，就没得看看他的效果了。不过赞一下的是，这个项目虽然是玩具级别的，但是人家的电路、电路板、固件代码（注释）、文档、上位机控制（包括win版、win驱动）通通一应俱全，非常规范和详细，俨然一个商业项目。</p><p>将USB模块跟显示屏驱动模块合起来并没什么难度，<a
href="http://apt-blog.net/archives/238.html" target="_blank">几个月前我自己写过这个1602的驱动程序</a>，虽然当时花了好几天，但实际上都只是很简单的几个函数。不过这次，因为接上USB后这块28针的mega48就没那么多io给我挥霍了，此前的驱动用的都是8位数据线，现在只能用4位，分两次传送。不过还好，这类HD44780的驱动几乎满地都是，一般外国人写的不像国内一些网站上面的，扔几个函数在那里就完事，LCD2USB的代码里面用的是<a
href="http://www.jump.to/fleury" target="_blank">Peter Fleury的LCD Library</a>，封装得很漂亮，不过原来的代码只能讲4位数据线连接在一组io口的高四位上，而接上外置晶振后的mega48仅剩的带高位PortD，刚好又是几个pwm波输出，我打算另外再扩展协议让LCD2USB带有几个漂亮的提示灯，就重写了一下LCD的两个底层函数，当然不是仅仅重写，不然对不起原来那些漂亮的代码，用了宏定义来设置数据线是接在HIGHER_BIT or LOWER_BIT。</p><p>其实相比之下，<a
href="http://lcd4linux.bulix.org/" target="_blank">LCD4Linux</a>最精彩的地方在于它的驱动、插件的编写，新版里面其也支持了Python，意味着做个硬件版twitter器不是什么难事了！不过<a
href="http://lcd4linux.bulix.org/" target="_blank">LCD4Linux</a>本身的安装让我困扰了一天，大概作者没有时间吧，这个项目的主代码很几年没更新了，一个版本更新的跨幅有好几年，以致稍旧点的版本在新版本的内核里面编译不了，比如有个rdtscl的宏调用，在新内核里面被移除了……这个问题在<a
href="http://lcd4linux.bulix.org/" target="_blank">LCD4Linux</a>的SVN里面的版本倒是解决了，但是因为autotool的更新，编译过程又出错，折腾了半天，发现原来autoconf检查python的模块ac_python_devel 因为莫名的原因会让configure文件出错，下载一个新版的ax_python_devel.m4覆盖掉就好了。另外发现<a
href="http://aur.archlinux.org/packages.php?ID=20514" target="_blank">AUR里面的lcd4linux-svn包</a>是“弃婴”，于是“收养”了回来更新，添加了个编译的patch，现在Archer们直接yaourt lcd4linux就可以编译安装了，O.O .</p><p><a
href="http://lcd4linux.bulix.org/" target="_blank">还是一句，LCD4Linux</a>的可玩性非常高，说技术性嘛，不算高也不算低吧，召唤大家一起玩一起交流哈……</p> ]]></content:encoded> <wfw:commentRss>http://apt-blog.net/the_lcd4linux_project/feed</wfw:commentRss> <slash:comments>22</slash:comments> </item> </channel> </rss>
