<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//ES">
<HTML>
<HEAD>
 <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <META NAME="GENERATOR" CONTENT="lfparser_2.21">
 <META NAME="LFCATEGORY" CONTENT="Hardware">
<!-- this is used by a number of tools:
 =LF=AUTHOR: Guido Socher
 =LF=CAT___: Hardware
 =LF=TITLE_: Un panel de control LCD para tu servidor Linux
 =LF=NUMBER: 236
 =LF=ANAME_: article236.html
 -->
 <TITLE>lf236, Hardware: Un panel de control LCD para tu servidor Linux</TITLE>
<!-- stylesheet added by lfparser: --> 
<style type="text/css">
<!--
 td.top {font-family: Arial,Geneva,Verdana,Helvetica,sans-serif; font-size:12 }
 pre { font-familiy:monospace,Courier }
 p.cl { color:#EE9500 }
 a.nodec { text-decoration:none }
 p.trans { font-size:8pt; text-align:right }
 p.clbox { width:50%; alignment:center; background-color:#FFD700; border-style:none; border-width:medium; border-color:#FFD700; padding:0.5cm ;  text-align:center }
 p.code { width:80%; alignment:center; background-color:#aedbe8; border-style:none; border-width:medium; border-color:#aedbe8; padding:0.1cm ;  text-align:left }
 p.foot { background-color:#AAAAAA; color:#FFFFFF; border-style:none; border-width:medium; border-color:#AAAAAA; padding:0.5cm ; margin-top:0.1cm; margin-right:1cm; margin-left:1cm; text-align:center }
-->
</style>
 
</HEAD>
<BODY bgcolor="#ffffff" text="#000000">
 <!-- this is generated html code. NEVER use this file for your
 translation work. Instead get the file with the same article number
 and .meta.shtml in its name. Translate this meta file and then
 use lfparser program to generate the final article -->
 <!-- lfparser can be obtained from http://www.linuxfocus.org/~guido/dev/lfparser.html -->

<!-- 2pdaIgnoreStart -->

<!-- start navegation bar -->
 <!-- top navegation bar -->
 <TABLE cellspacing="0" cellpadding="0" border="0" align="center" width="90%">
   <TR bgcolor="#2e2292">
     <TD class="top"><TABLE cellspacing="0" cellpadding="0" border="0" width=
       "100%">
         <TR><TD width="144"><IMG src="../../common/images/logolftop.gif"
           alt="[LinuxFocus-icon]" width="350" height="45" align="left" 
           border="0"></TD>

           <TD class="top">
             <TABLE width="100%">
               <TR align="right">
                 <TD class="top"><A class="nodec" href="../index.shtml"><FONT color=
                 "#DDDDDD" size="-1">Hogar</FONT></A> &nbsp;|&nbsp; <A class=
                 "nodec" href="../map.html"><FONT color=
                 "#DDDDDD" size="-1">Mapa</FONT></A> &nbsp;|&nbsp; <A class=
                 "nodec" href="../indice.html"><FONT color=
                 "#DDDDDD" size="-1">Indice</FONT></A> &nbsp;|&nbsp; <A class="nodec" href="../Search/index.html"><FONT color=
                 "#DDDDDD" size="-1">Busqueda</FONT></A> </TD>
               </TR>

               <TR align="right">
                 <TD class="top">
                   <HR width="100%" noshade size="1">
                 </TD>
               </TR>
             </TABLE>
           </TD>
         </TR>
       </TABLE>
     </TD>
   </TR>
 </TABLE>
 <!-- end top navegation bar -->
 <!-- blue bar -->
 <TABLE cellspacing="0" cellpadding="0" border="0" align="center"
 width="90%">
   <TR bgcolor="#00ffff">
     <TD><IMG src="../../common/images/transpix.gif" width="1" height=
     "2" alt=""></TD>
   </TR>
 </TABLE>
 <!-- end blue bar -->
 <!-- bottom navegation bar -->
 <TABLE cellspacing="0" cellpadding="0" border="0" align="center"
 width="94%">
   <TR bgcolor="#000000">
     <TD>
       <TABLE cellspacing="0" cellpadding="1" border="0" width=
       "100%">
         <TR align="center">
           <TD WIDTH="20%"><A class="nodec" href="../News/index.shtml"><FONT color=
           "#FFFFFF">Noticias</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../Archives/index.html"><FONT color=
           "#FFFFFF">Arca</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../Links/index.html"><FONT color=
           "#FFFFFF">Enlaces</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../aboutus.html"><FONT color=
           "#FFFFFF">Sobre LF</FONT></A> </TD>
         </TR>
       </TABLE>
     </TD>
   </TR>
 </TABLE>
 <!-- end bottom navegation bar -->
<!-- stop navegation bar -->

<!-- SSI_INFO -->

<!-- tr_staticssi include virtual -->
<!-- tr_staticssi exec cmd -->
<!-- addedByLfdynahead ver 1.5 --><TABLE ALIGN="right" border=0><TR><TD ALIGN="right"><FONT SIZE="-1" FACE="Arial,Helvetica">Este documento est&aacute; disponible en los siguientes idiomas: <A href="../../English/May2002/article236.shtml">English</a> &nbsp;<A href="../../Castellano/May2002/article236.shtml">Castellano</a> &nbsp;<A href="../../ChineseGB/May2002/article236.shtml">ChineseGB</a> &nbsp;<A href="../../Deutsch/May2002/article236.shtml">Deutsch</a> &nbsp;<A href="../../Francais/May2002/article236.shtml">Francais</a> &nbsp;<A href="../../Italiano/May2002/article236.shtml">Italiano</a> &nbsp;<A href="../../Nederlands/May2002/article236.shtml">Nederlands</a> &nbsp;<A href="../../Russian/May2002/article236.shtml">Russian</a> &nbsp;<A href="../../Turkce/May2002/article236.shtml">Turkce</a> &nbsp;</FONT></TD></TR></TABLE><br>
 


<!-- SSI_INFO STOP -->
<!-- 2pdaIgnoreStop -->

<!-- SHORT BIO ABOUT THE AUTHOR -->
<TABLE ALIGN=LEFT BORDER=0  WIDTH="30%" >
<TR>
<TD>

<!-- 2pdaIgnoreStart -->
<!-- PALM DOC -->
<TABLE BORDER=0 hspace=4 vspace=4> <TR> <TD>
<font size=1> <img src="../../common/images/2doc.gif" width=34 align=left border=0 height=22 alt="convert to palm"><a href="http://cgi.linuxfocus.org/cgi-bin/2ztxt">Convert to GutenPalm</a><br>or <a href="http://cgi.linuxfocus.org/cgi-bin/2pda">to PalmDoc</a></font>
</TD> </TR> </TABLE>
<!-- END PALM DOC -->
<!-- 2pdaIgnoreStop -->
<br>
<IMG src="../../common/images/Guido-S.gif" alt="[Photo of the Author]" height="164" width="173">
<BR>por  Guido Socher <a href="http://linuxfocus.org/~guido/"><font size="1">(homepage)</font></a>
<BR><BR>
<I>Sobre el autor:</I><BR>
<P>
Guido ama Linux, no solo porque es divertido descubrir las grandes
posibilidades de estos sistemas, sin&oacute; tambi&eacute;n por la gente involucrada
en su dise&ntilde;o.
</P>
<!-- TRANSLATED TO es -->
<BR><BR><I>Taducido al espa&ntilde;ol por:</I><BR>
Alberto Clifton Goldney <small>&lt;sauronx00(at)yahoo.com&gt;</small>
<br>
<!-- TRANSLATED TO STOP -->
<BR><i>Contenidos</i>:
<UL>
  <LI><A HREF="#236lfindex0">Introducci&oacute;n</A></LI>
  <LI><A HREF="#236lfindex1">Qu&eacute; necesita?</A></LI>
  <LI><A HREF="#236lfindex2">Esquema y placa</A></LI>
  <LI><A HREF="#236lfindex3">El circuito</A></LI>
  <LI><A HREF="#236lfindex4">Como hacer la placa del circuito impreso</A></LI>
  <LI><A HREF="#236lfindex5">El software para el Microcontrolador</A></LI>
  <LI><A HREF="#236lfindex6">Comrobando el panel LCD</A></LI>
  <LI><A HREF="#236lfindex7">Conectando el dispositivo de vigilancia</A></LI>
  <LI><A HREF="#236lfindex8">C&oacute;mo utilizar el dispositivo de vigilancia</A></LI>
  <LI><A HREF="#236lfindex9">Los scripts en el Servidor</A></LI>
  <LI><A HREF="#236lfindex10">Archivos de Log</A></LI>
  <LI><A HREF="#236lfindex11">El panel en operacion</A></LI>
  <LI><A HREF="#236lfindex12">Conclusion</A></LI>
  <LI><A HREF="#236lfindex13">References</A></LI>
  <LI><A HREF="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=236&amp;lang=es">Formulario de "talkback" para este art&iacute;culo</A></LI>
</UL>

</TD></TR></TABLE>
<!-- HEAD OF THE ARTICLE -->
<br>&nbsp;
<H2>Un panel de control LCD para tu servidor Linux</H2>
 <IMG src="../../common/images/article236/pic03_finalpanel_th.jpg" width="129" height="108" alt="[Illustration]" hspace="10">
<!-- ABSTRACT OF THE ARTICLE -->
<P><i>Resumen</i>:
<P>
<P>
En este art&iacute;culo vamos a dise&ntilde;ar un panel de control LCD basado en un
visor LCD Hitachi HD44780 y el Microcontrolador RISC AT90S4433 AVR 8-Bit
de Atmel. Ambos componentes son muy comunes y baratos. El panel de control
incluye un dispositivo de vigilancia que supervisa la computadora y tiene
dos botones para facilitar el di&aacute;logo con el usuario.
<BR>
Puedes setear direcciones IP, mascaras de red, direcciones de pueras de
enlace, apagar la computadora, leer estad&iacute;sticas, b&aacute;sicamente cualquier
cosa que quiera, porque la mayor&iacute;a de la l&oacute;gica es implementada con un
conjunto de instrucciones (script) en perl y puede ser modificado facilmente.
El panel est&aacute; conectado a la computadora a trav&eacute;s de una linea serie RS232. <BR><BR>
Para este art&iacute;culo necesitar&aacute; por lo menos una instalaci&oacute;n parcial del entorno
de desarrollo para Linux AVR. La configuraci&oacute;n de esto est&aacute; descripto en este
art&iacute;culo: <A href="../March2002/article231.shtml">Programando el Microcontrolador
AVR con GCC</A>.
</P></P>
<HR size="2" noshade align="right"><BR>
<!-- BODY OF THE ARTICLE -->


<A NAME="236lfindex0">&nbsp;</A>
<H2>Introducci&oacute;n</H2>

Este dispositivo b&aacute;sicamente combina funcionalidades de hardware que
fueron utilizadas en art&iacute;culos anteriores:

<UL>
  <LI><A href="../July2000/article165.shtml">Utilizando un visor LCD a trav&eacute;s
  de una l&iacute;nea Serial bajo Linux</A></LI>

  <LI><A href="../January2001/article186.shtml">Una computadora de l&iacute;nea serial
  con boton de apagado y LED.</A></LI>
</UL>
Nuestro nuevo dise&ntilde;o sin embargo va mucho mas all&aacute; de eso. Incluye botones para
interactuar con el usuario e incluye un dispositivo de vigilancia por hardware
para supervisar al servidor. Como ampliaci&oacute;n, el hardware provee una l&iacute;nea de
ingreso anal&oacute;gica. No la utilizaremos aqu&iacute;, pero usted puede conectarle por ej.:
un sensor de temperatura. <BR>
<BR>
Para dise&ntilde;arlo, necesitar&aacute; algunos elementos de hobby electr&oacute;nico. Los elementos que
utilizaremos son baratos, y el costo total, ser&aacute; menor a 40 euros. <BR>
<BR>
La idea detr&aacute;s de este panel es que va a permitirle controlar un servidor sin monitor
ni teclado. Linux es un sistema operativo servidor muy confiable y puede ser facilmente
controlado remotamente. Sin embargo cuando uno se conecta por primera vez a una red,
necesitar&aacute; configurar la direcci&oacute;n IP, puerta de enlace, y la mascara de red. Este panel
de control permite configurar estas direcciones. Brinda igualmente la posibilidad de
apagar el servidor mientras se est&aacute; dentro del cuarto de servidores. <BR>
<BR>
El dise&ntilde;o de este panel es muy gen&eacute;rico. Todas las partes "especificas del servidor"
est&aacute;n implementadas en un conjunto de instrucciones (script) en perl. El hardware completo,
el estado de los botones, el texto en la pantalla, LEDs ..., pueden ser controlados a trav&eacute;s
de comandos ASCII. Por eso usted puede usar el dise&ntilde;o para construir un reproductor mp3, o
para controlar su grabadora de CD, o cualquier cosa que quiera.

<A NAME="236lfindex1">&nbsp;</A>
<H2>Qu&eacute; necesita?</H2>

Para contruir esto usted necesita los siguientes componentes:

<P class="code">1 x Atmel At90S4433 Microcontrolador<BR>
1 x 28pin 7.25 mm IC z&oacute;calo<BR>
1 x 16pin IC z&oacute;calo<BR>
1 x MAX232<BR>
1 x small 5V rel&eacute;<BR>
1 x 4MHz cristal<BR>
2 x LEDs (verde y rojo)<BR>
1 x BC547 NPN transistor<BR>
1 x BC557 PNP transistor<BR>
4 x 1uF capacitor (com&uacute;n o polarizado)<BR>
2 x 27pF capacitor cer&aacute;mico<BR>
1 x 10nF capacitor<BR>
1 x 100nF capacitor<BR>
3 x resistencia 4k7<BR>
2 x resistencia 2k2<BR>
1 x resistencia 10K<BR>
1 x resistencia 3k3<BR>
2 x resistencia 100 Ohm<BR>
3 x resistencia 470 Ohm<BR>
3 x resistencia 1k<BR>
1 x resistencia 220 Ohm<BR>
1 x 4K7 potenci&oacute;metro (lo m&aacute;s peque&ntilde;o posible)<BR>
1 x Z-diodo 4.3V<BR>
2 x botones al tacto peque&ntilde;os<BR>
1 x diodo standard peque&ntilde;o (e.g 1N4148, cualquier diodo barato)<BR>
1 x 2 lineas de 20 car&aacute;cteres LCD pantalla con HD44780 interface compatible.<BR><BR>
Todas las pantallas LCD que he visto con 14 o 16 pins en el conector eran compatibles
con el HD44780. Igualmente usted puede utilizar una pantalla de 3 o 4 lineas pero luego
necesitar&aacute; modificar un poco el software.</P>
Adem&aacute;s de eso usted necesitar&aacute; algunos cables y conectores para la fuente de poder y el
RS232. Si tiene una pantalla de 2 l&iacute;neas entonces usted puede montarla en una fina hoja
de metal de aluminio y encajarla en una bah&iacute;a de 5.25" en el servidor.

<A NAME="236lfindex2">&nbsp;</A>
<H2>Esquema y placa</H2>

Utilic&eacute; "eagle" para Linux para dise&ntilde;ar el esquema y la placa. Es un software excelente
pero necesitar&aacute; alg&uacute;n tiempo para aprender como utilizarlo. Puede obtener la versi&oacute;n
gratis para uso particular en <A href="http://www.cadsoftusa.com/">cadsoftusa.com</A>. <BR>
<br>
El esquema (haga click para una imagen mayor):<BR>
<A href="../../common/images/article236/linuxlcdpanel_schematic_big.gif"><IMG
 src="../../common/images/article236/linuxlcdpanel_schematic_small.gif"
width="448" height="267" alt="[Schematic]"></A> <BR>
<BR>
La placa (haga click para una imagen mayor):<BR>
<A href=
"../../common/images/article236/linuxlcdpanel_board.gif"><IMG src=
"../../common/images/article236/linuxlcdpanel_board_small.gif"
width="442" height="395" alt="[board]"></A> <BR>
<BR>
<BR>
Distribuci&oacute;n de la placa con fondo blanco para una mejor impresi&oacute;n:
<A href="../../common/images/article236/linuxlcdpanel_board_white.gif">
placa con fondo blanco</A> <small>(Nota: Este no es el archivo que
necesita para realizar la placa del circuito impreso.)</small><BR>
<BR>
Los archivos de "Eagle" (comprimidos con gzip, algunos navegadores inteligentes
los descomprimiran durante la bajada):
<UL>
  <LI><A href=
  "../../common/src/article236/linuxlcdpanel.brd.gz">linuxlcdpanel.brd.gz</A></LI>

  <LI><A href=
  "../../common/src/article236/linuxlcdpanel.sch.gz">linuxlcdpanel.sch.gz</A></LI>
</UL>

<A NAME="236lfindex3">&nbsp;</A>
<H2>El circuito</H2>

Voy a explicar brevemente el siguiente diagrama del circuito. El AT90s4433 tiene
3 puertos: PB, PC y PD. PC puede ser utilizado como un puerto de ingreso tanto
anal&oacute;gico como digital. Todos los puertos pueden ser utilizados como l&iacute;neas
digitales de ingreso o de salida. Esto es controlado por programa v&iacute;a la DDR
(Registro de direcci&oacute;n de datos). Utilizaremos todos los pines para l&iacute;neas
digitales (0 o 5 voltios), excepto la 23. El Max232 es un convertidor de nivel
de voltaje.  La interface RS232 utiliza +-10V y el Max232 convierte esto a 0-5V.
En la pin 1 (pin de reset) del AT90S4433 encontrar&aacute; algo denominado circuito
de "apagado parcial". Este circuito mantiene el reset bajo (activo) durante los
momentos de insuficiente carga electrica para prevenir a la CPU de ejecutar intrucciones
erroneas o mal funcionamiento general. Esto puede suceder por unos pocos milisegunodos
durante el encendido y el apagado. Asegura basicamente que el programa en el
Microcontrolador es inicializado correctamente.
<br><br>Algunos de ustedes se preguntaran porqu&eacute; hay un diodo en paralelo a la bobina
del rel&eacute; y porque la polaridad tal como se v&eacute;, nunca va a tener nada que hacer. Este
diodo es muy importante! Cuando apaga el rel&eacute;, luego la bobina genera un voltaje muy
grande. Este puede destruir al Microcontrolador. Este voltaje tiene una polaridad
opuesta al voltaje suministrado en la bobina. El diodo puede ser cualquier diodo peque&ntilde;o
y barato, nada especial, pero es importante tener el diodo.

<A NAME="236lfindex4">&nbsp;</A>
<H2>Como hacer la placa del circuito impreso</H2>

Para grabar la placa del circuito impreso necesitar&aacute; primero imprimir este <A href=
"../../common/src/article236/linuxlcdpanel.ps.gz"> archivo postscript (linuxlcdpanel.ps.gz)
</A> en una l&aacute;mina transparente. En negocios para arquitectos puede obtener algunos l&aacute;minas
plasticas semi-transparentes plastic denominadas Sinolit. Es producido por "Regulus" y es
utilizado normalmente para impresi&oacute;n en offset. Otra buena alternativa es papel de 60 grs.
+ aerosol transparente (pausklar 21 de Qu&iacute;mica Kontakt). La ventaja del papel y el Sinolit es
que el toner de las impresoras Laser realmente se pega en el papel/l&aacute;mina y provee un buen
contraste. <br>
He convertido el archivo postscript a <A href="../../common/src/article236/linuxlcdpanel1.pdf">PDF</A>
en caso de que no tenga un sistema de impresi&oacute;n postscript. La calidad sin embargo es bastante
pobre. <BR>
El tiempo de exposici&oacute;n para las placas fotograficas recubriertas de cobre depende de la fuente
de luz. Una exposici&oacute;n casera normal est&aacute; entre 1 y 2 Minutos.
Usted puede igualmente utilizar luz dia pero intente evitar luz solar directa (es muy fuerte).
Debe experimentar un poco con peque&ntilde;as tiras de placas fotograficas para obtener el mejor
tiempo de exposici&oacute;n antes de utilizar la verdadera placa.

<TABLE border="1" align="right" width="200">
  <TR>
    <TD><A href=
    "../../common/images/article236/pic01_beforeetching.jpg"><IMG
    src="../../common/images/article236/pic01_beforeetching_th.jpg"
    width="188" height="160" alt="[before etching]"></A></TD>
  </TR>

  <TR>
    <TD>La placa expuesta y revelada antes de grabar.</TD>
  </TR>
</TABLE>
<BR>
<BR>
La placa expuesta necesita luego ser revelada por varios minutos en
NaOH (hidr&oacute;xido de sodio - soda c&aacute;ustica). Despu&eacute;s deber&aacute; comprobar
cuidadosamente el resultado y hacer las correcciones con un marcador
Edding 780 negro (no los marcadores permanentes para gastos generales,
es un marcador con real pensamiento pintura). Usualmente realizo los
placas un poco m&aacute;s grande porque encontr&eacute; que los placas de Eagle son
muy peque&ntilde;os para utilizar en hobbys.

<TABLE border="1" align="left" width="160">
  <TR>
    <TD><A href=
    "../../common/images/article236/pic02_boardready.jpg"><IMG src=
    "../../common/images/article236/pic02_boardready_th.jpg" width=
    "149" height="132" alt="[after etching]"></A></TD>
  </TR>

  <TR>
    <TD>La plaqueta confeccionada antes de realizar las orificios</TD>
  </TR>
</TABLE>
<br><br>
Nota: De alg&uacute;n modo parece imposible para los fabricantes ponerse de acuerdo
en y convenciones de nombres para rel&eacute;s. Yo utilic&eacute; un peque&ntilde;o rel&eacute; de 5V
fabricado por Matsushita. Vuestro rel&eacute; puede tener distinta distribuci&oacute;n de
pines por eso cambie la plaqueta seg&uacute;n necesite. (con un marcador de pintura
resistente a la grabaci&oacute;n - grabado -).  (with an etch resistant paint marker).
<BR>
<BR>
Cuando usted est&eacute; satisfecho puede grabar la placa en cloruro f&eacute;rrico (FeCl3).
FeCl3 tiene buena velocidad de grabaci&oacute;n a temperatura ambiente. Es muy f&aacute;cil
de usar y por eso bueno para usar en casa. Usted obtendr&aacute; los mejores resultados
si la placa est&aacute; en posici&oacute;n vertical en un recipiente alto. Los iones de cobres
son m&aacute;s pesados que los iones de hierro y si usted derrama el FeCl3 dentro de un
tubo delgado y plano, luego los iones de cobre se acumular&aacute;n en el fondo, donde
est&aacute; la placa.
<BR>
Cuando la placa este lista, limpie la tinta del marcador Edding con trementina.
Puede dejarle la "tinta" foto resistente. Esta se evaporar&aacute; cuando suelde y proteja
el cobre.

<A NAME="236lfindex5">&nbsp;</A>
<H2>El software para el Microcontrolador</H2>

El software para el Microcontrolador est&aacute; organizado en los siguientes archivos.

<UL>
  <LI><A href="../../common/src/article236/c/index.html">lcd.c, lcd.h,
  lcd_hw.h</A>: Esta es la librer&iacute;a avr LCD gen&eacute;rica. Y est&aacute; basado en el trabajo
  de Peter Fleury (http://jump.to/fleury). Esta versi&oacute;n est&aacute; un poco modificada y
  m&aacute;s flexible. Le permitir&aacute; conectar el hardware LCD a cualquiera de los pines en
  el Microcontrolador. Usted necesitar&aacute; cambiar la definici&oacute;n en el archivo lcd_hw.h.</LI>

  <LI><A href="../../common/src/article236/c/index.html">avr-util.c,
  avr-util.h</A>: funciones para obtener diferentes tiempos de demora.</LI>

  <LI><A href="../../common/src/article236/c/index.html">uart.c, uart.h</A>:
	Esta es una librer&iacute;a para la interface RS232. Utiliza interrupciones por
	hardware. Cada vez un caracter es recibido desde la computadora,
	la funci&oacute;n SIGNAL(SIG_UART_RECV) es ejecutada y los datos copiados desde
	el b&uacute;fer de recepci&oacute;n a un b&uacute;fer de cadena. El lenguaje de comando para
	nuestro panel LCD es dise&ntilde;ado tal que cada comando finalice con un caracter
	de nueva l&iacute;nea. Cuando una nueva l&iacute;nea es encontrada luego una indicador,
	(uart_rx_linecomplete) es establecido y los datos quedan disponibles. Igualmente
	esto significa que usted no debe enviar comandos a la pantalla muy r&aacute;pidamente,
	sino que debe esperar un poco (un milisegundo), luego de cada l&iacute;nea. Cada comando
	va a ser confirmado por un resultado, ok, o err (por error). El programa conductor
	(en perl)puede, por eso utilizar el resultado como un disparador para enviar el
	siguiente comando.</LI>

  <LI><A href="../../common/src/article236/c/index.html">analog.c,
  analog.h</A>: C&oacute;digo para el convertidor anal&oacute;gico digital. Es otra vez el manejo
	de interrupciones (It's again interrupt driven.) Una simple conversi&oacute;n an&aacute;loga a
	digital es comenzada, y luego el programa aguarda por la interrupcion SIG_ADC para
	leer el resultado desde el registro ADC. </LI>


  <LI><A href="../../common/src/article236/c/index.html">hardwarewd.c,
  hardwarewd.h</A>: Este es el dispositivo de vigilancia. Utilizamos el divisor interno
	(divide por 1024) para arrancar al temporizador (timer). El temporizador es un registro
	de 16 bit, cuando obtenemos un "overflow" disminuimos una variable de 8 bit.
	Con un cristal de 4MHz disminuiremos nuestra variable aproximadamente cada 16 segundos.
	El programa en perl se&ntilde;ala que la computadora todavia esta "viva", ajustando la variable
	peri&oacute;dicamente a un valor alto. Si falla al hacer esto (porque la coputadora se "cuelga")
	porque el valor de la variable disminuye todo el tiempo y cuando alcanza cero, el rel&eacute; va
	a realizar un "click-clack" y restablecer&aacute; el hardware del servidor.</LI>

  <LI><A href="../../common/src/article236/c/index.html">linuxlcdpanel.c</A>:
	Este es el programa principal. Va a verificar continuamente por comandos de la interface
	RS232 y eventos del boton.</LI>
</UL>
	Para comprender el software en detalle, recomiendo que usted lea la hoja de datos del
	Microcontrolador. Est&aacute; disponible en la secci&oacute;n de referencia al final del art&iacute;culo
	(o en www.atmel.com)
<br>Sin embargo para utilizar este panel usted no necesita comprender el software, usted
	solo necesita desempaquetar el archivo del c&oacute;digo fuente (tomar el linuxlcdpanel-0.7.tar.gz
	desde <A href="../../common/src/article236/index.html">p&aacute;gina para bajarlo</A>) y escribir:

<P class="code">make<BR>
make load<BR>
<BR>
	O usted igualmente puede utilizar el software pre-compilado y cargarlo con el comando:<BR>
 	make "cargarpreconstruido"</P>

	Muy simple. Encontrar&aacute; una descripci&oacute;n de como programar el Micontrolador en el primer
	art&iacute;culo:<A href="../March2002/article231.shtml">Programando el Microcontrolador con GCC</A>.

<A NAME="236lfindex6">&nbsp;</A>
<H2>Comrobando el panel LCD</H2>

	El panel LCD es dise&ntilde;ado para trabajar con la fuente de poder interna de 5V del servidor
	(cable rojo=5V, cable negro=tierra). Sin embargo no debe conectarlo desde el primer
	momento a la fuente de poder. Usted pudo hacer cometido un peque&ntilde;o error durante la
	soldadura y en el proceso de montaje. La fuente de poder de la computadora es muy fuerte
  y ambos, tu computadora y la plaqueta pueden ingresar en una nobe de humo si cometes un
	error. Primero pru&eacute;bala con una fuente de poder externa, electr&oacute;nicamente limitada y
	estabilizada !. Ahora debe bajar el software a la EEPROM como se describi&oacute; arriba.
	Luego de eso deber&aacute; ver en la pantalla LCD un banner que diga "linuxfocus.org".
	Ahora conecte la interface RS232.


<P class="code">MAX232 pin 14 to CTS (DB-9 pin 8)<BR>
MAX232 pin 7 to RXD (DB-9 pin 2)<BR>
MAX232 pin 13 to TXD (DB-9 pin 3)<BR>
Necesita igualmente conectar DTR, DSR y CD con cada una (DB-9
pin 4, 6 and 1)</P>
Esto igualmente est&aacute; bien documentado arriba en el diagrama del circuito. <BR>
<BR>
<A href="../../common/images/article236/test_with_cat.gif"><IMG
src="../../common/images/article236/test_with_cat_th.gif" width=
"235" height="194" alt=
"[talking to the LCD panel over the serial line]" hspace="5" align=
"right"></A> Para utilizar la l&iacute;nea serie usted necesita inicializarla.
El archivo del c&oacute;digo fuente linuxlcdpanel-0.7.tar.gz contiene un programa
denominado ttydevinit el cual realiza exactamente esta inicializaci&oacute;n.
Vamos a decir que hemos conectado el panel al COM2 (ttyS1) luego necesitar&aacute;
ejecutar una vez el comando:

<P class="code">./ttydevinit /dev/ttyS1</P>
Ahora el controlador de la linea serie es inicializado para utilizar 9600 baudios
y usted puede comenzar a "hablar" con el panel LCD. Abra 2 pantallas Xterm.
En una tipee "cat /dev/ttyS1" y en la otra tipee "cat &gt; /dev/ttyS1". Ahora
puede por ejemplo tipear el comando l=11 (enciende LED 1) or l=10 (apaga LED 1).
Puede ver en la primera sesi&oacute;n (xterm), que el panel LCD reconoce los comandos
con un "ok". <BR>
Todos los comandos disponibles est&aacute;n explicados en el archivo
<A href="../../common/src/article236/c/index.html">README.commands</A> . <BR>
<BR>

El archivo del c&oacute;digo fuente contiene un script perl denominado ttytest.pl
que no hace m&aacute;s que encender y apagar el led rojo a intervalos. Esto quiere
decir que es para ser utilizado como un simple programa de ejemplo que muestra
como manejar el panel LCD. Puede utilizarlo como base para tu propio programa.
Revise el c&oacute;digo fuente. Esto requiere alg&uacute;n conocimiento de perl, pero es
m&aacute;s bien un programa corto.


<A NAME="236lfindex7">&nbsp;</A>
<H2>Conectando el dispositivo de vigilancia</H2>

El dispositivo de vigilancia por defecto est&aacute; apagado. Puede encenderlo con el
comando w=1 y se establece el tiempo de espera con s=x donde x es un valor entre
1 y 255. Ejemplo: s=10 permitir&aacute; que el tiempo de espera del dispositivo de
vigilancia sea 10*16 seg. = 160 seg.
El programa controlador necesita establecer el tiempo de espera periodicamente
para evitar que el dispositivo de vigilancia se dispare. Si el servidor alguna
vez se bloqueara, entonces el programa controlador no va a reestablecer el tiempo
de espera y el dispositivo de vigilancia se disparar&aacute;. Yo conozco servidores
Linux que casi nunca se han colgado. Sin embargo si ellos se cuelgan y quedan
trabados, usualmente no hay nadie en el sitio para presionar el boton de reset o
nadie conoce donde esta el servidor puesto que no hubo problemas con el en los
ultimos 2 a&ntilde;os.<BR>
<BR>
El dispositivo de vigilancia esta dise&ntilde;ado de tal modo que solo se dispar&aacute; una vez.
Esto es para evitar que se dispare nuevamente durante el chequeo del sistema de
archivos que probablemente seguira luego del reseteo. Cuando un servidor levante,
el programa controlador necesita estar listo nuevamente.<BR>
<BR>
Para conectar f&iacute;sicamente el dispositivo de vigilancia necesitara encontrar los 2
cables que van al boton de reset del servidor. Necesita conectar este boton de reset
en paralelo con el rel&eacute; desde el dispositivo de vigilancia.


<A NAME="236lfindex8">&nbsp;</A>
<H2>C&oacute;mo utilizar el dispositivo de vigilancia</H2>

El dispositivo de vigilancia garantiza que el sistema est&aacute; siempre disponible para
ejecutar programas. Esto no garantiza que un Servidor Web o una aplicaci&oacute;n de base
de datos va a continuar corriendo y respondiendo. Para verificar tal cosa deber&aacute;
utilizar una entrada en la tabla de tareas programadas del "cron" u otro programa.
Puede estar realmente seguro que la tabla de cron probablemente est&eacute; trabajando
porque el dispositivo de vigilancia asegura que el software en general est&aacute; todav&iacute;a
ejecut&aacute;ndose.
<BR><BR>
Usted por ejemplo puede dise&ntilde;ar un "script" que sea activado por un "cronjob" y baje
una p&aacute;gina Web del servidor cada 15 minutos, pero tiene que ser cauteloso con eso:
Un servidor Web puede ponerse pesado por muchas solicitudes y luego es normal que no
responda a todas ellas. Por eso debe contar que tan frecuentemente el servidor Web no
responde y si por ejemplo no responde ni una vez entre las 10 comprobaciones se
restaurar&aacute; el servidor Web o lanzar un reboot normal (no un reset a trav&eacute;s del
dispositivo de vigilancia).
<BR><BR>
Aparte de la aplicaci&oacute;n usted debe igualmente monitorear la utilizaci&oacute;n del disco.
Los siguientes comandos shell van a retornar algo s&iacute; una de las particiones del disco
llegara a estar lleno m&aacute;s del 80%:
<p class="code">
df | egrep ' (8.%|9.%|100%) '
</p>
Esto (nuevamente) puede utilizarse en combinaci&oacute;n con una entrada en la tabla de tareas
programadas del "cron", como una comprobaci&oacute;n regular del uso del disco.


<A NAME="236lfindex9">&nbsp;</A>
<H2>Los scripts en el Servidor</H2>

Casi toda la l&oacute;gica de nuestro panel LCD est implementada en un script en perl
denominado llp.pl, copiar este archivo en /usr/sbin/. Despu&eacute;s copie el programa
ttydevinit a /usr/bin y el archivo ifconfig_llp.txt (del directorio etc del archivo
del c&oacute;digo fuente) a /etc. Ahora edite el ifconfig_llp.txt y cambie las direcciones
como necesite:

<P class="code">NETMASK=255.255.255.0<br> IPADDR=10.0.0.4<br>
GATEWAY=10.0.0.2</P>

Ahora realice un backup del script original /etc/rc.d/init.d/network
y copie el script de etc/network del archivo del c&oacute;digo fuente a
/etc/rc.d/init.d/network. Este script y los nombres de directorios son
s&oacute;lo v&aacute;lidos para Redhat y Mandrake. El script etc/network_all_distributions
es m&aacute;s b&aacute;sico y va a funcionar con cualquier distribuci&oacute;n Linux pero
necesitar&aacute; averiguar donde tiene su distribuci&oacute;n Linux los directorios init-rc.
Es ligeramente diferente de distribuci&oacute;n a distribuci&oacute;n.<BR>
<BR>
Edite el archivo /etc/rc.d/init.d/network y cambie la l&iacute;nea

<P class="code">/usr/sbin/llp.pl /dev/ttyS1&amp;</P>
si no utiliza el COM2.<BR>
<BR>
Ahora puede correr

<P class="code">/etc/rc.d/init.d/network start</P>
y ver&aacute; su panel LCD en acci&oacute;n. Nota: es m&aacute;s seguro tocar alrededor y
modificar la direcci&oacute;n IP. Los cambios s&oacute;lo tendr&aacute;n efecto luego del
pr&oacute;ximo reboot. Por eso pru&eacute;belo y luego cambielo nuevamente, antes
de apagar el servidor (igualmente puede editar /etc/ifconfig_llp.txt
para deshacer los cambios).

<A NAME="236lfindex10">&nbsp;</A>
<H2>Archivos de Log</H2>

El script llp.lp escribe un archivo de log /var/log/llp.log. Este log
crecer&aacute; lentamente. Normalmente no habr&aacute; necesidad de rotarlo autom&aacute;ticamente.
Puede rotarlo con un programa como "logrotate" si desea.
No hay necesidad de avisar cuando hubo una rotaci&oacute;n.
Una l&iacute;nea del archivo config para el logrotate puede verse como esto:

<p class="code">
/var/log/llp.log {<br>
    nocompress<br>
    monthly<br>
}<br>
</p>

El log contendr&aacute; entradas cuando el sistema fue apagado manualmente,
una direcci&oacute;n IP fue modificada (IP, GW, netmask) o cuando el hardware del
dispositivo de control dispar&oacute; un reset. Naturalmente puede loggear el tiempo
de espera del dispositivo de vigilancia cuando esto suceda (porque el sistema
se cuelga) pero en su lugar se va a registrar en el proximo encendido)


<A NAME="236lfindex11">&nbsp;</A>
<H2>El panel en operacion</H2>

Aqui hay algunas capturas de pantallas del panel LCD en operacion.
Estas no son todas las funciones ofrecidas por este panel. Hay mas y usted
puede incluir las suyas.<BR>
<BR>
La pantalla principal. Mostrando algun nombre (linuxfocus en este caso),
el tiempo de operacion y de carga. Esto se actualiza periodicamente.<BR>

<IMG src="../../common/images/article236/display_inaction1.jpg"
width="395" height="137" alt="[main]"> <BR>
<BR>
Menu de configuracin de la direccion IP<BR>
<IMG src="../../common/images/article236/display_inaction2.jpg"
width="395" height="127" alt="[IP configuration menu]"> <BR>
<BR>
Ejemplo de una direccion IP que esta siendo modificada<BR>
<IMG src="../../common/images/article236/display_inaction3.jpg"
width="395" height="124" alt="[change IP]"> <BR>
<BR>
Como modificar la direccion del gateway (ruta por defecto)<BR>
<IMG src="../../common/images/article236/display_inaction5.jpg"
width="395" height="128" alt="[GW]">

<A NAME="236lfindex12">&nbsp;</A>
<H2>Conclusion</H2>

<img src="../../common/images/article236/linuxlcdpanelfinal.jpg" width="386"
height="275" alt="[the final panel]" align=right>
Para construir este panel LCD requiere algunas habilidades de hobby
electronico pero no es un circuito muy complejo. Nuestro panel LCD
Linux ofrece mas funcionalidad que otros paneles de control que cualquier
otro que haya visto, y es muy generico y barato. <BR>
<BR>
Feliz soldadura :-)
<br clear="all">
<A NAME="236lfindex13">&nbsp;</A>
<H2>References</H2>


<UL>
  <LI>The uisp AVR programmer software: <A href=
  "http://www.amelek.gda.pl/avr/">www.amelek.gda.pl/avr/</A></LI>

  <LI>El codigo fuente para este articulo<A href=
  "../../common/src/article236/linuxlcdpanel-0.7.tar.gz">linuxlcdpanel-0.7.tar.gz</A>
  . El diagrama del circuito, los archivos de Eagle y pantallas tambien estan incluidas.</LI>

  <LI>Todos los documentos y software <A href="../../common/src/article236/index.html">mencionados en este articulo</A></LI>

  <LI>Documentacion del MAX232 <A href=
  "../../common/src/article236/MAX220-MAX249.pdf">MAX220-MAX249.pdf 448K</A></LI>

  <LI>Documentacion del ST232, una variante barata, frecuentemente vendida en lugar
  del verdadero MAX232 <A href=
  "../../common/src/article236/st232.pdf">st232.pdf 100K</A></LI>

  <LI>Documentacion del Atmel AT90S4433 <A href=
  "../../common/src/article231/avr4433.pdf">avr4433.pdf 2356K</A></LI>

  <LI>Website de Atmel: <A href=
  "http://www.atmel.com/">www.atmel.com/</A></LI>

  <LI>Eagle para Linux <A href=
  "http://www.cadsoftusa.com/">cadsoftusa.com</A></LI>
</UL>
  


<!-- 2pdaIgnoreStart -->
<A NAME="talkback">&nbsp;</a>
<h2>Formulario de "talkback" para este art&iacute;culo</h2>
Cada art&iacute;culo tiene su propia p&aacute;gina de "talkback". A trav&eacute;s de esa p&aacute;gina puedes enviar un comentario o consultar los comentarios de otros lectores
<center>
<table border="0"  CELLSPACING="2" CELLPADDING="1">
 <tr BGCOLOR="#C2C2C2"><td align=center>
  <table border="3"  CELLSPACING="2" CELLPADDING="1">
   <tr BGCOLOR="#C2C2C2"><td align=center>
    <A href="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=236&amp;lang=es"><b>&nbsp;Ir a la p&aacute;gina de "talkback"&nbsp;</b></a>
   </td></tr></table>
</td></tr></table>
</center>

<HR size="2" noshade>
<!-- ARTICLE FOOT -->
<CENTER><TABLE WIDTH="98%">
<TR><TD ALIGN=CENTER BGCOLOR="#9999AA" WIDTH="50%">
<A HREF="../../common/lfteam.html">Contactar con el equipo de LinuFocus</A>
<BR><FONT COLOR="#FFFFFF">&copy; Guido Socher, <a href="../../common/copy.html">FDL</a> <BR><a href="http://www.linuxfocus.org">LinuxFocus.org</a></FONT>
<BR><a href="http://cgi.linuxfocus.org/cgi-bin/lfcomment?lang=es&amp;article=article236.html" target="_TOP">Pinchar aqu&iacute; para informar de alg&uacute;n problema o enviar comentarios a LinuxFocus</A><BR></TD>
<TD BGCOLOR="#9999AA">
<!-- TRANSLATION INFO -->
<font size=2>Informaci&oacute;n sobre la traducci&oacute;n:</font>
<TABLE>
  <tr><td><font size="2">en --&gt; -- : Guido Socher (<a href="http://linuxfocus.org/~guido/"><font size="1">homepage</font></a>)</font></td></tr>
  <tr><td><font size="2">en --&gt; es: Alberto Clifton Goldney &lt;sauronx00(at)yahoo.com&gt;</font></td></tr>
</TABLE>
</TD>
</TR></TABLE></CENTER>
<p><font size=1>2002-08-26, generated by lfparser version 2.21</font></p>
<!-- 2pdaIgnoreStop -->
</BODY>
</HTML>