Microrobotica Monty Peruzzo Editore - 10 - Applicazioni

Page 1



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 interne 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 trasformare valori analogici ìn valori digitali che possano essere processati dal PlCl 6F84. In ogni caso, la scelta più sensata sarebbe seleziona-

re un PIC che contenga un convertttore, ad esemplo uno della gamma dei

3t

rr4ff#LJLS

PIC

16FB7x.

effifl/Set

ll 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. master è deteril riferrmento fare tindirizzo a cui dovrà ha tre bit minato dal codice 1001, stabilito in fabbrica, 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 analogico/digitale a B bit, convertendo i valori che arrivano tramite le linee ANO, ANl, AN2 e AN3. e passando il

ll modulo ADCIDAC PCFB591

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ò funzionare come un convertitore digitale/analogico, convertendo ilvalore binario che fornisce il PlC, in una tensione che esce tramite AOUT. I segnali di massa e di riferimento si collegano ai pin AGND e VREF. A seconda delle caratteristiche della tensione di riferimento si otterrà maggiore o minore precisione.

h5ilffi {EHE{:} Fffi #$F#lS}

{3

ll programma deve solo prendere un valore e mostrarlo convertito. lmmaginate che il parametro sia quello di una temperatura o di un sensore di luminosita, e che in funzione del valore si debba attivare un ventrrarore, un termoconvettore, una luce, ecc. Affrontiamo quindi il lavoro per parti, e dedichiamocr, per ora, solamente alla conversione. Sarà tanto semplice quanto realizzare un crclo di lettura sul dispositivo PCF859'1. Se si prende come tensioOrga

ll programma legge il valore analogico presente sul canale

0,

12C

per mettere in comunicazione il

ig ra m

ma

d e I I' esercr zi

o

p ro

posto

ne di riferimento 5 V la risoluzione per bit sarà di 20 mV, come conferma l'equazione della figura e come risulta anche dalla tabella in cui ogni incremento di 20 mV aumentera di 1 il valore binario Come mostra l'organigramma, dal modulo prrncipale si configurano solo ie variabili che si vogliono utilizzare e si eseguono le chiamate alle differenti funzioni,

lo converte in digitale e lo mostra tramite i diodi LED, 5i utilizza il bus

n

PIC con

il dispositivo convertitore, Lnunc ia to dell' eserc izio propost o

che saranno quelle che sup-

porteranno Vref +

Risoluzione =

2

-Vref-

Ne bir

5-O =-=-= 28

5

256

il

carico reale

del programma. ll modo 20 mV/bit

in

cui queste funzioni si realiz-

zeranno dipenderà

dal

dispositivo: raccomandiamo di leggere sempre le specifiche tecniche per seguire r passi ed i tempi indicat dal costruttore $3ffi##ffiÀ*,4 ffiA

Dopo la definizione delle variabili dovremo includere un file con le routines di gestione per il bus l2C che ^i,', avansdrdÍrÍlo ,,+ili---+^ uI'|tzzale ptu

ti.

Equazione che da la risolutione di un convertjtore e ld relaLivà tabellò.

Configureremo la porta A come uscita, utilizzando le quattro linee meno significative per acquisire parte del valore convertito, cioè i

e

p

ry fi $ccw

*qg

ry

€__ffi.trtrR#

ffi

ff


; Tipo

di processore

LIST

P=f6F84A

INCLUDE

"P16F84A.lNC'

Definizione dei registri interni

EQU

.4000000

Frquenza di lavoro

l2c_var

EQU

0xOt

lnizio delle variabili per le routines I2C-L0W

A_inp

EQU

0x12

Risultato deila conversione AD di ingresso

aux

EQU

0x13

; Variabile ausiliaria dedicata al dato binatio

ORG

0x00

; Vector reset

goto

lnizio

INCLUDE

't2cLow.tNc"

A_lnput

call

Txt_5tart_Bit

movlw

b'10010001'

; lnclude le routines di gestione del bus l2C

;Trasmette la sequenza di inizio

movwf

DataByte

call

Txt_Byte

; lndirizzo del PCF8591 (modo lettura)

bsf

_Ultimo-Byte

; Riceve un unico byte pet volta

call

RcvByte

; Riceve il risultato della conversione AD

call

Txt_Stop_Bit

; Trasmette sequenza di ST0P

mov{

DataBvte,W

movwf

A_inp

; Salva il valore della conversione

m0vT

A

; Spostiamo il risultato in W

andlw

b'0000111f'

; Lavoriamo con la parte bassa del registro

movwf

PORTA

; e la spostiamo sulla Porta A ; Spostiamo nuovamente il risultato in W

return

Visualizzare

ino,0

m0vî

A-inp,0

andlw

b'11110000'

; e lavoriamo con la parte aÌta

movwf

aux

; spostandola su di un registro ausiliario

swapf

aux,0

; Cambiamo di posizione ai

MOVWT

;e

PORTB

li portiamo sulla Porta

bit

B

return

lnizio

ctrf

PORTA

clrf

PORTB

bsf

STATUS.RPO

; Seleziona il banco

î

movlw

b'00000000'

movwf

TRISA

; RA0-RA4 uscite

clrf

TRI5B

; Porta B uscita

m0vlw

b'î0000110'

; Prescaler di 128 per ilTMR0. Pull-up

movwf

OPTION

bcf

STATUS.RPO

; Seleziona il banco 0

call

lnizia Bus

; lnizializza il bus t2C

0{f

REG

t -'-'"-....-.="=..-:.-'"-."=

Programma nsolto


;il.

loop

il Prog ra m m

a ri solto

(co

; Resetta iIWDT ; Ottiene ilvalore di conversione ADC

lJ:ri-'.,,

;Visualiza sui

LED

il risultato

:;""'" ;

tine del programma

nti n uazi one).

quattro bit meno significativi del numero. Allo stesso modo la porta B acquisirà la restante parte del numero, vale a dire i4 bit più significativi. Inoltre, le linee RB6 e RB7 saranno utilizzate per la comunicazione con il convertitore 12C. La routine "A_input" legge il valore binario che arri-

va dal canale 0 dell'ADC contenuto nel disoositivo l2CPCF8591. La subroutine "Visualizzare" prende il

valore convertito dalle porte A e B, nel modo precedentemente descrrtto. ll modo di realizzare la comunicazrone con il convertitore viene indicata dal fabbricante di quest'ultimo Dopo un bit di inizio dobbiamo indirizzarlo, indicando se vogliamo leggere o scrivere, Nel nostro caso stiamo leggendo, dato che stiamo cercando di acquisire la

conversione

di una tensione

analoqica

a

binaria.

l/^^-;^^^ up4rur

A, )Lr --.1++,,.^ rc ur rLLuro p€l' qUeStO dispositivo consiste nel fargli produrre la tensione corrispondente al valore binario che introduciaL

Iniziqlizzozione PA uscito P3 uscitq

mo. Dato che inviamo solo un byte, se ne vogliamo conoscere il valo-

TMR.O

re, e leggere rl valore convertito, possiamo fermare il seguito della

Ghiede il volore dello conversione

sequenza. Vqlore =

X?

Tutte nrreste roiltines sono Sl

raccolte nel

file

"12CLOW.lNC".

Invece di utilizzare le porte A e B per acquisire il valore della conversione in un modo così ricerca-

Vqlore >X?

Spegnere

Spegnere

il riscqldcmento

Accendere il vedilgtore

Spegnere il ventilotore

il riscaldqmento

Spegnere il ventilotore

Accendere

il riscoldomento

to, si potrebbe optare per l'utilizzo di un altro dispositivo, anch'esso l2C, a cui passare il dato con due soli f ili, e quest'ultimo visualizzerebbe su dei

,*nnl i r,nx:g#ffi :gt,i s,ff

,,-.,,',

dato

FIUOVA PROPOSTA Proponiamo ora una modifica all'esercizio precedente.

A seconda che il valore sia rnorinro inforinro ,_,- n_ uguate ao preso uno come riferimento, si accenderà un riscaldatore, un ventilatore o si spegnerà tutto. cr

Organigramma della nuova proposta

il

LED.


Comuni cazione

fra dispositivi osì come abbiamo visto con il convertitore DAC/ADC PCFB591, esistono molti altri dispositivi predisposti per comunicare con il bus l2C. Questo ci fornisce la possibilita di t^.,^-^-^-^" 256 elementi con un impiego "* - --.r minimo 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 comunicazione fra entrambi i dispositivi si realizza tramite un

d#re ffi ffi ffi 'i m

microcontroller, il

PIC

1

6F84.

HL fl#r4YR#$_L#ffifi $3s ffirSFLeY SeAs*64 Questo integrato e capace di pilotare fino a 4 display a 7 segmenti. ll suo impiego è semplice: sostanzialmente,

dobbiamo ìnviare la combinazione binaria corrispondente ai segmenti che vanno attivati per ognuno dei 4 digit. Per farlo funzionare con i suddetti display si puo collegare come mostrato nella figura. Tramite le lrnee UI SAAr 0ó4

SCL e SDA il m icrocontroller manda al dispo-

sitivo l'informazione da visua-

lizzare.

Dei

3/8 di Vcc 5/8 di Vcc

sette bit di indirizza

i rinnr ra

più

significativi <nnn nrodotar-

Tabella che determina i due brt meno sig n if icativi del I' i nd i rizzo.

minati in fabbrica come "01110" e i due successivi sono stabiliti dall'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ì provoca la sensazione ottica che i quattro display siano attivati in modo continuo. ll circuito dispone inoltre dì funzioni di reset, test, controllo di luminosità, ecc.

Dir=Olll0llr/w

ESERCIZIO PROPOSTO Questo programma è simile al primo che abbiamo realizzalo con il convertitore, cambia solo il modo di offrire il

risultato finale, che sarà un valore fra 0000 e 0255, rappresentato sui quattro d splay a 7 segcompreso

menti. Ancora una volta il programma principale è incaricato di eseguire le

chiamate alle diverse funzìoni, che

DtG4 ., ..;_ ,r-l;:l 1...É{ -s-4 ',4lJ+-@;ì 4-+4 4: 4,

|

' l.gE +-L'.'+:: r ...ì

F ,e!

realizzano realmente il lavoro. Le specifiche di questo dispositivo indicheranno il modo con cui si realizzerà la

comunicazione fra essi e il PlC.

543óil t'

PROGRAMMA ll SAA| 064 collegato a quattro display a 7 segmenti

ll programma principale è molto simiìe a quello del convertitore che abbia-

taa:aaaaaatLaaa:aaaaaaaaa,aaatltt\j111::11:::a:;;::;lll\l::ìlì{lflHiPr:r.ir::r:-ìììihÀ*11r!ì3!rì111!ì!ìì:

$cffware


o3

lniziolizzozione 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.

Fnunc

Ìa

to

PB uscite TMRO

€hiedere vqlore dello conversione

del I' eserciz io propos Lo

mo gra visto. Si richiede l'acquisizione di un valore analogico convertito a binario, qJesto valore binario si co"ì-

Convertire q

BCD

verteinBCD,chetornaaconvertirsiqUeStavo|tain codice a 7 segmenti, per rappresentarlo sui display. Si utilizzano come linee di l/O solo le due corrispondenti

al

.

Converlire o 7 segmenli

bus|2C,situatesu||aportaB,chesonocondiviseconi due 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 è convertito in codice BCD e memorizzato nei due registri da

Bbit,inmodocheinogniregtstrocisianoduedigit'

:

,

,

Visuqlizzore : :

Òrn.nínrsmms

dol l a<arci zìa

^rÒnÒ<rÒ

u5T

P:l6F84A

; Tipo

INCLUDE

'P16F84A.rNC"

: Defínizione dei reqistri interni

CLKIN

EQU

.4000000

; Frequenza di lavoro

12c-vat

EQU

0xOc

Digit_1

EQU

0x'12

; lnizio delle variabili per la routine I2C_LOW ; Buffer di uscita dei 4 digit per il 5AA1064

Digit 2 Digit 3

EQU

0x13

EQU

0x14

Digit_4

EQU

0x15

A_inp

lQu

0x16

; Risultato della conversione AD di ingresso

Buffer_H

EQU

0x17

; Risultato della conversione in BCD

Buffer_L

EQU

0x18

ORG

0x00

g0r0

Inizio

INCLUDE

"12cLowlNc"

; lnclude la routine di gestione del bus l2C

call

Txt*Starî-Bít

; Trasmette la sequenza di inizio

movlw movwf

b'10010001'

call

Txt_Byte

A_lnput

Vedor reset

DataByte

-Ultimo*Byte

; lndirizzo del PCF8591 {modo lettura) ; Riceve un unico byte per volta

call

RcvByte

; Riceve il risultato della conversione AD

call

Txt*Stop_Bit

; Trasmette la sequenza di 5T0P

movf movwf

DataByte,W

bsf

return

í;-,+.É+=-:'1rSaE:::.=

;

di processore

A_inp

; Salva il valore risultante dalla conversione


:,

.

:

ììì:

Visualizzare

call

Inizia*Bus

call

Txt_Start_Bit

ilOVIW

b'01

movwf

DataByle

call

Txt_Byte

drf

DataByte

call

Txt_Byte

movlw movwf

b'010001 1 1'

1

;lnizializza la linea del bus l2C ; Invia il codice di inizio

101 1o',

; Trasmette I'indirizzo del dispositivo {scittura) ; Trasmette il byte di istruzione

DataByte

call

lxt

movf

Digit_1,W

Byte

movwf

DataByte

call

Txt_Byte

movf movwf

Digit_2,W

call

Txt-Byte

movf movw{

Digit_3,W

call

Txt_Byte

movf

DigiL4,W

; Trasmette byte di controllo

; Trasmette Digit

1

DataByte ; Trasmelte Digit 2

DataByte

;Trasmette Digit 3

movwf

DataByte

call

Txt_Byte

; Trasmette Digit 4

call

Txt_5lop_Bit

; Trasmette la sequenza di 5T0P

clrf clrf

Buffe_L

; Cancella i registri di lavoro

addlw

UXTb

; Sottrae 10 per somma di complemento a 2

btfss

5TATU5,C

;

90î0 movwf

Bin_bcd_3

;N0

A-inp

; 51. Scivilo nel registro temporale

incf

Buffer_L,F

movf xorlw

Buffer_L,W

; Incrementare byte basso, scriverlo e inviarlo... .,, al registro W...

b'00001010'

; ... xor di OAh con W (BCDL)

btfss

STATUS,Z

; ll risultato di questa operazione è zero?

goto

Bin_brd_2

; N0.

clrf

Buffer-L

; Sl. Canrella il byte basso e,,,

incf

Suffer_H,F

; incrementare quello alto.

movf

A_inp,W

; Recupera il dato.

goto

Bin_bcd_1

; Continua le operazioni.

addlw

H'OA

; TEMP0 + OAh

swapf

Buffer_l,F

ionivf

Buffer_L,F

i <3:0> <==> a7;4v g ==> BCDL ; W o BCDL ==> BCDL

return Bin,bcd

Bin bcd 'l

Bin_brd_2

Érn 0c0 J

Buffer_H

I

presente il Cany?

return Un_Pack

swapf

Buffer_H,W

call

BCD_7seg

movwf

Digit'1

movf

Buffer_H,W

call

3(D_7seg

movwf

Digit_2

swapf

Buffer_L,W

call

BCD_7seg

movwf movf

Digit_3

call

BCD_7seg

movw{

Digii_4

return

; 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

Buffer_L,W ; Converte il nibble meno signi{icativo del Buffer-L


Prog ra m m

a ri solto (cont

in u

azion e).

Prima di poter visualizzare il risultato, dobbiamo dividerlo in quattro digit o decodificarlo, e trasformare ognuno di essi nel suo corrispondente codice a 7 segmenti. La routine dtvisualizzazione è ouella che utilizza il dispositivo SAA1964. In essa, dopo il bit di inizio e il suo indirizzamento per la scrittura, si invia la funzione che si vuole eseguire. Di seguito si trasmettono. ad uno ad uno, idigit da visualizzare, gia convertiti rn codice a 7 segmenti.

NUOVA PROPOSTA Pensate a una nuova possibilitĂ : ad esempio, che ve ne pare di disporre di diversi sensori, uno per ogni canale del convertitore, e scegliere quale convertire a seconda

del valore dei due interruttori? ll risultato puo

essere

mostrato tramite dei LED, o con l'aiuto del nuovo dispositivo che abbiamo aooena conosciuto.

Soflwsre

Organigramma della nuova proposta


AP 05

Appticazione pratica: o

o

comunrcazlOne con e l'utilizzo della tastiera

.''''

it computer

e

dell'lCD come neriferiche 1...-'. di un PIC vi sono sembrate una grande invenzione, î-^^++a+^'-.li',^'J^"^ d5peLLdre ur veuere cosa abbiamo preparato in questa occasione: 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

Vcc

al software

HyperTerminal (Hypertrm) fornito da Windows, si comporterà come un Lerminale di comunicazione.

ll piedino RB4 del PIC sarà la lìnea di trasmissione dei dati, e il piedino RB5 la linea 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 linee di trasmisstone e di ricezione tncrociate, dato che quello inviato dal PIC tramite la hnea di trasmissione deve arrivare alla periferica sulla linea di rìceztone e vrceversa.

Per fare comunicare il PIC con il com^,,+^r' ItUI ^^^ PULtrl /,ti^^,,î^^i^,

L---+Ud)Ld

5i desidera controllare, famite un teminale, una serie di dispositivi di allarme quali possono essere i

,,+ili---"^ E l^ rU .r^..^ )rC)rU U||t/ót

ilngua9gro, ma oevono ,..t

diodi lED, che mostrano in ogni momento la situaziole di diversi sensori. 5i seguirà la seguente tabella:

es5ere

uguali anche isuoi livelli elettrici. Per otîenere orresîo si utilizza il rircttita intonr:tn N/AY7?7 iì nrr:ìo hr il rnmnitn ar I tl

Ài rnnuarfiro

nrn\/onronîr

fl:t

ilirralli HI(

lnniri rnnlirrn^ rwvrLr P(--)?f r\J-zJZ, rha Lr rE ci )r oPPilLoru npffnro dol rnmnrrfor

:

lnniil\/a

ìl

TASTO

AZIONE

a

pericolo di incendio

A

N0 pedcolo di incendio

0

pericolo intrusi

P

N0 pericolo intrusi

5PC

scollegamento

ìl LUr .^n ror 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.

ll

PIC

USCITA

ALTARME

RBO

pericolo incendio

RBl

N0 perkolo incendio

RB2

pericolo intrusi

R83

N0 pericolo intrusi

oltre a mostrare le informazioni tramite i

mostrata in video. )^,,^ ^,,^-^ t-^-:-1^ --,.^ sel ttt1 (dvo Hte OeVe àVete le

linee di trasmtssione e riceztane tncroctale

Lnunciato dell esercrzio proposrc.

LED

fornirà il tipo di situazione al terminale perché sia


i

Quando è il computer che manda i dati al PlC, il MAX232 ha il compito di fare la conversione inversa.

Nella figura possiamo vedere pochi componenti esterni di cui ha bisogno questo chip per lavorare. Comp vpdete le nossibilità che offre la comunicazione con un computer sono enormi. ll PC potrebbe trovarsi in una abitazione, e il sistema di controllo in un'altra, anche a notevole

i

Alfendere lc ricezione di un cqrqllere

0 rsta

nza.

Òltra : np<fira doi comnliri

Accendere

:

HS

RBO

Spegnere

E'O?

RBO

ActendeÉ RB2

Spegnae

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-

RAI

Actendere RBI Spegrere

IFT)

notrémo anche movimentafe

--!.

o

no. Lo schema, in questo caso, non

RE3

Aceendere RBit

si

limita agli elementi da collegare al PlC, ma si estende sino alla connessinnp rnn il rnmnrrter ll modulo che appare nella figura come canale RS232 è mostrato in dettaglio in una

È"r

Spggnere nB2 Atcendere R8O, RBI, rB2, Rg3

finrrra nrarodonta '+;

Visuelizzore mesroggio

ftrr* ízÍ:iltie"ú & rÍi. l'u

+

Dopo aver confrgurato le linee del

PIC

e il resto delìe periferiche in modo adeguato, sì

come ingressi/uscite,

attende di ricevere un carattere. Si verificano ad una ad una tutte

le I

.i!

possibìlità

di

attìvazione

di

una

+rc+i o e qornnd: ,-- Ài ur nrrrli vuoil Lo)Ll sono stati premuti, si accenderanno o --l^a' ' -+i ca ri <i )pEVr <nonnor:nnn Flì dUcVUdtl )l rEroril rv iI ILLU )r

f:<tiora

manderà un messaggio sul monitor che visualizza la situazione attuale del sistema. i.: i;i j.':

ll

i': i'l .:i1

= ::"jl ;r! programma, anche se lungo,

è

+--;t^,l--^;"^ q. toLItE uo loPil Le variabili definite all'inizio del

O

rga

n

ig ra m

ma del l' esercizi o proposto.

programma sono necessarie per la comunicazione seriale. In seguito si definìscono i differenti messaggì da visualizzare, in modo simile a quan-


i

ìÌi

,rll

di processore

u5T

P=15F844

; Tipo

INCLUDE

"P'l5F84A.tNC"

CTKIN

EQU

.4000000

BAUDE

EQU

.9600

; Definizione dei registri interni ; irequenza di lavoro ; Velorità di comunicazione

T-MODO R MODO

EQU

1

;

EQU

1

T-Nbh

EQU

ó

R_Nbit

EQU

8

Sbit RS232,var

EQU EQU

0x{)C

Contatore

EQU

0ffset

EQU

EQU

0x1'l 0x12 0x13 0x14

ORG

0x00

Temporale_1

Temporale

2

Mess_0 Mess_1

EQU

g0r0

tNtzt0

ORG

0x05

; Salta il vedor di intenupt

EQU

ì

DT

"5collegamento ",0x0d,0x00

îorondn

"Pericolo Incendio ",0x0d,0x00

co nfig u razio n

"No pericolo incendio ",0x0d,0x00 "Condizione nulla ",0x0d,0x00

EQU

"Perkolo intrusi ",0x0d,0x00

DT Mess_5

EQU

DT Mess_6

"No Pericolo intrusi ",0x0d,0x00

"No incendiollntrusi ",0x0d,0x00 'RS232t0W.tNC',

; Include le routines di comunicazione

movwf

pat

movwf movf

lNtzl0

LOOP

Temporale

1

movwf movf

Temporal_1,W Tabella_mesaggi Temporale_2 Temporale_2,F

btfss

SîATUS,Z

goto return movwf

Non è ultimo

call

il 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

Txdreg

call

txu

incf g0to

Temporale l,F

drf

PORTB

bsf

STATUS,RPO

movlw

b'10001111',

movwf movlw movwf

OPTION,REG TRISB

bcf

STATUS,RPO

; RB5 ingresso e RB4-RB0 uscite ; Seleziona pagina 0 dei dati

RxD

;

; Trasmette il carattere ; Carattere successivo

Mesaggio_1

b'1

1 1

; Scollega uscita ; Selezione banco 1 dei dati ; Prescaler da 128 per il WDT, Pull,up

00000'

clrwdt call

movlw

,n,

Secondo passo nella

configurazione del programma terminale " Hypertrm"

; Calcola lo spostamento sulla tabella ; dei mesaggi: Questa routine invia

tramhe RS232 il mesaggio

Non_è ultimo

I

.---*:!

"lncendio/No intrusi ",0x0d,0x00

; A seronda del valore contenuto nel registro W, viene fornito il carattere da visualizzare

Mesaggio_1

N@iqdrȀl@r

edù@6c!rud,É

EQU

INCLUDE

MESSAGGIO

rMH.

l.*

EQU

DT

Tabella,Messaggi

dh+r@

,ddr*H#

EQU

DT

Mess 10

'-qLde

"Condizione nulla ",0x0d,0x00

DT Mess_9

Q*,*"'*** -_

"lntrusi/No incendio ",0x0d,0x00

EQU

DT Mess_8

"lncendio/lntrusi ",0x0d,0x00

EQU

DT

Mess 7

ra m m a

EQU

DT

Mess 4

e del prog

terminale "Hypertrm".

EQU

DT Mess_3

ns<<o nol la

EQU

DT Mess_2

î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

Attendi la ricezione di un carattere

to fatto lavorando con il

display

LC D.

ll file "RS232LOW.lNC" contie-

ne le routines di

cornunicazione,

per l' nvio e ricezione dei dati; dato che 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îessaggio che fa uso della rour ne "TxD ", contenuta in " RS232LOW", e invia un byte (un solo carattere) ogni volta che si chrama. La chiamata alla routine inversa, la "RxD", si trova ne programma prncrpa e.

c î'oínera del tasro p"e.^uto. Dopo aver verificato di quale

essa


ffiJ sublvf

Rxdreg,W

btfsc

STATUS,Z

goto

INCENDIO

,rl'? bryFry.#b@'bl

m0vtw subwf

Rxdreg,W

btfsc

STATUS,Z

;E,A?

goto

NO_INCFNDIO

;Si

m0vtw

,0,

subwi

Rxdreg,W

btfsc g0î0

STATUS,Z

. È ,n,r

INTRUSI

;Si

m0vtw

'P'

subwf

Rxdreg,W

btfx

STATUS,Z

g0r0

NO_INTRU$

;Si

sffi

,P'?

SCOLLEGAMENTO

INCENDIO

NO-INCENDIO

INTRUSI

Rxdreg,W

.4rt&. .l

Terzo passo nella configurazrone oet programma

movlw subwf

:JSf-ìl

btfsc

SÎATUS,Z

;È"?

goto

L00p

;No

bcl

PORTB,O

bcf

PORTB,l

bcf

PORTB,2

terminaIe "Hypertrm".

ÍdE

Motu {M@d f)d

ù1,Él

bcf

PORTB,3

g0r0

Test_Mess

;Scollega uxite ; Determina il mesaggio da dare

bcf

PORTB,l

; Scollega

bsf

PORTB,O

; Collega

g0t0

Test_Mess

bcf

PORîB,O

;Determina il mesaggio da dare ; Scollega Rgo

RB1

bsf

PORTB,l

; Collega R81

g0r0

Tel_Mess

; Determina il messaggio da dare

bcf

PORTB,3

; Scollega RB3

bsf goto

PORTB,2

; Collega RB2

Test_Mess

; Determina il messaggio da dare

bcf

PORTB,2

; )coilega xbr

bf

PORTB,3

; Collega

goto

Test Mess

; Determina il mesaggio da dare

;0ra

ìl

I

; del messaggio da fornire tenendo conto che i messaggi iniziano a ; partire dall'indirizzo 0x05 ed hanno una lunghezza fksa di 20 (aratteri.

Uscita mess

Drnaramma

rì<alfn

+--+^ -i +.-++î -i i-^:StanO Lt oLLo, )t [|P\ ibit di td)LU )t

spnnalazionp serondo la tabella vista nell'enunciato del programma, e si procede a determinare -r- :til rìc))dgvrL ^, -l^ )rd ^^---^^t) da inviare al qudrtr term ina le.

movlw

0x0a

movwf

Contatore

movlw

Mens_10

movlvf

0ffset

movf

PORTB,W

andlw

b'00001

subwf

Contatore,W

btfsc

sTATU5,Z

; Conisponde al messaggio da fornire?

goto

Uscita_mess

;sì

ra le.

m0vtw

.20

subwf

0{fsei

; No, punta al messaggio precedente

decf

Contatore,F

Donn ,aver r-ollen,r{g il PIC con il compuler, chiameremo il programma

g0r0

Mess_loop

" l--lrinorirm ,

movf

0ffset,W

call

MESSAGGIO

goto

LOOP

: lnizializza contatore di messaggi ; lndirizzo dell'ultimo messaggio

1 1

1'

; Legge il valore attuale della PORTA

B

Per fare funzionare il programma sorlo necessari, oltre al PIC e ai LED, nli viqti nolln crhpm: nonov" plpmonli -'-'

,)Y-'.'

; Uscita del messaggio appropriato

; Fine del programma sorgente

END

4@@

procediamo a determinare il messaggio

; Per questo in base al contenuto della PORTA B si cakola l'offset

Mess_loop

Atuer

Ora si puo iniziare .:-^,,^.^ /; udll, )-+, ^ //Lcvg/t a iltvtalÉ u

RB3

di uscita sul terminale

Test_mess

?

RBO

.ffi.omg

NO_INTRUSI

lrafu

d13l s1ì5f etl

" o ln rn --'nf"tgureremo per

fare in modo che segua gli

stessi

narametri del P C nella corrìunrcaztone (porta, velocita, ecc.). ln <onrritn nntromn tntTtAro A 6(a-

,r--^+i tr ^ .,^,r^-e rrtrrc pur)orLr vcucl Che COSa risponde il

PlC.

Ci


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.