<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//IT">
<HTML>
<HEAD>
 <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <META NAME="GENERATOR" CONTENT="lfparser_2.25">
 <META NAME="LFCATEGORY" CONTENT="Hardware">
<!-- this is used by a number of tools:
 =LF=AUTHOR: Guido     Socher
 =LF=CAT___: Hardware
 =LF=TITLE_: Un pannello di controllo LCD per il Vostro server Linux
 =LF=NUMBER: 236
 =LF=ANAME_: article236.shtml
 -->
 <TITLE>lf236, Hardware: Un pannello di controllo LCD per il Vostro server 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 summary="topbar_1" cellspacing="0" cellpadding="0" border="0" align="center" width="90%">
   <TR bgcolor="#2e2292">
     <TD class="top"><TABLE summary="topbar_1_logo" cellspacing="0" cellpadding="0" border="0" width=
       "100%">
         <TR><TD width="319"><IMG src="../../common/images/logolftop_319x45.gif"
           alt="[LinuxFocus-icon]" width="319" height="45" align="left" 
           border="0"></TD>

           <TD class="top">
             <TABLE summary="topbar_1_links" width="100%">
               <TR align="right">
                 <TD class="top"><A class="nodec" href="../index.shtml"><FONT color=
                 "#DDDDDD" size="2">Home</FONT></A> &nbsp;|&nbsp; <A class=
                 "nodec" href="../map.html"><FONT color=
                 "#DDDDDD" size="2">Mappa</FONT></A> &nbsp;|&nbsp; <A class=
                 "nodec" href="../indice.html"><FONT color=
                 "#DDDDDD" size="2">Indice</FONT></A> &nbsp;|&nbsp; <A class="nodec" href="../Search/index.shtml"><FONT color=
                 "#DDDDDD" size="2">Cerca</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 summary="topbar_2" 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 summary="topbar_3" cellspacing="0" cellpadding="0" border="0" align="center"
 width="94%">
   <TR bgcolor="#000000">
     <TD>
       <TABLE summary="topbar_3_links" cellspacing="0" cellpadding="1" border="0" width=
       "100%">
         <TR align="center">
           <TD WIDTH="20%"><A class="nodec" href="../News/index.shtml"><FONT color=
           "#FFFFFF">News</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../Archives/index.html"><FONT color=
           "#FFFFFF">Archivo</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../Links/index.html"><FONT color=
           "#FFFFFF">Link</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../aboutus.html"><FONT color=
           "#FFFFFF">Cose 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">Questo documento &egrave; disponibile in: <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="190" >
<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=
    "[Foto dell'autore]" height="164" width="173">
<BR>   Guido Socher <a href="http://linuxfocus.org/~guido/"><font size="1">(homepage)</font></a>
<BR><BR>
<I>L'autore:</I><BR>
<P>Guido adora Linux non solo per il fatto che sia divertente scoprire
    le grandi possibilit&agrave; di questo sistema, ma anche per le persone che
    sono coinvolte nel suo sviluppo.</P>
<!-- TRANSLATED TO it -->
<BR><BR><I>Tradotto in Italiano da:</I><BR>
Toni Tiveron <small>&lt;toni(at)amicidelprosecco.com&gt;</small>
<br>
<!-- TRANSLATED TO STOP -->
<BR><i>Contenuto</i>:
<UL>
  <LI><A HREF="#236lfindex0">Introduzione</A></LI>
  <LI><A HREF="#236lfindex1">Il materiale necessario</A></LI>
  <LI><A HREF="#236lfindex2">Lo schema.</A></LI>
  <LI><A HREF="#236lfindex3">Lo schema elettrico</A></LI>
  <LI><A HREF="#236lfindex4">Creiamo il circuito stampato</A></LI>
  <LI><A HREF="#236lfindex5">Il software per il microcontrollore</A></LI>
  <LI><A HREF="#236lfindex6">Verifica di funzionalit&agrave; del pannello LCD</A></LI>
  <LI><A HREF="#236lfindex7">Colleghiamo il watchdog</A></LI>
  <LI><A HREF="#236lfindex8">Come utlizzare il watchdog</A></LI>
  <LI><A HREF="#236lfindex9">Gli script del server</A></LI>
  <LI><A HREF="#236lfindex10">I file di log</A></LI>
  <LI><A HREF="#236lfindex11">Il pannello al lavoro.</A></LI>
  <LI><A HREF="#236lfindex12">Conclusioni</A></LI>
  <LI><A HREF="#236lfindex13">Bibliografia</A></LI>
  <LI><A HREF="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=236&amp;lang=it">Discussioni su quest'articolo</A></LI>
</UL>

</TD></TR></TABLE>
<!-- HEAD OF THE ARTICLE -->
<br>&nbsp;
<H2>Un pannello di controllo LCD per il Vostro server Linux</H2>
 <IMG src="../../common/images/article236/pic03_finalpanel_th.jpg"
    width="129" height="108" alt="[Illustrazione del progetto]" hspace="10">
<!-- ABSTRACT OF THE ARTICLE -->
<P><i>Premessa</i>:
<P>

    In questo aricolo tratteremo della costruzione di un display LCD
    utilizzato come pannello di controllo basato sul display Hitachi HD44780
    ed il microntrollore, AVR ad 8bit in tecnologia RISC, AT90S4433 della
    Atmel. Entrambi i componenti sono di facile reperibilit&agrave; e non molto
    costosi. Il pannello di controllo comprende la funzionalit&agrave; di watchdog
    per supervisionare il computer medesimo ed ha due pulsanti che
    permettono all'utente di interagire con il sistema. Cos&igrave; potete settare
    l'IP, la maschera di sottorete, l'indirizzo del gateway, spegnere il
    computer, leggere delle statistiche, insomma pi&ugrave; o meno quello che
    desiderate fare in quanto la logica &egrave; implementata per mezzo di uno
    script in perl che pu&ograve; facilmente esser modificato. Questo pannello sar&agrave;
    collegato al vostro server Linux per mezzo di una porta seriale (una
    RS232). <BR><BR>
    Per poter procedere con questo articolo dovete prima aver installato il
    software come descritto nell'articolo intitolato <A
    href="../March2002/article231.shtml">Programmare il microcontrollore
    AVR con GCC</A>.

    </P>
<HR size="2" noshade align="right"><BR>
<!-- BODY OF THE ARTICLE -->


    <A NAME="236lfindex0">&nbsp;</A>
<H2>Introduzione</H2>

    Questo progetto unisce assieme le funzionalit&agrave; di hardware che abbiamo
    gi&agrave; visto in alcuni articoli precedenti:

    <UL>
      <LI><A href="../July2000/article165.shtml">Utilizzare un display LCD
      con un collegamento seriale con Linux
      </A></LI>

      <LI><A href="../January2001/article186.shtml">Spegner il vostro
      computer per mezzo di un pulsante collegato alla porta seriale.</A></LI>
    </UL>
    Questo nostro nuovo progetto tuttavia &egrave; un ulteriore passo avanti
    rispetto alla semplice unione di questi componenti. Difatti aggiungeremo dei tasti che
    permettono all'utente di interagire ed aggiunge la funzionalit&agrave; di
    watchdog hardware per supervisionare il nostro server Linux. In aggiunta
    a tutto ci&ograve; il nostro pannello fornisce una linea di ingresso analogica,
    che noi ora non utilizzeremo. La si potrebbe usare, per esempio, per
    collegare un sensore di temperatura....<BR>
    <BR>
    Per realizzare il tutto &egrave; bene che abbiate delle conoscenze basilari di
    elettronica, &egrave; sufficiente a livello hobby. I componenti che
    utilizzeremo sono economici ed il costo complessivo dovrebbe aggirarsi
    sui 40 Euro. <BR>
    <BR>
    Il concetto alla base di questo pannello &egrave; di dare all'utente la
    possibilit&agrave; di controllore il Vostro server senza l'ausilio n&egrave; di
    tastiera n&egrave; di monitor. Linux &egrave; un sistema operativo molto stabile ed
    affidabile e pu&ograve; facilmente esser controllato da remoto. Tuttavia la
    prima volte che lo collegate alla rete avete la necessit&agrave; di configurare
    un indirizzo IP, il relativo gateway e la sottomaschera di rete. Il
    nostro pannello vi permette di configurare questi indirizzi. Vi d&agrave; anche
    la possibilit&agrave; di spegnere il server mentre siete nella stanza dei
    server. <BR>
    <BR>
    Il design per questo pannello &egrave; generico. Tutte le parti inetenti il
    Server sono implementate per mezzo di uno script in perl. Tutto l'hardware,
    i pulsanti di stato, il testo sul display, i LED... insomma il
    complesso viene controllato attraverso una serie di comandi ASCII. Potete
    tranquillamente utilizzare il progetto per costruire un lettore mp3 o un
    controllo per vostro tostapane... insomma qualsiasi cosa la vostra
    fantasia possa suggerire.

    <A NAME="236lfindex1">&nbsp;</A>
<H2>Il materiale necessario</H2>

    Per assemblare il progetto vi serve il seguente materiale elettronico:

    <P class="code">1 x Miconcotrollore Atmel At90S4433<BR>
    1 x zoccolo 28pin 7.25 mm<BR>
    1 x zoccolo 16pin<BR>
    1 x CI MAX232<BR>
    1 x relay da 5V di piccole dimensioni (meglio se formato ISO DIL)<BR>
    1 x cristallo di quarzo da 4MHz<BR>
    2 x LED (rosso e verde)<BR>
    1 x transistor BC547 NPN<BR>
    1 x transistor BC557 PNP<BR>
    4 x condensatore da 1uF (va bene sia comune che polarizzato)<BR>
    2 x condensatore ceramico da 27pF<BR>
    1 x condensatore da 10nF<BR>
    1 x condensatore da 100nF<BR>
    3 x resistenze da 4k7<BR>
    2 x resistenze da 2k2<BR>
    1 x resistenza da 10K<BR>
    1 x resistenza da 3k3<BR>
    2 x resistenze da 100 Ohm<BR>
    3 x resistenze da 470 Ohm<BR>
    3 x resistenze da 1k<BR>
    1 x resistenza da 220 Ohm<BR>
    1 x trimmer (potenziometro) da 4K7<BR>
    1 x diodo zenerer da 4.3V<BR>
    1 x basetta fotosonsibile monofaccia<BR>
    2 x tasti di piccole dimensioni<BR>
    1 x diodo al silicio comune (per esempio un 1N4148, o altro diodo
    economico)<BR>
    1 x display LCD da 2 righe e 20 caratteri compatibile con HD44780.<BR><BR>
    Tutti i display LCD che io ho sperimentato come compatibili con l'
    HD44780 hanno o 14 o 16 pin. Potete, se volete, utilizzare display a 3 o
    4 righe, nel qual caso dovrete modificare un poco il software.</P>
    In aggiunta a tutto questo vi serviranno alcuni fili e dei connettori di
    alimentazione e per interfacciarsi alla porta seriale RS232. Se
    utilizzerete un display a due righe potrete fissarlo in un piccolo
    telaietto di alluminio delle dimensioni di una periferica da 5.25".

    <A NAME="236lfindex2">&nbsp;</A>
<H2>Lo schema.</H2>

    Io ho utilizzato eagle per linux per disegnare la basetta. Si tratta di
    un ottimo software, ma necessita di prendere un poca di confidenza con
    esso. Potete scaricarne una versione free, solo per uso privato, dal sito
    della <A href="http://www.cadsoftusa.com/">cadsoftusa.com</A>. <BR>
    <BR>
    Lo schema elettrico (click per accedere ad una immagine pi&ugrave; grande):<BR>
    <A href=
    "../../common/images/article236/linuxlcdpanel_schematic_big.gif"><IMG
     src=
    "../../common/images/article236/linuxlcdpanel_schematic_small.gif"
    width="448" height="267" alt="[Schema elettrico]"></A> <BR>
    <BR>
    Il circuito stampato (click per accedere una immagine pi&ugrave; grande):<BR>
    <A href=
    "../../common/images/article236/linuxlcdpanel_board.gif"><IMG src=
    "../../common/images/article236/linuxlcdpanel_board_small.gif"
    width="442" height="395" alt="[Basetta]"></A> <BR>
    <BR>
    <BR>
    La basetta contenente sia le piste che la disposizione dei componenti,
    su <A href="../../common/images/article236/linuxlcdpanel_board_white.gif">
    sfondo neutro </A>, per stamparla pi&ugrave; agilmente:
    <small>(Nota: questo non &egrave; il file che vi serve per creare il layout
    delle piste.)</small><BR>
    <BR>
    I file in formato eagle (compressi con gzip; vi ricordo che alcuni
    browser la decomprimono autmaticamente durante il download):

    <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>Lo schema elettrico</H2>

    Vi spiegher&ograve; brevemente lo schema elettrico. L'AT90S4433 ha 3 porte: PB,
    PC e PD. PC pu&ograve; essere utilizzata come ingresso sia analogico che
    digitale. Tutte le altre porte possono essere utilizzate sia come
    ingresso che uscita sia in digitale che in analogico. Queste
    caratteristiche sono cotrollate per mezzo del software per mezzo della
    DRR (Data Direction Register = registro della direzione dei dati). Noi
    utilizzeremo tutti i pin tranne il 23 che &egrave; solo per linee non digitali (0/
    5Volt - TTL). Il chip MAX232 &egrave; un adattatore di livello. La porta RS232
    utilizza segnali +-10V ed il MAX232 li converte in 0/5V. Sul pin 1
    (pin di reset) dell'AT90S4433 trovate il circuito Brownout. Questo
    circuito mantiene lo stato del reset a livello logico 0 (attivo) per
    prevenire che, nel caso di alimentazione insufficiente, induca la CPU ad
    eseguire erronee istruzioni o indurre ad un malfunzionamento
    generalizzato. Questo potrebbe avvenire per alcuni millisecondi durante
    la fase di accensione o di spegnimento. Potremmo riassumere dicendo che
    questo circuito ci garantisce un avvio del programma in situazione
    pulita.
    <br><br>
    Qualcuno di voi potrebbe chiedersi perch&egrave; quel diodio sia in parallelo
    alla bobina del rel&egrave; e sia collegato in quello strano modo - con la
    polarit&agrave; invertita -. Questo diodo ha una funzione essenziale!
    Allorquando si rilascia il rel&egrave;, la bobina di quest'ultimo
    genera una elevata extratensione che danneggerebbe di sicuro il nostro
    micontrollore. Questa alta tensione ha polarit&agrave; inversa rispetto a
    quella applicata alla bobina. Il diodo non &egrave; un modello particolare ma
    un comune economico diodo, ma di importanza vitale per il nostro cicuito.



    <A NAME="236lfindex4">&nbsp;</A>
<H2>Creiamo il circuito stampato</H2>

    Per incidere il circuito stampato avete bisogno di stampare questo
    <A href="../../common/src/article236/linuxlcdpanel.ps.gz">file postscript
     (linuxlcdpanel.ps.gz)</A> su di un lucido. Lo potete trovare nelle
    eliografie. Di norma viene chiamato Sinolit. Questo prodotto &egrave; della
    Regulus ed &egrave; comunemente usato per la stampa offset. Un'altra ottima
    alternativa &egrave; quella di ricorrere ad un foglio di carta da 60gr/mq ed
    uno spray trasparente (per esempio il pausklar 21 della Kontakt Chemie).
    Il vantaggio nell'utilizzo di una di queste due soluzioni &egrave; che il toner
    di una stampante laser si fissa bene e crea una ottima opacit&agrave; nella
    stampa favorendo un ottima impressione della basetta.
    <BR>
    Ho convertito il file postscript in uno <A href=
    "../../common/src/article236/linuxlcdpanel1.pdf">PDF</A> per coloro che
    non hanno un sistema di stampa postscript. Tuttavia la qualit&agrave; ne
    risente.<BR>
    Il tempo di esposizione della basetta fotosensibile dipende dalla tipo
    di luce che si utilizza. Per una comune lampada solare, di uso casalingo,
    il tempo &egrave; circa di 1-2 minuti. Potete utilizzare anche la luce solare
    ma cercate di evitare una esposizione diretta alla luce (i raggi
    solari sono troppo forti). Vi consiglio di effetture delle prove su dei
    ritagli di basetta prima di esporre alla luce tutta la basetta col
    circuito.

    <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="[Dopo lo sviluppo]"></A></TD>
      </TR>

      <TR>
        <TD>La basetta esposta </TD>
      </TR>
    </TABLE>
    <BR>
    <BR>
    La basetta esposta deve esser sviluppata per alcuni minuti. Dovr&agrave; quindi
    esser immersa in NaOH (idrossido di sodio). Dopo questa operazione
    dovrete controllore attentamente il risultato ed eventualmente apportare
    delle correzioni. Nel caso alcune tracce non siano buone potete
    correggerle per mezzo di pennarelli appositi come l' Eddin 780 (non si
    deve usare pennarelli permanenti ma pennarelli a vernice). Di norma creo
    delle basette leggermente pi&ugrave; grandi di quanto Edge non consigli. Le
    ritengo un poco troppo piccole per un uso hobbistico.

    <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="[dopo l'immersione in acido]"></A></TD>
      </TR>

      <TR>
        <TD>La basetta finita, dopo l'immersione in acido, pronta per la
        foratura</TD>
      </TR>
    </TABLE>
<br><br>
    Nota: Dato che non sembra esservi uno standard per la piedinatura dei rel&egrave;
    potebbe esser necessario modificare leggerlmente il layout dello
    stampato. Io ho utilizzato un rel&egrave; della Matsushita a 5V.

    <BR>
    <BR>
    Allorquando sarete soddisfatti del layout del vostro circuito stampato,
    potrete procede all'acidazione del medesimo con del FeCl3 (Cloruro
    Ferrico). FeCl3 ha una buoan cacapacit&agrave; erosiva a temperatura ambiente.
    Si tratta di un acido semplice da utilizzare anche in ambito casalingo.
    Otterrete risutlati migliori immergendo la basetta in verticale in un
    contenitore lungo e stretto. Dato che gli ioni di rame (Cu+) sono pi&ugrave; pesanti
    degli ioni di ferro (Fe+) alla fine del processo troveremo nel fondo del
    contenitore gli ioni di rame. <BR>
    <BR>
    Quando la basetta &egrave; pronta; ripulitela con della trementina per rimuovere
    le correzzioni effettuate con il pennarello. Potete lasciare la
    pellicola fotosensibile sulle piste. Essa evaporer&agrave; naturalmente quando
    andrete a saldare, offrendo cos&igrave; una protezione per le piste di rame.

    <A NAME="236lfindex5">&nbsp;</A>
<H2>Il software per il microcontrollore</H2>

    Il software per il microcontrollore &egrave; composto dai seguenti file:

    <UL>
      <LI><A href="../../common/src/article236/c/index.html">lcd.c, lcd.h,
      lcd_hw.h</A>: Si tratta di una libreria generica per la gestione degli
      LCD per mezzo degli avr. &Egrave; basata sul lavoro svolto da Peter Fleury (
      <a href="http://jump.to/fleury">http://jump.to/fleury</a>) Questa
      versione &egrave; stata leggermente adatatta e pi&ugrave; flessibile. Vi permette,
      infatti, di collegare il display a qualsivoglia pin del
      microcontrollore. Per fare ci&ograve; dovete solo cambiare le dichiarazioni
      nel file lcd_hw.h.</LI>

      <LI><A href="../../common/src/article236/c/index.html">avr-util.c,
      avr-util.h</A>: funzioni per gestire i delay.</LI>

      <LI><A href="../../common/src/article236/c/index.html">uart.c, uart.h</A>:
      Questa libreria permette la gestione dell'&igrave;nterfaccia RS232. Sfrutta
      gli interrupt hardware. Ogni qualvolta un carattere &egrave; ricevuto dal
      computer la funzione SIGNAL(SIG_UART_RECV) viene eseguita ed i dati
      sono copiati dal buffer di ricezione in una stringa di buffer. Il
      set di comandi implementato in questo display fa si che ogni comando
      termini con il carattere di nuova riga. Quando viene letto il
      carattere di nuova riga, viene settato il flag (uart_rx_linecomplete)
      ed i dati sono resi quindi disponibili al pannello. Questo significa
      che non potete inviare i dati al display il pi&ugrave; rapidamente possibile,
      ma dovete attendere alcuni millisecondi tra una linea e l'altra. Ogni
      comando ha un responso di acquisizione (ACK) che pu&ograve; dare come
      risultato o ok o err (nel caso di errore). Il piccolo programma-driver
      scritto in perl pu&ograve; tuttavia utilizzare un trigger per inviare
      il comando seguente.</LI>

      <LI><A href="../../common/src/article236/c/index.html">analog.c,
      analog.h</A>: Codice per il convertitore da analogico a digitale. Anche
      questo sfrutta gli interrupt. Una singola conversione viene iniziata
      ed il programma attende il segnale dell'interrput SIG_ADC per
      acquisirne il risultato dai registri ADC.</LI>

      <LI><A href="../../common/src/article236/c/index.html">hardwarewd.c,
      hardwarewd.h</A>: Si tratta del watchdog. Si ricorre ad un divisore
      interno (per 1024) per ottenere l'impulso di riferimento. Il timer &egrave;
      costituito da un registro a 16 bit che quando arriva all'ovewflow
      fa si che noi si faccia un decremento di una variabile di 8 bit. Con
      un oscillatore a 4MHz eseguiamo questo decremento ogni 16 secondi. Il
      programma in perl esegue un incremento della variabile in questione
      segnalando lo stato di buon funzionamento del computer. Se il
      programma fallisce l'incremento (a causa di un blocco del computer),
      allorquando questa variabile arriva a zero, in quanto decrementata nel
      tempo, il circuito si aziona attivando il rel&egrave;, le cui uscite mettono
      in corto i pin di reset del nostro PC.</LI>

      <LI><A href="../../common/src/article236/c/index.html">linuxlcdpanel.c</A>:
      si tratta del programma principale. Esegue un controllo continuo per
      eventuali comandi e pressioni di tasti sulla porta RS232.</LI>
    </UL>
    Per comprendere appieno il software vi consiglio di leggere bene il
    datasheet del microcontrollore. &Egrave; disponibile nella sezione riferimenti
    alla temine di questo articolo. (o dal sito www.atmel.com)
    <br>Sebbene per usare questo pannello non sia necessario che comprendiate
    il suo software, vi serve solo decomprimere ed estrarre il codice
    sorgente dell'archivio (scaricate linuxlcdpanel-0.7.tar.gz from dalla <a href="../../common/src/article236/index.html">pagina dei download</a>) e digitate :

    <P class="code">make<BR>
    make load<BR>
    <BR>
    oppure utilizzare la versione del software precompilata e caricatela nel
    microcontrollore con il comando<BR>
    make loadprebuild</P>
    Molto semplice, no? Potete trovare una descrizione inerente la
    programmazione del microcontrollore nel primo articolo di questa serie:
    <A href="../March2002/article231.shtml">Programmare il microcontrollore
    AVR con GCC</A>.

    <A NAME="236lfindex6">&nbsp;</A>
<H2>Verifica di funzionalit&agrave; del pannello LCD</H2>

    Il pannello LCD &egrave; studiato per funzionare con i 5V dell'alimentatore
    interno del PC (cavo rosso=5V, cavo nero=massa). Tuttavia &egrave; bene che la
    prova non la facciate collegando il display a questa fonte di
    alimentazione, in quanto il vostro alimentatore &egrave; assai robusto, ma la
    piastra madre ed il resto della componentistica, potrebbero fare una
    fumata a causa di un errore, fatto o nell'assemblaggio o durante la fase
    di saldatura. Verificatene la funzionalit&agrave; dapprima con un alimentatore
    elettronico stabilizzato e limitato in corrente! Ora eseguite il
    download nella EEPROM come precentemente descritto. Dopo questa
    operazione noterete un banner nel display che recita "linuxfocus.org".
    Ora collegate il cavo seriale all'interfaccia RS232:

    <P class="code">pin 14 del MAX232 al sengale CTS (DB-9: pin 8)<BR>
    pin 7 del MAX232 al segnale RXD (DB-9: pin 2)<BR>
    pin 13 MAX232 al segnale TXD (DB-9: pin 3)<BR>
    Dovete anche collegare il segnale DTR,DSR e CD tra di loro (DB-9: pin 4,
    6 ed 1)</P>
    Questo &egrave; ben documentato nello schema elettrico precedente.<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=
    "[dialogare con il display LCD per mezzo della linea seriale]" hspace="5" align=
    "right"></A> Per utlizzare una linea seriale, prima la si deve
    inizializzare. il file linuxlcdpanel-0.7.tar.gz, contenente il codice
    sorgente, include un programma che ha per nome ttydevinit che, per l'
    appunto, inizializza questa linea. Per esempio, poniamo, che voi abbiate
    collegato il pannello alla porta COM2 (ttyS1), dovrete dare il seguente
    comando una sola volta:

    <P class="code">./ttydevinit /dev/ttyS1</P>
    Ora il driver per la linea seriale in questione &egrave; inizializzato a 9600
    Baud e voi potrete iniziare a "dialogare" con il vostro pannello LCD.
    Aprite due xterm in X-Windows. In una digitate "cat /dev/ttyS1", e nell'
    altra "cat &gt; /dev/ttyS1". Ora potete, per esempio digitare il comando
    l=11 (accendi il LED nr. 1) o l=10 (spegni il LED nr. 1). Potete vedere
    nella prima, delle due console xterm, l'acknowledge (ovvero la risposta)
     al vostro comando ("ok").<BR>
    Tutti i comandi sono spiegati nel file<A href="../../common/src/article236/c/index.html">README.commands</A> (in lingua inglese). <BR>
    <BR>
    L'archivio contentente il codice sorgente include uno script in perl
    (ttytest.pl) la cui funzione &egrave; null'altro tranne che far lampeggiare il
    led rosso. L'idea di base &egrave; di fornire un semplice esempio per far
    vedere come si possa gestire un pannello LCD. Potete usare questo codice
    come base per i vostri programmi. Date liberamente una occhiata al
    codice in questione. &Egrave; bene avere un poca di conoscenza del linguaggio
    perl anche se questo programma &egrave; breve.

    <A NAME="236lfindex7">&nbsp;</A>
<H2>Colleghiamo il watchdog</H2>

    Il sistema di supervisione &egrave; normalmente spento. Per attivarlo dovete
    usare il comando w=1 e definire il suo timeout con s=x, dove x &egrave; un
    valore compreso tra 1 e 255. - per esempio s=10 permetter&agrave; al watchdog
    di avere un tempo di timeout pari a 10*16sec, ovvero 160 secondi.- &Egrave;
    essenziale definire il tempo di timeout o il sistema potrebbe esser
    indotto a forzare un reboot della macchina. Difatti se il server si
    dovesse bloccare, il programma non ri-definirebbe pi&ugrave; il corretto timeout
    inducendo il watchdog ad attivarsi. So che un server Linux non si ferma
    mai. Tuttavia, nei rari casi in cui si ferma, non trovate mai nessuno
    che possa premere il tasto di reset o nessuno ricorda pi&ugrave; dove esso sia
    in quanto sono anni che lo usano ma che non vi sono stati problemi.<BR>
    <BR>

    Il watchdog &egrave; stato studiato dimodoch&egrave; possa intervenire solo una volta.
    La ragione di questo &egrave; da ricercarsi nel fatto che, al riavvio del
    sistema, quest'ultimo potrebbe impiegare molto tempo per efettuare il
    check del file system. Quando, alla fine, il server sar&agrave; nuovamente
    online. Il software a quel punto riattiver&agrave; il driver per effettuare il
    pool.<BR>
    <BR>
    Per collegare fisicamente il Vostro watchdog divete trovare quali siano
    i fili che fanno capo al pulsante di reset del vostro server. In
    parallelo a questo colleghere i cavi che vanno al nostro rel&egrave;.

    <A NAME="236lfindex8">&nbsp;</A>
<H2>Come utlizzare il watchdog</H2>

    Il watchdog ha la funzione di garantire la capacit&agrave; del sistema (inteso
    come Sistema Operativo) di eseguire operazioni, non che il server web o il
    database sia online. Per verificare la permanente funzionalit&agrave; di questi
    programmi dovrete ricorrere alle funzionalit&agrave; del cron. Posiamo
    considerare sufficientemente affidabile la crontab, in quanto il watchdog
    assicura che, in generale, sia in esecuzione.
    <BR><BR>
    Potete, per esempio, creare uno script, per mezzo della crontab, che ogni
    15 minuti effettui il download di una pagina. Dovrete per&ograve; prestare
    attenzione a che, questo download, potrebbe anche portare ad un responso
    negativo se si tratta di un server ad elevato traffico. Dovrete quindi
    valutare le risposte. Per esempio se risponde una sola volta nelle ultime
    10 richieste &egrave; bene che forziate un restart del web server, o un normale
    reboot, piuttosto che ricorrere ad reset fisico (non quindi un reset
    harwdware indotto dal watchdog).
    <BR><BR>
    Oltre a supervisionare lo stato delle applicazioni, &egrave; essenziale
    monitorare lo stato d'occupazione dei dischi. Il seguente set di comandi
    daranno una responso allorquando uno dei filesystem superi l'80% di
    occupazione:
    <p class="code">
    df | egrep ' (8.%|9.%|100%) '
    </p>
    Anche questa serie di comandi pu&ograve; essere inserita come voce nella crontab
    per avere una costante supervisione dell'uso dei dischi.


    <A NAME="236lfindex9">&nbsp;</A>
<H2>Gli script del server</H2>

    La maggior parte della logica di controllo del nostro pannello LCD &egrave;
    implementata per mezzo di uno script in perl: llp.pl. Copiate questo
    script nella cartella /usr/sbin. Copiate successivamente il programma ttydevinit
    nella cartella /usr/bin ed il file ifconfig_llp.txt (contenuto nella
    cartella etc ove si trovano i file sorgenti) in /etc. Modificate ora il
    file ifconfig_llp.txt ed apportate le modifiche di indirizzo IP secondo le
    vostre esigenze (qui trovate un esempio):
    <P class="code">NETMASK=255.255.255.0<br> IPADDR=10.0.0.4<br>
    GATEWAY=10.0.0.2</P>
    Fate ora una copia di backup del seguente script: /etc/rc.d/init.d/network
    e sostituitelo con lo script etc/network preso dalla cartella dei sorgenti.
    Questo script ed i nomi delle cartelle sono validi solo per le
    ditribuzione RedHat e Mandrake di Linux. Lo script etc/network_all_distributions
    &egrave; basilare e dovrebbe funzionare con tutte le distribuzioni di Linux, ma
    dovete capire dove la vostra distribuzione abbia gli script di init/rc.
    Questi parametri cambiano leggermente da distribuzione a distribuzione.<BR>
    <BR>
    Modificate il file /etc/rc.d/init.d/network e cambiate la riga

    <P class="code">/usr/sbin/llp.pl /dev/ttyS1&amp;</P>
    Se il watchdog non &egrave; collegato alla COM2. <BR>
    <BR>
    Ora potete eseguire il seguente comando.

    <P class="code">/etc/rc.d/init.d/network start</P>
    e vedere il nostro pannello LCD in azione. Nota: il nostro pannello salva e
    modifica l'indirizzo IP. I cambiamenti hanno effetto solo dopo il reboot
    seguente. Potete fare delle prove cambiandolo e poi ripristinando i valori
    di prima. &Egrave; bene che facciate in ogni caso una prova riavviando poi il
    server. Alla fine potete o ripristinare la copia di backup o editare a
    mano il file /etc/ifconfig_llp.txt per ripristinare i valori.

    <A NAME="236lfindex10">&nbsp;</A>
<H2>I file di log</H2>

    Lo script llp.pl genera un file di registro (/var/log/llp.log). Questo
    file crescer&agrave; molto lentamente. Non vi dovrebbe quindi esser la necessit&agrave;
    di farne il rotate (ovvero quella procedura che crea un copia del file
    attuale e ne crea uno nuovo di dimensione 0). Potete effettuare il rotate
    di questo file con il programma logtate, se lo desiderate. Non vi &egrave; la
    ncessit&agrave; di fare operazioni dopo il rotate. La riga di configurazione del
    rotate (all'interno dello script logrotate) potebbe essere:
<p class="code">
/var/log/llp.log {<br>
        nocompress<br>
        monthly<br>
}<br>
</p>
    Il file di registro contiene le voci inerenti lo spegnimneto manuale ed il
    cambio delle configurazioni di rete (cambio di indirizzo IP, di gateway o
    sottomaschera di rete) o quando il watchdog ha forzato un riavvio.
    Ovviamente sar&agrave; impossibile avere delle voci inerente il timeout del
    watchdog (difatti il sistema era bloccato!), ma troveremo un voce per
    questo tipo di problematica aggiunta al riavvio del sistema.

    <A NAME="236lfindex11">&nbsp;</A>
<H2>Il pannello al lavoro.</H2>

    Qui trovate alcune immagini del pannello LCD in uso. Queste non sono tutte
    le funzioni offerte dal pannello. Ve ne sono molte altre che potrete
    aggiunere voi stessi.<BR>
    <BR>
    La finestra principale. Mostra alcuni nomi (in questo caso linuxfocus), il
    tempo di uptime ed il carico medio del server. Queste informazini sono
    aggiornate periodicamente.<BR>
    <IMG src="../../common/images/article236/display_inaction1.jpg"
    width="395" height="137" alt="[menu: generale]"> <BR>
    <BR>
    Il menu di impostazione della rete<BR>
    <IMG src="../../common/images/article236/display_inaction2.jpg"
    width="395" height="127" alt="[menu: cambio IP]"> <BR>
    <BR>
    Esempio del cambio di indirizzo IP<BR>
    <IMG src="../../common/images/article236/display_inaction3.jpg"
    width="395" height="124" alt="[change IP]"> <BR>
    <BR>
    Come variare l'indirizzo del gateawy (la route predefinita)<BR>
    <IMG src="../../common/images/article236/display_inaction5.jpg"
    width="395" height="128" alt="[menu: cambio Gateway]">

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

<img src="../../common/images/article236/linuxlcdpanelfinal.jpg" width="386"
height="275" alt="[A lavoro ultimato]" align=right>
    Per assemblare questo pannello LCD &egrave; necessaria una conoscenza basialre
    dell' elettronica. Il nostro Pannello LCD per Linux offre moltissime
    funzionalit&agrave;, molte di pi&ugrave; di quelle che io abbia visto su altri prodotti
    simili, e, soprattutto, ha un costo modesto.<BR>
    <BR>
    Buon lavoro :-)
<br clear="all">
    <A NAME="236lfindex13">&nbsp;</A>
<H2>Bibliografia</H2>


    <UL>
      <LI>Il software usip per programmare i microntrollori AVR: <A href=
      "http://www.amelek.gda.pl/avr/">www.amelek.gda.pl/avr/</A></LI>

      <LI>I sorgenti utilizzati in questo articolo <A href=
      "../../common/src/article236/linuxlcdpanel-0.7.tar.gz">linuxlcdpanel-0.7.tar.gz</A>
      . Lo schema elettrico, i file in formato Eagle e alcune immagini sono
      altres&igrave; incusi.</LI>

      <LI>Tutto il software e la relativa documentazione <A href="../../common/src/article236/index.html">citata in questo articolo</A></LI>

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

      <LI>Il datasheet del chip ST232, una variante economica e spesso venduta
      come sostituto del vero MAX232 <A href=
      "../../common/src/article236/st232.pdf">st232.pdf 100K</A></LI>

      <LI>Il datasheet dell'Atmel AT90S4433 <A href=
      "../../common/src/article231/avr4433.pdf">avr4433.pdf 2356K</A></LI>

      <LI>Il sito web della atmel: <A href=
      "http://www.atmel.com/">www.atmel.com/</A></LI>

      <LI>Eagle, versione per Linux<A href=
      "http://www.cadsoftusa.com/">cadsoftusa.com</A></LI>
    </UL>
    <!-- vim: set sw=2 ts=2 et tw=80: -->
  



<!-- 2pdaIgnoreStart -->
<A NAME="talkback">&nbsp;</a>
<h2>Discussioni su quest'articolo</h2>
ogni articolo possiede una sua pagina di discussione, da questa pagina puoi inviare un commento o leggere quelli degli altri lettori:
<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=it"><b>&nbsp;pagina di discussione&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">Webpages maintained by the LinuxFocus Editor team</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=it&amp;article=article236.shtml" target="_TOP">Click here to report a fault or send a comment to LinuxFocus</A><BR></TD>
<TD BGCOLOR="#9999AA">
<!-- TRANSLATION INFO -->
<font size=2>Translation information:</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; it: Toni Tiveron &lt;toni(at)amicidelprosecco.com&gt;</font></td></tr>
</TABLE>
</TD>
</TR></TABLE></CENTER>
<p><font size=1>2002-03-14, generated by lfparser version 2.25</font></p>
<!-- 2pdaIgnoreStop -->
</BODY>
</HTML>