termostato automatico con impostazioni/lettura da

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
1
Indice
Introduzione
Schema a blocchi del sistema
Descrizione dello Schema a blocchi del sistema
Pagina Web memorizzata nel siteplayer
Schema elettrico del circuito di controllo
Analisi dello schema elettrico e dei principali componenti
- modulo siteplayer
- Pic16F877 della Microchip
- trasduttore di temperatura LM35 e circuito di condizionamento
- Display LCD
- Interfacciamento con i relè
- Elenco componenti
- Circuito di alimentazione
- Costo dei principali componenti utilizzati
Sviluppo del software
-Programmazione del modulo siteplayer
-Pagina web
-File di definizione
-Programmazione del PIC 16F877
Collaudo
Software utilizzato
2
pag. 3
pag. 3
pag. 4
pag. 5
pag. 6
pag. 7
pag. 8
pag. 10
pag. 11
pag. 13
pag. 14
pag. 14
pag. 15
pag. 15
pag. 16
pag. 18
pag. 19
pag. 31
pag. 33
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
3
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.
4
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.
5
Schema elettrico del circuito di controllo
Realizzazione pratica
6
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).
7
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.
8
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.
9
-
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.
ADRESH
x
X
x
x
x
x
ADRESH
0
0
0
0
0
0
Risultato giustificato a sinistra
ADRESL
x
x
x
x
0
0
0
0
0
0
x
x
x
Risultato giustificato a destra
ADRESL
x
x
x
x
x
x
x
( 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.
10
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 LH-L del segnale
11
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.
12
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è
13
Elenco componenti
R1
R2
R3
R4,R9,R10
R5,R6
R7
R8
Tutti i resistori sono da 1/4 W tolleranza 5%
= 33KΩ
= Trimmer 1KΩ
= 3,3KΩ
= 1KΩ
= 3,3Ω
= 10KΩ
= Trimmer 10KΩ
C1,C2,C5,C6,C7,C8
C3,C4
C9
C8
= 22pF
= 100nF
= 1µF
= 470microF
IC1
IC2
IC4
= PIC16F877
= TL082
= LM35 Sensore di temperatura
T1,T2
Q1
D1,D2
D3
= BC 337 - NPN
= quarzo 4 MHz
= 1N4004
= 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
14
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
PIC 16F877
Connettore RJ45
Display LCD
LM35
Trasformatore
Stabilizzatori di tensione
35,00 euro
10,00 “
7,00 “
2,00 “ ( acquistato alla fiera dell’elettronica di Pordenone )
2,50 “
3,50 “
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
15
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">
16
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="simb_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" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><div align="center"><img src="simb_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></div></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 color="#00FF00" size="2" face="Arial, Helvetica, sans-serif"><strong> Temperature
°C </strong></font></div></td>
<td width="80"><div align="center"><font color="#00FF00" size="2" face="Arial, Helvetica, sans-serif"></font></div></td>
<td
width="150"><div align="center"><font color="#00FF00" size="2" face="Arial, Helvetica, sans-serif"><strong> Set
Temperature</strong></font></div></td>
<td> </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></td>
<td width="1" bgcolor="#333333"><div align="center"><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> </td>
</tr>
<tr bgcolor="#333333" >
<td width="100"bgcolor="#333333""><div align="center"><img src="lamp_^portc'0.gif" width="17" height="17"></font></div></td>
<td width="30"><div align="center"><font color="#00FF00" 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>
17
<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> </td>
</tr>
<tr bgcolor="#333333">
<td
width="100"><div
align="center"><font
color="#00FF00"
size="2"
face="Arial,
Helvetica,
sans-serif">
<strong>ON</strong></font></div></td>
<td
width="20"><div
align="center"><font
color="#00FF00"
size="2"
face="Arial,
Helvetica,
sans-serif">
<strong>     cold</strong></font></div></td>
<td
width="150"><div
align="center"><font
color="#00FF00"
size="2"
face="Arial,
Helvetica,
sans-serif">
<strong>warm</strong></font></div></td>
<td> </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="center"><img src="lamp_^portc'2.gif" width="17" height="17"></font></div></td>
<td width="120"bgcolor="#333333""><div align="center"><img src="lamp_^portc'3.gif" width="17" height="17"></font></div></td>
<td> </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> </td>
<td> </td>
<td> </td>
</tr>
<tr bgcolor="#333333">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<tr>
<tr bgcolor="#333333">
<td colspan="3"><div align="center"><img src="linea.gif" width="320" height="4"></div></td>
</tr>
<tr>
<tr bgcolor="#333333">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<tr>
<tr bgcolor="#333333">
<td colspan="4"> <div align="center"> <font color="#999999" size="2" face="Arial, Helvetica, sans-serif">
Bau Luigi     Strafella Silvio <br>
Tutor Prof. Zaniol Italo     &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
18
-
-
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 device
$Devicename "ITIS PLANCK"
;$DHCP on sets SitePlayer to find its IP address from a DHCP server
$DHCP off
;$DownloadPassword sets password for downloading web 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 level 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
;
tempo
Cifra5
Cifra4
Cifra3
Cifra2
Cifra1
portc
set
org 05h
db
db
db
db
db
db
db
db
0
0
0
0
0
0
0
0
;visualizza selezione
;TRE BYTE VALORE TEMP
;DUE BYTE SET POINT
;STATO IMPIANTO
;VALORE SET POINT TRASMESSO DA HOST REMOTO
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.
19
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
BSF
NOP
BCF
CALL
RETURN
PORTD
PORTC,4
;invia dato
;impulso di abilitazione a 1
PORTC,4
MS1
;impulso di abilitazione a 0
;ritardo 1ms
;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
20
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.
21
Di seguito viene riportato il codice sorgente completo.
Codice sorgente
;****************************************************************************
;***
SITE PLAYER
***
;****************************************************************************
#include <p16f877.inc>
;DIRETTIVA DI ASSEMBLAGGIO
;********************************DICHIARA LE LOCAZIONI RAM UTILIZZATE
SAVE_W
SAVE_S
MS
SEC
DS
DATO
CONTA
CONTA9
CONTA20
DATOL
DATOH
CENTINAIA
DECINE
UNITA
SAVE
FLAG
FLAG1
MST
SEC_U
SEC_D
UNITAAA
DECINEAA
CENTINAIAAA
BINARIOAA
BINARIO8
BINARIO32
TEMPCON
AA
SETFLAG
SAVE1
BINARIOX2
BINARIOX4
BINARIOX8
BINARIOX10
FLAG_SYTE
CONTAS
TX
MEM1
MEM_OUT
MIGLIAIA
DATOLL
BINARIO
MPORTC
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
;************************************************* VETTORI
ORG
GOTO
ORG
GOTO
0
MAIN
4
INTERRUPT
;*************************************************TABELLA DATI
TABELLA
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
0X25
0X26
0X27
0X28
0X29
0X2A
0X2B
0X2C
0X2D
0X2E
0X4C
0X2F
0X30
0X31
0X32
0X33
0X34
0X35
0X36
0X37
0X38
0X39
0X3D
0X3A
0X3B
0X3C
0X3F
0X40
0X41
0X42
0X43
0X44
0X45
0X46
0X47
0X48
0X49
0X4A
0X4B
0X4D
0X4E
0X4F
0X50
;VETTORE DI RESET
;VETTORE DI INTERRUPT
PCL
'0'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
;*************************************************PROGRAMMA PRINCIPALE
MAIN
BSF
STATUS,5
;SELEZIONA BANCO1 PER CONFIGURARE PIC
MOVLW
B'00001110'
;RA0 E RA1 COME INGRESSI ANALOGICI
22
MOVWF
MOVLW
MOVWF
LOOP1
CLRF
BCF
BCF
BCF
BCF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
BCF
BCF
CLRF
MOVLW
MOVWF
MOVLW
MOVWF
CALL
CALL
MOVLW
MOVWF
CALL
CALL
CALL
CLRF
CALL
BSF
CALL
CALL
CALL
CALL
CALL
CALL
MOVF
BTFSS
CALL
GOTO
ADCON1
B'00000001'
OPTION_REG
;ABILITA PULL UP PORTB - SELEZIONA CLOCK PER TMR0
;ASSEGNA PRESCALE A TMR0 - CONFIGURA
;PRESCALER PER 4MHz -INTERRUPT SU FRONTE DI DISCESA
;CONFIGURA PORTOD COME USCITA
;CONFIGURA LE USCITE DEL PORTOC
TRISD
TRISC,2
TRISC,3
TRISC,4
TRISC,5
D'25'
;BAUD RATE 9600 BIT/SEC CONFIGURA PORTA SERIALE
SPBRG
B'00100100'
;CONFIGURA TXSTA
TXSTA
STATUS,5
;BANCO0
PORTC,2
;USCITE OFF
PORTC,3
FLAG_SYTE
;DISABILITA CHIAMATE DA SYTE PLAYER
B'10010000'
;CONFIGURA RCSTA
RCSTA
B'10100000'
;ABILITA INTERRUZIONI
INTCON
SEC_1
;ATTESA 1 SECONDO PER ASSESTAMENTO TENSIONE SU LCD
CONFIGURA_LCD
D'18'
;INIZIALIZZA SET POINT
AA
AN
;VISUALIZZA MESSAGGI PRIMA RIGA
ANOFF
SET_DISP
;VISUALIZZA SET POINT
SETFLAG
;DISABILITA MODIFICA STATO SISTEMA
INIT_SYTE
;INIZIALIZZA COLLEGAMENTO CON SYTE PLAYER
INTCON,4
;ABILITA INTERRUPT DA SYTE PLAYER
TEMPERATURA ;ACQUISISCI TEMPERATURA
VIS_TEMP
;VISUALIZZA TEMPERATURA
CONTROLOFF
;VERIFICA SISTEMA ON/OFF E CONFRONTA LE TEMP.
SETTEMP
;DI SET E DEL SENSORE
SETT
AGGIORNA_SYTE
FLAG_SYTE
;CONTROLLA CHIAMATE WEB
STATUS,2
RISPONDI_SYTE
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
CALL
MOVLW
CALL
BSF
MOVF
CALL
CALL
MOVF
CALL
CALL
RETURN
PORTC,5
MS1
0xCE
DISPLAY
PORTC,5
DECINEAA,0
TABELLA
DISPLAY
UNITAAA,0
TABELLA
DISPLAY
;DISPLAY SU SECONDA RIGA
23
;**************************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
EXIT1
CONTROLON
FREDDO
VERIFICA
CALDO
NORMALE
BTFSC
GOTO
BCF
BSF
RETURN
MOVF
MOVWF
MOVF
SUBWF
BTFSC
GOTO
BSF
BCF
CALL
RETURN
BTFSS
GOTO
GOTO
BCF
BSF
CALL
RETURN
BCF
BCF
CALL
RETURN
PORTB,5
EXIT1
PORTC,3 ; CALORE OFF
PORTC,2 ; FREDDO ON
BINARIO,0
SAVE1
AA,0
SAVE1
STATUS,0
VERIFICA
PORTC,3
PORTC,2
RITARDO
STATUS,2
CALDO
NORMALE
PORTC,3
PORTC,2
RITARDO
PORTC,3
PORTC,2
RITARDO
;**************** ROUTINE LEGGI TEMPERATURA
TEMPERATURA
MOVLW
B'01000001'
MOVWF
ADCON0
CALL
DELAY
CALL
CONVERSION
;clock AD: f=fosc/8 (bit7 e bit6), seleziona AN1
;ADC OPERATIVO
;START CONV E ATTESA FINE CONVERSIONE
24
CLRF
MOVF
MOVWF
MOVWF
BCF
RRF
BCF
RRF
BCF
RRF
MOVF
MOVWF
BCF
RRF
BCF
RRF
MOVF
ADDWF
DATOH
ADRESH,0
DATOL
BINARIO
STATUS,0
BINARIO
STATUS,0
BINARIO
STATUS,0
BINARIO
BINARIO,0
BINARIO8
STATUS,0
BINARIO
STATUS,0
BINARIO
BINARIO8,0
BINARIO
BCF
RRF
MOVF
MOVWF
BCF
RRF
BCF
RRF
BCF
RRF
MOVF
ADDWF
MOVF
ADDWF
BTFSC
INCF
CALL
RETURN
STATUS,0
DATOL
DATOL,0
DATOLL
STATUS,0
DATOL
STATUS,0
DATOL
STATUS,0
DATOL
DATOLL,0
DATOL
ADRESH,0
DATOL
STATUS,0
DATOH
BCD
;PREDISPONI PER ADATTAMENTO
;LEGGI CONVERSIONE
;SALVA DATO ACQUISITO
;CALCOLA TEMPERATURA A DUE CIFRE PER CONFRONTO
;DIVIDI PER 2
;DIVIDI PER 4
;DIVIDI PER 8
;DIVIDI PER 16
;DIVIDI PER 32
;CALCOLA TEMPERATURA A TRE CIFRE PER VISUALIZZARE
;DIVIDI PER 2
;SALVA N/2
;DIVIDI PER 4
;DIVIDI PER 8
;DIVIDI PER 16
;SOMMA N + N/2 + N/16
;CONVERTI IN BCD
;**************************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 CONVERSIONE 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
25
M1
M2
LP_BCD1
LP_BCD2
LP_BCD3
MOVLW
SUBWF
BTFSS
DECF
MOVLW
SUBWF
GOTO
MOVLW
SUBWF
BTFSS
GOTO
MOVLW
SUBWF
BTFSS
GOTO
INCF
MOVLW
SUBWF
MOVLW
SUBWF
GOTO
MOVF
BTFSC
GOTO
MOVLW
SUBWF
BTFSS
DECF
INCF
GOTO
MOVF
MOVWF
MOVLW
SUBWF
BTFSS
GOTO
INCF
SUBWF
GOTO
MOVF
MOVWF
MOVLW
SUBWF
BTFSS
GOTO
INCF
SUBWF
GOTO
MOVF
MOVWF
RETURN
0XE8
DATOL
STATUS,0
DATOH
3
DATOH
M0
3
DATOH,0
STATUS,2
M2
0XE8
DATOL,0
STATUS,0
M2
MIGLIAIA
0XE8
DATOL
3
DATOH
M2
DATOH
STATUS,2
LP_BCD1
D'100'
DATOL
STATUS,0
DATOH
CENTINAIA
M2
DATOL,0
SAVE
D'100'
SAVE
STATUS,0
LP_BCD2
CENTINAIA
DATOL
LP_BCD1
DATOL,0
SAVE
D'10'
SAVE
STATUS,0
LP_BCD3
DECINE
DATOL
LP_BCD2
DATOL,0
UNITA
;CONTROLLA SE DATO DA CONVERTIRE >=1000
;SE SI INCREMENTA MIGLIAIA E SOTTRAI 1000
;CONTROLLA SE DATO PARZIALE >255
;CALCOLA CENTINAIA
;CALCOLA CENTINAIA
;CALCOLA DECINE
;SALVA UNITA’
; ******************************** ROUTINE CONVERSIONE BINARIO - BCD ********************
BCDAA
CLRF
CENTINAIAAA
;INIZIALIZZA ALCUNE VARIABILI
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
CALL
MOVLW
PORTC,5
MS1
0x38
;RS=0
;dati a 8 bits - 4 righe
26
CALL
MOVLW
CALL
movlw
CALL
movlw
CALL
CALL
movlw
CALL
CALL
movlw
CALL
MOVLW
CALL
RETURN
DISPLAY
0x0C
DISPLAY
6
DISPLAY
1
DISPLAY
MS1
2
DISPLAY
MS1
0x40
DISPLAY
0X80
DISPLAY
;display on - cursore off - blinking off
;avanzamento cursore
;pulisci display
;cursore home
;indirizza cgram
;**********SOTTOPROGRAMMA INVIO DATI AL DISPLAY
DISPLAY
MOVWF PORTD
BSF
PORTC,4
NOP
BCF
PORTC,4
CALL
MS1
RETURN
;invia dato
;impulso di abilitazione
;ritardo 1ms
;**********SOTTOPROGRAMMA CURSORE INIZIO RIGA 2
HOME2
BCF
CALL
MOVLW
CALL
RETURN
PORTC,5
MS1
0xC0
DISPLAY
;********** SOTTOPROGRAMMA CURSORE INIZIO RIGA 1
HOME1
BCF
CALL
MOVLW
CALL
RETURN
PORTC,5
MS1
0x80
DISPLAY
;**********RITARDI DI 1 MS
MS1
LP_MS
;********ROUTINE RITARDO 0.5 SEC
RITARDO
LLL
CLRF
MOVLW
SUBWF
BTFSS
GOTO
RETURN
MST
2
MST,0
STATUS,2
LP_MS
CLRF
CLRF
MOVLW
SUBWF
BTFSS
GOTO
RETURN
MS
DS
5
DS,0
STATUS,2
LLL
;**********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
27
;display inizio seconda riga
;display inizio prima riga
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
28
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
SUBWF
BTFSS
GOTO
RETURN
D'51'
MS,0
STATUS,2
TSTTY
;****************** 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
LP_SEC2
CLRF
MS
CLRF
DS
CLRF
SEC_U
MOVLW
D'2'
SUBWF
SEC_U,0
BTFSS STATUS,2
GOTO
LP_SEC2
RETURN
;AZZERA OROLOGIO
;CONTROLLA SE TRASCORSI 2 SEC
;****************** 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
CLRF
DS
CLRF
SEC_U
LP
MOVF
SEC_U
BTFSC
STATUS,2
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
29
;AZZERA OROLOGIO
;TRASCORSO 1 SECONDO ?
RETURN
;***********************ROUTINE RISPOSTA SYTE PLAYER
RISPONDI_SYTE
BCF
INTCON,4
CLRF
FLAG_SYTE
MOVLW D'192'
TEST_RX
USCITE
T_RX3
ONNN
MOVWF
CALL
MOVLW
MOVWF
CALL
BTFSS
GOTO
MOVF
MOVWF
SUBWF
BTFSC
GOTO
MOVLW
TXREG
MS5
D'12'
TXREG
MS5
PIR1,5
TEST_RX
RCREG,0
MEM1
AA,0
STATUS,2
USCITE
D'128'
MOVWF
CALL
MOVLW
MOVWF
CALL
MOVF
MOVWF
CALL
MOVF
MOVWF
CALL
BSF
RETURN
MOVLW
MOVWF
CALL
MOVLW
MOVWF
CALL
BTFSS
GOTO
MOVF
MOVWF
MOVF
BTFSC
GOTO
CLRF
BCF
BCF
BSF
CALL
BSF
RETURN
MOVLW
MOVWF
CALL
BSF
RETURN
TXREG
MS5
5
TXREG
MS5
MEM1,0
TXREG
MS5
MEM1,0
AA
SET_DISP
INTCON,4
;DISABILITA INTERRUPT SYTE
;DISABILITA CHIAMATE DA SYTE PLAYER
;RICHIEDI LETTURA DATO INDIRIZZO 12 PER SAPERE SE
;IMPOSTARE NUOVO SET POINT
;RICEVUTO DATO ?
;LEGGI DATO
;SALVALO
;E' DIVERSO DA QUELLO IMPOSTATO
;AGGIORNARE SET POINT ?
;NO
;RICHIEDI SCRITTURA DATO INDIRIZZO 5 PER ;
;AGGIORNARE SELEZ.
;INVIA
;AGGIORNA SET TEMP
;ABILITA INTERRUPT SYTE
D'192'
TXREG
MS5
0X0B
TXREG
MS5
PIR1,5
T_RX3
RCREG,0
MEM_OUT
SETFLAG
STATUS,2
ONNN
SETFLAG
PORTC,2
PORTC,3
MPORTC,0
ANOFF
INTCON,4
;RICHIEDI LETTURA DATO AGGIORNAMENTO USCITE
;RICHIESTA LETTURA DATO INDIRIZZO 11
;RICEVUTO STATO PERIFERICHE ?
;LEGGI DATO
;MODALITA’ ON/OFF
;ABILITA INTERRUPT SYTE
1
SETFLAG
ANON
INTCON,4
;ATTIVA ON
;ABILITA INTERRUPT SYTE
;************ ROUTINE CHE AGGIORNA PAGINA WEB
AGGIORNA_SYTE
MOVLW D'133'
MOVWF TXREG
CALL
MS5
MOVLW 6
MOVWF TXREG
CALL
MS5
MOVF
CENTINAIA,0
MOVWF TXREG
CALL
MS5
MOVF
DECINE,0
MOVWF TXREG
CALL
MS5
MOVF
UNITA,0
MOVWF TXREG
CALL
MS5
MOVF
DECINEAA,0
MOVWF TXREG
CALL
MS5
MOVF
UNITAAA,0
;RICHIEDI SCRITTURA DATO DA INDIRIZZO 6 IN 6
;LOCAZIONI
;INVIA TEMPERATURA ( INDIRIZZI 6,7,8)
;INVIA SET_POINT ( INDIRIZZI 9,10 )
30
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BTFSS
BCF
MOVLW
XORWF
MOVF
MOVWF
RETURN
TXREG
MS5
PORTC,0
MPORTC
SETFLAG,0
MPORTC,0
SETFLAG,0
MPORTC,0
B'00001101'
MPORTC
MPORTC,0
TXREG
;SALVA IMMAGINE PORTC
;CONTROLLA STATO IMPIANTO
;NEGA 3 BIT STATO PERIFERICHE
;INVIA STATO PERIFERICHE ( INDIRIZZO 11)
;***********************************************************************
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 PLAYER
SYTE_PLAYER
MOVLW 1
MOVWF FLAG_SYTE
BCF
INTCON,1
SWAPF
SAVE_S,0
MOVWF STATUS
SWAPF
SAVE_W
SWAPF
SAVE_W,0
RETFIE
END
;AZZERA FLAG INTERRUPT DA SYTE PLAYER
;RIPRISTINA CONTESTO
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 )
31
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.
32
Elenco del software utilizzato
MPLAB
PROGETTAZIONE SOFTWARE MICROCONTROLLORE
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) __________________________
33