[LinuxFocus-icon]
首页  |  站点地图  |  索引  |  搜索

新闻 | 过往期刊 | 链接 | 关于LF
This document is available in: English  Castellano  ChineseGB  Deutsch  Francais  Italiano  Nederlands  Russian  Turkce  

[Photo of the Author]
by Guido Socher (homepage)

关于作者:

Guido喜欢Linux,不仅因为通过Linux可以发掘系统的潜力,而且还在于每个人都能参与其中。


目录:

 

A LCD control panel for your Linux server

[Illustration]

摘要:

在这个设计里,我们将设计一个控制面板。它主要由东芝公司的型号HD44780 的LCD显示和ATMEL公司的AT90S4433单片机(一种8位RISC的单片机)组成。二 种器件都价钱便宜,很容易得到。控制面板包括一个监控计算机的看门狗和两 个按键。通过按键和LCD显示,可以设置ip地址,ip掩码,网关,关机,读一 些统计数据,或者你想得到的任何东西。因为它们其中大多数的逻辑都可以使 用perl实现,很容易更改。

在这个设计里,你至少需要部分的安装linux avr开发环境。关于如何建立这个环境,在 Programming the AVR Microcontroller with GCC中有描述。

 

简介

这个装置的硬件基本功能已经在前面的文章中实现: 在我们的设计中,我们会走的更远。它增加了按键以便和用户交互,还包括一个监控 服务器的硬件的看门狗。在硬件设计中,还预留了一个模拟输入端。在这里我们没有 使用它,但是你可以链接一个比如象温度传感器之类的东西。

这个设计需要一点电子爱好者的技巧。整个的花费不是很多,不到40欧元的样子。

这个设计的意义在于在没有键盘和显示器的情况下,你能设置服务器。Linux是一 个运行可靠的服务器的操作系统,很容易进行远程控制。问题在于你第一次把Linux连接到 网络时,你必须设置它的ip地址,ip掩码和网关。这个Lcd控制面板会帮你做这些事情的。 如果你在服务器旁边,你还可以通过它把服务器关机。  

你需要啥?

下面是建立这个系统所需物品的清单:

1 个 Atmel At90S4433 单片机
1 个28脚 7.25 mm IC 插座
1 个 16脚 IC 插座
1 个 MAX232
1 个 小的 5V 继电器
1 个4MHz 晶振
2 个 LED (绿色和红色个一)
1 个 BC547 NPN 三极管
1 个BC557 PNP 三极管
4 个1uF 电容 (普通或电解)
2 个 27pF陶瓷电容
1 个 10nF电容
1 个100nF电容
3 个 电阻 4k7
2 个 电阻 2k2
1 个 电阻 10K
1 个 电阻 3k3
2 个 电阻 100 欧姆
3 个 电阻 470 欧姆
3 个 电阻 1k
1 个 电阻 220 Ohm
1 个 4K7 变阻器(越小越好)
1 个 4.3V稳压管
2 个 小的触摸按键
1 个 小封装的标准的二极管 (比如 1N4148,或者其他便宜的二极管)
1 个 2 行 ×20 字符的带有 HD44780 兼容接口的 LCD 液晶模块

我所见过的HD44780兼容的LCD一般是14线或16线接口。如果你是用3线或4线接口, 你需要改动软件的相应部分。

另外你还应该有为电源和RS232口准备的连线和插头。 如果你有2个显示线,你可以把它安装在薄铝片上,然后固定到服务器的5.25英寸的槽上。  

电路原理图和pcb图

我使用angle软件在linux系统下制作的原理图和pcb图。它是一个很棒的软件,但是如果你不 会使用的话,需要花一点时间学习它。 你可以在 cadsoftusa.com得到一个免费的版本。

原理图(点击可以得到一个大的图片):
[Schematic]

印制板 (点击可以得到一个大的图片):
[board]


如果你想打印的话,这里由白色背景的PCB图: 白色背景的印制板 (注意:这个不是你做PCB板所需的文件)

angle文件如下:(gzip压缩,注意有些浏阅器在下载的同时已经解压的情况)  

电路原理

我简单介绍一下电路的工作原理。单片机AT90S4433有3个部分:PB,PC和PD。PC可以用做数字或模拟输入。所有的端口 线可以用作数字输入或数字输出。输入还是输出由软件通过设置DDR(数据方向寄存器)来实现。我们把除23脚以外的端 口线都用作数字输入或输出。Max232是一个电平转换器。RS232接口使用正负10V,Max232把它转换为0~5V。在1脚 (RESET脚)你可以看到持续低电平(brownout)电路。这个电路在电源不足的情况下保持RESET脚低电平有效,防止单 片机误操作。这会在启动和关机的几毫秒内会发生。这会保证系统会正常启动。

你也许会奇怪和继电器线圈端并行的二极管,从极性上看来好像它不会起任何作用。不,它很重要!当你接通继电器线 圈的时候,它会产生和接通方向相反的高压。没有二极管把高压导通,高压会损坏电路的。这个二极管很重要,虽然它很普通。  

如何制作印制板

为了蚀刻电路印制板,你首先需要在一个透明的绝缘体上打印这个postscript 文件 (linuxlcdpanel.ps.gz)。 在商店里你可以找到一种叫做Sinolit的半透明塑料。它是由Regulus生产,一般用来打印后处理(offset printing)。 另一种替代品是60g的纸加透明的喷头(比如来自Kontakt Chemie的 pausklar 21)。
我已经把postscript格式的文件转换成了 PDF 这是为了你没有postscript 打印系统的话。不过质量很差劲。

铜箔板曝光的时间依赖于光源。在正常的室内条件下,应该在1到2分钟之间。当然你可以在室外不过你一定 避免直接的日光曝晒(光太强了)。你可以在真正使用的板子之前用一块小角反复试验一下,来得到最佳的曝光 时间。
[before etching]
曝光的在蚀刻之前的板子


接下来板子需要在NaOH液体里浸泡几分钟。然后仔细检查一下,通过780黑色油漆标记校准一下。我总是 把孔做的大一点,因为我发现ANGEL软件的焊盘的孔对于制作敷铜电路板来说太小了。
[after etching]
未打孔的已经制作完成的板子


注意:不知怎地,继电器厂家在封装上没有达成一致。我使用5v的由Matsushita生产的继电器。 你的继电器也许和我的不一样因此你需要把你的电路板改动一下。

如果你想得到很好的结果,你可以使用氯化铁(FeCl3)。氯化铁在室温条件下,蚀刻的成功率 是很高的,它很好掌握很适于室内操作。你如果把你的板子直立放置在一个高的容器里,你会得到最 好的效果。铜离子比铁离子重,如果你把氯化铁倒入一个小平底桶里面,铜离子会聚集到桶底,你的板 子就放在那儿。

在板子好了之后,你使用 松节油把板子清洗。它当你焊接的时候,会蒸发掉,这保护铜箔。  

单片机端软件

单片机端软件组织成以下几个文件: 如果你想详细的了解软件,我推荐你读一下单片机的说明文档(datasheet)。在文章的 附录部分你可以看到它,或者直接到 http://www.atmel.com/ 查找。
如果你只是想使用它,你可以从(download page) 下载linuxlcdpanel-0.7.tar.gz,然后解压到一个目录,输入如下命令:

make
make load

或者直接使用已经编译的软件在命令行上执行它。很容易的。 你可以在这个网页的第一篇文章里看到AVR如何编程 Programming the AVR Microcontroller with GCC.  

检验LCD控制面板

LCD控制面板使用计算机的内部的5V电源。但是LCD控制面板第一次联机时,不能使用 计算机电源。因为你会在焊接和安装的过程中会犯一些小错误。因为计算机的电源功 率强劲,你要是真犯了在联机时你会看到电路和计算机黑烟腾起。第一步是使用外部 电源测试它的电气的稳定性,然后下载软件到EPROM中。之后你会在LCD上看到"linux .org"图标。在下来,连接串口:

MAX232 pin 14 to CTS (DB-9 pin 8)
MAX232 pin 7 to RXD (DB-9 pin 2)
MAX232 pin 13 to TXD (DB-9 pin 3)
你也要把 DTR,DSR 和 CD连接到相应的 (DB-9 pin 4, 6 and 1)。

这可以参见原理图。

[talking to the LCD panel over the serial line] 在使用串口之前必须初始化它。linuxlcdpanel-0.7.tar.gz的归档目录有一个ttydevinit, 做的就是这件事。如果你的控制面板连接到串口2。你需要键入以下命令:

./ttydevinit /dev/ttyS1

这样你的串口驱动初始化为9600bps,你可以同你的控制面板"对话"了。打开2个XTERM的 窗口,在其中一个键入"cat /dev/ttyS1",另一个"cat >/dev/ttyS1"。现在你可以键入 命令比如,l=11 (打开 LED 1)或者 l=10 (关闭LED 1)。你在一个XTERM窗口中看到返回 的状态信息"OK"。
所有的命令在 README.commands 中有解释。

在源代码的目录中,有一个文件名为ttytest.pl的PEAL程序,它只是每隔一段 时间就打开和关闭LED1。它只是一个演示如何控制LCD控制面板的例子程序。你可以以 它为基础编写你自己的程序。看一下它的源程序,它学要一些PEAL的基础知识,不过它 很短。  

连接看门狗

看门狗缺省设置是关闭的。你可以使用命令w=1激活它或使用命令s=x(x=0,1,2,。。, 255)设置溢出时间。比如s=10表示计数器溢出的时间是16×10秒。服务器端程序需要周期 的设置s以免看门狗溢出重启服务器。我知道Linux服务器很少当机的。但是如果当机而且 附近没有人按RESER键,或者没有知道它在那里,因为它已经2年没有问题,这时看门狗的 作用就会发挥了。

看门狗的重启只动作一次。这避免了在启动中系统检查文件系统时被再次重启的 错误。启动后你的服务器端的程序应该激活它。

在连线上,你需要把连接重启(RESET)按键的2根连线旁边再并2根连线,另一 端接到控制面板的看门狗驱动的继电器端。  

怎么使用看门狗?

看门狗保证系统能够执行程序,不能保证一个服务器或数据库在运行或做出响应。如果你 想检查这类事情你应该运行crontab entry或类似的程序。你很肯定crontab一般不会出问 题,看门狗则假定软件会正常运行。

你可以设计一个脚本,每隔15分钟下载自己服务器的一个页面。不过你要小心, 如果你的服务器访问量很大,很可能你的请求会的不到应答。这样你要估计一下,比如 最后的10次请求没有得到应答,你就重启机器或者标准重启(重启核心)(区别于"硬件重启")。

除此之外的应用就是监视磁盘使用空间。 下面的shell命令在你的硬盘使用达到80%的时候会返回某些数据:

df | egrep ' (8.%|9.%|100%) '

这个也可以和crontab entry联合起来使用。  

服务器上的脚本

实现LCD控制面板的逻辑由PEAL实现,它的文件名是llp.pl。拷贝这个程序到/usr/sbin/。 下一步拷贝ttydevinit到/usr/bin,拷贝ifconfig_llp.txt(在源代码归档目录的etc目录下) 到/etc中,编辑ifconfig_llp.txt把地址改成你需要的:

NETMASK=255.255.255.0
IPADDR=10.0.0.4
GATEWAY=10.0.0.2

把/etc/rc.d/init.d/network做备份,拷贝源代码归档目录下的etc/network到 /etc/rc.d/init.d/network。这个脚本和目录名称只在RedHat和Mandrake中有效。 etc/network_all_distributions是一个更基本的脚本,可以工作在任何的发布 的版本中。但是你必须指出init-rc在你的linux发布版本中的位置。这一点在 各个发布版本有些许的差异。

编辑/etc/rc.d/init.d/network文件把下面一行改成

/usr/sbin/llp.pl /dev/ttyS1&

如果你没有使用串口2的话。

现在你可以运行

/etc/rc.d/init.d/network start

观察一下LCD的反应。注意:它保存后会发挥作用而且会改变网络设置,但这些变化 只有在下次重启中发挥作用。你可以改回从前的设置或者编辑/etc/ifconfig_llp.txt 撤销你的改变。  

Log files

在llp.pl脚本中,写了一个LOG文件到/var/log/llp.log。这个LOG文件生长的很慢。 基本上不用使用翻转(rotate)的方法。如果你要使用的话,你自己可以编写相应 的程序。后翻转(post rotate)这里也没有涉及到。翻转文件的配置文件如下的样子:

/var/log/llp.log {
nocompress
monthly
}

手动关机,改变网络地址(ip,网管,掩码),还有硬件看门狗的触发重启动 这些动作都会被LOG文件登记下来。当然,当系统当机的时候,你肯定不能登记 看门狗的触发动作不过你可以在下次启动时把它登记下来。  

控制面板的操作

这里有一些LCD操作的截屏,不是全部的,你可以自己来试试。

主屏幕。显示一些名字(这里是"LINUXFOCUS"),时间,负载。这会周期的更新的。
[main]

IP设置菜单
[IP configuration menu]

IP地址正在修改的例子
[change IP]

如何改变网关地址(缺省的路由)
[GW]  

结论

[the final panel] 设计LCD控制面板需要一点电子爱好者的技术,但是电路是简单的。我们的LCD控制面板 是我所见过的功能最强大的并且很通用和廉价。 焊接愉快 :-)
 

对这篇文章发表评论

每篇文章都有各自的反馈页面。在这个页面里,您可以提交评论,也可以查看其他读者的评论:
 反馈页面 

主页由LinuxFocus编辑组维护
© Guido Socher, FDL
LinuxFocus.org

点击这里向LinuxFocus报告错误或提出意见
翻译信息:
en --> -- : Guido Socher (homepage)
en --> zh: Zhangcz <zczxyz(at)sina.com>

2002-03-22, generated by lfparser version 2.27