<!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> | <A class= "nodec" href="../map.html"><FONT color= "#DDDDDD" size="2">Mappa</FONT></A> | <A class= "nodec" href="../indice.html"><FONT color= "#DDDDDD" size="2">Indice</FONT></A> | <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 è disponibile in: <A href="../../English/May2002/article236.shtml">English</a> <A href="../../Castellano/May2002/article236.shtml">Castellano</a> <A href="../../ChineseGB/May2002/article236.shtml">ChineseGB</a> <A href="../../Deutsch/May2002/article236.shtml">Deutsch</a> <A href="../../Francais/May2002/article236.shtml">Francais</a> <A href="../../Italiano/May2002/article236.shtml">Italiano</a> <A href="../../Nederlands/May2002/article236.shtml">Nederlands</a> <A href="../../Russian/May2002/article236.shtml">Russian</a> <A href="../../Turkce/May2002/article236.shtml">Turkce</a> </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à 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><toni(at)amicidelprosecco.com></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à 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&lang=it">Discussioni su quest'articolo</A></LI> </UL> </TD></TR></TABLE> <!-- HEAD OF THE ARTICLE --> <br> <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à e non molto costosi. Il pannello di controllo comprende la funzionalità di watchdog per supervisionare il computer medesimo ed ha due pulsanti che permettono all'utente di interagire con il sistema. Così potete settare l'IP, la maschera di sottorete, l'indirizzo del gateway, spegnere il computer, leggere delle statistiche, insomma più o meno quello che desiderate fare in quanto la logica è implementata per mezzo di uno script in perl che può facilmente esser modificato. Questo pannello sarà 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"> </A> <H2>Introduzione</H2> Questo progetto unisce assieme le funzionalità di hardware che abbiamo già 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 è 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à di watchdog hardware per supervisionare il nostro server Linux. In aggiunta a tutto ciò 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 è bene che abbiate delle conoscenze basilari di elettronica, è 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 è di dare all'utente la possibilità di controllore il Vostro server senza l'ausilio nè di tastiera nè di monitor. Linux è un sistema operativo molto stabile ed affidabile e può facilmente esser controllato da remoto. Tuttavia la prima volte che lo collegate alla rete avete la necessità di configurare un indirizzo IP, il relativo gateway e la sottomaschera di rete. Il nostro pannello vi permette di configurare questi indirizzi. Vi dà anche la possibilità di spegnere il server mentre siete nella stanza dei server. <BR> <BR> Il design per questo pannello è 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"> </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"> </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ù 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ù 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ù agilmente: <small>(Nota: questo non è 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"> </A> <H2>Lo schema elettrico</H2> Vi spiegherò brevemente lo schema elettrico. L'AT90S4433 ha 3 porte: PB, PC e PD. PC può 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 è solo per linee non digitali (0/ 5Volt - TTL). Il chip MAX232 è 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è quel diodio sia in parallelo alla bobina del relè e sia collegato in quello strano modo - con la polarità invertita -. Questo diodo ha una funzione essenziale! Allorquando si rilascia il relè, la bobina di quest'ultimo genera una elevata extratensione che danneggerebbe di sicuro il nostro micontrollore. Questa alta tensione ha polarità inversa rispetto a quella applicata alla bobina. Il diodo non è un modello particolare ma un comune economico diodo, ma di importanza vitale per il nostro cicuito. <A NAME="236lfindex4"> </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 è della Regulus ed è comunemente usato per la stampa offset. Un'altra ottima alternativa è 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 è che il toner di una stampante laser si fissa bene e crea una ottima opacità 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à 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 è 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à 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ù 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è potebbe esser necessario modificare leggerlmente il layout dello stampato. Io ho utilizzato un relè 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à 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ù pesanti degli ioni di ferro (Fe+) alla fine del processo troveremo nel fondo del contenitore gli ioni di rame. <BR> <BR> Quando la basetta è pronta; ripulitela con della trementina per rimuovere le correzzioni effettuate con il pennarello. Potete lasciare la pellicola fotosensibile sulle piste. Essa evaporerà naturalmente quando andrete a saldare, offrendo così una protezione per le piste di rame. <A NAME="236lfindex5"> </A> <H2>Il software per il microcontrollore</H2> Il software per il microcontrollore è 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. È basata sul lavoro svolto da Peter Fleury ( <a href="http://jump.to/fleury">http://jump.to/fleury</a>) Questa versione è stata leggermente adatatta e più flessibile. Vi permette, infatti, di collegare il display a qualsivoglia pin del microcontrollore. Per fare ciò 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'ìnterfaccia RS232. Sfrutta gli interrupt hardware. Ogni qualvolta un carattere è 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ù rapidamente possibile, ma dovete attendere alcuni millisecondi tra una linea e l'altra. Ogni comando ha un responso di acquisizione (ACK) che può dare come risultato o ok o err (nel caso di errore). Il piccolo programma-driver scritto in perl può 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 è 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è, 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. È 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"> </A> <H2>Verifica di funzionalità del pannello LCD</H2> Il pannello LCD è studiato per funzionare con i 5V dell'alimentatore interno del PC (cavo rosso=5V, cavo nero=massa). Tuttavia è bene che la prova non la facciate collegando il display a questa fonte di alimentazione, in quanto il vostro alimentatore è 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à 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 è 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 è 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 > /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 è null'altro tranne che far lampeggiare il led rosso. L'idea di base è 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. È bene avere un poca di conoscenza del linguaggio perl anche se questo programma è breve. <A NAME="236lfindex7"> </A> <H2>Colleghiamo il watchdog</H2> Il sistema di supervisione è normalmente spento. Per attivarlo dovete usare il comando w=1 e definire il suo timeout con s=x, dove x è un valore compreso tra 1 e 255. - per esempio s=10 permetterà al watchdog di avere un tempo di timeout pari a 10*16sec, ovvero 160 secondi.- È 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ù 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ù dove esso sia in quanto sono anni che lo usano ma che non vi sono stati problemi.<BR> <BR> Il watchdog è stato studiato dimodochè possa intervenire solo una volta. La ragione di questo è 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à nuovamente online. Il software a quel punto riattiverà 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è. <A NAME="236lfindex8"> </A> <H2>Come utlizzare il watchdog</H2> Il watchdog ha la funzione di garantire la capacità del sistema (inteso come Sistema Operativo) di eseguire operazioni, non che il server web o il database sia online. Per verificare la permanente funzionalità di questi programmi dovrete ricorrere alle funzionalità 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ò 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 è 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, è 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ò essere inserita come voce nella crontab per avere una costante supervisione dell'uso dei dischi. <A NAME="236lfindex9"> </A> <H2>Gli script del server</H2> La maggior parte della logica di controllo del nostro pannello LCD è 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 è 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&</P> Se il watchdog non è 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. È 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"> </A> <H2>I file di log</H2> Lo script llp.pl genera un file di registro (/var/log/llp.log). Questo file crescerà molto lentamente. Non vi dovrebbe quindi esser la necessità 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 è la ncessità 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à 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"> </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"> </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 è necessaria una conoscenza basialre dell' elettronica. Il nostro Pannello LCD per Linux offre moltissime funzionalità, molte di più 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"> </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ì 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"> </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&lang=it"><b> pagina di discussione </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">© 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&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 --> -- : Guido Socher (<a href="http://linuxfocus.org/~guido/"><font size="1">homepage</font></a>)</font></td></tr> <tr><td><font size="2">en --> it: Toni Tiveron <toni(at)amicidelprosecco.com></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>