Professional Documents
Culture Documents
393pub Microcontroladores Pic Proyectos 8051 Tutorial Gandia Epsg Universidad Politecnica Superior Upv Escola by
393pub Microcontroladores Pic Proyectos 8051 Tutorial Gandia Epsg Universidad Politecnica Superior Upv Escola by
ÍNDEX
INDEX...................................................................................................................................2
1 INTRODUCCIÓ ...........................................................................................................4
1.1 COMUNICACIÓ INDUSTRIAL.....................................................................................4
1.2 RADIOCOMUNICACIONS ...........................................................................................4
1.3 ALTERNATIVES ........................................................................................................5
1.4 OBJECTIUS ...............................................................................................................6
3 DISPOSITIUS UTILITZATS....................................................................................11
3.1 AT86RF211 ..........................................................................................................11
3.1.1 Introducció .....................................................................................................11
3.1.2 Recepció ........................................................................................................13
3.1.3 Transmissió ....................................................................................................16
3.1.4 Control Lògic .................................................................................................19
3.1.5 Registres Interns.............................................................................................22
3.2 PIC16F876............................................................................................................30
3.2.1 Descripció general..........................................................................................30
3.2.2 USART ( Universal Synchronous Asyncronous Receiver Transmiter ) ................31
3.2.3 Mòdul Timer0 .................................................................................................36
3.2.4 Interrupcions..................................................................................................38
4 DESCRIPCIÓ HARDWARE.....................................................................................42
4.1 INTRODUCCIÓ ........................................................................................................42
4.2 DISSENY AMB PLACA ÚNICA ..................................................................................43
4.2.1 Bloc microcontrolador ....................................................................................43
4.2.2 Bloc de radiofreqüència ..................................................................................45
4.3 DISSENY AMB DUES PLAQUES ................................................................................52
4.3.1 Placa Microcontroladora ................................................................................52
4.3.2 Placa Transceptora.........................................................................................54
4.3.3 Connexió ........................................................................................................55
5 DESCRIPCIÓ SOFTWARE......................................................................................56
5.1 TRAMA ..................................................................................................................56
5.2 DESCRIPCIÓ DEL PROGRAMA .................................................................................57
5.2.1 Mestre............................................................................................................58
5.2.2 Esclau ............................................................................................................60
5.2.3 Interrupcions..................................................................................................61
5.2.4 Inicialitzacions ...............................................................................................64
2
Índex
6 RESULTATS I CONCLUSIONS..............................................................................82
6.1 PROVES DE DISTÀNCIES .........................................................................................82
6.2 PROVES DE VELOCITAT DE TRANSMISSIÓ ...............................................................84
6.3 CONCLUSIONS........................................................................................................84
3
1 INTRODUCCIÓ
En un primer moment, el control de les plantes industrials era realitzat manualment pels
operaris i no existia cap tipus de comunicació. L’operari observava la planta i prenia les
decisions que creia convenient. Quan es van començar a automatitzar els processos, van
aparèixer les primeres comunicacions, es transmetia informació dels sensors situats a la
planta al centre de control, primer armaris de relès i posteriorment PLCs. Més endavant, el
desenvolupament de les comunicacions van donar lloc a xarxes de control distribuït. En
l’actualitat les comunicacions industrial s’han desenvolupat fins al punt de crear el sistema
SCADA, que permet, des d’un punt, controlar i monitoritzar les dades d’una planta situada
gairebé a qualsevol punt del planeta.
1.2 Radiocomunicacions
En la actualitat, en tots els àmbits de les comunicacions, i per tant també en l’industrial,
existeix una tendència cada vegada més creixent a l’ús de sistemes de comunicació sense
fils, degut als avantatges que això comporta. Amb un sistema d’aquest tipus es poden
comunicar punts que per la seva situació seria impossible o molt costós comunica’ls
4
Capítol 1 Introducció
mitjançant cables, també s’elimina una possible font de problemes com ho és el trencament
accidental de cables. Una altra avantatge important és la possibilitat de desplaçament dels
punts comunicats, en una comunicació per ràdio no és necessari que emissor i receptor es
trobin en un punt fix. Però com a contrapartida presenta una velocitat de transmissió menor
que algunes comunicacions cablejades, sobretot comparat amb la fibra òptica, la limitació
de l’espectre radioelèctric també és un problema.
1.3 Alternatives
A l’altre extrem existeixen mòduls preparats amb tots els components necessaris per,
únicament connectant les seves línies de control a algun dispositiu controlador, transmetre i
rebre. El principal avantatge d’aquest tipus de dispositiu és la senzillesa d’ús, però per altra
banda normalment presenten unes possibilitats de configuració baixes.
Entre aquests dos extrems es troben els transmissors, receptors o transceptors integrats.
Aquesta és una solució intermitja entre les dues anteriors ja que per als seu funcionament
requereix de pocs components externs però permeten configurar el seu funcionament. Per
aquest projecte s’ha optat per aquesta darrera opció.
Dintre d’aquests tipus de dispositiu al mercat trobem diferents fabricants que ens ofereixen
aquesta opció. ID MOS presenta el model IM263, Chipcom els models CC400 i CC1020,
RF Micro-Devices els models RF 2905,2915,2925, i ATMEL l’AT86RF211. En aquest
projecte s’utilitzarà el model de ATMEL.
5
Capítol 1 Introducció
1.4 Objectius
L’objectiu del present projecte és la realització d’un enllaç radioelèctric de baix cost entre
dos punts mitjançant el transceptor integrat d’ATMEL AT86RF211. S’ha de dissenyar la
placa de circuit imprès amb els components necessari per a seu funcionament i la placa
microcontroladora associada.
6
2 DESCRIPCIÓ GENERAL
El sistema es formarà bàsicament de dos blocs, un format pel microcontrolador i l’altre que
s’encarregarà de realitzar la transmissió i recepció dels missatges.
Dades
Microcontrolador Transceptor
7
Capítol 2 Descripció General
La comunicació es realitzarà entre dos sistemes com els anteriorment descrits, idèntics en
quant a hardware però amb el software diferent ja que un serà el mestre i l’altre l’esclau.
El primer indicarà quan s’inicia la comunicació mentre que l’esclau contestarà, enviant les
dades que li han demanat.
2.1 Mestre
RESET
Inicialització
CPU
Inicialització
RF
CPU & RF
Mode Tx
Programa
No
Ini.Com?
Si
Transmissió
CPU & RF
Mode Rx
Recepció de
resposta
8
Capítol 2 Descripció General
2.2 Esclau
RESET
Inicialització
CPU
Inicialització
RF
CPU & RF
Mode Rx
Programa
No
M. rebut?
Si
CPU & RF
Mode Tx
Transmissió
En aquest cas es veu el funcionament bàsic de l’estació esclava. Primer inicialitza tots els
components del sistema i a continuació els configura com a receptors per esperar el
9
Capítol 2 Descripció General
10
3 DISPOSITIUS UTILITZATS
3.1 AT86RF211
3.1.1 Introducció
Aquest integrat és un transceptor FSK de baix consum de potència, preparat per treballar a
la banda ISM de llicència lliure de 400 MHz fins a 950 MHz. Té l’avantatge d’un alt nivell
d’integració i gràcies a això requereix la utilització de pocs components externs, el que
redueix el cost de l’aplicació final. L’AT86RF211 permet una comunicació bidireccional,
amb això es poden mantenir diàlegs entre estacions remotes sense la necessitat d’haver de
tenir un bloc emissor i un altre de receptor. Aquest integrat també és una solució òptima
per a treballar en sistemes alimentats amb bateries ja que pot funcionar amb una
alimentació de 2,4 V.
L’AT86RF211 està pensat per funcionar com a perifèric d’un microcontrolador, l’únic que
s’ha de fer és escriure els seus registres interns per configurar l’integrat, o llegir-los per
obtenir informació d’algun paràmetre com la tensió d’alimentació. Aquesta comunicació es
realitza mitjançant una interfície sèrie de tres fils.
Un cop programats els registres interns, el xip radiarà qualsevol dada que li arribi pel piu
DATAMSG si es troba en mode d’emissió, o demodularà qualsevol senyal detectada per
11
Capítol 3 Dispositius Utilitzats
• Transmissió
• Recepció
12
Capítol 3 Dispositius Utilitzats
3.1.2 Recepció
13
Capítol 3 Dispositius Utilitzats
• Convertir la senyal a una freqüència més baixa (per facilitar el filtrat): 10,7 MHz i
455 kHz
• Convertir les freqüències en tensions (discriminador).
• Tenir un criteri per separar els nivells “0” de “1” (data slicer)
14
Capítol 3 Dispositius Utilitzats
Quan la freqüència s’ha convertit en tensió, s’ha de decidir un valor llindar per separar els
nivells “0” i “1” i convertir-los a nivell CMOS. Això es fa gràcies a un comparador.
L’AT86RF211 ofereix dos possibilitats per establir el valor llindar.
Opcions del
data slicer
Aquest mode consisteix en comparar la senyal amb el seu propi valor mig. Un
condensador en el piu SKFILT s’encarrega de generar aquest valor mig. El valor del
condensador depèn de la velocitat de transmissió de dades.
15
Capítol 3 Dispositius Utilitzats
Aquest procediment no permet rebre senyals amb component contínua, és a dir, seqüències
llargues de “0” o “1”. S’han d’utilitzar mètodes de codificació de dades adequats per evitar
l’aparició de component contínua a la senyal.
- “0” lògic: 01
- “1” lògic: 10
Aquest mètode compara la senyal amb un valor llindar fix. D’aquesta manera es pot
descodificar qualsevol tipus de senyal. En aquest mode s’ha de tenir en compte de
programar el valor llindar el més a prop possible del valor central de la senyal demodulada.
3.1.3 Transmissió
L’amplificador de potència d’aquest integrat pot donar mes de +10 dBm en les tres bandes
de freqüències més populars.
Com més gran sigui la variació de tensió de sortida del PA, millor serà la eficiència de
potència. Com que el PA s’alimenta a través d’un inductor, es pot aconseguir una variació
de 2 x VDD. A la pràctica degut als efectes de la saturació, la variació de tensió es troba
limitada a aproximadament (2 x VDD) – 1 V. Amb una tensió d’alimentació de 3 V, la
tensió de sortida pic-a-pic del PA es de 5 V, o 1,77 VEFF.
16
Capítol 3 Dispositius Utilitzats
Un llaç de control de nivell automàtic (ALC) es troba integrat per tal de minimitzar la
sensibilitat del PA a la temperatura, i variacions de la tensió d’alimentació. L’ALC es
controla per una corrent que es generada de la següent manera:
17
Capítol 3 Dispositius Utilitzats
18
Capítol 3 Dispositius Utilitzats
3.1.4.1 Introducció
El microcontrolador pot controlar i llegir l’estat del AT86RF211 a través d’una interfície
sèrie de 3 fils, bidireccional i síncrona:
Quan SLE = ’1’, l’interfície es troba inhibida, els valors que es trobin en les línies SCK i
SDATA no es propaguen a l’interior de l’integrat, d’aquesta manera es redueix el consum
de potència i s’elimina el risc d’escriptura o lectura no desitjada.
Per tant, un cicle de lectura o escriptura s’inicia quan SLE es posa a ‘0’ i acaba quan es
posa a ‘1’. En cada cicle només es pot realitzar una operació d’escriptura o lectura.
El camp de dades presenta una longitud variable ja que es poden realitzar lectures i
escriptures parcials als registres, i existeixen registres de diferents longituds.
19
Capítol 3 Dispositius Utilitzats
La adreça, R/W i els bits de dades són llegits per l’integrat en el flanc de pujada de la
senyal SCK.
Si el nombre de bits de dades és inferior a la longitud del registre, els bits menys
significatius del registre mantenen el seu valor, d’aquesta manera es poden realitzar
escriptures parcials dels registres. Si el nombre de bits de dades és superior al del registre,
els bits sobrants s’ignoraran.
En aquest cas (Fig.3.11) només els dos MSBs s’escriuen en el flanc de pujada de SLE, la
resta de bits no canvien.
20
Capítol 3 Dispositius Utilitzats
Els bits de dades canvien en el flanc de baixada de SCK. El MSB del registre es el primer
que es llegeix.
Es pot parar de llegir un registre en qualsevol moment, canviant l’estat de SLE a ‘1’.
Si s’intenten llegir més bits del que té el registre SDATA es manté a ‘0’.
Si l’adreça del registre no es vàlida, SDATA es posa a ‘1’ durant els primers 32 períodes
del SCK, i a ‘0’ durant el següents períodes.
21
Capítol 3 Dispositius Utilitzats
22
Capítol 3 Dispositius Utilitzats
Aquest registre consta d’un sol bit que només pot ser escrit. Escrivint en aquest bit un “0”
o un “1” provoca un reset asíncron.
Tots els registres interns tornen al seu estat per defecte, i l’integrat i tots els seus blocs
passen a l’estat de power-down.
Nombre de
Nom bits Comentari
PDN 1 Apagat general (power down)
0: mode pagat; només funciona la interfície sèrie
1: AT86RF211 activat
valor de reset: 0
RXTX 1 Selecció de recepció o transmissió
0: mode Rx
1: mode Tx
valor de reset: 0
DATACLK 1 Selecció de rellotge
0: sortida DATACLK activada
1: sortida DATACLK activada
valor de reset: 0
TXLOCK 1 Transmissió en seguiment del PLL
0: Habilitació de transmissió independentment del estat del PLL
1: Transmissió només si el PLL és capturat
valor de reset: 0
PAPDN 1 Desactivació de l’amplificador de potència
0: Amplificador de potència de Tx desactivat
1: Amplificador de potència de Tx activat (només si PDN=1)
valor de reset: 0
WUEN 1 Habilitació de la funció Wake-up
0: funció Wake-up desactivada, independentment de WUC
1: funció Wake-up habilitada, depenent del contingut de WUC
valor de reset: 0
23
Capítol 3 Dispositius Utilitzats
Nombre de
Nom bits Comentari
LNAGSEL 1 Selecció del guany del LNA
0: guany màxim
1: guany mínim
valor de reset: 0
MVCC 1 Selecció de mesura del RSSI o tensió d’alimentació
0: Mesura del RSSI, el valor es guarda al registre STAT
1: Mesura de VCC , el valor es guarda al registre STAT
valor de reset: 0
TRSSI 6 Valor llindar de RSSI (Nota 1)
DATAMSG vàlid si RSSI = TRSSI+ HRSSI (nivell alt de RSSI)
DATAMSG inhibit si RSSI < TRSSI – HRSSI (nivell baix de RSSI)
valor de reset: (000000)2
HRSSI 3 Histèresi del RSSI
valor de reset: (000)2
TXLVL 3 Selecció de la potència de sortida del TxPA
(000)2: nivell mínim de transmissió
(111)2: nivell màxim de transmissió
valor de reset: (000)2
TXFS 1 Selecció de freqüències de Tx
0: F0 & F1
1: F2 & F3
valor de reset: 0
- 1 Reservat, s’ha de mantenir a 0
RXFS 2 Selecció de freqüència de Rx
(00)2: F0 (10)2: F2
(01)2: F1 (11)2: F3
valor de reset: (10)2
XTALFQ 1 Freqüència del cristall
0: 10,245 MHz (quan IF1 = 10,7 MHz)
1: 20,945 MHz (quan IF1 = 21,4 MHz)
valor de reset: 0
FSKBW 1 Rang del discriminador
0: BW estret del discriminador
1: BW estàndard del discriminador
valor de reset: 1
24
Capítol 3 Dispositius Utilitzats
Nombre de
Nom bits Comentari
FSKPOL 1 Polaritat del DATAMSG
0: senyal invertida
1: senyal directa
valor de reset: 1
DSREF 1 Tensió de referència del data slicer
0: referència externa: tensió del piu SKFILT
1: referència interna: tensió del DAC
valor de reset: 1
- 1 Reservat, s’ha de mantenir a 0
- 1 Reservat, s’ha de mantenir a 0
MOFFSET 1 0: ADC intern mesura de Vcc
1: ADC intern mesura del nivell DISCOUT DC
valor de reset: 0
- 1 Reservat, s’ha de mantenir a 0
Taula 3.3 Bits del registre CTRL1
Nota 1
La relació que existeix entre el codi del camp HRSSI i el valor de la potència rebuda
segueix la següent gràfica. Aquesta relació serà la mateixa per al codi resultant de la
mesura del RSSI a l’antena en el registre d’Estat.
25
Capítol 3 Dispositius Utilitzats
Nombre de
Nom bits Comentari
DATARATE 14 Velocitat de recepció de DATAMSG
S’ha de programar per tenir DATCLK activat
Valors de 1 kbps fins 50 kbps
valor de reset: (0000)16
DATATOL 8 Tolerància del DATACLK
valor de reset: (00)16
LDCK 1 La freqüència de rellotge es dobla per augmentar la precisió de
la detecció del seguiment del PLL
0: freqüència de rellotge 10 MHz
1: freqüència de rellotge doblada
valor de reset: 0
N0LD2 4 Condició per PLL no en seguiment
Es recomana el valor de reset
valor de reset: (0010)2
N1LD1 5 Condició per PLL en seguiment
Es recomana el valor de reset
valor de reset: (10111)2
Taula 3.4 Bits del registre CTRL2
La funció de seguiment del PLL utilitza les senyals UP i DOWN del detector de fase intern.
Aquestes senyals s’analitzen síncronament amb una freqüència de rellotge, depenent del bit
LDCK.
26
Capítol 3 Dispositius Utilitzats
Nombre de
Nom bits Comentari
F0 32 Codi de freqüència per F0
Registre per defecte en Tx mode (“0” en modulació FSK)
F1 32 Codi de freqüència per F1
Registre per defecte en Tx mode (“1” en modulació FSK)
F2 32 Codi de freqüència per F2
Registre per defecte en Rx mode
F3 32 Codi de freqüència per F2
La relació entre el codi que s’introdueix en aquests registres i el valor de la freqüència que
representa no té una relació directa. Aquest valor s’ha de calcular mitjançant una eina
informàtica que proporciona ATMEL al comprar equips d’avaluació.
Aquest registre s’utilitza per llegir l’estat de les funcions internes o el valor de sortida del
conversor A/D intern. Aquest registre només es pot llegir.
Nombre de
Nom bits Comentari
PLL 1 Flag de seguiment del PLL
0: PLL no es troba en seguiment
1: PLL en seguiment
valor de reset: 0
MRSSI 6 Nivell RSSI mesurat
valor de reset: (00)16
27
Capítol 3 Dispositius Utilitzats
Nombre de
Nom bits Comentari
MVCC 6 Mesura de l’alimentació o de la sortida del discriminador quan
MOFFSET = 1
LSB: 85 mV
valor de reset: (00)16
WAKEUP 1 WAKEUP flag
Copia del piu WAKEUP, sense estar afectat per la selecció de
polaritat.
0: no s’ha rebut missatge per despertar-se
1: s’ha rebut missatge per despertar-se
valor de reset: 0
- 1 Reservat
valor de reset: 0
MSGERR 1 Error en el missatge de wake-up en mode test
0: no s’ha detectat error
1: missatge s’ha rebut amb error
valor de reset: 0
MSGDATL 5 Longitud del missatge de wake-up, longitud del missatge rebut.
valor de reset: 0
MSGMRATE 10 Velocitat de dades mesurada del missatge de wake-up
Múltiple de 1,56 µs
0: 1 x 1,56 µs
(vv)10: vv x 1,56 µs
valor de reset: (000)16
Taula 3.6 Bits del registre d’Estat
Aquest registre permet un ajustament precís de l’offset de la entrada del data slicer.
Nombre de
Nom bits Comentari
DSOFFSET 4 Ajustament de la referència del Data Slicer
valor de reset: (1000)2
28
Capítol 3 Dispositius Utilitzats
Nombre de
Nom bits Comentari
DISCHIGH 1 Desplaçament d’offset del discriminador (alt)
0: sense desplaçament
1: augmenta nivell de sortida : +180 mV - 77x(V cc - 2,4 V)
valor de reset: 0
DISCLOW 1 Desplaçament d’offset del discriminador (baix)
0: sense desplaçament
1: disminueix nivell de sortida: -180 mV - 77x(V cc - 2,4 V)
valor de reset: 0
Taula 3.7 Bits del registre DTR
La resta de registres, WUC, WUR, WUA, són utilitzats pel mòdul de wake-up, com que
aquesta opció no s’utilitza en el present projecte no els descriurem detalladament.
29
Capítol 3 Dispositius Utilitzats
3.2 PIC16F876
Com a microcontrolador s’ha optat pel PIC 16F876 de la gamma mitjana de Microchip.
Aquest té una CPU amb arquitectura RISC amb 35 instruccions màquina, cadascuna
d’aquestes s’executa en un cicle d’instrucció excepte les que realitzen salts que utilitzen 2
cicles. En aquesta aplicació hem utilitzat una freqüència de rellotge de 4MHz, per tant cada
cicle d’instrucció serà 1 µs. Té una memòria de programa de 8Kx14 word, una memòria
RAM de 368 bytes i una EEPROM de 256 bytes.
Aquest dispositiu presenta una gran quantitat de perifèrics que el fan idoni per una gran
varietat d’aplicacions:
• 3 Timers
• 2 Mòduls de Captura, Comparació i PWM (CCP)
• Conversor Analògic-Digital amb 5 canals i 10 bits de resolució
• Port Sèrie Síncron (SSP) amb SPI (Master mode) i I2 C (Master/Slave)
• Port USART/SCI amb detecció d’adreça de 9 bits
Finalment s’ha escollit aquest microcontrolador ja que un dels objectius del projecte és
crear un sistema de baix cost i consum, i aquest microcontrolador ens ofereix una gran
quantitat de possibilitats a un baix preu i amb un consum molt baix, inferior a 0,6mA quan
es troba alimentat a 3V i funcionant a 4 MHz.
Una altra avantatge dels dispositius de Microchip és l’alt nivell de compatibilitat entre els
seus productes, d’aquesta manera si es necessités potenciar el sistema es podria canviar el
microcontrolador per un de gamma superior.
30
Capítol 3 Dispositius Utilitzats
Els mòduls utilitzats en aquest projecte són l’USART, el Timer0 i les interrupcions.
Nombre de
Nom bits Comentari
CSRC 1 Selecció de la font de rellotge
Mode asíncron:
No utilitzat
Mode síncron:
0: Mode esclau (font externa de rellotge)
1: Mode màster (rellotge intern generat per BRG)
valor de reset: 0
31
Capítol 3 Dispositius Utilitzats
Nombre de
Nom bits Comentari
TX9 1 Bit d’habilitació de transmissió de 9 bits
0: Selecció de transmissió de 8 bits
1: Selecció de transmissió de 9 bits
valor de reset: 0
TXEN 1 Transmissió habilitada
0: Transmissió inhabilitada
1: Transmissió habilitada
valor de reset: 0
SYNC 1 Selecció del mode de l’USART
0: Mode Asíncron
1: Mode síncron
valor de reset: 0
- 1 No utilitzat
valor de reset: -
BRGH 1 Selecció d’alta velocitat de transmissió
0: Baixa velocitat
1: Alta velocitat
valor de reset: 0
TRMT 1 Estat del Transmit Shift Register
0: TSR ple
1: TSR buit
valor de reset: 1
TX9D 1 9è bit de les dades transmeses
valor de reset: x
Taula 3.9 Bits del registre TXSTA
Nombre de
Nom bits Comentari
SPEN 1 Bit d’habilitació de port sèrie
0: Port sèrie inhabilitat
1: Port sèrie habilitat
valor de reset: 0
32
Capítol 3 Dispositius Utilitzats
Nombre de
Nom bits Comentari
RX9 1 Bit d’habilitació de recepció de 9 bits
0: Selecció de recepció de 8 bits
1: Selecció de recepció de 9 bits
valor de reset: 0
SREN 1 Bit d’habilitació de recepció única
Mode asíncron:
-
Mode síncron:
0: sortida DATACLK activada
1: sortida DATACLK activada
valor de reset: 0
CREN 1 Bit d’habilitació de recepció contínua
0: Inhabilitat
1: Habilitat
valor de reset: 0
ADDEN 1 Bit de habilitació de detecció d’adreça
0: Inhabilitació de detecció d’adreça
1: Habilitació de detecció d’adreça
valor de reset: 0
FERR 1 Framing Error
0: No framming error
1: Framming error
valor de reset: 0
OERR 1 Overrun Error
0: No overrun error
1: Overrun error
valor de reset: 0
RX9D 1 9è bit de les dades rebudes
valor de reset: x
Taula 3.10 Bits del registre RCSTA
33
Capítol 3 Dispositius Utilitzats
Nombre de
Nom bits Comentari
SPBRG 8 Velocitat de transmissió
valor de reset: (00)16
Taula 3.11 Registre SPBRG
Per duu a terme la transmissió d’una sèrie de bytes primer s’ha d’habilitar el transmissor
posant a “1” el bit TXEN. A continuació s’escriu el byte a transmetre al registre TXREG,
aquesta dada es carregarà al registre TSR quan s’hagi transmès el bit d’STOP de l’anterior
transmissió, un cop buit TXREG s’activarà el bit de petició d’interrupció TXIF, la
interrupció pot estar habilitada o no. En aquest punt es comença a transmetre el contingut
del TSR i ja es pot tornar a carregar el TXREG. Quan es buida el registre TSR s’activa el
bit TRMT, aquest no està associat a cap interrupció, per tant, si es vol saber si el registre
TSR és buit s’ha d’utilitzar el mètode d’enquesta. També s’ha de tenir en compte que si
posem a “0” el bit TXEN mentre s’està transmetent una dada aquesta no es transmetrà
correctament, per tant abans de desactivar el transmissor s’haurà de comprovar que el TSR
estigui buit.
34
Capítol 3 Dispositius Utilitzats
Per rebre un byte el que s’ha de fer és activar el mòdul de recepció amb el bit CREN.
Desprès de rebre el bit d’STOP, la dada emmagatzemada en el registre RSR es carrega al
RCREG si aquest està buit. Si la transferència es completa s’activa la petició d’interrupció
amb el bit RCIF, aquesta interrupció es pot habilitar o inhibir amb el bit RCIE. El bit de
petició d’interrupció no es pot netejar per programa, aquest es desactiva per hardware quan
es llegeix el contingut de RCREG. S’ha de tenir en compte que el RCREG té un buffer de
dos bytes, amb això podem tenir dos bytes emmagatzemats i estar rebent un altre en el
RSR, però si quan es rep el bit d’STOP del darrer, els altres dos encara són plens, es
produirà un error d’overrun i s’activarà el bit OERR. Aquest bit s’ha de netejar per
software.
35
Capítol 3 Dispositius Utilitzats
Per seleccionar el mode comptador s’ha d’activar el bit TOCS, d’aquesta manera el registre
TMR0 s’incrementa cada flanc ascendent o descendent del piu RA4/T0CKI. El flanc es
selecciona amb el bit T0SE del OPTION_REG, “0” flanc ascendent i “1” ascendent.
En els dos casos quan el contingut de TMR0 passa de FFh a 00h es provoca una petició
d’interrupció per overflow activant el bit T0IF. Aquesta pot estar habilitada o inhibida
segons el valor del bit T0IE.
Al Tmr0 se li pot assignar un prescaler. Amb el bit PSA aquest s’assigna al Tmr0 o al
Watchdog. I amb els bits PS0:PS2 es decideix el valor d’aquest prescaler, tots aquests bits
formen part del OPTION_REG.
36
Capítol 3 Dispositius Utilitzats
Nombre de
Nom bits Comentari
!RBPU 1 Habilitació de Pull-ups de PORTB
0: Pull-ups activats
1: Pull-ups desactivats
valor de reset: 1
INTEDEG 1 Selecció de flanc per interrupció de RB0/INT
0: Flanc descendent
1: Flanc ascendent
valor de reset: 1
T0CS 1 Selecció de font de rellotge per TMR0
0: Cicle d’instrucció intern
1: Transició del pin RA4/T0CKI
valor de reset: 1
T0SE 1 Selecció de flanc de la font de TMR0
0: Incrementa en flanc ascendent de RA4/T0CKI
1: Incrementa en flanc descendent de RA4/T0CKI
valor de reset: 1
PSA 1 Assignació del prescaler
0: Prescaler per TMR0
1: Prescaler per WDT
valor de reset: 1
PS2:PS0 3 Valor del prescaler
(Nota 2)
valor de reset: 111
Taula 3.13 Bits del registre OPTION
Nota 2
Taula de valors del prescaler
37
Capítol 3 Dispositius Utilitzats
3.2.4 Interrupcions
38
Capítol 3 Dispositius Utilitzats
3.2.4.1 INTCON
Nombre de
Nom bits Comentari
GIE 1 Habilitació global d’interrupcions
0: Inhibeix totes les interrupcions
1: Habilita les interrupcions que no estan emmascarades
valor de reset: 0
PEIE 1 Habilitació de les interrupcions dels perifèrics
0: Inhibeix les interrupcions dels perifèrics
1: Habilita interrupcions no emmascarades dels perifèrics
valor de reset: 0
T0IE 1 Habilitació d’interrupció de Timer0
valor de reset: 0
INTE 1 Habilitació d’interrupció externa per RB0/INT
valor de reset: 0
RBIE 1 Habilitació d’interrupció per canvi en RB
valor de reset: 0
T0IF 1 Petició d’interrupció de Timer0
valor de reset: 0
INTF 1 Petició d’interrupció externa per RB0/INT
valor de reset: 0
R0IF 1 Petició d’interrupció per canvi en RB
valor de reset: 0
Taula 3.16 Bits del registre INTCON
39
Capítol 3 Dispositius Utilitzats
3.2.4.2 PIE1
Nombre de
Nom bits Comentari
PSPIE 1 Bit reservat, s’ha de mantenir a “0”
valor de reset: 0
ADIE 1 Habilitació de les interrupcions del conversor AD
valor de reset: 0
RCIE 1 Habilitació d’interrupció per recepció de la USART
valor de reset: 0
TXIE 1 Habilitació d’interrupció de recepció de la USART
Valor de reset: 0
SSPIE 1 Habilitació d’interrupció del SSP
valor de reset: 0
CCP1IE 1 Habilitació d’interrupció del mòdul CCP1
valor de reset: 0
TMR2IE 1 Habilitació d’interrupció del Timer2
valor de reset: 0
TMR1IE 1 Habilitació d’interrupció del Timer1
valor de reset: 0
Taula 3.17 Bits del registre PIE1
40
Capítol 3 Dispositius Utilitzats
3.2.4.3 PIR1
41
4 DESCRIPCIÓ HARDWARE
4.1 Introducció
Inicialment es va realitzar un disseny basat en una sola placa que contenia tant el
microcontrolador com l’integrat transceptor. Però finalment s’ha separat el sistema en dues
plaques, una amb el microcontrolador PIC16F876 com a element principal i l’altra amb el
xip de radiofreqüència AT86RF211. S’ha optat per separar el sistema en dues plaques
diferents ja que d’aquesta manera el mòdul transceptor sempre podrà ser igual per a
qualsevol aplicació, mentre que la placa microcontroladora podrà ser diferent i realitzar
diverses funcions segons convingui, sempre que es respecti les senyals de cada piu del
connector.
Per a la connexió entre els dos integrats s’ha optat per utilitzar el port de comunicacions
USART del microcontrolador en mode asíncron, curtcircuitant les línies Rx i Tx de tal
manera que les dues van connectades al piu DATAMSG de l’AT86RF211, ja que aquest
piu actua tan d’entrada com de sortida segons s’estigui transmetent o rebent dades.
D’aquesta manera es facilita la comunicació ja que des del microcontrolador es podran
enviar bytes sencers fàcilment.
42
Capítol 4 Descripció Hardware
Per la interfície de programació de l’integrat AT86RF211 s’utilitzen pius d’E/S simples del
PORTB del microcontrolador, i mitjançat la programació d’aquest, realitzen les seqüències
de bits corresponents.
Tx DATAMSG
Rx
µC
AT86RF211
PIC16F876 RB0 WAKEUP
RB1 SLE
RB2 SDATA
RB3 SCK
4.2.1.1 Microcontrolador
El PIC16F876 necessita pocs elements per al seu funcionament, s’ha de connectar els pius
8 i 19 a 0 V i el piu 19 a la tensió d’alimentació. Com a font de rellotge s’utilitza un cristall
de quars de 4 MHz connectat a les potes OSC1 i OSC2 (9 i 10), amb dos condensadors de
22 pF. Per acabar es connecta la pota de RESET (1) a alimentació a través d’una
resistència de 10 kO.
43
Capítol 4 Descripció Hardware
4.2.1.2 Entrades
Els microinterruptors actuen com a entrades del sistema, estan connectats amb resistències
de PULL-UP de 10 kO. Aquests estan connectats als 4 bits de menys pes del PORTC del
microcontrolador.
4.2.1.3 Sortides
Els LEDs actuen com a sortides del sistema, es connecten a través de resistències de 680O
als 4 bits baixos del PORTA del microcontrolador.
4.2.1.4 Tx/Rx
Per a la conexió d’aquestes línies s’ha optat pels bits baixos del PORTB del
microcontrolador, ja que aquests són els més sencills, és a dir, no són utilitzats per cap
perifèric, d’aquesta manera aconseguim que la comunicació no resti recursos a la funció
principal que realitzi el microcontrolador.
Correspondència entre les línies del AT86RF211 i els pius del PIC:
• RB0: WAKEUP
• RB1: SLE
• RB2: SDATA
• RB3: SCK
44
Capítol 4 Descripció Hardware
La línia WAKEUP s’ha connectat a RB0 ja que configurat de la manera apropiada, aquesta
entrada provoca una interrupció per flanc al microcontrolador.
U4
WAKEUP
10
OSC2/CLKOUT R19 D1 SLE
2 R20 D2
RA0/AN0 3 R21 D3 SDATA
RA1/AN1 R22
4 5200F
D 4
RA2/AN2/VREF
5 670 5200F
RA3/AN3 SCK
6 670 5200F
RA4/TOCKI 7 670 5200F
RA5/AN4 670
C29 22p 21
RB0/INT
22
RB1
VCC 23
X2 1 RB2 24 SW1
C42 9 MCLR/Vpp RB3 25 1 8
OSC1/CLKIN RB4 26 2 7
RB5 27 3 6
RB6
28 4 5
RB7
22p QZP10MEG
11 SW DIP-4
RC0/T1OSO/T1CKI 12
RC1/T1OSI/CCP2 13 R15 VCC
RC2/CCP1 14
RC3/SCK/SCL 15 R16
RC4/SDI/SDA
16
RC5/SDO 17 R17
10k
RC6/TX/CK 18
RC7/RX/DT DATAMSG R18
10k
PIC16F876 10k
10k
La peça central d’aquest bloc és l’AT86RF211 que transforma les senyals digitals
procedents del microcontroldar en senyals de ràdio i viceversa.
45
Capítol 4 Descripció Hardware
Com a rellotge principal del sistema el fabricant dóna la possibilitat de muntar un cristall
de 10,245 MHz o un de 20,945 MHz, per al muntatge s’ha escollit el de 10,245 ja que
posteriorment permet treballar amb una freqüència més estandaritzada de 10,7 MHz per
filtrar la senyal. El cristall s’ha connectat a les línies XTAL1 i XTAL2 (pius 23 i 24) amb
la següent topologia recomanada pel fabricant.
FILT1 VCOIN
3,3 kO
560 pF
5,6 nF
Ja en la recepció de la senyal, aquesta inicialment surt del piu SWOUT (48) i ha de tornar a
entrar a l’integrat per RXIN (45), entre aquestes dues potes es podria posar un filtre d’alta
freqüència (SAW filter), en el muntatge no l’inclourem per no augmentar el cost final. La
unió d’aquestes dues potes es realitza de la següent manera:
46
Capítol 4 Descripció Hardware
4,7 nH 100 pF 47 nH
SWOUT RXIN
6,8 pF 1 pF
Seguint el camí que realitza la senyal, a continuació passa pel primer mesclacdor i la
freqüència de la senyal queda reduïda a 10,7 MHz, en aquest punt la senyal surt pel pin
IF1OUT (36) i ha de tornar entrar pel IF1IN (35), entre aquests dos pius connectarem un
filtre ceràmic de 10,7 MHz i un ample de banda de 180 kHz ja que segons el fabricant,
aquesta és la mínima protecció contra interferències que ha de tenir el sistema per poder
funcionar correctament. El filtre utilitzat és un Murata de la serie SFE.
El següent pas de la senyal és passar per un segon mesclador que torna a reduir la
freqüència de la senyal, aquesta vegada fins a 455 kHz. Aquesta senyal surt per la pota
IF2OUT (33) per tornar a entrar per la IF2IN (30), entre aquests dos pius s’ha intercalat un
condensador de 5,6 nF. En lloc d’aquest es podria haver ubicat un filtre per augmentar
poder augmentar la velocitat de transmissió.
Al pin IF2DEC (31) se li connecta un condensador de 2,2 nF que serveix per desacoblar
l’entrada de l’amplificador que es trobarà la senyal al entrar per IF2IN.
Un cop amplificada, entra al demodulador FSK que té connectat a la pota DISCFILT (32)
el filtre de llaç del PLL per estabilitzar la senyal de 455 kHz. El filtre recomanat pel
fabricant i el que s’ha utilitzat és el següent:
47
Capítol 4 Descripció Hardware
DISCFILT
2,2 kO
100 pF
1 nF
Pel control de la potència de emissió es troba connectada al piu RPOWER (1) una
resistència de 18 kO, aquesta serveix per la generació del corrent per al llaç de control del
nivell de sortida tal com s’ha explicat al apartat 3.1.3.1.
Per l’adaptació de l’antena amb l’integrat s’ha utilitzat la xarxa recomanada pel fabricant.
Filtre d’alimentació
VCC
1 uH
100 pF 100 pF
18 nF Inductor
d’alimentació ANTENNA
1,5 nH 5,6 pF 33 nF
1
RF
2,7 pF 12 nF
10 pF
48
Capítol 4 Descripció Hardware
C23 L3 FILTER
1
1 3
L5 R1
5.6p 1.5n
33n C25
2
18k
C24 L4
2.7p
10p 18n
1 36 R7 C8
2 RPOWER IF1OUT 35 C6 C7
C21 VCC R 2 3 TXGND1 IF1IN 34 C9
RF IF1DEC 22k 1n 5.6n
4 33
TXGND2 IF2OUT 4.7n
C2 5 32 C10
100p 390 TXGND3 DISCFILT 100p
6 31
L6 C22 7 TXGND4 IF2DEC 30
100n TXVCC IF2IN 2.2n
8 29
12n TXGND5 IF2GND
9 28
100p DIGND IF2VCC C11
10 27 R8
L1 DIVCC DISCOUT 26 C12
L7 1nC5 48 DSIN 25
SWOUT SKFILT 390
100p R3 C4 C3 47 100p
1uH 4.7n RXGND 10n
VCC C13 VCC 4.7n 46 VCC
L2 100p 45 RXVCC 17 VCC C37
39 RXIN NC1
44 18
EGND2 EVCC1
C26 1.5p 43 19
47n EVCC2 EGND
C14 C20 42 20 C34 C35
100p 41 VCOIN NC2 21 100p 4.7n 10n
R11
R9 8.2p 40 FILT1 CGND 22
CGND2 CVCC1 68
DATAMSG
VCC C19 C18 39 23 C36
DATACLK
WAKEUP
39 CVCC2 XTAL1
100p 4.7n 38 24
SDATA
C27 1n C17 15p 37 AVCC XTAL2 C38 100n
SCK
AGND
SLE
C16 560p R4
11
12
13
14
15
16
82p
R5 27k
C28 100p C15 X1
3.3k
5.6n
QZP10MEG C39
VCC C30 C31
56p
R6 C41 C40
100n 100p 6.5/30p 15p
68
C32
DATACLK
WAKEUP
1n SDATA
SCK
C33
SLE
DATAMSG
100n
49
Capítol 4 Descripció Hardware
50
Capítol 4 Descripció Hardware
2 Resistencia 3,3K
2 Resistencia 27K
2 Resistencia 22K
2 Resistencia 18K
4 Resistencia 68R
4 Resistencia 390R
4 Resistencia 39R
10 Condensador 100n
4 Condensador 10n
4 Condensador 5,6n
8 Condensador 4,7n
2 Condensador 2,2n
8 Condensador 1n
2 Condensador 560p
20 Condensador 100p
2 Condensador 15p
2 Condensador 5,6p
2 Condensador 10p
2 Condensador 2,7p
2 Condensador 8,2p
2 Condensador 1,5p
2 Condensador 56p
ceràmic
2 Condensador 82p
ceràmic
2 Condensador 15p
ceràmic
Taula 4.2 Llistat de components utilitzats al mòdul transceptor
51
Capítol 4 Descripció Hardware
MICROCONTROLADOR
Tx/Rx
CONNECTOR
SORTIDES
INTERFÍCIE
DE
CONTROL
Aquest esquema és el que es seguiria per a qualsevol aplicació on s’utilitzés aquest sistema
de comunicació, com a entrades es podria connectar qualsevol tipus de sensor o
interruptors i com a sortides actuadors, visualitzadors o qualsevol element que fos
necessari.
En el cas d’aquest projecte, al tractar-se d’una placa per a la realització de proves consta de
pocs elements, el microcontrolador PIC16F876 com a element principal, bloc
d’interruptors com a entrades i bloc de LEDs com a sortides.
52
Capítol 4 Descripció Hardware
VCC
U4
20
10 VCC
VDD
OSC2/CLKOUT R19
680 J1
2 680 R20 D1
VCC RA0/AN0 3 680 R21 D2 1
RA1/AN1 R22 2
4 680 D3
RA2/AN2/VREF 5 D4 3
RA3/AN3 4
6
R23 RA4/TOCKI 7 5
10k RA5/AN4 6
C29 22p 7
21
RB0/INT 22 8
RB1 23 9
X2 1 RB2 24 10
C42 9 MCLR/Vpp RB3 25 11
OSC1/CLKIN RB4 12
26
RB5 27 13
SW1
RB6 28 1 8 14
RB7 15
22p QZP4MEG 2 7
11 3 6 16
RC0/T1OSO/T1CKI 17
12 4 5
RC1/T1OSI/CCP2 13 18
RC2/CCP1 14 19
SW DIP-4
RC3/SCK/SCL 20
15 R18 R17 R16 R15
RC4/SDI/SDA 16 10k 10k 10k 10k VCC CON20
RC5/SDO
17
Vss
Vss
RC6/TX/CK 18
RC7/RX/DT
19
PIC16F876
8
53
Capítol 4 Descripció Hardware
Aquesta placa té la funció d’enviar i rebre bits per ràdio i alimentar la placa
microcontroladora. Presenta com a elements principal l’integrat AT86RF211, i el bloc
d’alimentació, que ens proporciona l’alimentació per al propi AT86RF211 i la placa
microcontroladora.
Tx/Rx
CONNECTOR
ANTENA AT86RF211
ACOBLAMENT
INTERFÍCIE
DE
CONTROL
El disseny elèctric d’aquesta placa ha estat idèntic al del mòdul transceptor de l’anterior
versió, una diferència important és que se li han afegit els elements necessaris per
alimentar la placa microcontroladora i el xip de radiofreqüència. El circuit imprès
d’aquesta placa ha estat proporcionat pel CITEE, per tant no s’inclou el disseny d’aquesta.
54
Capítol 4 Descripció Hardware
4.3.3 Connexió
Per a la unió de les dues plaques s’ha utilitzat un cable pla de 20 fils la correspondència
entre els pins i les senyals és la següent:
Pin Senyal
1 Vcc
2 GND
3 DATACLK
4 SLE
5 SCK
6 SDATA
7 WAKEUP
11
DATAMSG
12
Taula 4.3 Correspondència dels pius del connector amb senyals
55
5 DESCRIPCIÓ SOFTWARE
5.1 Trama
La comunicació entre les dues plaques es realitza mitjançant un protocol que permet la
transmissió de blocs de dades de manera segura.
Cada transmissió està formada per una trama de bytes com la següent:
Com es veu consta d’un byte que indica inici de trama per tal d’evitar la recepció de
missatges no desitjats, el següent indica la quantitat de dades que s’envien, a continuació
s’envien les dades. Per comprovar que la recepció ha estat correcta també s’envia un
cheksum que és la suma sense carry de tots els bytes anteriors. Per acabar s’envia un byte
de final de trama.
Entre trames diferents ha de passar un temps mínim de 50 ms, això vol dir que si es passa
aquest temps entre dos bytes, el segon l’interpretarà com a inici de un nou missatge
(interframe).
56
Capítol 5 Descripció Software
El sistema consta de dues estacions, una realitza les funcions de mestre i l’altre d’esclau. El
mestre és l’únic que pot iniciar la comunicació, l’esclau es limita a respondre. Quan canvia
l’estat d’algun dels interruptors de l’estació mestre, aquesta inicia la comunicació enviant
una trama com l’anteriorment descrita, amb un sol byte de dades, els 4 bits baixos del qual
correspon a l’estat dels interruptors. Quan l’esclau rep el missatge, encén els LEDs segons
els 4 bits de menys pes del byte de dades rebut, i envia de manera igual que el mestre
l’estat dels seus interruptors. Finalment el mestre rep aquesta resposta i encén els LEDs tal
com havia fet l’esclau anteriorment i finalitza la comunicació. Si el mestre no rep cap
resposta en 1 s (timeout) indicarà que hi ha hagut error.
57
Capítol 5 Descripció Software
5.2.1 Mestre
Funcions corresponents
RESET
a cada bloc
Inicialització
PIC IniPic()
Inicialització
AT86RF211 IniRf()
Programa
No Canvi
Interruptor?
Si
Transmissió RFsnd()
No
Timeout?
Si
No Trama Tractament
rebuda? Error
Si
Tractament
de dades RFrecAtt(char*)
58
Capítol 5 Descripció Software
59
Capítol 5 Descripció Software
5.2.2 Esclau
Inicialització
PIC IniPIC( )
Inicialització
AT86RF211 IniRF( )
Programa
No Trama
Rebuda?
Si
Tractament
Dades RFrecAtt(char*)
Enviar
Resposta RFsnd( )
60
Capítol 5 Descripció Software
qualsevol altre funció. Un cop rebut un missatge passa a mode emissor i respon.
5.2.3 Interrupcions
La recepció de les dades i el control dels temps tant de interframe i de overtime es realitzen
per mitjà d’interrupcions. En el següent diagrama es descriu el funcionament de la funció
d’atenció a la interrupció. El que fa es mirar què ha provocat la interrupció i cridar la
funció corresponent.
No RCIF?
Si
Recepció de
No dada Int_rx()
T0IF?
Si
Control de
comptadors Int_Tmr0()
Fi
Interrupció
El mateix Timer0 porta el control tant del temps d’interframe com d’overtime, donat que
mai s’han de controlar els dos temps alhora es té un bit que indica quin temps es controla
en cada moment.
61
Capítol 5 Descripció Software
El Timer0 es programa de tal manera que provoca una interrupció cada 50 ms quan està
habilitat, aquest és el temps d’interframe, per controlar l’overtime hi haurà un comptador.
Timer0
No Tmr per
overtime?
Si
Cont++
Indica nova
trama
Cont =
overtime?
Indica que
no resposta
Fi
Timer0
Quan es crida a la funció d’interrupció per Timer0 primer es comprova quin temps s’està
mesurant, si el d’interframe (temps mínim entre trames diferents) o el d’overtime (temps
d’espera de resposta). Si ha passat el temps d’interframe des de l’últim byte rebut voldrà
dir que el següent que es rebi serà d’una nova trama, la funció ho indicarà. En el cas que es
controli el temps de resposta primer s’incrementarà el comptador i a continuació es
compararà amb el temps màxim permès. Si ha passat aquest temps indicarà que hi hagut un
error.
62
Capítol 5 Descripció Software
Recepció
Si interframe?
No
Forma part No
Llegir Dada de trama?
Si
Guardar en
No Inici de
buffer
trama?
Si
No Final de
Guardar en trama?
buffer
Si
Reiniciar
buffer
Fi
Recepció
63
Capítol 5 Descripció Software
en forma part reinicia el buffer. Si forma part de la trama emmagatzema la dada i comprova
que no hagi finalitzat la trama, si és així es crida a la funció de tractament de les dades.
5.2.4 Inicialitzacions
En aquest apartat es justifica el valor introduït a cada bit dels registres de l’integrat.
Registre CTRL1
64
Capítol 5 Descripció Software
Registre DTR
Registres de Freqüències
S’ha escollit treballar a la banda de 430 MHz ja que és la que ens proporciona més
potència amb menys consum segons les característiques proporcionades pel fabricant,
triant aquesta com a freqüència central i una desviació de 50 kHz per permetre una elevada
velocitat de transmissió, més de 30 kbps, el software d’ATMEL ens proporciona els valors
que haurem d’introduir en aquests registres. Degut a les limitacions de resolució el valor de
freqüència real serà diferent del teòric:
Freqüència Freqüència
Registre Valor
Teòrica (MHz) Real (MHz)
F0 429,950000 429,949850 (D84CEA40)16
F1 430,050000 430,050017 (38044C70)16
F2 419,300000 419,300025 (99E4485A) 16
F3 440,700000 440,700029 (092C6C5A) 16
Taula 5.3 Inicialització de Frequency. Registers
65
Capítol 5 Descripció Software
Registre OPTION
Registre INTCON
La resta de bits del registre són flags de petició d’interrupció de només lectura.
ADCON1: (00000110)2
Amb la programació d’aquest registre es configura tot el PORTA com a entrades i sortides
66
Capítol 5 Descripció Software
digitals.
TRISA: (00000000)2
Registre TXSTA
67
Capítol 5 Descripció Software
Registre RCSTA
Configuració de la recepció.
Registre BRGH
Inicialment es seleccionarà una velocitat baixa de 1,2 kbps per tal de comprovar el
funcionament, en l’apartat experimental veurem fins on es pot pujar la velocitat de
transmissió de les dades. Per tant el valor a introduir en el registre és:
BRGH=207
5.3 Codi
El software s’ha programat en llenguatge PICC de High Tech per tal de facilitar la
comprensió del codi per a posteriors actualitzacions o per poder utilitzar aquest mateix
fàcilment. El codi s’ha dividit en tres arxius diferents. En el CtrRF.h s’ha creat una llibreria
de funcions per a la programació dels registres del AT86RF211 i s’han definit una sèrie de
variables i constants que faciliten el treball amb aquest integrat. En l’arxiu Serie.h s’han
68
Capítol 5 Descripció Software
creat les funcions per a la gestió de la comunicació entre estacions i configuració del propi
microntrolador, el darrer arxiu és on trobem el programa principal, d’aquest n’hi ha dos un
per l’estació mestre, PFCodM.c, i un altre per l’esclava, PFCodS.c.
5.3.1 CtrRF.h
#include <pic.h>
/*------------------------Definició de pins---------------------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
69
Capítol 5 Descripció Software
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
void IniRF();
void writerf(char,long,char,char);
long readrf(char,char,char);
TRISB2=0;
SCK=0;
SLE=0; /*Habilita SDATA*/
d=d<<(32-length); /*sita els bits utils a la part alta*/
a=a<<4; /*sita els bits utils a la part alta*/
for (aux=4;aux!=0;aux--) /*Escriptura de l'adreça*/
{
SCK=0;
a=a<<1;
SDATA=CARRY;
SCK=1;
}
SCK=0;
SDATA=1; /*Indica que realitzem escriptura*/
SCK=1;
}
SLE=1; /*Fi d’escriptura*/
}
TRISB2=0;
SCK=0;
SLE=0; /*Habilita SDATA*/
70
Capítol 5 Descripció Software
SCK=0;
SDATA=0; /*Indica que realitzem lectura*/
SCK=1;
SCK=0;
aux=length;
TRISB2=1;
for (aux=length;aux!=0;aux--) /*Llegeix dades*/
{
d=d<<1;
SCK=1;
d=d+SDATA;
SCK=0;
}
SLE=1; /*Fi d’escriptura*/
return(d);
}
void IniRF()
{
Aquesta funció configura el piu RB2 (SDATA) com a sortida ja que es pretén escriure. A
continuació mou els bits útils dels registres d’adreça i de dades a la part alta d’aquests
registres, ja que la dada que s’escriu és el bit de carry que es produeix al rotar aquests
registres cap a l’esquerra. En el cas de l’adreça com aquesta és de 4 bits i es troba en la part
71
Capítol 5 Descripció Software
baixa d’un byte, es rota quatre posicions a l’esquerra, en el cas de les dades dependrà de la
quantitat de bits que es vulguin escriure. Primer realitza l’operació amb el registre d’adreça
i a continuació escriu les dades. Per l’escriptura de cada bit genera el flanc ascendent del
bit SCK tal com s’indica a les especificacions de l’integrat.
A aquesta funció se li passa com a paràmetres l’adreça del registre, la quantitat de bits que
es volen llegir i la longitud d’aquest registre. La funció ens retorna un long amb les dades
llegides. Quan es llegeixin menys de 32 bits degut a una lectura parcial o a que la longitud
del registre sigui inferior, els bits llegits s’emmagatzemaran als LSBs del long retornat.
En aquest cas es configura inicialment l’RB2 com a sortida per escriure l’adreça i a
continuació com a entrada ja que es realitzaran lectures. A continuació es realitza la
mateixa operació que en la funció d’escriure a l’adreça i s’escriu aquesta. El següent pas és
realitzar la lectura. Aquesta es duu a terme rotant la variable on s’estan emmagatzemant les
dades una posició a l’esquerra i sumar-li el valor llegit en SDATA, d’aquesta manera al bit
baix s’escriurà un “1” o un “0” segons s’hagi llegit. La lectura es realitza després de crear
un flanc ascendent en SCK. Finalment es retornen les dades llegides.
void IniRF()
A part d’aquetes funcions s’han definit unes macros per a les escriptures més usuals al
integrat, una per canviar a mode emissor, una altre per a mode receptor i una darrera per
desactivar l’integrat.
5.3.2 Serie.h
#include <pic.h>
72
Capítol 5 Descripció Software
char conta;
char EST_COM; /*Estat de la comunicació*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
void IniPic();
void IniUart();
void Txmode();
void Rxmode();
void espera();
void RFsnd(char,char*);
void int_rx();
void RFrecAtt(char*);
void intTmr0();
/*--------------------------------------------------------------------------*/
73
Capítol 5 Descripció Software
for (n=0;n!=len;n++)
{
chksum=chksum+*(ptr+n); /*calcula chksum*/
TXREG=*(ptr+n); /*Envia dades*/
espera();
}
TXREG=chksum; /*Envia chksum*/
espera();
/*--------------------------------------------------------------------------*/
void int_rx()
{
static char n=0;
static char chksum;
static char length;
static char buffer[10];
}
else
{
ERROR; /*Hi ha hagut error*/
chksum=0; /*Reinicia cheksum*/
n=0; /*Reinicia buffer*/
}
}
74
Capítol 5 Descripció Software
}
RCIF=0;
}
/*--------------------------------------------------------------------------*/
void espera()
{
while (TXIF==0) /*Espera a que es buidi el TXREG*/
continue;
TXIF=0;
}
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
void intTmr0()
{
T0IE=0;
}
}
else /*Si espera nou element de trama*/
{
INTFR; /*Indica q ha sobrepasat temps d'espera*/
T0IE=0;
}
}
/*--------------------------------------------------------------------------*/
void Txmode()
{
RCIE=0; /*inhabilita Int. de recepció*/
CREN=0; /*inhabilita la recepció*/
TXEN=1; /*Habilita la transmissió de dades*/
}
75
Capítol 5 Descripció Software
/*--------------------------------------------------------------------------*/
void Rxmode()
{
TXEN=0; /*Inhabilita la transmissió*/
RCIE=1; /*Habilita la Int de recepció*/
CREN=1; /*Habilita la recepció*/
}
/*--------------------------------------------------------------------------*/
/*------------------------------Inicialització de UART----------------------*/
void IniUart()
{
SYNC=0; /*Comunicació Asincrona*/
BRGH=1; /*Alta velocitat*/
SPBRG=207; /*Velocitat dde transmissió*/
SPEN=1; /*Actvació del modul UART*/
}
/*--------------------------------------------------------------------------*/
void IniPic()
{
OPTION=0b11000111; /*Prescaler de tmr0 1:256*/
ADCON1=0B00000110; /*Tot PORTA digital*/
TRISA=0x00; /*PORTA sortides*/
TRISB=0xF0; /*PORTB meitat alta entrades i baixa sortides*/
INTCON=0b11000000; /*Conf d'Interrupcions*/
PIE1=0b00000000;
}
/*--------------------------------------------------------------------------*/
Per al control de la comunicació s’ha creat una variable que indica l’estat de la
comunicació en cada moment, EST_COM. Indica si s’ha rebut trama, si s’ha passat el
temps de resposta, si ha pssat el temps d’interframe i per a què s’utilitza el Timer0.
Nom Comentari
EST_COM[4] 0: No hi ha error en la recepció
1: Error en la recepció
EST_COM[3] 0: Timer0 dedicat a interframe
1: Timer0 dedicat a timeout
76
Capítol 5 Descripció Software
Nom Comentari
EST_COM[0] 0: Trama no rebuda
1: Trama rebuda
Taula 5.8 Bits de EST_COM
void RFsnd(char,char*)
Aquesta funció s’encarrega de crear i enviar trames com les definides a l’apartat 5.1. Com
paràmetres se li passen un caràcter que indicarà la quantitat de bytes a transmetre, i un
punter que indicarà l’adreça de la primera dada a transmetre.
void int_rx()
Cada vegada que es rep un byte per la USART del microcontrolador es crida a aquesta
funció, primer es comprova que hagi passat el temps d’interframe des de la recepció de la
trama anterior, si és així el byte rebut es tractarà com a inici de nova trama. A continuació
identifica si el caràcter rebut forma part de la trama, i el guarda en buffer, repeteix l’operaió
fins que rep l’indicador de final de trama. Un cop s’ha rebut tota la trama s’activa el flag
corresponetnt de EST_COM i es crida la funció de tractament de les dades rebudes. El
diagrama de blocs del seu funcionament es pot veure a la fig. 5.5.
void RFrecAtt(char*)
Aquesta és la funció de tractament de les dades rebudes,, en aquest cas l’únic que fa és
activar els LEDs corresponents segons el byte rebut.
void espera()
Aquesta funció únicament espera a que es buidi el registre TXREG per poder enviar un
nou byte
void intTmr0()
Aquesta funció és l’atenció a la interrupció de Tmr0. Aquesta funció segueix els passoas
del diagrama de la fig. 5.4. Mira per a qui està treballant el Tmr0 i actúa en conseqüència.
void Txmode()
77
Capítol 5 Descripció Software
void Rxmode()
void IniPic()
void IniUart()
Les funcions d’aquests dos arxius podrien ser utilitzats en qualsevol aplicació que utilitcés
aquest tipus de comunicació. Els arxius següents mostren els programes principals del
mestre i l’esclau que són un exemple d’aplicació d’aquestes funcions.
5.3.3 PFCodM.c
#include <pic.h>
#include "CtrRF.h"
#include "Serie.h"
/*--------------------------------------------------------------------------*/
main()
{
long t;
char pos, act, ant;
for(;;)
{
78
Capítol 5 Descripció Software
if (act!=ant)
{
ant=act;
RFsnd(1,&act); /*Inicia Transmissió de la trama*/
RF211_Tx;
Txmode(); /*Mode Transmissor*/
}
continue;
}
}
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
79
Capítol 5 Descripció Software
Aquest és el codi que s’introdueix a l’estació mestre, en primer a terme es duu a terme les
inicialitzacions tan de tots els mòduls del microcontrolador i de l’integrat AT86RF211. A
continuació entra en bucle on va llegint l’estat dels quatre bits baixos del PORTC que és on
es troben connectats els interruptors, Si detecta algun canvi inicia el procés de
comunicació. Cal destacar la implementació de un retard en el moment de la commutació,
per donar temps al AT86RF211 per passar de mode transmissor a receptor que segons el
full de característiques és de 200 µs. Aquesta espera es realitza mitjançant un bucle, el
compte es realitza fins a 10 ja que cada compte tarda segons el simulador 27 µs, d’aquesta
manera es produirà un retard de 270 µs. El diagrama de blocs d’aquesta funció es pot veure
en la fig. 5.1.
5.3.4 PFCodS.c
#include <pic.h>
#include "Serie.h"
#include "CtrRF.h"
/*--------------------------------------------------------------------------*/
char pos,t;
for(;;)
{
if (SI_TRAMA_REBUDA) /*Si ha rebut trama, contesta*/
{
80
Capítol 5 Descripció Software
/*--------------------------------------------------------------------------*/
Aquest és el programa implementat per a l’estació esclava, igual que l’anterior en primer
lloc es duen a terme les inicialitzacions. Mentre no rebi cap trama no realitza res. En el
moment que ha rebut una trama llegeix l’estat dels interruptors i passa a mode emissor,
espera el temps de commutació propi i s’afegeix un retard extra per assegurar-se que
l’estació que ha de rebre està preparada. S’envia la resposta i torna a esperar un nou
missatge. Diagrama de blocs d’aquesta funció a la fig. 5.2.
81
6 RESULTATS I CONCLUSIONS
Les primeres proves realitzades han consistit en enviar uns i zeros des d’una estació i
mitjançant un voltímetre, mesurar la sortida del pin DISCOUT de l’altre, la mesura que es
realitza en aquest piu és la tensió proporcional a la diferència de freqüències entre la
interna de referència i la rebuda. Aquests valors de la tensió corresponents al zero i a l’u
s’utilitzaran per calibrar la tensió de referència del comparador del data slicer i el
condensador variable.
Les primeres mesures s’han realitzades amb la configuració inicial comentada a l’apartat
4.2 i a una distància entre les estacions d’uns 40 cm. El que primer que s’ha fet ha estat
ajustar el condensador variable de tal manera que per a l’emissió d’un “1” obtenir el
màxim valor de tensió en DISCOUT. A continuació s’han realitzat les mesures per als dos
valors lògics. En aquesta prova no s’han donat uns resultats gaire satisfactoris, ja que les
tensions mesurades per l’u i pel zero no es troben gaire separades:
“1” : 2,3 V
“0” : 1,1V
82
Capítol 6 Resultats i Conclusions
Amb aquests dos valors s’obtindria que el valor de la tensió de referència haurà de situar-se
a 1,7 V.
A continuació s’ha realitzat la mateixa prova però augment la distància lentament. Els
resultats obtinguts en aquest cas tampoc són massa encoratjadors, ja que a mesura que
s’allunyen les estacions les dues tensions es van apropant fins que al comparador se li fa
impossible distingir entre l’u i el zero al voltant dels 4 metres.
Per intentar pal·liar aquest problema s’ha optat per separar les freqüències corresponents al
“0” i al “1”, per això s’ha decidit augmentar la desviació de la freqüència de 50 kHz a
60kHz. S’és conscient que amb aquesta solució s’utilitza un major ample de banda i limita
la possibilitat de tenir varies estacions treballant a freqüències diferents.
El primer pas ha estat tornar a calibrar els condensador variables. Fet això s’han realitzat
les mesures i s’han obtingut millors resultats. Realitzant la mateixa prova inicial s’obté:
“1” : 2,85 V
“0” : 0,75V
Es veu com aquests valors es troben més allunyats cosa que facilitarà les coses al
comparador. Però abans de calcular el valor de la tensió de referència s’ha optat per veure
l’evolució d’aquests valors al augmentar la distància entre les estacions. Al fer això s’ha
observant com la tensió corresponent a l’ “1” lògic va disminuint lentament, mentre que la
corresponent al “0” es manté gairebé constant. Sabent això es pot decidir amb més encert
la tensió de referència que la agafarem el més baixa possible.
LSB = 15 mV x 3,4 V = 51 mV
VCC / 2 = 1,7 V
Tensió de referència = 1,7 V – 7 x 51 mV = 1,34 V
83
Capítol 6 Resultats i Conclusions
El següent pas ja ha estat provar el funcionament dels programes mestre i esclau comentats
en l’explicació del codi i trobar la distància màxima a la que pot treballar el sistema. S’ha
començat a provar amb una velocitat baixa de 1,2 kbps. En aquest cas s’ha aconseguit
realitzar el procés de comunicació complet de emissió de missatge i recepció de resposta
sense cap error a una distància màxima entre estacions d’uns dos metres.
Per altra banda amb la configuració de desviació 60 kHz no s’ha aconseguit superar la
velocitat de 2,4 kbps però en canvi s’ha aconseguit realitzar la comunicació a més de dos
metres de distància entre estacions.
6.3 Conclusions
Després de les proves s’ha vist que el sistema dissenyat no ha ofert resultats positius. Les
distàncies i velocitats aconseguides no permeten l’ús del sistema en aplicacions reals.
Arribats a aquest punt s’han analitzat les possibles causes d’aquestes deficiències. En
primer lloc s’ha descartat el problema software degut al fet que el sistema opera
correctament a distàncies curtes com ja s’ha comentat. Per tant s’ha arribat a la conclusió
que el problema es troba a la placa transceptora. Part del problema es podria trobar en la no
84
Capítol 6 Resultats i Conclusions
utilització d’un pla de massa, ja que a les altes freqüències a que es treballa, les connexions
de massa introdueixen paràsits no menyspreables. Un altre problema podria ser la
tolerància dels components utilitzats sobretot la del cristall de quars que crea la freqüència
de referència. Aquests problemes s’intentaran pal·liar en properes versions de la placa
transceptora.
Per tant s’arriba a la conclusió que s’ha excedit en el seguiment d’una de les premisses
inicials que era la creació d’un sistema de comunicació simple i de baix cost.
85