MICRO PLC con PIC16F628

 

 

Progetto pubblicato sulla rivista Elettronica Flash  

IL PROGETTO

Di progetti di schede con la funzione di PLC ne sono apparse molte nelle riviste per hobbisti, ma tutte erano predisposte per contenere un micro programmato per assolvere una funzione specifica, cambiare il funzionamento significa togliere il micro e riprogrammarlo nuovamente. Il presente progetto è invece un PLC reale con un micro che contiene un interprete di tipo AWL, cioè un linguaggio a righe di istruzioni come i PLC più evoluti. Il tutto programmabile con soli quattro pulsanti.

La tabella seguente riassume le caratteristiche del nostro PLC.

INGRESSI 4 (DA 5 A 24 V)
USCITE: 4 (RELE’ DA 1 A)
MARKER: 8
TIMER: 5 (DA 1 A 99 SECONDI O MINUTI)
OPERANDI: INGRESSI, USCITE, MARKER, TIMER
OPERAZIONI INGRESSO AND LOGICO, OR LOGICO, NOT
OPERAZIONI USCITA UGUALIANZA, SET, RESET, COMPLEMENTA
RIGHE DI PROGRAMMA 41 max
Schema elettrico DISTINTA COMPONENTI

R1-R4 =               4K7

R5-R9 =             10K

R10-R13 =          4K7

R14 =                  10K

R15 =            1K

C1 =470 mF 35V ELETTR. VERT.

C2 =  10 mF16V ELETTR. VERT.

C3 =            0,1 mF POLIESTERE

D1-D4 =            4V7 ZENNER 1/2W

D5-D8 =            1N4148

PR1 =           PONTE RADDRIZZATORE DA 1A

U1 =                PIC16F628

U2 =                78L05

Q1-Q4 =            BC547B

P1-P4 =         PULSANTI MINIATURA DA CS

DISPLAY 1x16  LCD

X1 =          MORSETTIERA 2 POLI PASSO 5 mm

X2, X3 = MORSETTIERA 6 POLI PASSO 5 mm

Lo schema elettrico ruota attorno al micro, un economico PIC16F628, fratello maggiore del più famoso 16F84, un RISC della Microchip dal prezzo di circa 4 Euro contenente una memoria programma di 2Kbit di tipo Flash riprogrammabile per più di 1000 volte, un’area memoria dati di 128 Byte, 128 Byte di RAM, 3 Timer e altro ancora. Dispone di 18 piedini di cui 16 possono essere usati come ingressi o uscite, che diventano 14 nel caso venga usato un quarzo come generatore di clock. I piedini utilizzati come ingressi sono quattro e sono collegati internamente al PIC alla porta B e precisamente da PB4 a PB7. Ogni ingresso utilizza una resistenza in serie e una che forza l’ingresso del micro a massa. Uno zenner da 4V7 protegge il PIC da tensioni superiori ai 5 Volt. Con questa configurazione possiamo applicare agli ingressi una tensione variabile tra i 5 e i 24 Volt circa. I primi quattro Bit della porta B hanno un duplice impiego, sono necessari per scambiare i dati tra il micro e l’LCD e, alternativamente, alimentano i pulsanti. Per dialogare con il display, è necessario disporre dell’RS (Register/Resect, pin 4) che indica al LCD se è in arrivo un dato o un’istruzione e il CLK (ClocK, pin 6) chiamato anche E, che sincronizza, sul fronte di discesa, i dati o le istruzioni da e verso il display. In questo modo è possibile gestire gli stessi pins utilizzati per inviare i dati al LCD anche in altro modo, nel nostro caso amministrano pure i pulsanti utilizzati per programmare il PLC.

L’altra porta interna al PIC è la porta A. I primi quattro Bit e precisamente da PA0 a PA3, sono usati per pilotare un relè ciascuno, attraverso dei comuni transistors tipo NPN che aumentano la corrente delle uscite del PIC, insufficiente al pilotaggio di un relè. Questi quattro relè rappresentano le uscite fisiche del nostro PLC e possono interagire con il mondo esterno controllando dei carichi non superiori all’Amper.

Proseguendo la descrizione dei restanti piedini facenti capo alla porta A del PIC, PA5 di solito ha la funzione di Reset, in questo caso viene usato come ingresso per testare lo stato dei pulsanti.

I restanti Bit della Porta A, precisamente il PA6 e il PA7 perdono la loro funzione classica di pilotaggio esterno di un quarzo perché ci servono i piedini come uscite per gestire l’LCD. Provvede il programma per il PIC (precisamente una parte della Word di configurazione) ad attivare l’oscillatore interno da 4 MHz e parametrizzare i due pins come uscite. Il timer interno non è molto preciso, ma a noi non serve una accuratezza elevata anche se non dobbiamo dimenticare che nel nostro PLC abbiamo a disposizione ben 5 timer. Ci possiamo comunque accontentare se impostati 60 secondi in realtà trascorrono 59 o 61 secondi.

Il PA4 non ha funzioni e resta inutilizzato.

La stabililizzazione della tensione di 5 Volt necessaria al corretto funzionamento del micro e del LCD è affidata a un comune regolatore di tipo 78L05.

Montaggio

Il circuito nel suo complesso non presenta difficoltà, certo che con un circuito stampato tutto è più facile. Vi propongo una possibile soluzione presentandovi il disegno del mio prototipo, se decidete di usare un mille fori o una scheda per esperimenti leggete comunque il capitolo.

Nel caso optiate per la costruzione del CS come da progetto, vi ricordo che LCD e pulsanti vanno montati dal lato RAME. Nel prototipo ho usato resistenze da 1/8 W, ma vi posso assicurare che con la foratura attuale possono trovare posto, anche de sgomitando, il tipo da 1/4W. Eventualmente non dimenticate il montaggio verticale. I relè sono di tipo miniatura, modelli molto facili da trovare nel surplus. I pulsanti sono di tipo miniatura e molto economici. Ne ho fatto una buona scorta dal smontaggio di un paio di videoregistratori gusti. Il display è un modello classico di una riga per 16 caratteri (in realtà è indirizzato come un 2x8, cioè i primi 8 caratteri sono indirizzati come prima riga e i restanti 8 come seconda riga, anche se fisicamente sono disposti in un’unica riga) e, visto il costo, consiglio caldamente di collegarlo attraverso strip per poterlo estrarre facilmente senza danneggiarlo. Tra l’altro è possibile estrarre il display dal PLC programmato senza che questo ne pregiudichi il funzionamento. Lo scopo principale del LCD è quello di visualizzare l’emissione delle righe di programma all’interno del PLC e una volta collaudato serve a poco se non testare lo stato degli ingressi e delle uscite. 

Non dimenticate i 3 ponticelli sotto i relè K2, K3, K4 e collegare con spezzoni di filo il pin 15 di U1 con il pin 4 del display, il pin 16 di U1 con il pin 6 del display e il pin 14 di U1 con i + 5 V (punto comune tra C2, C3 e U2.

Qualunque sia il programmatore e il programma che utilizzate per programmare il PIC con il file che potete scaricare dal sito di Elettronica Flash, è importante che programmiate i fusibili scegliendo l’oscillatore interno e la funzione I/O per i piedini dedicati (IntRC I/O nel caso di “IC-Prog”), disattivare il Watchdog Timer (WDT) e il Power Up Timer (PWRT).

Programmazione

Collaudare un PLC è cosa facile per chi lo conosce e comprende il linguaggio di programmazione, ma diventa difficoltoso per il neofita che si avvicina per la prima volta ad un circuito di automazione. È quindi necessario un breve corso di programmazione che sarà facile per coloro che hanno avuto la possibilità di lavorare con i PLC e un po’ difficoltoso per il resto degli amici hobbisti. Cercherò di essere sintetico e nello stesso tempo chiaro, però sarà per tutti di aiuto seguire il corso provando in pratica con il PLC sottomano.

Il nostro PLC accetta un programma strutturato in maniera molto rigida. Ogni riga di programma deve contenere due operandi come ingressi, un’operazione e un operando come uscita. Per operandi possiamo immettere ingressi I da 0 a 3 (sono i quattro ingressi fisici del PLC, fanno capo alla morsettiera X2), p.e.: I3 è il quarto ingresso del PLC ( Attenzione: l’ingresso 0 esiste ed è il primo), MARKER M da 0 a 7 (sono relè virtuali cioè non esistono fisicamente ma vengono molto usati nella programmazione come appoggio), uscite Q da 0 a 3 (sono le quattro uscite fisiche del PLC, fanno capo alla morsettiera X3), infine i timer T da 0 a 4 (in totale sono cinque timer da 1 a 99 secondi o minuti).

La operazioni supportate dal PLC sono quelle essenziali alla programmazione cioè AND  (rappresentato dal simbolo “&”) e OR (rappresentato dal simbolo “o”). Viene riconosciuto il NOT.

L’operando d’uscita è il bit (sia reale, come un’uscita fisica, che virtuale, come un MARKER) destinatario del risultato dell’operazione tra bit.

Prima di cominciare con degli esempi, è necessario conoscere il significato dei quattro pulsanti presenti nel progetto. Si trovano alla destra del display e partendo dall’alto hanno le seguenti funzioni che dipendono dalla posizione del programma (ATTENZIONE: le informazioni in verde sono quelle che incontriamo scritte sul display):

Dalla fase di esecuzione del programma (Iooo* 05 Qooo*):

P1-UP                         NESSUNA FUNZIONE.

P2-DOWN                 “”

P3-ENTER                 “”

P4-END                      RICHIAMA IL MENU’ PRINCIPALE.

 

Nel menù principale     (MENU’):

 

P1-UP                         CANCELLA TUTTO IL PROGRAMMA MEMORIZZATO NELL’EEPROM (CANC.TOT.SICURO?). PER CONFERMARE PREMERE P3-ENTER, PER ANNULLARE PREMERE P4-END.

P2-DOWN                 CANCELLA LA RIGA INDICATA. PREMENDO P1-UP O P2-DOWN SI SELEZIONA IL NUMERO DI RIGA DA CANCELLARE. L’ULTIMA RIGA DEL PROGRAMMA PRENDE IL POSTO DI QUELLA CANCELLATA. (CANC.RIGA N. 04). CON P3-ENTER SI CONFERMA, PREMENDO P4-ENDSI RITORNA AL MENU’ PRINCIPALE.

P3-ENTER                 SI ENTRA NELLA FASE DI PROGRAMMAZIONE (04 I.3 & Q!2 =Q1).

P4-END                      ESECUZIONE PROGRAMMA.

 

 

In programmazione

 

P1-UP                         INCREMENTA UN BIT (quello selezionato dal cursore).

                                    CAMBIA DA NOT (!) A NORMALE(.).

                                    CAMBIA OPERAZIONE.

P2-DOWN                 DECREMENTA UN BIT. 

P3-ENTER                 CONFERMA IL DATO SELEZIONATO DAL CURSORE.

P4-END                      RITORNA AL MENU’ PRINCIPALE.

 

Alla prima accensione è necessario cancellare l’intera memoria EEPROM del PIC nel seguente modo:

premere P4-END  (menù principale: MENU’ )

premere P1-UP                  (CANC.TOT.SICURO? )

premere P3-ENTER            (conferma la cancellazione dell’intera memoria)

il nostro PLC è pronto a ricevere la nostra prima riga di programma e la memoria EEPROM (memoria utente) è vuota. Infatti se premiamo ancora P4-END e mandiamo in esecuzione il PLC, il display visualizza una condizione di allarme (EE Vuota) e resta in attesa di una nuova pressione dello stesso pulsante (P4-END).

Ritornati nel menù principale ( MENU’ ), premiamo P3-ENTER e prepariamoci a inserire la nostra prima riga di programma. La schermata iniziale con l’intera memoria vuota sarà:

01 I.0 & I.0 =Q0

vediamo in dettaglio il significato di ogni singolo componente della prima riga del programma.

 

01                               NUMERO RIGA DEL PROGRAMMA, deve esserci almeno una riga di programma per mandare in esecuzione il PLC. Il numero massimo è di 41 righe memorizzabili.

I                                  IL PRIMO OPERANDO. I è un ingresso fisico del PLC. Altro operando può essere un’uscita (Q), un MARKER (M) o un timer (T).

.                                   Indica la condizione logica di tipo positivo. Se cambiamo il (.) in (!) allora la condizione logica richiesta diventa di tipo negativo (NOT). Sarà più chiaro il tutto quando incontreremmo degli esempi.

0                                  E’ il bit del primo operando. Per gli ingressi (I) 0 è il primo e 3 è il quarto, lo stesso per le uscite (Q), i MARKER(M) sono otto da 0 a 7, mentre i timer (T) sono cinque numerati da 0 a 4. 

&                                 Operazione logica tra operandi, AND è rappresentato dal simbolo (&), mentre OR dal simbolo (o).

I.0                    E’ il secondo operando. Quanto detto per il primo vale per il secondo.

=                                 Il risultato dell’operazione logica condiziona l’operando d’uscita. Con il simbolo (=) intendiamo riportare in uscita la stessa condizione logica dall’operazione, con (S) forziamo l’uscita ad uno logico solo a condizione che l’operazione dia come risultato uno logico anche per un solo istante, l’uscita resta ad uno logico fintanto che non viene resettata dal comando reset (R). Ultimo simbolo (C) indica complementa bit, cioè ogni volta che cambia il risultato dell’operazione in ingresso da zero ad uno il bit in uscita cambia stato. In pratica avviene la simulazione del relè passo-passo.

Q                                 (Q) è l’uscita fisica del nostro PLC a cui viene applicato il risultato dell’operazione. Possono essere usati i MARKER (M).

0                                  Indica l’indirizzo dell’uscita o del MARKER a cui applicare il risultato dell’operazione.

        

Come prima riga di programma modifichiamo solo l’indirizzo del secondo operando in questo modo: premete P3-ENTER tante volte da fare lampeggiare il cursore del display sull’indirizzo del secondo operando, premete P1-UP in modo da incrementare di una unità tale indirizzo. Il display indica la riga 01 modificata in questo modo:

01 I.0 & I.1 =Q0

Premete tante volte il P3-ENTER in modo da passare dalla riga 01 alla 02, quindi premete P4-END per mandare il programma in esecuzione.

Provate ora collegare al positivo gli ingressi 1 (I 0) e 2 (I 1) del nostro PLC e vedrete che l’uscita 1 (Q0) cambia stato e diventa positiva (uno logico) solo se tutti e due gli ingressi 0 e 1 sono collegati al positivo.

I*ooo 01 Qoooo                   solo l’ingresso I0 è al positivo: nessun cambiamento nelle uscite.

Io*oo 01 Qoooo solo l’ingresso I1 è al positivo: nessun cambiamento nelle uscite.

I**oo 01 Q*ooo I0 e I1 al positivo: solo ora l’uscita Q0 viene settata.

Notate con quanta semplicità abbiamo imposto al nostro PLC un’operazione di tipo AND con due ingressi.

Proviamo era la funzione OR premendo il P4-END per entrare nel menù, quindi P3-ENTER per accedere alla programmazione.

Premendo P2-DOWN ritorniamo a visualizzare la prima riga di programma:

01 I.0 & I.1 =Q0

premendo P3-ENTER tante volte da posizionare il cursore del display sul simbolo (&) e premiamo P1-UP per cambiarlo in (o),

01 I.0 o I.1 =Q0

continuamo a premere il P3-ENTER fintanto che non visualizziamo la seconda riga di programma, quindi P4-END per entrare nella fase di esecuzione del programma:

Ioooo 01 Qoooo                   nessun ingresso è al positivo: nessun cambiamento nelle uscite.

I*ooo 01 Q*ooo                   solo l’ingresso I0 è al positivo: l’uscita Q0 viene settata.

Io*oo 01 Q*ooo solo l’ingresso I1 è al positivo: l’uscita Q0 viene settata.

I**oo 01 Q*ooo I0 e I1 al positivo: l’uscita Q0 viene settata.

Al contrario della funzione AND, in OR è sufficiente che un solo ingresso interessato venga posto a uno logico per cambiare lo stato dell’uscita.

Per non riempire le pagine delle solite sequenze di pressione dei pulsanti, indicherò semplicemente la fase di programmazione (immissione delle righe del programma utente), quella di esecuzione programma, cambiamento di un bit o di un’operazione, conferma di una riga di programma (vi ricordo che bisogna premere P3-ENTER tante volte da passare alla riga successiva, mentre se sbagliate qualcosa, premendo P4-END si ritorna al menù senza confermare la riga anche se modificata).

Riprendiamo il corso analizzando la funzione NOT. In programmazione alla riga 01 (l’unica programmata fin’ora), cambiamo il punto (.) in punto esclamativo (!) al primo operando (o al secondo cambia solo l’ingresso negato) e cambiamo l’operazione in AND:

01 I!0 & I.1 =Q0

mandiamo in esecuzione la riga programmata dopo la conferma e vediamo che succede:

I*ooo 01 Qoooo                   solo l’ingresso I0 è al positivo: nessun cambiamento nelle uscite.

I**oo 01 Qoooo I0 e I1 al positivo: nessun cambiamento nelle uscite.

Io*oo 01 Q*ooo solo l’ingresso I1 è al positivo: solo ora l’uscita Q0 viene settata.

Abbiamo cambiato lo stato logico dell’ingresso I0 chiedendo l’attivazione dell’uscita solo se questo è a livello basso. L’esempio pratico che mi viene in mente è la partenza di un motore tramite un pulsante di START e l’arresto per mezzo di un pulsante di STOP. Quest’ultimo, per motivi di sicurezza, deve essere di tipo NC (normalmente chiuso: alla pressione del tasto deve aprirsi), impedendo la partenza del motore in caso di guasto al pulsante o alla linea di alimentazione comando.

Visto che abbiamo parlato di partenza motore, vediamo di seguito come implementare le funzioni di SET e RESET proprio simulando la partenza di un motore (lasciamo perdere la protezione termica dello stesso). In programmazione torniamo alla prima riga, modificandola come segue e aggiungiamone una seconda per completare l’avviamento del motore:

01 I.0 & I.1 SQ0

02 I!1 o I!1 RQ0

all’ingresso I0 colleghiamo un pulsante NO (normalmente aperto: premuto chiude il contatto) con la funzione di avviare il motore e all’ingresso I1 un pulsante NC con la funzione di stop motore.

Mandato in esecuzione, premiamo il pulsante di avviamento motore e notiamo immediatamente l’inserimento dell’uscita Q0 che resta settata anche quando rilasciamo il pulsante di avviamento motore. Questa è la funzione SET (S) cioè settare un bit a condizione logica rispettata (riga 01: I0=1, I1=1) e resta settato anche se la condizione non viene rispettata nel tempo. Per resettate il bit e spegnere il motore, è necessario inviare un comando di RESET (R), nel nostro esempio avviene con la seconda riga ed è sufficiente la pressione anche istantanea del pulsante di STOP per resettare uscita Q0. Per riattivarla è sufficiente ripremere il pulsante di avviamento motore con il pulsante di stop non schiacciato e vedere l’uscita portarsi a uno.

NOTA: fate attenzione durante la programmazione, la funzione Set deve essere digitata sempre prima della funzione Reset. Non è necessario che la funzione Reset segua immediatamente il Set, l’importante che sia analizzato dal programma contenuto dal PIC sempre per ultimo (rispetto allo stesso bit, ovviamente).

Ultima funzione da analizzare è il Compemento al bit (C). E’ la simulazione del relè passo-passo, cioè la pressione di un pulsante eccita il relè che resta in tale stato fintantoché non viene ripremuto lo stesso pulsante. Facciamo un esempio:

01 I.0 & I.0 CQ0

collegando il solito pulsante al primo ingresso nel PLC, notiamo che l’uscita Q0 cambia stato ad ogni pressione del pulsante. Ovviamente possiamo utilizzare un’operazione logica tra due o più operandi come ingresso o uno unico come nell’esempio riportato.

NOTA: la funzione Complemento (C) è gestita in modo particolare dal SW del PIC e richiede un’utilizzo particolare nel caso si debba condizionare più uscite con lo stesso ingresso. Per esempio, all’ingresso I0 colleghiamo un pulsante che accenda due luci collegate alle uscite Q1 e Q2. Proviamo a creare un programma per attuare il comando:

01 I.0 & I.0 CQ1

02 I.0 & I.0 CQ2

con queste righe il PLC non si riesce ad elaborare efficacemente il programma con il risultato che alla prima pressione del pulsante si accende la lampada collegata all’uscita Q1 e non farà altro nonostante venga premuto il pulsante ripetutamente. In questo caso è necessario appoggiarsi ad un MARKER (M) come nell’esempio seguente:

01 I.0 & I.0 CM0

02 M.0 & M.0 =Q1

03 M.0 & M.0 =Q2

il Complemento viene esercitato su un MARKER e il cambio di stato di quest’ultimo influenza le uscite.

Nell’ultimo esempio abbiamo usato un MARKER (M). Sono relè virtuali cioè sono presenti solo nel SW del PIC e restano a disposizione dell’utente in modo da applicare una condizione logica senza influenzare le uscite fisiche. Sono usati anche nell’esempio che segue e finalmente terminiamo il corso esaminando i Timer (T).

Il nostro PLC è in grado di gestire fino a cinque Timer da 1 a 99 secondi o minuti. È necessario parametrizzare il Timer prima di usarlo. Vediamo come:

01 I.0 & I.1 =M0

02 M.0 T0  05 sec

03 T!0 & M.0 =Q0

04 T.0 & M.0 =Q1

quattro semplici righe per un programma complesso. Vediamolo in dettaglio:

alla riga 01 imponiamo la condizione logica iniziale, in pratica tutto inizia solo se gli ingressi I0 e I1 sono posti ad uno logico (in pratica ad un potenziale positivo di 5÷24 V) ed attiviamo un MARKER, precisamente il M0. Nella seconda riga paramettiziamo ed attiviamo il timer T0, caricandolo con cinque secondi. Se avessimo cambiato la seconda riga in:

avremmo caricato il T0 con cinque minuti.

Adesso viene il bello. Nella riga 03, il Timer T0 è negato quindi assieme al MARKER M0 attiva l’uscita Q0 solo nel tempo che gli serve per contare il tempo impostato (nel nostro esempio sono cinque secondi), mentre nella riga 04 lo stesso Timer T0 non avendo raggiunto il conteggio non attiva l’uscita Q1. Trascorso il tempo impostato, viene a mancare la condizione logica alla riga 03 resettando il Q0, però viene rispettata la condizione alla riga 04 settando il Q1. Nella terza riga abbiamo ottenuto un temporizzatore RITARDATO ALLA DISECCITAZIONE, mentre nella quarta RITARDATO ALL’ECCITAZIONE. Come vedete l’utilizzo dei Timer è molto semplice e potente e trova molteplici applicazioni.

 

Messaggi di errore

                       

Come ogni PLC che si rispetti, anche il nostro cerca di farci capire che qualcosa non va con dei messaggi di errore.

 

EE Vuota

La memoria utente non contiene nessuna riga di programma. È sufficiente inserire anche una sola riga di prova per mandare in esecuzione il PLC in modo corretto. È il messaggio che compare se mandiamo in esecuzione il PLC dopo la cancellazione totale. Ritornare con P4-END.

 

Mem. Piena

Nel caso si superino le 41 righe di programma, il PLC ci avvisa che non è possibile inserire la 42 esima riga con questo messaggio. Ritornare con P4-END.

 

Erro.RIGA N. 03

Indica un errore di programmazione alla riga indicata (è comodo perché non dobbiamo controllare l’intero programma). Precisamente:

  • Abbiamo già detto che gli ingressi sono 4 e pure le uscite sono 4, durante la programmazione è possibile selezionare anche gli ingressi e le uscite fino a I7 e Q7. Il PLC gli accetta durante la programmazione, ma si arresta e visualizza l’errore durante l’esecuzione del programma.

  • I Timer disponibili sono da T0 a T4, se viene selezionato uno da T5 a T7 compresi, il PLC arresta l’esecuzione del programma e indica l’errore.

  • Tra le operazioni tra operandi (AND, OR, Timer), c’è n’è una che non ha significato (-). È stata inserita per espansioni future. Al momento non è associata a nessuna parte del programma però è selezionabile e ciò porta ad un errore del programma.

  • Stesso discorso per i codici dell’operando finale, possono essere solo Q o M. selezioni diverse (sempre in previsione di espansioni future) causano il blocco del programma e la segnalazione dell’errore.

 

Ritornare con P4-END.

 

Conclusioni

                       

Così com’è con soli quattro ingressi e altrettante uscite il nostro PLC non troverà infinite applicazioni. Del resto lo scopo del presente articolo vuole essere il mezzo per avvicinare più appassionati possibile al mondo dell’automazione spendendo poco come ogni buon hobbista pretende con un progetto funzionale ma limitato che farà da trampolino di lancio a progetti sempre più complessi e completi.

 

 


Il pacchetto è stato ceduto alla rivista ELETTRONICA FLASH che lo ha pubblicato nel numero 238 (Maggio 2004)

Il pacchetto non è più raggiungibile dal sito della rivista: scaricalo QUI.

RITORNA ALLA MAIN PAGE