ITIS M. PLANCK · o contatore TMR0, ... Il PIC 16F877 dispone di otto ingressi analogici che...

33
1 ITIS M. PLANCK ( LANCENIGO DI VILLORBA TV) CORSO SERALE ( Classe 5°/STE ) Area di progetto anno scolastico 2004/2005 Allievi: Silvio Strafella - Luigi Baù Tutor : Prof. Italo Zaniol Termostato automatico con impostazioni/lettura da locale o da remoto via pagina Web

Transcript of ITIS M. PLANCK · o contatore TMR0, ... Il PIC 16F877 dispone di otto ingressi analogici che...

1

ITIS M. PLANCK ( LANCENIGO DI VILLORBA TV)

CORSO SERALE ( Classe 5°/STE )

Area di progetto anno scolastico 2004/2005

Allievi: Silvio Strafella - Luigi Baù Tutor : Prof. Italo Zaniol Termostato automatico con impostazioni/lettura da locale o da remoto via pagina

Web

2

Indice

Introduzione pag. 3 Schema a blocchi del sistema pag. 3 Descrizione dello Schema a blocchi del sistema pag. 4 Pagina Web memorizzata nel siteplayer pag. 5 Schema elettrico del circuito di controllo pag. 6 Analisi dello schema elettrico e dei principali componenti

- modulo siteplayer pag. 7 - Pic16F877 della Microchip pag. 8 - trasduttore di temperatura LM35 e circuito di condizionamento pag. 10

- Display LCD pag. 11 - Interfacciamento con i relè pag. 13 - Elenco componenti pag. 14 - Circuito di alimentazione pag. 14 - Costo dei principali componenti utilizzati pag. 15

Sviluppo del software -Programmazione del modulo siteplayer pag. 15 -Pagina web pag. 16 -File di definizione pag. 18 -Programmazione del PIC 16F877 pag. 19

Collaudo pag. 31 Software utilizzato pag. 33

3

Introduzione

A conclusione del corso di studi presso l’ITIS “M. PLANCK” di Lancenigo (TV), abbiamo pensato di realizzare un progetto che consentisse di unire le conoscenze sui microprocessori con quanto appreso nel corso di telecomunicazioni ed in particolare sulle reti. Utilizzando un modulo siteplayer, prodotto da Netmedia Inc., si è realizzato un Web Server vale a dire un sistema in grado di rispondere a delle chiamate da parte di un client fatte anche attraverso la più grande rete dati cioè Internet. Il modulo dispone di due porte di comunicazione una seriale e una Ethernet 10BaseT. Un circuito programmabile come il PIC 16F877 può comunicare al modulo i dati da visualizzare sulla pagina Web, che, attraverso la porta ethernet, può essere trasferita, su richiesta di un browser, ad un calcolatore. Come esempio applicativo abbiamo realizzato un termostato con la possibilità di impostare i parametri di controllo e la lettura della temperatura dell’ambiente sia localmente, cioè dove è fisicamente installato il dispositivo, sia da remoto mediante la visualizzazione/manipolazione di una pagina Web che può essere letta o modificata mediante un puntatore ottico ( mouse ).

Schema a blocchi del sistema

4

Descrizione dello schema a blocchi Dall’analisi dello schema si possono identificare tre parti fondamentali:

- il microcontrollore PIC 16F877 opportunamente interfacciato con periferiche di ingresso/uscita

- il modulo Siteplayer che memorizza la pagina web - la rete rappresentata simbolicamente con reti locali (LAN), alcuni computer e dei router con

il compito di instradare i pacchetti, a cui sono affidate le informazioni, che viaggiano nella rete.

Il PIC 16F877 è interfacciato con le seguenti periferiche:

- il modulo siteplayer - un sensore di temperatura - un tastierino a 5 pulsanti - un display LCD - due relè - due spie luminose

o tramite il sensore il PIC è in grado di conoscere la temperatura dell’ambiente in modo da visualizzarla sul display e comandare opportunamente o il sistema di riscaldamento oppure il sistema di condizionamento

o con i 5 pulsanti si impostano i parametri di controllo del sistema. SET+ e SET- consentono di selezionare il valore di temperatura desiderato

nell’ambiente ( per default è diciotto gradi centigradi ) SET consente di attivare/disattivare la modalità di controllo del sistema cioè

manuale o automatico AUX1 consente di attivare/disattivare il sistema di riscaldamento qualora la

modalità di funzionamento dell’impianto sia quella manuale AUX2 consente di attivare/disattivare il sistema di condizionamento estivo

qualora la modalità di funzionamento dell’impianto sia quella manuale. o il display LCD, a 2 righe per 16 colonne, visualizza il valore di temperatura

dell’ambiente, il valore di temperatura impostato, la modalità di funzionamento dell’impianto ( manuale = OFF, automatica = ON). Qualora da remoto i parametri di controllo dovessero essere modificati, essi vengono aggiornati automaticamente sul display.

o I due relè comandano il sistema di riscaldamento o di condizionamento o Le spie luminose a diodi led segnalano lo stato delle uscite a relè o Il modulo siteplayer e’ una interfaccia tra il microcontrollore e la rete. Mediante la

porta seriale, il PIC comunica i dati al modulo che li inserirà sulla pagina. Qualora da remoto i parametri di funzionamento venissero modificati, il modulo li comunicherà al PIC.

5

Pagina Web memorizzata nel SitePlayer

La pagina Web memorizzata nel siteplayer ha il formato di un pannello virtuale costituito da:

- un display, del tipo a 7 segmenti, dove viene riportata la temperatura dell’ambiente ( decine, unità, decimi di grado )

- un display, sempre del tipo a 7 segmenti, dove viene visualizzata la temperatura impostata - una casella di selezione che consente di selezionare il valore di temperatura desiderato

nell’ambiente. Cliccando sul pulsante ‘OK’, il valore selezionato sulla casella è inviato al siteplayer attraverso la rete e da questo al PIC tramite la porta seriale.

- Un interruttore che consente di porre l’impianto negli stati ON/OFF. Il segnalatore luminoso VERDE/ROSSO sopra l’interruttore, segnala lo stato dell’impianto.

- Due segnalatori luminosi indicano se è attivo il riscaldamento o il condizionatore o nessuno dei due.

6

Schema elettrico del circuito di controllo

Realizzazione pratica

7

Analisi dello schema elettrico e dei principali componenti

Il SitePlayer

Interfacciamento tra PIC e modulo siteplayer

Connessione alla rete

Come accennato, il siteplayer e’ una interfaccia tra una rete di tipo ethernet ed il mondo esterno. L’estratto dallo schema elettrico evidenzia questo ruolo del modulo. Il collegamento alla rete avviene mediante un connettore RJ45 mentre il dialogo col mondo esterno si ha attraverso la porta seriale collegata alla UART del PIC ( pin 25 e 26) a 9600bit/sec. Si può notare che la linea IO1 del modulo ( usata come uscita ) è collegata al pin INT del PIC. Questa è una linea di controllo: quando, mediante un browser, si modifica la pagina memorizzata sul modulo ( e quindi i parametri del sistema ), su questa linea viene generato un impulso di tensione della durata di 5 microsecondi che avverte il PIC di quanto accaduto. Poiché l’impulso è di breve durata, la linea INT dovrà essere necessariamente configurata come sorgente di interrupt. Quindi il PIC, in seguito ad una interruzione su questa linea, andrà ad interrogare il modulo per conoscere i nuovi parametri del sistema modificati da remoto. Infine la linea link del modulo, collegata ad un diodo led, è utilizzata per segnalare il corretto collegamento alla rete ( tutte le schede di rete sono equipaggiate con una segnalazione simile).

8

Il modulo siteplayer sbriga il gravoso compito di gestire tutti i protocolli di rete da quello data link a quello del livello applicazione secondo gli standard ethernet a 10Mbit/sec e TCP/IP. Esso è fisicamente costituito da un microcontrollore , l’ 89C51 della Philips, programmato per gestire i protocolli di rete e da una memoria flash in grado di memorizzare la pagina Web della massima dimensione di 48Kbyte. I due componenti, in tecnologia SMD, insieme ad altri di supporto, sono montati su uno stampato che presenta 18 terminali su due file ai bordi dello stesso. Il connettore RJ45 è dotato al suo interno di opportuni filtri.

Il connettore RJ45

Tutte le informazioni tecniche riguardanti il modulo non possono essere riportate in questa relazione; per la completa documentazione si consiglia di visitare il sito Netmedia.com.

Pic16F877 della Microchip

Nel corso di TDP del quarto e quinto anno abbiamo utilizzato i microcontrollori della Microchip in numerosi progetti per cui riassumeremo solo brevemente quali risorse sono state utilizzate in questo progetto:

- linee digitali di I/O per interfacciarsi ai pulsanti, al display, ai relè - un ingresso analogico per convertire in formato numerico il segnale elettrico fornito dal

trasduttore di temperatura - la porta seriale - due sorgenti di interrupt:

o pin INT/RB0 collegato al siteplayer o contatore TMR0, che genera un interrupt ogni millesimo di secondo, per avere un

orologio per la misura del tempo ( RTC ) Meritano un certo approfondimento la porta seriale e la conversione A/D.

9

Porta seriale Il PIC 16F877 dispone di una porta seriale che consente il dialogo tra microcontrollore e altri dispositivi pure dotati di porta seriale ( ad esempio un PC ). I pin sono RC7 che viene utilizzato come ingresso seriale e RC6 come uscita seriale. Il tipo di comunicazione può essere sincrona o asincrona. In questa analisi ci occupiamo della sola modalità asincrona. I registri dedicati ( ad esclusione di quelli di interrupt ), sono: PIR1, RCSTA, TXREG, TXSTA, SPBRG. - SPBRG ( banco1): il valore caricato in questo registro consente di stabilire la velocità di trasmissione. Riferirsi alle tabelle 10.4 e 10.5 ( pag. 108 e 109 del manuale ) per determinare il valore da caricare nel registro in base alla velocità di trasmissione desiderata. Il valore si può anche calcolare con la formula Vt = Fosc/ ( 64 ( X + 1 )) dove X è il valore da caricare in SPBRG e Fosc è la frequenza del clock del processore. Questa formula è valida quando il bit 2 del registro TXSTA è 0 ovvero è selezionato un Baud rate a bassa velocità. Se questo bit è 1, ovvero è selezionato un Baud rate ad alta velocità, la formula da usare è Vt = Fosc/ ( 16 ( X + 1 )). Esempio: sia Fosc = 4 MHz , Vt = 9600 bit/sec, Baud rate a bassa velocità. Dalla formula si ottiene X = Fosc/ (64 * Vt ) –1 = 5.51 Stabilito un valore 6 si ottiene Vt = 10.416.6 con un errore dato da (10417 – 9600)/9600 = 8.5% che è un errore non accettabile (NA) . Utilizzando un Baud rate ad alta velocità si ottiene: X = Fosc/ (16 * Vt ) –1 = 25.04. Stabilito un valore 25 si ottiene Vt = 9615.38 con un errore dato da (9615 – 9600)/9600 = 0.16 % che è un errore accettabile. - TXSTA (banco1): questo registro consente di configurare i parametri della porta di trasmissione e cioè: - comunicazione sincrona/asincrona - abilitare/disabilitare bit di parità - abilitare/disabilitare trasmissione - RCSTA ( banco0 ): questo registro consente di configurare i parametri della porta di ricezione e cioè: - abilitare/disabilitare porta seriale - abilitare/disabilitare ricezione del 9 bit ( bit di parità) - riconoscere errori di framing e di overrun - TXREG (banco 0): in questo registro si carica il valore a 8 bit da inviare - RCREG (banco 0): in questo registro si legge il valore ricevuto a 8 bit - PIR1 (banco 0 ): il bit 5 di questo registro si porta a 1 quando il registro RCREG contiene un dato pronto. CONVERSIONE A/D Il PIC 16F877 dispone di otto ingressi analogici che consentono di campionare e convertire in formato numerico segnali analogici. Il segnale analogico, prima di essere presentato su un ingresso, deve essere opportunamente filtrato per evitare distorsioni di aliasing. All’interno del PIC è previsto un multiplexer analogico, un campionatore, un circuito di memoria e un convertitore analogico digitale ad approssimazioni successive. Lo schema a blocchi è mostrato in figura.

10

- il multiplexer consente, mediante linee di selezione, di poter convertire in formato numerico più segnali analogici applicati ai vari ingressi ANi, disponendo di un unico convertitore A/D.

- il circuito S/H ( sample and hold ) campiona il segnale e lo memorizza lasciando così tempo al convertitore di fare la conversione

- il convertitore ad approssimazioni successive converte il segnale analogico in un numero a 10 bit.

Per tutte le operazioni di conversione il PIC dispone di 4 registri dedicati. Per ben comprendere le modalità di programmazione è indispensabile consultare il manuale d’uso del PIC. Qui si riassumono brevemente le funzioni dei vari registri.

- registro ADRESH ( banco 0 ): contiene la parte alta del risultato della conversione - registro ADRESL ( banco 1 ): contiene la parte bassa del risultato della conversione - registro ADCON1 ( banco 1 ). Consente di:

o programmare come il risultato della conversione debba trovarsi nei due registri ADRESH e ADRESL. Infatti il risultato può essere giustificato a destra o a sinistra come mostrato in figura.

Risultato giustificato a sinistra ADRESH ADRESL

Risultato giustificato a destra ADRESH ADRESL

( x = valore di un bit risultato della conversione )

o selezionare quali ingressi del PIC siano quelli analogici e stabilire i valori di Vref+ e Vref-

- registro ADCON0 ( banco 0 ). Consente di:

o selezionare il clock per l’ADC o indirizzare il multiplexer analogico o abilitare/disabilitare il convertitore o avviare la conversione ( SOC ) o sapere quando la conversione è terminata ( EOC )

Per quanto concerne la giustificazione del risultato, si può dire che, in generale, per semplificare l’elaborazione dello stesso, è conveniente quella a sinistra. Essa consente, trascurando i due bit meno significativi, di avere il risultato a 8 bit tra l’altro direttamente nel banco 0.

Il sensore di temperatura LM35 ed il circuito di condizionamento Come sensore di temperatura abbiamo usato un LM35 con f.d.t. 10mV/°C e un errore di 0.5°C. In figura è riportata la piedinatura del componente, una tipica applicazione e alcune caratteristiche e prestazioni.

x x 0 0 0 0 0 0 x X x x x x x x

x x x x x x x x 0 0 0 0 0 0 x x

11

Poiché il trasduttore fornisce 10mV/°C, (250mV a 25°C ), mentre il convertitore del PIC ha un valore di fondo scala di 5V, si rende necessario un circuito di condizionamento che amplifichi il segnale fornito dal convertitore. Allo scopo si è utilizzato un amplificatore operazionale in connessione non invertente con guadagno circa 10. Nella rete di retroazione è presente un trimmer che consente di regolare il guadagno dell’amplificatore, operazione necessaria per la taratura. Si noti anche la presenza di un condensatore che introduce un certo filtraggio del segnale fornito dal trasduttore.

Interfacciamento tra PIC e sensore di temperatura mediante circuito di condizionamento

Display LCD

Il display LCD viene utilizzato per comunicare all’utente la temperatura dell’ambiente, lo stato dell’impianto e inoltre la visualizzazione della temperatura desiderata. I display LCD, per poter essere utilizzati, devono essere opportunamente programmati. Come si può notare dallo schema elettrico, il display dispone di diverse linee, alcune di controllo, altre usate per inviare i dati. Queste ultime sono collegate al porto D mentre le linee di controllo ( E,RS ) sono collegate ai pin RC4 e RC5. Anche la linea RW è di controllo ma viene collegata a massa. Il significato di queste linee è il seguente:

• R/W: quando il valore di questa linea è basso si possono inviare dati di configurazione o di scrittura, al contrario si possono leggere i dati in esso memorizzati .

• RS: quando questa linea è alta si possono inviare i codici ASCII per la visualizzazione di un carattere alfanumerico sul display; quando è bassa si possono inviare delle istruzioni.

• E : abilita l’acquisizione del dato o del comando presentato sul bus, con una transizione L-H-L del segnale

12

Interfacciamento tra PIC e display LCD

Per quanto concerne la programmazione del dispositivo, bisogna riferirsi alle caratteristiche fornite dal costruttore. In tempi non tanto remoti i vari costruttori utilizzavano modalità di programmazione differenti; ora, fortunatamente, si è ora imposto uno standard che è quello Hitachi leader in questo settore. Riassumiamo in tabella i vari comandi e modi di utilizzo del display.

13

Tabella di programmazione del display

Interfacciamento con i relè

Le due uscite digitali AUX1 e AUX2 sono a relè. Questi ultimi sono pilotati da due transistor BC337 di tipo NPN. Sul collettore dei due BJT sono collegati anche due led che sono nello stato ON ( accesi ) quando i BJT sono in conduzione e quindi i relè eccitati ed i contatti chiusi. Due diodi raddrizzatori in parallelo alle bobine dei relè, sono a protezione dei collettori dei BJT quando essi passano dallo stato ON ( saturazione ) a quello OFF (interdizione ).

Interfacciamento tra PIC e relè

14

Elenco componenti

Tutti i resistori sono da 1/4 W tolleranza 5% R1 = 33KΩ

R2 = Trimmer 1KΩ R3 = 3,3KΩ R4,R9,R10 = 1KΩ R5,R6 = 3,3Ω R7 = 10KΩ R8 = Trimmer 10KΩ

C1,C2,C5,C6,C7,C8 = 22pF C3,C4 = 100nF

C9 = 1µF C8 = 470microF

IC1 = PIC16F877 IC2 = TL082 IC4 = LM35 Sensore di temperatura

T1,T2 = BC 337 - NPN Q1 = quarzo 4 MHz D1,D2 = 1N4004 D3 = 1N4148

N° 6 Pulsanti N° 4 Morsettiere a 2 terminali N° 2 Relè 5V N° 3 Led N° 1 Display LCD data image N° 1 Modulo Site Player N° 1 Connettore RJ45 LF1S

Circuito di alimentazione

Per alimentare la scheda, abbiamo realizzato un semplice alimentatore duale con uscite ±5V. La tensione duale è necessaria per alimentare l’amplificatore operazionale presente nel circuito di condizionamento.

Schema elettrico dell’alimentatore

15

I +5V sono utilizzati per alimentare il PIC, il modulo Siteplayer, i relè ecc. Il trasformatore con presa centrale ha una tensione efficace sul secondario di 12V . Gli stabilizzatori utilizzati sono i classici 7805 e 7905.

Costo dei principali componenti utilizzati

I componenti utilizzati sono quasi tutti forniti dalla scuola e dopo una ricerca siamo risaliti al loro costo che, è importante sottolineare, è privo di sconti e si riferisce ad un singolo pezzo. Si può quindi pensare che i costi si riferiscano alla realizzazione di un prototipo: se il circuito dovesse essere prodotto in serie e con numero elevato di pezzi, il costo potrebbe essere ridotto di oltre il 50%. Modulo Siteplayer 35,00 euro PIC 16F877 10,00 “ Connettore RJ45 7,00 “ Display LCD 2,00 “ ( acquistato alla fiera dell’elettronica di Pordenone ) LM35 2,50 “ Trasformatore 3,50 “ Stabilizzatori di tensione 2,70 “

Sviluppo del software

Programmazione del modulo Siteplayer Per programmare il Siteplayer è necessario:

a) costruire la pagina Web da memorizzare nel modulo utilizzando il linguaggio di programmazione HTML

b) creare un file di definizione che sarà utilizzato per guidare un programma linker, scaricabile gratuitamente dal sito www.siteplayer.com , il cui compito è di tradurre in codice oggetto gli ordini elencati nel file di definizione e la pagina Web.

c) Il file di definizione compilato, potrà essere trasferito sul modulo con l’ausilio del programma linker utilizzando la rete alla quale sarà collegato il modulo.

Tendina per configurazione del programma linker E’ importante fornire l’indirizzo IP del modulo e l’eventuale password

16

Tendina per compilare e caricare il file nel modulo

Pagina Web Il linguaggio html consente di preparare pagine ipertestuali e multimediali che possono essere: * visualizzate sul proprio computer * insediate su un server che le renderà visibili a tutto il mondo. * la visualizzazione è a carico del client (per mezzo di un browser) I browser attualmente disponibili sono in grado di visualizzare: * files html (.HTM, .html) * immagini (.GIF, .JPG,) * i contributi audio (.WAV, .AU, .AIF, ecc.) * le animazioni (.MPG, mpeg, .MOV, movie, .AVI, ecc.) * i testi formattati (.RTX, .WRI, .DOC, ecc.) Una pagina html è un semplice file di caratteri ASCII contenente: * il testo da visualizzare; * stringhe che cominciano con il carattere & per inserire accenti e caratteri speciali; * marcatori o tag o mark racchiusi tra i caratteri < > che: 1. modificano il formato dei caratteri e dei paragrafi 2. modificano i colori 3. organizzano tabelle 4. inseriscono immagini, suoni e animazioni 5. inseriscono i links (collegamenti) con le altre pagine. Produrre una pagina html consiste quindi in: * scrivere un file ASCII con qualunque editor, contenente particolari tag che svolgono funzioni differenti. Ogni tag è identificato da un nome racchiuso tra <> in modo che il browser possa distinguere tra testo e istruzioni HTML. Ogni segnale e terminato racchiudendo il nome tra </> * assegnare al file un nome con estensione .htm o .html * salvare il file in modalità: documento di testo * visualizzare il file con un browser e correggerlo fino ad ottenere l'effetto desiderato Il tag di seguito riportato definisce la riga di testo ITIS MAX PLANCK opportunamente formattata. <tr> <td colspan="3"><div align="center"><font size="3" face="Arial, Helvetica, sans-serif"> <strong>ITIS MAX PLANCK</strong></font></div>< /td> </tr> Il marcatore che svolge la funzione di inclusione di una immagine all'interno di un testo ha la seguente sintassi: <img src="file-grafico">

17

Normalmente, per non complicare le cose, tutti i file che compongono una pagina Web risiedono nella stessa directory del file HTML; in caso contrario bisogna specificare l’indirizzo preciso. Facciamo un esempio pratico per chiarirci le idee. Immaginiamo che il file HTML sul quale stiamo lavorando (prova.htm) si trovi nella directory 'testi' e l'immagine da inserire (pippo.gif) in una directory 'immagini' contenuta all'interno di 'testi'. In una struttura come questa, la sintassi del comando <img> contenuto in prova.htm è: <img src="immagini/pippo.gif"> Il seguente tag visualizza all’interno della pagina il simbolo dell’istituto con opportune dimensioni. <tr> <td colspan="3"><div align="center"><img src="s imb_planck.gif" width="37" height="37"></div></td> </tr>

Esso è stato creato con un comune programma di grafica ( MGI PhotoSuite SE ). Si riportano altri simboli utilizzati di cui alcuni scaricati dal sito www.siteplayer.com .

Display interruttore spie colore sfondo Si riporta di seguito il file completo che costituisce la pagina Web. <html> <head> <title>INDEX</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="refresh" content="10"> </head> <body bgcolor="#FFFFFF" background="sfondo.gif"> <table width="300" border="0" align="center" cellpa dding="0" cellspacing="0" bordercolor="#FFFFFF" bgc olor="#FFFFFF"> <tr> <td colspan="3"><div align="center"><img src="s imb_planck.gif" width="37" height="37"></div></td> </tr> <tr> <td colspan="3"><div align="center"><font size="3" face="Arial, Helvetica, sans-serif"> <strong>ITIS MAX PLANCK</strong></font></di v></td> </tr> <tr> <td colspan="3"><div align="center"><font color ="#999999" size="1" face="Arial, Helvetica, sans-serif">WEB SERVER </font></div></td> </tr> <tr bgcolor="#333333"> <td width="130"><div align="center"><font colo r="#00FF00" size="2" face="Arial, Helvetica, sans-serif"><strong> Temperature &deg;C </strong></font></div></td> <td width="80"><div align="center"><font col or="#00FF00" size="2" face="Arial, Helvetica, sans-serif"></font></div></td> <td width="150"><div align="center"><fon t color="#00FF00" size="2" face="Arial, Helvetica, sans-serif"><strong> Set Temperature</strong></font></div></td> <td>&nbsp;</td> </tr> <tr bgcolor="#333333"> <td width="129" bgcolor="#333333"> <div align="center"><img src="/^Cifra5:1_BLK.jpg"> <img src="/^Cifra4:1_BLK.jpg"> <img src="DP _BLK.jpg"> <img src="/^Cifra3:1_BLK.jpg"> </div></t d> <td width="1" bgcolor="#333333"><div align="cen ter"><font color="#00FF00" face="Arial, Helvetica, sans-serif"></font></div></td> <td width="150" bgcolor="#333333"> <div align="center"><img src="/^Cifra2:1_BLK.jpg"> <img src="/^Cifra1:1_BLK.jpg"> </div></td> <td>&nbsp;</td> </tr> <tr bgcolor="#333333" > <td width="100"bgcolor="#333333""><div align="cente r"><img src="lamp_^portc'0.gif" width="17" height=" 17"></font></div></td> <td width="30"><div align="center"><font color="#0 0FF00" size="2" face="Arial, Helvetica, sans-serif"></font></div></td> <td width="130"><div align="center"><font color ="#00FF00" size="2" face="Arial, Helvetica, sans-serif"><form method="get" action="fi.spi" name="forminput"> <p align="center"> <select name="settemp" size="1"> <option value="^tempo">^tempo</option>

18

<option value=14>14</option> <option value=15>15 </option> <option value=16>16 </option> <option value=17>17 </option> <option value=18>18 </option> <option value=19>19 </option> <option value=20>20 </option> <option value=21>21 </option> <option value=22>22 </option> <option value=23>23 </option> <option value=24>24 </option> </select> <br> <br> <br> <input type="submit" name="OK2" value="OK "> </p> </form></font></div> </td> <td>&nbsp;</td> </tr> <tr bgcolor="#333333"> <td width="100"><div align="center"><font co lor="#00FF00" size="2" face="Arial, Helvetica, sans-serif"> <strong>ON</strong></font></div></td> <td width="20"><div align="center"><font color="#0 0FF00" size="2" face="Arial, Helvetica, sans-serif"> <strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cold</strong> </font></div></td> <td width="150"><div align="center"><font colo r="#00FF00" size="2" face="Arial, Helvetica, sans-serif"> <strong>warm</strong></font></div></td> <td>&nbsp;</td> </tr> <tr bgcolor="#333333"> <td width="100"><div align="center"><a href="x. spi?portc=^portc~0"><img src="toggle_^portc'0.gif" width=16 height=36 name="OFF" border="0" alt="ON"></a></div></td> <td width="80"bgcolor="#333333""><div align="cen ter"><img src="lamp_^portc'2.gif" width="17" height ="17"></font></div></td> <td width="120"bgcolor="#333333""><div align="ce nter"><img src="lamp_^portc'3.gif" width="17" heigh t="17"></font></div></td> <td>&nbsp;</td> </tr> <tr bgcolor="#333333"> <td width="100"><div align="center"><font color ="#00FF00" size="2" face="Arial, Helvetica, sans-serif"> <strong>OFF</strong></font></div></td> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr bgcolor="#333333"> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> <tr> <tr bgcolor="#333333"> <td colspan="3"><div align="center"><img src="l inea.gif" width="320" height="4"></div></td> </tr> <tr> <tr bgcolor="#333333"> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> <tr> <tr bgcolor="#333333"> <td colspan="4"> <div align="center"> <font colo r="#999999" size="2" face="Arial, Helvetica, sans-serif"> Bau Luigi &nbsp;&nbsp;&nbsp; Strafella Silvi o <br> Tutor Prof. Zaniol Italo &nbsp;&nbsp;&nbsp; &copy All rights reserved</font> </div></td> </tr> </table> </body> </html>

Il seguente tag impone il rinfresco della pagina ogni 10 secondi. <meta http-equiv="refresh" content="10">

File di definizione Come detto in precedenza, questo file viene utilizzato per guidare il compilatore alla produzione del codice oggetto da caricare nel modulo siteplayer. Il file specifica:

- un nome da dare al dispositivo

19

- un indirizzo statico o dinamico al modulo ( nel nostro caso è stato assegnato un indirizzo statico )

- una password per accedere al modulo - l’indirizzo statico da memorizzare nel modulo. Nel nostro caso si è assegnato l’indirizzo

privato di classe C "192.168.0.250" ampiamente utilizzato nelle reti locali di piccole dimensioni. Questo indirizzo dovrà essere fornito al linker per poter caricare nel modulo il programma. Per default questo è anche l’indirizzo fornito dal costruttore da utilizzare la prima volta che si programma il modulo.

- se generare un breve impulso di interrupt nel pin 11 collegato al pin RB0 del PIC - gli indirizzi dei file che saranno utilizzati/generati dal linker - gli indirizzi RAM degli oggetti che saranno utilizzati/modificati dal browser e dal PIC

Si riporta di seguito il file completo di definizione. ; Initial receiver DEFINITIONS ; ;$Devicename sets the name or description of the de vice $Devicename "ITIS PLANCK" ;$DHCP on sets SitePlayer to find its IP address fr om a DHCP server $DHCP off ;$DownloadPassword sets password for downloading we b pages and firmware $DownloadPassword "" ;$SitePassword sets password for browsing web pages $SitePassword "" ;$InitialIP sets SitePlayer’s IP address to use if no DHCP server is available $InitialIP "192.168.0.250" ;$PostIRQ on sets SitePlayer to generate a low leve l IRQ on pin 11 $PostIRQ on ;$Sitefile sets the binary image filename that will be created $Sitefile "C:\Site_Player\lan1\web_pag\in_out.spb" ;$Sitepath sets the root path of the web pages for this project $Sitepath "C:\Site_Player\lan1\web_pag\in_out\lan2" ; ; Receiver OBJECTS ; org 05h tempo db 0 ;visualizza selezione Cifra5 db 0 ;TRE BYTE VALORE TEMP Cifra4 db 0 Cifra3 db 0 Cifra2 db 0 ;DUE BYTE SET POINT Cifra1 db 0 portc db 0 ;STATO IMPIANTO set db 0 ;VALORE SET POINT TRASMESSO DA HOST REMOT O

La RAM utilizza 8 locazioni da 8 bit ognuna delle quali memorizza una variabile: il commento a fianco della dichiarazione delle variabili specifica la funzione desiderata. Le variabili sono tutte inizializzate a zero.

Programmazione del PIC 16F877 Nonostante le apparenze la programmazione del processore è risulta abbastanza semplice in quanto sono state utilizzate le tecniche della programmazione TOP DOWN e sono state sfruttate le conoscenze acquisite in precedenti progetti. Analizzando il programma principale si nota infatti l’ampio uso di sottoprogrammi ( anche nidificati ): questo significa che il problema è stato suddiviso in tanti sottoproblemi ognuno risolto da un sottoprogramma.

20

Il compito del programma principale è quello di articolare secondo una opportuna sequenza tutte le routine progettate. È da dire che molte routine utilizzate sono state fornite dall’insegnante, in quanto di utilità generale, oppure sono state da noi studiate e messe a punto in precedenti progetti; il nostro compito è stato quello di adattarle al caso in oggetto senza dover riprogettare ogni singola routine e riscrivere tutto il software. Per la progettazione del programma ci siamo aiutati con diagrammi di flusso, non riportati nella relazione in quanto solo sottoforma di bozza, che sicuramente semplificano la ricerca degli algoritmi più opportuni alla soluzione di un problema specifico. Di seguito saranno analizzate alcune routine e, in parte, il programma principale; si demanda ai commenti una più completa analisi del software ( purtroppo per limiti di tempo i commenti non sempre risultano adeguati ). PROGRAMMA PRINCIPALE La prima parte del MAIN, che costituisce la maggior parte delle istruzioni, serve a configurare il PIC. Il programma di controllo vero e proprio inizia dalla etichetta LOOP1 ed è composto da sole undici istruzioni di cui sette sono chiamate a sottoprogrammi. La locazione di memoria denominata FLAG_SYTE è stata utilizzata come flag. Inizialmente posta a zero, essa viene portata a uno dalla routine di risposta all’interrupt “SYTE_PLAYER” da parte del siteplayer. Se il programma principale trova questo flag a 1, chiamerà in esecuzione la routine di risposta RISPONDI_SYTE che riporterà il flag a zero e procederà ad interrogare il modulo aggiornando i parametri di configurazione del sistema. Il loop, eseguito due volte al secondo, svolge i seguenti compiti affidati ai vari sottoprogrammi:

- misura la temperatura ambiente - visualizza la temperatura sul display

- analizza lo stato del sistema e controlla le uscite ( è stata stabilita una isteresi di un grado centigrado sull’impostazione desiderata della temperatura ). Se mediante i pulsanti viene modificato lo stato del sistema, i nuovi valori vengono visualizzati sul display.

- Aggiorna il siteplayer - Controlla se il modulo ha generato un interrupt

ROUTINE DISPLAY Questa è una tra le tante routine utilizzate per gestire il display LCD. Tutte queste routine sono state utilizzate in precedenti progetti e quindi ampiamente testate. La routine trasferisce il contenuto dell’accumulatore sul bus del display, porta l’impulso di abilitazione ( E ) a 1 per un microsecondo e poi di nuovo a 0, infine introduce un ritardo di almeno un millesimo di secondo come specificato dal costruttore ( il tempo minimo è di 43 microsecondi ). DISPLAY MOVWF PORTD ;invia dato BSF PORTC,4 ;impulso di abilitazione a 1 NOP BCF PORTC,4 ;impulso di abilitazione a 0 CALL MS1 ;ritardo 1ms RETURN ;ritorna al programma chiamante

ROUTINE TEMPERATURA

Questa routine si fa carico di acquisire il campione analogico di temperatura e di fornirlo in un formato adatto per essere convertito in codice BCD per essere visualizzato sul display e trasferito al modulo siteplayer. Ci occuperemo in particolare della elaborazione del dato acquisito dal convertitore. Tarato il circuito di condizionamento in modo che a 48 gradi centigradi corrisponda la tensione di fondo scala del convertitore, cioè 5V, si ha la seguente proporzione tra valore di temperatura e valore numerico a 8 bit fornito dal convertitore:

255 : 48 = N : T

21

dove N è il valore numerico fornito dal convertitore e T la temperatura. Elaborando la proporzione si ha T = N * 0.188 Da quanto appreso dal calcolo numerico si ha, con buona approssimazione, T = N/8 + N/16. Dunque, una volta acquisito il valore N, il programma dovrà calcolare T secondo l’espressione trovata. Il valore di T sarà poi utilizzato per il confronto con il set point cioè il valore di temperatura stabilito dall’utente. Per la visualizzazione della temperatura a tre cifre sul display ( in decimi ), la proporzione diventa:

255 : 480 = N : T Cioè T = N * 1.88 e T = N + N/8 + N/16. Allo scopo, siccome una locazione ad 8 bit contiene al massimo il valore 255, si dovrà utilizzare per l’elaborazione un formato a 16 bit sufficiente a contenere il valore 480. Le locazioni DATOH e DATOL sono usate per contenere il valore di temperatura in decimi che sarà poi convertito in codice BCD dalla routine BCD. Si ricorda che per dividere un numero per 2N, sono sufficienti N scorrimenti a destra del dato. Questo tipo di elaborazione è molto più semplice rispetto a complesse routine che eseguono la divisione. ROUTINE AGGIORNA_SYTE

Per inviare dati al siteplayer è necessario utilizzare un protocollo di comunicazione specificato dal costruttore ( si demanda ai data sheet per una completa trattazione ). Qui riassumiamo brevemente come si deve procedere per inviare dati al modulo attraverso la porta seriale:

- si invia un comando di scrittura costituito da un numero che si ricava secondo questa relazione: 128 + numero di byte da inviare – 1. Nel nostro caso si inviano sei byte cioè tre byte valore temperatura, due byte set point, un byte stato sistema e quindi il valore del numero vale 133.

- Si invia l’indirizzo della RAM dove iniziare a scrivere i dati. Analizzando il file di definizione si deduce facilmente che l’indirizzo vale 6.

- Si inviano i sei dati desiderati che andranno ad aggiornare la pagina web. - Nella trasmissione dei dati è necessario ogni volta introdurre un ritardo di almeno 5

microsecondi. ROUTINE RISPONDI_SYTE

Anche per leggere i dati contenuti nel modulo bisogna rispettare un protocollo di comunicazione che consiste in:

- inviare un commando di lettura corrispondente al codice 192 - inviare l’indirizzo della locazione di memoria. Nel nostro caso è la 12 che contiene il set

point. - Attendere che il siteplayer invii il dato testando il bit 5 del registro PIR1 che si porta a 1

quando il buffer della seriale viene caricato con un dato. Una volta ricevuto il dato, il PIC controlla se esso è stato modificato. Se ciò è avvenuto esso provvederà a modificare il proprio set point e aggiornerà la pagina web alla locazione 5 che contiene il valore di selezione. Qualora il set point non sia stato modificato verrà letto alla locazione 11 il nuovo stato del sistema ( ON/OFF).

ARRAY TABELLA

A partire dalla locazione 5 della memoria programma del PIC, viene dichiarata una tabella di dati che contiene i codici ASCII dei 10 simboli del sistema di numerazione decimale. Questi simboli sono utilizzati per inviare al display LCD i codici che consentono di visualizzare il valore di temperatura ed il set point. Il puntatore viene passato alla tabella mediante l’accumulatore. Con l’istruzione ADDWF PCL viene sommato al contatore di programma l’offset fornito dall’accumulatore. Dopo la somma il contatore si porterà in una delle locazioni che contiene l’istruzione RETLW che caricherà in accumulatore il dato contenuto nella riga puntata e ritornerà al programma chiamante che recupererà dall’accumulatore il codice da inviare al display.

22

Di seguito viene riportato il codice sorgente completo.

Codice sorgente

;************************************************** ************************** ;*** SITE PLAYER *** ;************************************************** **************************

#include <p16f877.inc> ;DIRETTIVA DI ASSEMBLAGGIO

;********************************DICHIARA LE LOCAZ IONI RAM UTILIZZATE SAVE_W EQU 0X25 SAVE_S EQU 0X26 MS EQU 0X27 SEC EQU 0X28 DS EQU 0X29 DATO EQU 0X2A CONTA EQU 0X2B CONTA9 EQU 0X2C CONTA20 EQU 0X2D DATOL EQU 0X2E DATOH EQU 0X4C CENTINAIA EQU 0X2F DECINE EQU 0X30 UNITA EQU 0X31 SAVE EQU 0X32 FLAG EQU 0X33 FLAG1 EQU 0X34 MST EQU 0X35 SEC_U EQU 0X36 SEC_D EQU 0X37 UNITAAA EQU 0X38 DECINEAA EQU 0X39 CENTINAIAAA EQU 0X3D BINARIOAA EQU 0X3A BINARIO8 EQU 0X3B BINARIO32 EQU 0X3C TEMPCON EQU 0X3F AA EQU 0X40 SETFLAG EQU 0X41 SAVE1 EQU 0X42 BINARIOX2 EQU 0X43 BINARIOX4 EQU 0X44 BINARIOX8 EQU 0X45 BINARIOX10 EQU 0X46 FLAG_SYTE EQU 0X47 CONTAS EQU 0X48 TX EQU 0X49 MEM1 EQU 0X4A MEM_OUT EQU 0X4B MIGLIAIA EQU 0X4D DATOLL EQU 0X4E BINARIO EQU 0X4F MPORTC EQU 0X50 ;************************************************* VETTORI ORG 0 ;VETTORE DI RESET GOTO MAIN ORG 4 ;VETTORE DI INTERRUPT GOTO INTERRUPT ;*************************************************T ABELLA DATI TABELLA ADDWF PCL RETLW '0' RETLW '1' RETLW '2' RETLW '3' RETLW '4' RETLW '5' RETLW '6' RETLW '7' RETLW '8' RETLW '9' ;*************************************************P ROGRAMMA PRINCIPALE MAIN BSF STATUS,5 ;SELEZIONA BANCO1 PER CONFIGURARE PIC MOVLW B'00001110' ;RA0 E RA1 COME INGRESSI ANALOGICI

23

MOVWF ADCON1 MOVLW B'00000001' ;ABILITA PULL UP PORTB - SELEZIONA CLOCK PER TMR0 MOVWF OPTION_REG ;ASSEGNA PRESCALE A TMR0 - CONFIGURA ;PRESCALER PER 4MHz -INTERRUPT SU FRONTE DI DISCESA

CLRF TRISD ;CONFIGURA PORTOD COME USCITA BCF TRISC,2 ;CONFIGURA LE USCITE DEL PORTOC BCF TRISC,3 BCF TRISC,4 BCF TRISC,5 MOVLW D'25' ;BAUD RATE 9600 BIT/SEC CONFIGURA PORTA SERIALE MOVWF SPBRG MOVLW B'00100100' ;CONFIGURA TXSTA MOVWF TXSTA BCF STATUS,5 ;BANCO0 BCF PORTC,2 ;USCITE OFF BCF PORTC,3 CLRF FLAG_SYTE ;DISABILITA CHIAMATE DA SYTE PLAYER MOVLW B'10010000' ;CONFIGURA RCSTA MOVWF RCSTA MOVLW B'10100000' ;ABILITA INTERRUZIONI MOVWF INTCON CALL SEC_1 ;ATTESA 1 SECONDO PER ASSESTAMENTO TENSIONE SU LCD CALL CONFIGURA_LCD MOVLW D'18' ;INIZIALIZZA SET POINT MOVWF AA CALL AN ;VISUALIZZA MESSAGGI PRIMA RIGA CALL ANOFF CALL SET_DISP ;VISUALIZZA SET POINT CLRF SETFLAG ;DISABILITA MODIFICA STATO SISTEMA CALL INIT_SYTE ;INIZIALIZZA COLLEGAMENTO CON SYTE PLAYER BSF INTCON,4 ;ABILITA INTERRUPT DA SYTE PLAYER LOOP1 CALL TEMPERATURA ;ACQUISISCI TEMPERATURA CALL VIS_TEMP ;VISUALIZZA TEMPERATURA CALL CONTROLOFF ;VERIFICA SISTEMA ON/OFF E CONFRONTA LE TEMP. CALL SETTEMP ;DI SET E DEL SENSORE CALL SETT CALL AGGIORNA_SYTE MOVF FLAG_SYTE ;CONTROLLA CHIAMATE WEB BTFSS STATUS,2 CALL RISPONDI_SYTE GOTO LOOP1 ;ROUTINE CHE VISUALIZZA TEMPERATURA**************** **************************** VIS_TEMP BCF PORTC,5 ;PREDISPONI PER INVIO ISTRUZIONE CALL MS1 MOVLW 0X8C ;CURSORE SULLA COLONNA 13 CALL DISPLAY BSF PORTC,5 ;PREDISPONI PER INVIO DATI MOVF CENTINAIA,0 CALL TABELLA CALL DISPLAY MOVF DECINE,0 CALL TABELLA CALL DISPLAY MOVLW '.' CALL DISPLAY MOVF UNITA,0 CALL TABELLA CALL DISPLAY RETURN ;*********************** ROUTINE CHE VISUALIZZANO SET POINT ********************** SET_DISP MOVF AA,0 MOVWF BINARIOAA CALL BCDAA CALL DISP_SET RETURN DISP_SET BCF PORTC,5 CALL MS1 MOVLW 0xCE ;DISPLAY SU SECONDA RIGA CALL DISPLAY BSF PORTC,5 MOVF DECINEAA,0 CALL TABELLA CALL DISPLAY MOVF UNITAAA,0 CALL TABELLA CALL DISPLAY RETURN

24

;**************************ROUTINE SET ON/ OFF***** ************************** SETT BTFSC PORTB,1 GOTO EXIT2 BCF PORTC,2 BCF PORTC,3 MOVF SETFLAG BTFSC STATUS,2 GOTO SETON GOTO SETOFF SETON CALL ANON MOVLW 1 MOVWF SETFLAG RETURN SETOFF CALL ANOFF MOVLW 0 MOVWF SETFLAG GOTO EXIT2 EXIT2 CALL RITARDO RETURN

;**************************SET TEMPERATURA********* ********************** SETTEMP MOVF SETFLAG BTFSC STATUS,2 GOTO SALTA LOOPPIU BTFSC PORTB,2 GOTO MENO GOTO PIU PIU INCF AA CALL SET_DISP CALL RITARDO GOTO LOOPPIU ;ATTENDI 0.5 SECONDI MENO BTFSC PORTB,3 GOTO SALTA DECF AA CALL SET_DISP CALL RITARDO ;ATTENDI 0.5 SECONDI GOTO MENO SALTA RETURN ;**********************ROUTINE CONTROLLO SISTEMA*** ****************** CONTROLOFF MOVF SETFLAG BTFSS STATUS,2 GOTO CONTROLON BTFSC PORTB,4 GOTO AUX2 BSF PORTC,3 ; CALORE ON BCF PORTC,2 ; FREDDO OFF AUX2 BTFSC PORTB,5 GOTO EXIT1 BCF PORTC,3 ; CALORE OFF BSF PORTC,2 ; FREDDO ON EXIT1 RETURN CONTROLON MOVF BINARIO,0 MOVWF SAVE1 MOVF AA,0 SUBWF SAVE1 BTFSC STATUS,0 GOTO VERIFICA FREDDO BSF PORTC,3 BCF PORTC,2 CALL RITARDO RETURN VERIFICA BTFSS STATUS,2 GOTO CALDO GOTO NORMALE CALDO BCF PORTC,3 BSF PORTC,2 CALL RITARDO RETURN NORMALE BCF PORTC,3 BCF PORTC,2 CALL RITARDO RETURN ;**************** ROUTINE LEGGI TEMPERATURA TEMPERATURA MOVLW B'01000001' ;clock AD: f=fosc/8 (bit7 e bit6), seleziona AN1 MOVWF ADCON0 ;ADC OPERATIVO CALL DELAY CALL CONVERSION ;START CONV E ATTESA FINE CONVERSIONE

25

CLRF DATOH ;PREDISPONI PER ADATTAMENTO MOVF ADRESH,0 ;LEGGI CONVERSIONE MOVWF DATOL ;SALVA DATO ACQUISITO MOVWF BINARIO ;CALCOLA TEMPERATURA A DUE CIFRE PER CONFRONTO BCF STATUS,0 ;DIVIDI PER 2 RRF BINARIO BCF STATUS,0 ;DIVIDI PER 4 RRF BINARIO BCF STATUS,0 ;DIVIDI PER 8 RRF BINARIO MOVF BINARIO,0 MOVWF BINARIO8 BCF STATUS,0 ;DIVIDI PER 16 RRF BINARIO BCF STATUS,0 ;DIVIDI PER 32 RRF BINARIO MOVF BINARIO8,0 ADDWF BINARIO ;CALCOLA TEMPERATURA A TRE CIFRE PER VISUALIZZARE BCF STATUS,0 ;DIVIDI PER 2 RRF DATOL MOVF DATOL,0 ;SALVA N/2 MOVWF DATOLL BCF STATUS,0 ;DIVIDI PER 4 RRF DATOL BCF STATUS,0 ;DIVIDI PER 8 RRF DATOL BCF STATUS,0 ;DIVIDI PER 16 RRF DATOL MOVF DATOLL,0 ADDWF DATOL ;SOMMA N + N/2 + N/16 MOVF ADRESH,0 ADDWF DATOL BTFSC STATUS,0 INCF DATOH CALL BCD ;CONVERTI IN BCD RETURN ;**************************ROUTINE RITARDO CIRCA 17 MICROSECONDI PER STABILIZZARE TENSIONE SU HOLD DELAY NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP RETURN ;**********************ROUTINE START CONVERSIONE E FINE CONVERSIONE CONVERSION BSF ADCON0,2 EOC BTFSC ADCON0,2 ;FINITA CONVERSIONE? GOTO EOC RETURN ; ******************************** ROUTINE CONVERSI ONE BINARIO - BCD ******************** BCD CLRF CENTINAIA ;INIZIALIZIA LOCAZIONE DI MEMORIA CLRF MIGLIAIA CLRF DECINE MOVF DATOL,0 MOVWF SAVE M0 MOVLW 4 ;CONTROLLA SE DATO DA CONVERTIRE >=1000 SUBWF DATOH,0 BTFSS STATUS,0 GOTO M1 INCF MIGLIAIA ;SE SI INCREMENTA MIGLIAIA E SOTTRAI 1000

26

MOVLW 0XE8 SUBWF DATOL BTFSS STATUS,0 DECF DATOH MOVLW 3 SUBWF DATOH GOTO M0 M1 MOVLW 3 ;CONTROLLA SE DATO DA CONVERTIRE >=1000 SUBWF DATOH,0 BTFSS STATUS,2 GOTO M2 MOVLW 0XE8 SUBWF DATOL,0 BTFSS STATUS,0 GOTO M2 INCF MIGLIAIA ;SE SI INCREMENTA MIGLIAIA E SOTTRAI 1000 MOVLW 0XE8 SUBWF DATOL MOVLW 3 SUBWF DATOH GOTO M2 M2 MOVF DATOH ;CONTROLLA SE DATO PARZIALE >255 BTFSC STATUS,2 GOTO LP_BCD1 MOVLW D'100' ;CALCOLA CENTINAIA SUBWF DATOL BTFSS STATUS,0 DECF DATOH INCF CENTINAIA GOTO M2 LP_BCD1 MOVF DATOL,0 MOVWF SAVE MOVLW D'100' ;CALCOLA CENTINAIA SUBWF SAVE BTFSS STATUS,0 GOTO LP_BCD2 INCF CENTINAIA SUBWF DATOL GOTO LP_BCD1 LP_BCD2 MOVF DATOL,0 ;CALCOLA DECINE MOVWF SAVE MOVLW D'10' SUBWF SAVE BTFSS STATUS,0 GOTO LP_BCD3 INCF DECINE SUBWF DATOL GOTO LP_BCD2 LP_BCD3 MOVF DATOL,0 ;SALVA UNITA’ MOVWF UNITA RETURN ; ******************************** ROUTINE CONVERSI ONE BINARIO - BCD ******************** BCDAA CLRF CENTINAIAAA ;INIZIALIZZA ALCUNE VARIABIL I CLRF DECINEAA CLRF UNITAAA MOVF BINARIOAA,0 MOVWF SAVE LPCAA MOVLW D'100' ;CALCOLA CENTINAIA SUBWF SAVE BTFSS STATUS,0 GOTO LPDAA INCF CENTINAIAAA SUBWF BINARIOAA GOTO LPCAA LPDAA MOVF BINARIOAA,0 ;CALCOLA DECINE MOVWF SAVE MOVLW D'10' SUBWF SAVE BTFSS STATUS,0 GOTO LPUAA INCF DECINEAA SUBWF BINARIOAA GOTO LPDAA LPUAA MOVF BINARIOAA,0 ;SALVA UNITA' MOVWF UNITAAA RETURN ;**********sottoprogramma configurazione LCD CONFIGURA_LCD BCF PORTC,5 ;RS=0 CALL MS1 MOVLW 0x38 ;dati a 8 bits - 4 righe

27

CALL DISPLAY MOVLW 0x0C ;display on - cursore off - blinking off CALL DISPLAY movlw 6 ;avanzamento cursore CALL DISPLAY movlw 1 ;pulisci display CALL DISPLAY CALL MS1 movlw 2 ;cursore home CALL DISPLAY CALL MS1 movlw 0x40 ;indirizza cgram CALL DISPLAY MOVLW 0X80 CALL DISPLAY RETURN ;**********SOTTOPROGRAMMA INVIO DATI AL DISPLAY DISPLAY MOVWF PORTD ;invia dato BSF PORTC,4 ;impulso di abilitazione NOP BCF PORTC,4 CALL MS1 ;ritardo 1ms RETURN ;**********SOTTOPROGRAMMA CURSORE INIZIO RIGA 2 HOME2 BCF PORTC,5 CALL MS1 MOVLW 0xC0 ;display inizio seconda riga CALL DISPLAY RETURN ;********** SOTTOPROGRAMMA CURSORE INIZIO RIGA 1 HOME1 BCF PORTC,5 CALL MS1 MOVLW 0x80 ;display inizio prima riga CALL DISPLAY RETURN ;**********RITARDI DI 1 MS MS1 CLRF MST LP_MS MOVLW 2 SUBWF MST,0 BTFSS STATUS,2 GOTO LP_MS RETURN ;********ROUTINE RITARDO 0.5 SEC RITARDO CLRF MS CLRF DS LLL MOVLW 5 SUBWF DS,0 BTFSS STATUS,2 GOTO LLL RETURN ;**********VISUALIZZAZIONE RIGA 1***************** ********** AN CALL HOME1 BSF PORTC,5 movlw 'T' CALL DISPLAY movlw 'E' CALL DISPLAY movlw 'M' CALL DISPLAY movlw 'P' CALL DISPLAY movlw 'E' CALL DISPLAY movlw 'R' CALL DISPLAY movlw 'A' CALL DISPLAY movlw 'T' CALL DISPLAY movlw 'U' CALL DISPLAY movlw 'R' CALL DISPLAY movlw 'E' CALL DISPLAY

28

movlw ' ' CALL DISPLAY movlw ' ' CALL DISPLAY movlw ' ' CALL DISPLAY movlw ' ' CALL DISPLAY movlw ' ' CALL DISPLAY RETURN ;**********VISUALIZZAZIONE RIGA 2****************** *********** ANOFF CALL HOME2 BSF PORTC,5 movlw 'S' CALL DISPLAY movlw 'E' CALL DISPLAY movlw 'T' CALL DISPLAY movlw '.' CALL DISPLAY movlw 'T' CALL DISPLAY movlw 'E' CALL DISPLAY movlw 'M' CALL DISPLAY movlw 'P' CALL DISPLAY movlw '.' CALL DISPLAY movlw ' ' CALL DISPLAY movlw 'O' CALL DISPLAY movlw 'F' CALL DISPLAY movlw 'F' CALL DISPLAY movlw ' ' CALL DISPLAY RETURN ;***************************************ROUTINE CHE VISUALIZZA ON SULLA SECONDA RIGA ************* ANON CALL HOME2 BSF PORTC,5 movlw 'S' CALL DISPLAY movlw 'E' CALL DISPLAY movlw 'T' CALL DISPLAY movlw '.' CALL DISPLAY movlw 'T' CALL DISPLAY movlw 'E' CALL DISPLAY movlw 'M' CALL DISPLAY movlw 'P' CALL DISPLAY movlw '.' CALL DISPLAY movlw ' ' CALL DISPLAY movlw 'O' CALL DISPLAY movlw 'N' CALL DISPLAY movlw ' ' CALL DISPLAY movlw ' ' CALL DISPLAY CALL SET_DISP RETURN ;****************** ROUTINE RITARDO 52MICRO SEC *** *************** RIT1 MOVLW D'16' MOVWF CONTA RIT11 DECFSZ CONTA

29

GOTO RIT11 RETURN ;****************** ROUTINE RITARDO 104 MICRO SEC * ***************** RIT MOVLW D'33' MOVWF CONTA RIT_1 DECFSZ CONTA GOTO RIT_1 RETURN ;****************** ROUTINE RITARDO 50MS ********** ******** MS50 CLRF MS TSTTY MOVLW D'51' SUBWF MS,0 BTFSS STATUS,2 GOTO TSTTY RETURN ;****************** ROUTINE RITARDO 10MS ********** ******** MS_10 CLRF MS TSTP MOVLW D'11' SUBWF MS,0 BTFSS STATUS,2 GOTO TSTP RETURN ;****************** ROUTINE RITARDO 5MS *********** ******* MS5 CLRF MS TSTT MOVLW D'6' SUBWF MS,0 BTFSS STATUS,2 GOTO TSTT RETURN ;*****ROUTIN RITARDO 2 SECONDI********************* ************* SEC2 CLRF MS ;AZZERA OROLOGIO CLRF DS CLRF SEC_U LP_SEC2 MOVLW D'2' ;CONTROLLA SE TRASCORSI 2 SEC SUBWF SEC_U,0 BTFSS STATUS,2 GOTO LP_SEC2 RETURN ;****************** ROUTINE RITARDO 99MS ********** ******** MS_100 CLRF MS TSTC MOVLW D'99' SUBWF MS,0 BTFSS STATUS,2 GOTO TSTC RETURN ;****************** ROUTINE RITARDO 20MS ********** ******** MS20 CLRF MS TSTR MOVLW D'20' SUBWF MS,0 BTFSS STATUS,2 GOTO TSTR RETURN ;****************** ROUTINE RITARDO 1SECONDO *** *************** SEC_1 CLRF MS ;AZZERA OROLOGIO CLRF DS CLRF SEC_U LP MOVF SEC_U BTFSC STATUS,2 ;TRASCORSO 1 SECONDO ? GOTO LP RETURN ;********************* INIZIALIZZA COLLEGAMENTO CON SYTE PLAYER INIT_SYTE MOVLW D'20' MOVWF CONTAS LOOP CLRF TX MOVF TX,0 MOVWF TXREG CALL MS5 DECFSZ CONTAS GOTO LOOP CALL MS_100 CALL MS_100

30

RETURN ;***********************ROUTINE RISPOSTA SYTE PLAYE R RISPONDI_SYTE BCF INTCON,4 ;DISABILITA INTERRUPT SYTE CLRF FLAG_SYTE ;DISABILITA CHIAMATE DA SYTE PLAYER MOVLW D'192' ;RICHIEDI LETTURA DATO INDIRIZZO 12 PER SAPERE SE ;IMPOSTARE NUOVO SET POINT MOVWF TXREG CALL MS5 MOVLW D'12' MOVWF TXREG CALL MS5 TEST_RX BTFSS PIR1,5 ;RICEVUTO DATO ? GOTO TEST_RX MOVF RCREG,0 ;LEGGI DATO MOVWF MEM1 ;SALVALO SUBWF AA,0 ;E' DIVERSO DA QUELLO IMPOSTATO BTFSC STATUS,2 ;AGGIORNARE SET POINT ? GOTO USCITE ;NO MOVLW D'128' ;RICHIEDI SCRITTURA DATO INDIRIZZO 5 PER ; ;AGGIORNARE SELEZ. MOVWF TXREG CALL MS5 MOVLW 5 MOVWF TXREG CALL MS5 MOVF MEM1,0 ;INVIA MOVWF TXREG CALL MS5 MOVF MEM1,0 ;AGGIORNA SET TEMP MOVWF AA CALL SET_DISP BSF INTCON,4 ;ABILITA INTERRUPT SYTE RETURN USCITE MOVLW D'192' ;RICHIEDI LETTURA DATO AGGIORNAMENTO USCITE MOVWF TXREG CALL MS5 MOVLW 0X0B ;RICHIESTA LETTURA DATO INDIRIZZO 11 MOVWF TXREG CALL MS5 T_RX3 BTFSS PIR1,5 ;RICEVUTO STATO PERIFERICHE ? GOTO T_RX3 MOVF RCREG,0 ;LEGGI DATO MOVWF MEM_OUT MOVF SETFLAG ;MODALITA’ ON/OFF BTFSC STATUS,2 GOTO ONNN CLRF SETFLAG BCF PORTC,2 BCF PORTC,3 BSF MPORTC,0 CALL ANOFF BSF INTCON,4 ;ABILITA INTERRUPT SYTE RETURN ONNN MOVLW 1 ;ATTIVA ON MOVWF SETFLAG CALL ANON BSF INTCON,4 ;ABILITA INTERRUPT SYTE RETURN ;************ ROUTINE CHE AGGIORNA PAGINA WEB AGGIORNA_SYTE MOVLW D'133' ;RICHIEDI SCRITTURA DATO DA INDIRIZZO 6 IN 6 MOVWF TXREG ;LOCAZIONI CALL MS5 MOVLW 6 MOVWF TXREG CALL MS5 MOVF CENTINAIA,0 ;INVIA TEMPERATURA ( INDIRIZZI 6,7,8) MOVWF TXREG CALL MS5 MOVF DECINE,0 MOVWF TXREG CALL MS5 MOVF UNITA,0 MOVWF TXREG CALL MS5 MOVF DECINEAA,0 ;INVIA SET_POINT ( INDIRIZZI 9,10 ) MOVWF TXREG CALL MS5 MOVF UNITAAA,0

31

MOVWF TXREG CALL MS5 MOVF PORTC,0 ;SALVA IMMAGINE PORTC MOVWF MPORTC BTFSC SETFLAG,0 ;CONTROLLA STATO IMPIANTO BSF MPORTC,0 BTFSS SETFLAG,0 BCF MPORTC,0 MOVLW B'00001101' ;NEGA 3 BIT STATO PERIFERICHE XORWF MPORTC MOVF MPORTC,0 ;INVIA STATO PERIFERICHE ( INDIRIZZO 11) MOVWF TXREG RETURN ;************************************************** ********************* INTERRUPT MOVWF SAVE_W ;salva contesto ( accumulatore e registro di stato ) SWAPF STATUS,0 MOVWF SAVE_S BTFSS INTCON,2 ;INTERRUPT DA TIMER? GOTO SYTE_PLAYER MOVLW 9 ;REINDIRIZZA TRM0 MOVWF TMR0 INCF MS ;AGGIORNA MILLISECONDI INCF MST MOVLW D'100' SUBWF MS,0 BTFSS STATUS,2 GOTO EXIT INCF DS CLRF MS MOVLW D'10' SUBWF DS,0 BTFSS STATUS,2 GOTO EXIT INCF SEC_U EXIT BCF INTCON,2 ;AZZERA FLAG INTERUPT SWAPF SAVE_S,0 ;RIPRISTINA CONTESTO MOVWF STATUS SWAPF SAVE_W SWAPF SAVE_W,0 RETFIE ;***********************RISPOSTA INTERRUPT SYTE PL AYER SYTE_PLAYER MOVLW 1 MOVWF FLAG_SYTE BCF INTCON,1 ;AZZERA FLAG INTERRUPT DA SYTE PLAYER SWAPF SAVE_S,0 ;RIPRISTINA CONTESTO MOVWF STATUS SWAPF SAVE_W SWAPF SAVE_W,0 RETFIE END

Collaudo

Con un multimetro abbiamo collaudato l’alimentatore misurando le tensioni fornite di ±5V. Alimentata la scheda senza PIC e modulo siteplayer, abbiamo verificato il funzionamento del circuito di condizionamento misurando la tensione sul pin 2 dello zoccolo che corrisponde all’ingresso analogico del PIC. Toccando il sensore di temperatura abbiamo verificato se la tensione variava. Abbiamo poi proceduto ad una grossolana taratura del circuito di condizionamento; poiché, come detto in precedenza, a 48 gradi centigradi deve corrispondere una tensione in uscita di 5 volt, stimata la temperatura ambiente intorno ai 25 gradi, abbiamo agito sul trimmer fino ad avere una tensione di circa 2.5volt. Siamo poi passati alla programmazione del PIC e al suo inserimento nella scheda. Abbiamo così potuto verificare:

a) se al reset le periferiche sono OFF e lo stato dell’impianto in condizioni di controllo manuale.

b) Se il display visualizza i dati correttamente ( agendo anche sul trimmer della retro illuminazione )

32

c) Agendo sul trimmer del circuito di condizionamento, e con l’ausilio di in termometro di precisione, si è potuto tarare in modo preciso il sistema di misura.

d) Se la funzione dei vari pulsanti corrisponde alle specifiche richieste Naturalmente è stato necessario apportare numerose correzioni al software e quindi programmare diverse volte il PIC. Tutto ciò potrebbe essere evitato disponendo di un emulatore di cui la scuola non dispone. Una volta che la scheda funzionava correttamente abbiamo inserito il modulo e proceduto a caricare la pagina web secondo questa procedura:

a) Tramite un cavo UTP incrociato, abbiamo collegato il connettore RJ45 del circuito realizzato, alla scheda di rete di un PC portatile opportunamente configurato nel protocollo TCP/IP vale a dire con indirizzo di rete di classe C (192.168.0.5 ) e subnet mask 255.255.255.0 . Naturalmente sul PC era stato caricato il programma linker.

b) abbiamo verificato se collegando il cavo il diodo led segnalava il collegamento alla “rete”. c) Mediante il programma linker abbiamo scaricato nel modulo la pagina web. d) avviato il browser Internet Explorer , abbiamo digitato sulla barra URL l’indirizzo IP del

server web verificando se il modulo inviava la pagina. e) Abbiamo poi proceduto alla verifica di tutte le specifiche richieste come ad esempio

l’impostazione della temperatura agendo sulla casella di selezione, se agendo da locale la pagina veniva modificata ecc.

Naturalmente anche in questo caso abbiamo dovuto correggere il programma e riprogrammare il PIC fino alla messa a punto definitiva del sistema. Infine abbiamo modificato l’indirizzo IP del modulo adattandolo a quello della rete interna della scuola ( indirizzo privato di classe B ) e collegato la scheda ad un cavo UTP dello switch del laboratorio di TDP1. Abbiamo così potuto verificare la possibilità di visualizzare la pagina Web da un qualsiasi PC del laboratorio.

33

Elenco del software utilizzato

MPLAB PROGETTAZIONE SOFTWARE MICROCONTROLL ORE PIC 16F877

SITELINKER LINKER PER MODULO SITEPLAYER

EAGLE PROGETTAZIONE HARDWARE

PSTARTER PROGETTAZIONE IMMAGINI PAGINA WEB

WINWORD STESURA RELAZIONE

WORDPAD PROGETTAZIONE PAGINA WEB Silvio Strafella _________________________ Luigi Baù ______________________________ Lancenigo di Villorba (TV) __________________________