Microrobotica Monty Peruzzo Editore - 10 - Applicazioni
-
Upload
montymicrorobot -
Category
Documents
-
view
69 -
download
5
description
Transcript of Microrobotica Monty Peruzzo Editore - 10 - Applicazioni
Conversione di dati analogici
ossiamo affermare che il PIC 1 6FB4 è un
microcontroller povero ma essenziale, perché
nonostante le scarse risorse di cui dispone al
suo interno, permette la realizzazione di
un'infìnità di applicazioni molto utili.
Comunque, che cosa succede quando le risorse di cui
abbiamo bìsogno non ci sono nel PIC? Anche se la filo-
sofia dei microcontroller è funzionare come sistemi
chiusi. dipendendo cioè, unicamente dalle risorse inter-
ne e senza connessione ad altri dispositivi, esiste la pos-
sibilità di comunicare con periferiche che apportino
quello che i PIC non hanno.
Proviamo a fare uso di queste caratteristiche, per
disporre di un convertitore che si incarichi di trasforma-
re valori analogici ìn valori digitali che possano essere
processati dal PlCl 6F84.
In ogni caso, la scelta più sensata sarebbe seleziona-
ll modulo ADCIDAC PCFB591
re un PIC che contenga un convertttore, ad esemplo
uno della gamma dei PIC 16FB7x.
3t rr4ff#LJLS effifl/Setll convertitore che utilizzeremo ha come sigla PCF8591
e si collega al PIC tramite le linee del bus l2C, SCL e
SDA.
Nella figura possiamo osservarne l'aspetto.
tindirizzo a cui dovrà fare riferrmento il master è deter-
minato dal codice 1001, stabilito in fabbrica, ha tre bit
che dipendono dai valori assegnati alle linee A0, A1 e
42, che nella figura sono collegati a massa.
ll bit meno sìgnificativo degli indirizzi indica se si va
a leggere (1)o se si va a scrivere (0) sul dispositìvo'
ll circuito si comporterà come un convertitore analo-
gico/digitale a B bit, convertendo i valori che arrivano
tramite le linee ANO, ANl, AN2 e AN3. e passando il
nx#x*,xm,m*ffix*wfr|l&ùliÌtrl@s@Wsflfr1f]W]i@1ù[Wl#,à@wN'd]slùùuÌ
risultato come valore binario al PlC. Inoltre può funzio-nare come un convertitore digitale/analogico, conver-tendo ilvalore binario che fornisce il PlC, in una tensio-ne che esce tramite AOUT. I segnali di massa e di riferi-mento si collegano ai pin AGND e VREF.
A seconda delle caratteristiche della tensione di rife-rimento si otterrà maggiore o minore precisione.
h5ilffi {EHE{:} Fffi #$F#lS} {3ll programma deve solo prendere un valore e mostrarloconvertito. lmmaginate che il parametro sia quello diuna temperatura o di un sensore di luminosita, e che infunzione del valore si debba attivare un ventrrarore, untermoconvettore, una luce, ecc.
Affrontiamo quindi il lavoro per parti, e dedichiamo-cr, per ora, solamente alla conversione.
Sarà tanto semplice quanto realizzare un crclo di let-tura sul dispositivo PCF859'1. Se si prende come tensio-
ll programma legge il valore analogico presente sul canale 0,
lo converte in digitale e lo mostra tramite i diodi LED,
5i utilizza il bus 12C per mettere in comunicazione il PIC con
il dispositivo convertitore,
Lnunc ia to dell' eserc izio propost o
ne di riferimento 5 V la risoluzione per bit sarà di 20mV, come conferma l'equazione della figura e comerisulta anche dalla tabella in cui ogni incremento di 20mV aumentera di 1 il valore binario
Come mostra l'organigramma, dal modulo prrncipa-le si configurano solo ie variabili che si vogliono utiliz-zare e si eseguono le chiamate alle differenti funzioni,
che saranno quelle che sup-porteranno il carico reale
del programma. ll modo in
cui queste funzioni si realiz-
zeranno dipenderà dal
dispositivo: raccomandia-mo di leggere sempre le
specifiche tecniche per
seguire r passi ed i tempiindicat dal costruttore
$3ffi##ffiÀ*,4 ffiADopo la definizione dellevariabili dovremo includereun file con le routines digestione per il bus l2C che
,,+ili---+^ ^i,',sdrdÍrÍlo uI'|tzzale ptu avan-ti. Configureremo la porta
A come uscita, utilizzandole quattro linee meno signi-ficative per acquisire parte
del valore convertito, cioè i
Orga n ig ra m ma d e I I' esercr zi o p ro posto
Vref + -Vref-
5-O 5=-=-= 20 mV/bit
28 256Risoluzione =
2 Ne bir
Equazione che da la risolutione di un convertjtore e ld relaLivà tabellò.
e p ry fi $ccw
*qg ry €__ffi.trtrR# ffi ff
LIST
INCLUDE
P=f6F84A
"P16F84A.lNC'
.4000000
't2cLow.tNc"
; Tipo di processore
0xOt
0x12
0x13
0x00
lnizio
EQU
EQU
EQU
EQU
l2c_var
A_inp
aux
Definizione dei registri interni
Frquenza di lavoro
lnizio delle variabili per le routines I2C-L0W
Risultato deila conversione AD di ingresso
; Variabile ausiliaria dedicata al dato binatio
; Vector reset
; lnclude le routines di gestione del bus l2C
;Trasmette la sequenza di inizio
; lndirizzo del PCF8591 (modo lettura)
; Riceve un unico byte pet volta
; Riceve il risultato della conversione AD
; Trasmette sequenza di ST0P
; Salva il valore della conversione
; Spostiamo il risultato in W
; Lavoriamo con la parte bassa del registro
; e la spostiamo sulla Porta A
; Spostiamo nuovamente il risultato in W
; e lavoriamo con la parte aÌta
; spostandola su di un registro ausiliario
; Cambiamo di posizione ai bit
;e li portiamo sulla Porta B
A_lnput
Visualizzare
ORG
goto
INCLUDE
call
movlw
movwf
call
bsf
call
call
mov{
movwf
return
m0vT
andlw
movwf
m0vî
andlw
movwf
swapf
MOVWT
return
ctrf
clrf
bsf
movlw
movwf
clrf
m0vlw
movwf
bcf
call
Txt_5tart_Bit
b'10010001'
DataByte
Txt_Byte
_Ultimo-Byte
RcvByte
Txt_Stop_Bit
DataBvte,W
A_inp
A ino,0
b'0000111f'
PORTA
A-inp,0
b'11110000'
aux
aux,0
PORTB
PORTA
PORTB
STATUS.RPO
b'00000000'
TRISA
TRI5B
b'î0000110'
OPTION REG
STATUS.RPO
lnizia Bus
lnizio
; Seleziona il banco î
; RA0-RA4 uscite
; Porta B uscita
; Prescaler di 128 per ilTMR0. Pull-up 0{f
; Seleziona il banco 0
; lnizializza il bus t2C
Programma nsolto
t
-'-'"-....-.="=..-:.-'"-."=
loop ;il. lJ:ri-'.,,
il :;""'"
; Resetta iIWDT
; Ottiene ilvalore di conversione ADC
;Visualiza sui LED il risultato
; tine del programma
Prog ra m m a ri solto (co nti n uazi one).
quattro bit meno significativi del numero. Allo stessomodo la porta B acquisirà la restante parte del numero,vale a dire i4 bit più significativi. Inoltre, le linee RB6 eRB7 saranno utilizzate per la comunicazione con il con-vertitore 12C.
La routine "A_input" legge il valore binario che arri-va dal canale 0 dell'ADC contenuto nel disoositivol2CPCF8591. La subroutine "Visualizzare" prende il
valore convertito dalle porte A e B, nel modo prece-dentemente descrrtto. ll modo di realizzare la comuni-cazrone con il convertitore viene indicata dal fabbrican-te di quest'ultimo
Dopo un bit di inizio dobbiamo indirizzarlo, indican-do se vogliamo leggere o scrivere, Nel nostro caso stia-mo leggendo, dato che stiamo cercando di acquisire la
conversione di una tensione analoqica a binaria.l/^^-;^^^ A, --.1++,,.^L up4rur rc ur )Lr rLLuro p€l' qUeStO
dispositivo consiste nel fargli pro-
durre la tensione corrispondenteal valore binario che introducia-mo.
Dato che inviamo solo un byte,
se ne vogliamo conoscere il valo-re, e leggere rl valore convertito,possiamo fermare il seguito della
sequenza.Tutte nrreste roiltines sono
raccolte nel file "12CLOW.lNC".
Invece di utilizzare le porte A e B
per acquisire il valore della con-versione in un modo così ricerca-
to, si potrebbe optare per l'uti-lizzo di un altro dispositivo,anch'esso l2C, a cui passare il
dato con due soli f ili, e que-st'ultimo visualizzerebbe il datosu dei LED.
FIUOVA PROPOSTAProponiamo ora una modificaall'esercizio precedente.
A seconda che il valore siacr rnorinro inforinro n,_,- _ uguate ao
uno preso come riferimento, si
accenderà un riscaldatore, un
ventilatore o si spegnerà tutto.
IniziqlizzozionePA uscitoP3 uscitq
TMR.O
Ghiede il voloredello conversione
Vqlore = X? Sl
Vqlore >X? Spegnere il ventilotore
Spegnereil riscaldqmento
Spegnereil riscqldcmento
Accendere il vedilgtore Spegnere il ventilotore
Accendereil riscoldomento
Organigramma della nuova proposta
,*nnl i r,nx:g#ffi :gt,i s,ff ,,-.,,',
Comuni cazionefra dispositivid#re osì come abbiamo visto con il convertitore
ffi DAC/ADC PCFB591, esistono molti altri
ffi dispositivi predisposti per comunicare con il
ffi bus l2C. Questo ci fornisce la possibilita di'i m t^.,^-^-^-^""* - --.r 256 elementi con un impiegominimo di linee, nella fattispecie due. In questo caso
vogliamo aggiungere alla f unzione di conversione,quella di visualizzazione. Per fare questo utilizzeremo
contemporaneamente due dispositivi l2C, in modo che
i dati generati da uno, passino all'altro. La comunica-zione fra entrambi i dispositivi si realizza tramite un
microcontroller, il PIC 1 6F84.
HL fl#r4YR#$_L#ffifi $3s ffirSFLeY SeAs*64Questo integrato e capace di pilotare fino a 4 display a
7 segmenti. ll suo impiego è semplice: sostanzialmente,
dobbiamo ìnviare la combinazione binaria corrispon-
dente ai segmenti che vanno attivati per ognuno dei 4digit. Per farlo funzionare con i suddetti display si puo
collegare come mostrato nella figura. Tramite le lrnee
SCL e SDA il
m icrocontrollermanda al dispo-sitivo l'informa-zione da visua-
lizzare. Dei
sette bit di indi-rizza i rinnr ra
più significativi<nnn nrodotar-
minati in fab-brica come "01110" e i due successivi sono stabiliti dal-
l'utente secondo la tensione applicata al pin 1 (ADR), la
cui corrispondenza si trova nella tabella allegata.
Uultimo bit, e quello di lettura (1) o scrittura (0) del
dispositivo. ll SAA1064 f unziona come un multiplexer,
attivando consecutivamente i display 1 e 3 e i display 2
e 4. Se questo si fa con una velocita adeguata, sì pro-
voca la sensazione ottica che i quattro display siano atti-vati in modo continuo. ll circuito dispone inoltre dì fun-
3/8 di Vcc
5/8 di Vcc
Tabella che determina i due brt menosig n if icativi del I' i nd i rizzo.
zioni di reset, test, controllo di lumi-nosità, ecc.
ESERCIZIO PROPOSTO
Questo programma è simile al primo
che abbiamo realizzalo con il conver-
titore, cambia solo il modo di offrire il
risultato finale, che sarà un valore
compreso fra 0000 e 0255, rappre-
sentato sui quattro d splay a 7 seg-
menti. Ancora una volta il programma
principale è incaricato di eseguire le
chiamate alle diverse funzìoni, che
realizzano realmente il lavoro. Le spe-
cifiche di questo dispositivo indiche-
ranno il modo con cui si realizzerà la
comunicazione fra essi e il PlC.
PROGRAMMAll programma principale è molto simi-
ìe a quello del convertitore che abbia-
DtG4 F., ,e!..;_ r-l;:l
-s-4 , 1...É{',4lJ+-@;ì4:
' | 4-+4
4, l.gE+-L'.'+::...ì r
543óil t'
UISAAr 0ó4
Dir=Olll0llr/w
ll SAA| 064 collegato a quattro display a 7 segmenti
taa:aaaaaatLaaa:aaaaaaaaa,aaatltt\j111::11:::a:;;::;lll\l::ìlì{lflHiPr:r.ir::r:-ìììihÀ*11r!ì3!rì111!ì!ìì:
$cffware
o3
Fnunc Ìa to del I' eserciz io propos Lo
mo gra visto. Si richiede l'acquisizione di un valore ana-logico convertito a binario, qJesto valore binario si co"ì-verteinBCD,chetornaaconvertirsiqUeStavo|taincodice a 7 segmenti, per rappresentarlo sui display. Si
utilizzano come linee di l/O solo le due corrispondenti al .
bus|2C,situatesu||aportaB,chesonocondiviseconidue dispositivi utilizzati. Come routines nuove abbiamo :
nrrallo Ài ttcttzltzztztnne del datO, di COnVefSiOne del ,
dato del codice binario BCD e quella di decodifica del ,
numero BCD.
Per la conversione del dato a BCD si parte da un :
va ore memotzzalo nel regìstro di lavoro W che è con- :
vertito in codice BCD e memorizzato nei due registri da
Bbit,inmodocheinogniregtstrocisianoduedigit'
lniziolizzozionePB uscite
TMRO
€hiedere vqloredello conversione
Convertire q BCD
Converlire o 7 segmenli
Visuqlizzore
Òrn.nínrsmms dol l a<arci zìa ^rÒnÒ<rÒ
ll progrommo legge il volore onologico presenf,e
sul conole 0, lo converte in BCD e lo moslro lromi$e
quoitro disploy o 7 segmenti. 5i utilizzo il bus l2C
per mettere in comunicozione íl PIC con il dispositivo
convertitore e con il conhollore di disploy.
CLKIN
12c-vat
Digit_1
Digit 2
Digit 3
Digit_4
A_inp
Buffer_H
Buffer_L
u5T
INCLUDE
EQU
EQU
EQU
EQU
EQU
EQU
lQuEQU
EQU
ORG
g0r0
INCLUDE
call
movlwmovwfcall
bsf
call
call
movfmovwfreturn
P:l6F84A'P16F84A.rNC"
.4000000
0xOc
0x'12
0x13
0x14
0x15
0x16
0x17
0x18
0x00
Inizio
"12cLowlNc"
Txt*Starî-Bítb'10010001'
DataByte
Txt_Byte
-Ultimo*ByteRcvByte
Txt*Stop_Bit
DataByte,W
A_inp
A_lnput
; Tipo di processore
: Defínizione dei reqistri interni
; Frequenza di lavoro
; lnizio delle variabili per la routine I2C_LOW
; Buffer di uscita dei 4 digit per il 5AA1064
; Risultato della conversione AD di ingresso
; Risultato della conversione in BCD
; Vedor reset
; lnclude la routine di gestione del bus l2C
; Trasmette la sequenza di inizio
; lndirizzo del PCF8591 {modo lettura)
; Riceve un unico byte per volta
; Riceve il risultato della conversione AD
; Trasmette la sequenza di 5T0P
; Salva il valore risultante dalla conversione
í;-,+.É+=-:'1rSaE:::.=
:,
.
:
ììì:
Visualizzare
Bin,bcd
Bin bcd 'l
Bin_brd_2
Érn 0c0 J
Un_Pack
call
call
ilOVIW
movwf
call
drfcall
movlw
movwf
call
movf
movwf
call
movfmovwf
call
movf
movw{
call
movf
movwf
call
call
return
clrf
clrf
addlw
btfss
90î0movwf
incf
movf
xorlw
btfss
goto
clrfincf
movf
goto
swapf
call
movwfmovf
call
movwf
swapf
call
movwfmovfcall
movw{
return
Inizia*Bus
Txt_Start_Bit
b'01 1 101 1o',
DataByle
Txt_Byte
DataByte
Txt_Byte
b'010001 1 1'
DataByte
lxt Byte
Digit_1,W
DataByte
Txt_Byte
Digit_2,W
DataByte
Txt-Byte
Digit_3,W
DataByte
Txt_Byte
DigiL4,WDataByte
Txt_Byte
Txt_5lop_Bit
Buffe_L
Buffer_H
UXTb
5TATU5,C
Bin_bcd_3
A-inp
Buffer_L,F
Buffer_L,W
b'00001010'
STATUS,Z
Bin_brd_2
Buffer-L
Suffer_H,F
A_inp,W
Bin_bcd_1
H'OA
Buffer_l,F
Buffer_L,F
Buffer_H,W
BCD_7seg
Digit'1Buffer_H,W
3(D_7seg
Digit_2
Buffer_L,W
BCD_7seg
Digit_3
Buffer_L,W
BCD_7seg
Digii_4
addlw
swapf
ionivf
return
;lnizializza la linea del bus l2C
; Invia il codice di inizio
; Trasmette I'indirizzo del dispositivo {scittura)
; Trasmette il byte di istruzione
; Trasmette byte di controllo
; Trasmette Digit 1
; Trasmelte Digit 2
;Trasmette Digit 3
; Trasmette Digit 4
; Trasmette la sequenza di 5T0P
; Cancella i registri di lavoro
; Sottrae 10 per somma di complemento a 2
; I presente il Cany?
;N0; 51. Scivilo nel registro temporale
; Incrementare byte basso, scriverlo e inviarlo...
.,, al registro W...
; ... xor di OAh con W (BCDL)
; ll risultato di questa operazione è zero?
; N0.
; Sl. Canrella il byte basso e,,,
; incrementare quello alto.
; Recupera il dato.
; Continua le operazioni.
; TEMP0 + OAh
i <3:0> <==> a7;4v g ==> BCDL
; W o BCDL ==> BCDL
; Converte il nibble piir significativo del Buffer-H
; Converte il nibble meno significativo del Buffer_H
; Converte il nibble più signi{icativo del Buifer_L
; Converte il nibble meno signi{icativo del Buffer-L
Prog ra m m a ri solto (cont i n u azion e).
Prima di poter visualizzare il risultato, dobbiamodividerlo in quattro digit o decodificarlo, e trasformareognuno di essi nel suo corrispondente codice a 7 seg-menti. La routine dtvisualizzazione è ouella che utilizzail dispositivo SAA1964. In essa, dopo il bit di inizio e il
suo indirizzamento per la scrittura, si invia la funzioneche si vuole eseguire. Di seguito si trasmettono. ad unoad uno, idigit da visualizzare, gia convertiti rn codice a7 segmenti.
NUOVA PROPOSTAPensate a una nuova possibilità: ad esempio, che ve nepare di disporre di diversi sensori, uno per ogni canaledel convertitore, e scegliere quale convertire a secondadel valore dei due interruttori? ll risultato puo essere
mostrato tramite dei LED, o con l'aiuto del nuovo dispo-sitivo che abbiamo aooena conosciuto.
Organigramma della nuova proposta
Soflwsre
itoo
AP 05
Vcc
ll piedino RB4 del PIC sarà la lìnea di trasmissione dei dati, e il piedino RB5 lalinea di ricezìone. Nel connettore DB9 del (ompurcr saranno i pin 3 e 2 rispettivamente.ll cavo seriale che unisce il computer con il PIC tramite rl MAX232 deve avere le lineedi trasmisstone e di ricezione tncrociate, dato che quello inviato dal PIC tramite la hnea ditrasmissione deve arrivare alla periferica sulla linea di rìceztone e vrceversa.
5i desidera controllare, famite un teminale, una serie di dispositivi di allarme quali possono essere i
diodi lED, che mostrano in ogni momento la situaziole di diversi sensori. 5i seguirà la seguente tabella:
.''''
1...-'.
Premere uno di questi pulsanti farà cambiare lo stato delle linee RB3-R80, quelle che ci
mosttano lo stato dei sensori. Dato che abbiamo due lED per ogni situazione di allarme al posto di uno,
dobbiamo assicurarci che i LID spenti lo siano per errore del sistema e non
per problemi di montaggio del circuito. Solo nel caso di "disconnessione" non ci sarà alcun IED acceso;
in tutti gli altri casi dovranno esserci due LED su quattro accesi nella posizione adeguata.
TASTO
aA
0P
5PC
USCITA
RBO
RBl
RB2
R83
AZIONE
pericolo di incendio
N0 pedcolo di incendio
pericolo intrusi
N0 pericolo intrusi
scollegamento
ALTARME
pericolo incendio
N0 perkolo incendio
pericolo intrusi
N0 pericolo intrusi
Appticazione pratica:comunrcazlOne con computer
e l'utilizzo della tastiera e
dell'lCD come neriferiche
di un PIC vi sono sembrateuna grande invenzione,î-^^++a+^'-.li',^'J^"^d5peLLdre ur veuere cosa
abbiamo preparato in questa occa-sione: niente più e niente meno che
la comunicazione del PIC con il com-nltter Per ouesto lrtilizzeremo un
canale RS-232 che comunrca rn
modo se'iale con la porta del PC
Orrest'rrltimo orazie al softwareHyperTerminal (Hypertrm) fornito da
Windows, si comporterà come un
Lerminale di comunicazione.
Per fare comunicare il PIC con il com-^,,+^r' ^^^ L---+- ,,+ili---"^ l^ .r^..^PULtrl ItUI Ud)Ld U||t/ót E rU )rC)rU/,ti^^,,î^^i^, ,..tilngua9gro, ma oevono es5ere
uguali anche isuoi livelli elettrici.Per otîenere orresîo si utilizza il
rircttita intonr:tn N/AY7?7 iì nrr:ìohr il rnmnitn Ài rnnuarfiro ilirralli lnni-
ar I tl nrn\/onronîr fl:t HI( : il\/a ìl
lnniri P(--)?f rha ci rnnlirrn^ ìl .^nrwvrLr r\J-zJZ, Lr rE )r oPPilLoru or LUr r-
npffnro dol rnmnrrfor
t1 --,.^ -^-:-1^ )^,,^ ^,,^-^ t-tt (dvo sel Hte OeVe àVete lelinee di trasmtssione e riceztane tncroctale
ll PIC oltre a mostrare le informazioni tramite i LED fornirà il tipo di situazione al terminale perché sia
mostrata in video.
Lnunciato dell esercrzio proposrc.
i
AccendereRBO
SpegnereRAI
Alfenderelc ricezione
di un cqrqllere
ActendereRBI
SpegrereRBO
Quando è il computer che manda
i dati al PlC, il MAX232 ha il compitodi fare la conversione inversa.
Nella figura possiamo vedere i
pochi componenti esterni di cui ha
bisogno questo chip per lavorare.Comp vpdete le nossibilità che offrela comunicazione con un computersono enormi. ll PC potrebbe trovarsi
in una abitazione, e il sistema di con-
trollo in un'altra, anche a notevole
0 rsta nza.Òltra : np<fira doi comnliri IFT)
notrémo anche movimentafe Un
microrobot per realizzare un lavoro. o
un sistema di riscaldamento che si
attiverà o drsattiverà a seconda degli
ordini dell'utente o delle ore del gior-
no.
Lo schema, in questo caso, non si
limita agli elementi da collegare al
PlC, ma si estende sino alla connes-sinnp rnn il rnmnrrter ll modulo che
appare nella figura come canale RS-
232 è mostrato in dettaglio in unafinrrra nrarodonta
'+; ftrr* ízÍ:iltie"ú & rÍi. l'u +Dopo aver confrgurato le linee del PIC
come ingressi/uscite, e il resto delìe
periferiche in modo adeguato, sì
attende di ricevere un carattere.
Si verificano ad una ad una tuttele possibìlità di attìvazione di unaf:<tiora o e qornnd: Ài nrrrli +rc+i,-- ur vuoil Lo)Ll
sono stati premuti, si accenderanno o<i <nonnor:nnn i I Flì --l^a' ' -+i a ri)r )pEVr rEroril rv I LLU dUcVUdtl c )l
manderà un messaggio sul monitorche visualizza la situazione attuale del
sistema.
i.: i;i j.': i': i'l .:i1 = ::"jl ;r!
ll programma, anche se lungo, è+--;t^,l- --^;"^toLItE uo loPil q.
Le variabili definite all'inizio del
programma sono necessarie per la
comunicazione seriale. In seguito si
definìscono i differenti messaggì da
visualizzare, in modo simile a quan-
ActendeÉRB2
SpegnaeRE3
: --!.
HS
E'O?
oAceendere
RBitSpggnere
nB2
È"r
AtcendereR8O, RBI,rB2, Rg3
Visuelizzore mesroggio
I .i!
O rga n ig ra m ma del l' esercizi o proposto.
i
ìÌi
,rll
Mess_5
Mess_6
Mess 7
CTKIN
BAUDE
T-MODO
R MODO
T-NbhR_Nbit
SbitRS232,var
Contatore0ffsetTemporale_1
Temporale 2
Mess_0
Mess_1
Mess_2
Mess_3
Mess 4
u5TINCLUDE
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
ORG
g0r0ORG
EQU
DT
EQU
DT
EQU
DT
EQU
DT
EQU
DT
EQU
DT
EQU
DT
EQU
DT
EQU
DT
EQU
DT
EQU
DT
INCLUDE
movwfmovfcallmovwfmovfbtfssgotoreturnmovwfcallincfg0to
drfbsf
movlw
movwfmovlwmovwfbcf
clrwdtcall
movlw
P=15F844
"P'l5F84A.tNC"
.4000000
.9600
1
1
ó
8
0x{)C
0x1'l
0x12
0x13
0x14
0x00
tNtzt00x05
; Tipo di processore
; Definizione dei registri interni
; irequenza di lavoro
; Velorità di comunicazione
; îrasmette il primo bit t5B
; Riceve il primo bit l5B
; Trasmette caratteri da 8 bit; Rkeve caratteri da 8 bit; Trasmette 2 bit di stop
; Inizio delle variabili per routines R5232
; Variabile rontatore di mesaggi
; Spostamento dei messaggi
; Variabile temporale
; Variabile temporale
; Vector Reset
; Salta il vedor di intenuptì"5collegamento ",0x0d,0x00
"Pericolo Incendio ",0x0d,0x00
"No pericolo incendio ",0x0d,0x00
"Condizione nulla ",0x0d,0x00
"Perkolo intrusi ",0x0d,0x00
"lncendio/lntrusi ",0x0d,0x00
"lntrusi/No incendio ",0x0d,0x00
"Condizione nulla ",0x0d,0x00
"No Pericolo intrusi ",0x0d,0x00
"lncendio/No intrusi ",0x0d,0x00
"No incendiollntrusi ",0x0d,0x00
; Include le routines di comunicazione
; A seronda del valore contenutonel registro W, viene fornitoil carattere da visualizzare
; Calcola lo spostamento sulla tabella
; dei mesaggi: Questa routine invia
tramhe RS232 il mesaggioil cui lNlZlO è indicato
; nell'actumulatore. La fine di un
messaggio si determina mediante
il codite 0x00
; Salva posizione della tabella
; Recupera posizione della tabella
; Cerca carattere di uscita
; Memorizza il carattere
; Controlla se è l'ultimo
; Trasmette il carattere
; Carattere successivo
; Scollega uscita
; Selezione banco 1 dei dati
; Prescaler da 128 per il WDT, Pull,up
; RB5 ingresso e RB4-RB0 uscite
; Seleziona pagina 0 dei dati
; Attendi la ricezione di un carattere
îorondn ns<<o nol la
co nfig u razio n e del prog ra m m a
terminale "Hypertrm".
Q*,*"'***-_
'-qLde dh+r@ rMH. edù@6c!rud,É
,ddr*H# l.* .---*:!
N@iqdrȀl@r I
Mess_8
Mess_9
Mess 10
Tabella,Messaggi
MESSAGGIO
Mesaggio_1
Non_è ultimo
lNtzl0
'RS232t0W.tNC',
movwf pat
Secondo passo nellaconfigurazionedel programma terminale " Hypertrm"
to fatto lavorando con il displayLC D.
ll file "RS232LOW.lNC" contie-ne le routines di cornunicazione,per l' nvio e ricezione dei dati; datoche il PIC 16F84 non ha queste risor-
se i'np err^entate nel 'hardware,flrpq-p onor:zinni devono eSSere
no<tito iri: cnftrnr:ro
In segurto trovramo la routrne
inca.icata dr rasmettere il nîessag-
gio che fa uso della rour ne "TxD ",
contenuta in " RS232LOW", e invia
un byte (un solo carattere) ognivolta che si chrama. La chiamataalla routine inversa, la "RxD", si
trova ne programma prncrpa e.
essa c î'oínera del tasro p"e.^uto.Dopo aver verificato di quale
Temporale 1
Temporal_1,W
Tabella_mesaggi
Temporale_2
Temporale_2,F
SîATUS,Z
Non è ultimo
TxdregtxuTemporale l,FMesaggio_1
PORTB
STATUS,RPO
b'10001111',
OPTION,REG
b'1 1 1 00000'TRISB
STATUS,RPO
RxD,n,
LOOP
SCOLLEGAMENTO
INCENDIO
NO-INCENDIO
INTRUSI
NO_INTRUSI
Test_mess
Mess_loop
Uscita mess
END
Drnaramma rì<alfn
Rxdreg,W
STATUS,Z
INCENDIO
Rxdreg,W
STATUS,Z
NO_INCFNDIO,0,
Rxdreg,W
STATUS,Z
INTRUSI
'P'
Rxdreg,W
STATUS,Z
NO_INTRU$
Rxdreg,W
SÎATUS,Z
L00p
PORTB,O
PORTB,l
PORTB,2
PORTB,3
Test_Mess
PORTB,l
PORTB,O
Test_Mess
PORîB,O
PORTB,l
Tel_Mess
PORTB,3
PORTB,2
Test_Mess
PORTB,2
PORTB,3
Test Mess
0x0a
Contatore
Mens_10
0ffsetPORTB,W
b'00001 1 1 1'
Contatore,W
sTATU5,Z
Uscita_mess
.20
0{fseiContatore,F
Mess_loop
0ffset,W
MESSAGGIO
LOOP
sublvf
btfsc
goto
m0vtw
subwf
btfsc
. È ,rl'?
ffiJ :JSf-ìl
bryFry.#b@'bl
goto
m0vtw
subwi
btfscg0î0
m0vtw
subwf
btfxg0r0
movlw
subwf
btfsc
goto
;E,A?;Si
. È ,n,r
;Si
; È ,P'?
;Si
;È"?;No
;Scollega uxite; Determina il mesaggio da dare
; Scollega RB1
; Collega RBO
;Determina il mesaggio da dare
; Scollega Rgo
; Collega R81
; Determina il messaggio da dare
; Scollega RB3
; Collega RB2
; Determina il messaggio da dare
; )coilega xbr
; Collega RB3
; Determina il mesaggio da dare
;0ra procediamo a determinare il messaggio
di uscita sul terminale
; Per questo in base al contenuto della
PORTA B si cakola l'offset
; del messaggio da fornire tenendo conto che
i messaggi iniziano a
; partire dall'indirizzo 0x05 ed hanno una
lunghezza fksa di 20 (aratteri.
: lnizializza contatore di messaggi
; lndirizzo dell'ultimo messaggio
; Legge il valore attuale della PORTA B
; Conisponde al messaggio da fornire?
;sì
; No, punta al messaggio precedente
; Uscita del messaggio appropriato
; Fine del programma sorgente
sffi
bcl
bcf
bcf
bcf
g0r0
bcf
bsf
g0t0
bcf
bsf
g0r0
bcf
bsf
goto
bcf
bfgoto
.4rt&. .l
Terzo passo nella configurazroneoet programmaterminaIe "Hypertrm".
I ìl.ffi.omg Atuer 4@@
Ora si puo iniziare^ .:-^,,^.^ ; )-+,a iltvtalÉ u //Lcvg/t / udll,
+--+^ -i +.-++î -i i-^:StanO ibit ditd)LU )t Lt oLLo, )t [|P\
spnnalazionp serondo la tabellavista nell'enunciato del program-ma, e si procede a determinare^, -l^ -r- :t ^^---^^t) da inviare alqudrtr )rd il rìc))dgvrL
term ina le.
Per fare funzionare il programma
sorlo necessari, oltre al PIC e ai LED,
nli plpmonli viqti nolln crhpm: nono-v" -'-'ra le.
Donn ,aver r-ollen,r{g il PIC con il
compuler, chiameremo il programma" l--lrinorirm " o ln rn nf, ,)Y-'.' --' "tgureremo per
fare in modo che segua gli stessi
narametri del P C nella corrìunrcazto-ne (porta, velocita, ecc.).
ln <onrritn nntromn tntTtAro A 6(a-,r--^+i ^ .,^,r^-e Che COSa Cirrtrrc pur)orLr tr vcucl
risponde il PlC.
movlw
movwf
movlw
movlvf
movf
andlw
subwf
btfsc
goto
m0vtw
subwf
decf
g0r0
movf
call
goto
ÍdE Motu {M@d f)d lrafu ?
ù1,Él d13l s1ì5f etl