Figura 3
Questo progetto fa uso della porta parallela Spp, se non la conoscete o avete qualche difficolta'
fate riferimento al
tutorial sulla Spp.
Per impratichirvi ulteriormente date un occhiata al
progetto Sppboard.
Cerchero' in poche parole di spiegare il progetto, in realta' non troppo complesso, il cui schema
elettrico e' raffigurato in Figura 3.
Lo schema e' stato disegnato a moduli, per comodita' e per semplicita', in realta' tutto e' stato
collegato e realizzato su una basetta mille fori.
Il convertitore adc0808 e' un convertitore analogico digitale a 8 canali uP compatibile. Si presenta sottoforma
di un chip a 28 pin, di questi 28 pin 3, a b e c, sono riservati all'indirizzamento interno.
Con 3 bit si riescono a decodificare 8 canali diversi, ecco che questi pin andranno collegati a 3
linee della porta parallela Spp per la decodifica. Le linee scelte sono a : /autofeed (pin14 e bit c1 del Control register),
b : initialize (pin 16 e bit c2 del Control register) e c : /select in (pin 17 e bit c3 del Control register).
Attraverso il data bus in uscita dal convertitore ci collegheremo alla parallela, tramite un multiplexer
quadruplo da 2 a 1 linea, ai pin di ingresso della porta parallela.
Il multiplexer ha il compito di consentire una lettura di 1 byte avendo a disposizione solo 4 bit
in input verso la parallela.
Tramite il segnale /strobe (pin 1 e bit c0 del Control register) andiamo a selezionare dapprima il
nibble piu' basso e poi il nibble piu' alto.
Le linee di input scelte sulla parallela sono : /error (pin 15 e bit s3 dello Status register), select
(pin 13 e bit s4 dello Status register), pe (pin 12 e bit s5 dello Stetus register) e busy
(pin 11 e bit s7 dello Status register).
Per quanto riguarda le operazioni di inizio conversione, fine conversione e output enable ho collegato
il d0 (pin 2 e bit d0 del Data register) allo Start e Ale dell'adc0808, il d1 (pin 3 e bit d1 del Data register)
all'Output enable e /ack (pin 10 i bit s6 dello Status register) all'End of conversion negato dell'adc0808.
Quest'ultima connessione serve per gestire la fine conversione mandando un eventuale interrupt sulla
porta parallela del pc.
Il segnale di clock viene generato da un ne555 configurato come multivibratore astabile ad una frequenza
di circa 588 Khz, valore all'interno delle specifiche di clock del convertitore. Tramite ponticellatura
e' possibile introdurre un clock esterno (utile per applicazioni sincrone con schede a uControllori)
Tutti i segnali logici di pilotaggio e di uscita del progetto, oltre ad essere stati
connessi opportunamente ad un connettore cannon db25 maschio, sono stati anche riportati
su un connettore a pettine per permettere l'utilizzo della scheda in oggetto con un uControllore. (Ad esempio un Pic).
Per quanto riguarda la parte analogica del progetto e' stato utilizzato un regolatore 7805 per
generare la tensione di alimentazione di 5 volt per gli integrati, a partire dai 9 volt di alimentazione
della scheda.
Non ho alimentato direttamente a 5V perche' il convertitore vuole una Vref di 5V per cui era indispensabile
avere una Vcc piu' alta dalla quale ottenere questa Vref.
La Vref e' stata quindi ottenuta da un Lm336 5.0V e trimmer multigiri, disaccoppiato tramite un inseguitore di tensione
realizzato con operazionale lm358.
Gli 8 canali analogici in ingresso vengono connessi tramite una morsettiera. E' importante che
i segnali da convertire vengano portati alla morsettiera attraverso dei cavi schermati.
Ho realizzato alcuni programmi in ambiente dos, con compilatore Turbo C Borland che presento
qui di seguito. Per ognuno trovate il tipo di schermata, il sorgente e l'eseguibile.
Questi 3 programmi includono una libreria, la
spp.h.
La ver 2.0 prevede la possibilita' di selezionare il canale attraverso i tasti funzione f1..f8
e di andare in stand by mode attraverso f9. Si esce con esc.
Il canale selezionato viene evidenziato con la scritta adc sotto alla misura.
Per ogni canale si aprono finestre in senso orizzontale.
La ver 2.7 e' uguale alle 2.0 a parte che per il canale selezionato che viene
evidenziato con una freccetta a fianco del canale.
Per ogni canale si aprono finestre in senso verticale.
La ver 3.0 e' uguale alle 2.7 ma in piu' ha la possibilita' di salvare la misura su un
logfile (su cui viene scritta la tensione misurata, ora e data), premendo f10 ogniqualvolta
si ha la necessita' di loggare la misura di un canale.
Basta che quel canale sia stato preventivamente selezionato.
Chiedo scusa se i sorgenti non sono ben commentati e mezzi in inglese.
Per questa scheda ho realizzato un applicazione cgi che permette di convertire gli 8 canali
analogici in maniera remota, con la scheda adc collegata alla porta parallela del server e
ricevendo il risultato della conversione sul browser di un pc client.
E' abbastanza interessante avere un sistema del genere, in questo modo io posso leggere lo stato
di sensori, trasduttori, ecc. ecc. via internet, in qualunque posto del mondo io mi trovi.
Di seguito lo schema a blocchi del sistema descritto, gia' visto peraltro nella sezione cgi.
Per la scelta del canale da convertire ho utilizzato il seguente form di cui allego anche il sorgente html.
Con i radio button si sceglie il canale da convertire, con il tasto Converti si esegue la
conversione e si riceve sul browser una
pagina di questo tipo.
siccome ogni misura effettuata viene salvata su logfile, con data e ora, c'e' la possibilita'
di visualizzare questo logfile scegliendo il canale e premendo Logfile. L'output che si ottiene
e' una
pagina di questo tipo. A questo proposito
c'e' da dire che viene anche generato, per ogni canale, un secondo logfile, analogo al primo, solo
che al posto di data e ora viene salvato il numero di secondi trascorsi dal 01/01/1970 a quell'istante.
Ricavato il punto zero questo tipo di logfile puo' essere utile per darlo in pasto ad un foglio
elettronico, tipo excel, e realizzare dei grafici.
Di seguito riporto i moduli sorgente del cgi in oggetto, il progetto e' stato realizzato in
ambiente lccwin-32.
Per concludere riporto di seguito un grafico ottenuto con excel che sulle ordinate riporta il
valore di tensione letto (in millivolt) ed in ascissa l'orario di ciascuna lettura.
Questa tabella e' stata ottenuta salvando una pagina di excel come html ed sportando l'immagine.
Si potranno ovviamente realizzare tanti altri formati di grafico nonche' inserire delle etichette
con i valori della tensione convertita su ogni colonna dell'istogramma.