You are on page 1of 85

Targeta microcontroladora amb sistema de

comunicació via radiofreqüència

Titulació: Enginyeria Tècnica Industrial en Electrònica Industrial

Autor: Jordi Martín Porqueras


Director: Ernest Gil Dolcet
Data: septembre/2003
Índex

ÍNDEX

INDEX...................................................................................................................................2

1 INTRODUCCIÓ ...........................................................................................................4
1.1 COMUNICACIÓ INDUSTRIAL.....................................................................................4
1.2 RADIOCOMUNICACIONS ...........................................................................................4
1.3 ALTERNATIVES ........................................................................................................5
1.4 OBJECTIUS ...............................................................................................................6

2 DESCRIPCIÓ GENERAL ..........................................................................................7


2.1 MESTRE ...................................................................................................................8
2.2 ESCLAU ...................................................................................................................9

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

5.3 CODI ......................................................................................................................68


5.3.1 CtrRF.h..........................................................................................................69
5.3.2 Serie.h............................................................................................................72
5.3.3 PFCodM.c......................................................................................................78
5.3.4 PFCodS.c.......................................................................................................80

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Ó

1.1 Comunicació Industrial

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

Per realitzar un enllaç de radiofreqüència hi ha varies opcions. En primer lloc es pot


realitzar el muntatge amb elements separats, sintetitzadors, mescladors, amplificadors,
filtres, demoduladors, etc. D’aquesta manera el sistema obtingut és altament personalitzat i
es podran aconseguir les característiques que es desitgin del sistema. Per contrapartida, el
disseny del sistema és més complex i costós.

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.

Bus conf. Tx/Rx

Dades

Microcontrolador Transceptor

Fig. 2.1 Diagrama de blocs del sistema

El microcontrolador mitjançant el bus de configuració programarà el bloc transceptor


adequadament segons es vulgui emetre o transmetre, i per la línia de dades enviarà o rebrà
els missatges.

El bloc transceptor s’encarregarà de transformar els bits enviats pel microcontrolador en


senyals de radiofrequència, i a la inversa, rebre senyals de radio per transformar-los en
senyals digitals comprensibles pel microcontrolador.

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

Fig. 2.2 Diagrama de flux de l’estació mestre

8
Capítol 2 Descripció General

En el diagrama anterior s’observa el funcionament que haurà de tenir l’estació mestre. En


primer lloc inicialitzarà tot el sistema i el configurarà com a transmissor. Quan es detecti
la condició d’inici de transmissió enviarà el missatge i es posarà en mode receptor per
esperar la resposta de l’estació esclava.

2.2 Esclau

RESET

Inicialització
CPU

Inicialització
RF

CPU & RF
Mode Rx

Programa

No
M. rebut?

Si

CPU & RF
Mode Tx

Transmissió

Fig. 2.3 Diagrama de flux de l’estació esclava

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

missatge de l’estació mestre. Un cop es rep un missatge es configura el sistema com a


emissor i es realitza la transmissió de la resposta.

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

l’antena i l’enviarà al microcontrolador pel mateix piu DATAMSG. No s’emmagatzema ni


es processa cap dada a l’interior de l’integrat.

• Transmissió

Fig. 3.1 Esquema de la transmissió

• Recepció

Fig. 3.2 Esquema de recepció

12
Capítol 3 Dispositius Utilitzats

Fig. 3.3 Diagrama de blocs del AT86RF211

3.1.2 Recepció

3.1.2.1 Principi de Demodulació

La modulació utilitzada per l’AT86RF211 consisteix en codificar cada bit de la següent


manera:

• “0”: transmissió d’una senyal RF de freqüència F0.


• “1”: transmissió d’una senyal RF de freqüència F1.
• La freqüència del canal és la freqüència mitja FC = (F0+F1)/2.
• F1 - FC = FC – F0 es la desviació de freqüència.

13
Capítol 3 Dispositius Utilitzats

Per tant les funcions del receptor seran:

• 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)

Fig. 3.4 Diagrama de blocs de la recepció

El discriminador del AT86RF211 es analògic, és a dir, la tensió de sortida és proporcional


a la freqüència d’entrada. Està especialment dissenyat per permetre seqüències llargues de
“0” o “1”. Aquesta possibilitat no la permeten tots els receptors, en alguns és necessari
utilitzar codificació de dades sense DC com per exemple la codificació Manchester.

Com que el rang de tensió de sortida del discriminador és proporcional a la desviació de la


freqüència de entrada, si les desviacions de freqüència són petites (utilitzades en
aplicacions de banda estreta) produiran un valor de tensió pic a pic baix a la sortida del
discriminador. Per això es pot seleccionar el guany del discriminador: “standard” o
“narrow band”. L’últim té el doble de guany (mV/kHz), d’aquesta manera és més fàcil pel
data slicer convertir la senyal a nivells CMOS.

14
Capítol 3 Dispositius Utilitzats

El guany del demodulador és:

• Ample de banda de discriminador estàndard: 14 mV/kHz a 2,4 V (+5 mV


per Volt d’alimentació).
• Ample de banda de discriminador estret: 28 mV/kHz a 2,4 V (+10 mV per
Volt d’alimentació).

3.1.2.2 Data slicing

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.

Llindar del data slicer en SKFILT

Opcions del
data slicer

Senyal remodulada en el pin DISCOUT

Llindar del data slicer per DAC intern (DSREF)

Fig. 3.5 Tipus de tensió llindar del data slicer

• Mode de comparació extern

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.

La codificació Manchester és apropiada per aquesta finalitat. Aquesta consisteix a codificar


les dades de la següent manera:

- “0” lògic: 01
- “1” lògic: 10

• Mode de comparació Intern

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ó

3.1.3.1 Amplificador de potència

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

Fig. 3.6 Esquema d’amplificador de potència

El PA ha d’estar ben adaptat per lliurar la millor eficiència.

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:

Fig. 3.7 Diagrama de blocs de llaç de control

Fig. 3.8 Potència de sortida

17
Capítol 3 Dispositius Utilitzats

La potència de sortida es pot controlar mitjançant el hardware , la resistència RPOWER


determina la potencia de sortida del PA, la màxima potència de sortida s’obté amb un valor
de 10 kO, amb el qual s’obtenen uns valors de potència a la sortida de +14 dBm a 433
MHz, +12 dBm a 868 MHz i +10 dBm a 915 MHz.

Fig. 3.9 Esquema Entrada Rpower

Una altra alternativa per controlar la potència de sortida és mitjançant el software. La


potència es pot ajustar des de el valor establert per la RPOWER fins a un màxim de 12 dB per
sota, programant els bits del 6 al 8 del registre CTRL1. D’aquesta manera podem obtenir 8
nivells de potència de sortida.

Pout a 433 MHz Pout a 868 MHz Pout a 915 MHz


TXLVL(CTRL1)
(dBm) (dBm) (dBm)
000 0 -2 -3
001 4 0 0
010 6 3 2
011 8 5 4
100 10 7 5
101 11 8 7
110 12 9 8
111 13 10 9
Taula 3.1 Potències segons TXLV i banda de freqüència per RPOWER=18k, T = 25ºC, Vcc= 3V

18
Capítol 3 Dispositius Utilitzats

3.1.4 Control Lògic

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:

SLE: entrada d’habilitació


SCK: entrada rellotge
SDATA: entrada/sortida dades

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.

3.1.4.2 Format dels missatges

Estan formats per 3 camps:

- adreça A[3:0]: 4 bits (MSB primer)


- R/W: selecció de lectura/escriptura
- dades D[31:0]: fins a 32 bits (MSB primer)

ADREÇA R/W DADES fins a 32 bits (longitud variable)


A[3] A[2] A[1] A[0] R/W MSB D[nbit-1:0] LSB

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

3.1.4.3 Mode escriptura

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.

Fig. 3.10 Cronograma de cicle d’escriptura complet a registre de 10 bits

Fig. 3.11 Cronograma de cicle d’escriptura incompleta

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

3.1.4.4 Mode Lectura

La adreça i el R/W bit es capturen en el flanc de pujada de SCK.

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.

SDATA torna a l’estat d’entrada quan SLE passa a ‘1’.

Fig. 3.12 Cronograma de cicle de lectura completa d’ un registre de 10 bits

21
Capítol 3 Dispositius Utilitzats

Fig. 3.13 Cronograma de cicle de lectura incomplet

3.1.5 Registres Interns

3.1.5.1 Resum del registres de l’AT86RF211

Nom Adreça A[3:0] Nbits Read-Write Comentari


F0 (0000)2 32 R-W Codi de freqüència F0
F1 (0001)2 32 R-W Codi de freqüència F1
F2 (0010)2 32 R-W Codi de freqüència F2
F3 (0011)2 32 R-W Codi de freqüència F3
CTRL1 (0100)2 32 R-W Registre de control principal
STAT (0101)2 31 R Registre d’estat
Referència del Data Slicer/
DTR (0110)2 6 R-W Ajustament d’offset del
discriminador
Registre de control de
WUC (0111)2 32 R-W
Wake-up
Velocitat de dades de Wake-
WUR (1000)2 18 R-W
up
WUA (1001)2 25 R-W Adreça de Wake-up
WUD (1010)2 32 R Dades de Wake-up
RESET (1011)2 1 W Reset
- (1100)2 Reservat
- (1101)2 Reservat
- (1110)2 Reservat
CTRL2 (1111)2 32 R-W Registre de control
Taula 3.2 Registres del AT86RF211

3.1.5.2 Registre de Reset (RESET)

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.

3.1.5.3 Registre de Control (CTRL1)

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.

Fig. 3.14 Relació entre codi i potència a la antena

25
Capítol 3 Dispositius Utilitzats

3.1.5.4 Registre de Control (CTRL2)

Aquest registre està dedicat a la configuració de la velocitat de transmissió i la tolerància


del rellotge quan s’utilitza el DATACLK i a la configuració de la detecció de captura del
PLL (PLL lock).

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

Detecció de seguiment del PLL

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.

N0LD2 és el nombre de flancs consecutius del rellotge de mostreig amb UP i DOWN


activat abans de considerar que el PLL no es troba en seguiment.

N1LD2 és el nombre de cicles de la freqüència de referència, sense que es compleixi cap

26
Capítol 3 Dispositius Utilitzats

condició de no seguiment, abans de considerar PLL en seguiment.

3.1.5.5 Registres de Freqüència

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

Taula 3.5 Registres de freqüències

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

3.1.5.6 Registre d’Estat

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

3.1.5.7 Registre DTR

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

El bit menys significatiu de DTR[5:2] correspon a 15 mV per Volt de tensió d’alimentació,


sent DTR[5:2] = 0111 sempre la meitat d’aquesta tensió.

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

3.2.1 Descripció general

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.

Al tractar-se d’un dispositiu tipus FLASH pot programar-se i esborrar-se elèctricament


d’una manera fàcil, fins i tot es poden crear aplicacions ICSP (In-Circuit Serial
Programing).

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.

3.2.2 USART ( Universal Synchronous Asyncronous Receiver Transmiter )

Aquest és el perifèric principal que s’utilitza en el projecte, s’encarregarà de transmetre i


rebre bytes en sèrie de manera asíncrona mitjançant el protocol USART.

Principals registres utilitzats per l’USART:

Nom Adreça Nbits Read-Write Comentari


Registre d’estat i control de
TXSTA (98)16 8 R-W
Transmissió
Registre d’estat i control de
RCSTA (18)16 8 R-W
Recepció
Registre de transmissió de la
TXREG (19)16 8 W
USART
Registre de Recepció de la
RCREG (1A)16 8 R
USART
Generador de velocitat de
SPBRG (98)16 8 R-W
transmissió
Taula 3.8 Registres de la USART

3.2.2.1 Registre TXSTA

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

3.2.2.2 Registre RCSTA

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

3.2.2.3 Registre SPBRG

Nombre de
Nom bits Comentari
SPBRG 8 Velocitat de transmissió
valor de reset: (00)16
Taula 3.11 Registre SPBRG

Càlcul de la velocitat de transmissió en mode asíncron:

BRGH = 0 (Baixa velocitat) BRGH = 1 (Alta velocitat)


Velocitat = FOSC /(64(X+1)) Velocitat = FOSC /(16(X+1))
Taula 3.12 Càlcul de velocitat de transmissió

3.2.2.4 USART com a transmissor asíncron

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

Fig. 3.15 Diagrama de blocs del transmissor

3.2.2.5 USART com receptor asíncron

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

Fig. 3.16 Diagrama de blocs del receptor

3.2.3 Mòdul Timer0

Aquest mòdul és un temporitzador/comptador ascendent de 8 bits.

El mode temporitzador es selecciona posant a “0” el bit T0CS del OPTION_REG, en


aquest cas el valor del registre TMR0 s’incrementa cada cicle d’instrucció (si no hi ha
prescaler).

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

Bits Valor per TMR0 Valor per WDT


000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
111 1:256 1:128

37
Capítol 3 Dispositius Utilitzats

Taula 3.14 Valors del prescaler

Fig. 3.17 Diagrama de blocs de Tmr0 i WDT

3.2.4 Interrupcions

El PIC16F876 té 14 fonts d’interrupcions de les quals s’utilitzaran dues en el projecte.


Aquestes interrupcions es poden habilitar i inhibir individualment i cada font d’interrupció
té el seu flag per demanar-la. També es disposa d’un bit d’habilitació de les interrupcions
en general. Quan s’atén una interrupció aquest bit s’inhabilita automàticament i les
interrupcions no es tornen a permetre fins que sortim de la rutina d’atenció.

Registres per al control de les interrupcions.

38
Capítol 3 Dispositius Utilitzats

Nom Adreça Nbits Read-Write Comentari


INTCON (0B)16 8 R-W Bits d’habilitació i Flags
PIE1 (8C)16 8 W Bits d’habilitació de perifèrics
PIR1 (0C)16 8 R Flags de perifèrics
PIE2 (8D)16 8 W Bits d’habilitació de perifèrics
PIR2 (0D)16 8 R Flags de perifèrics
Taula 3.15 Registres utilitzats per interrupcions

3.2.4.1 INTCON

Per a tots els bits:


“0”: Interrupció inhibida/ no hi ha petició .
“1”: Interrupció habilitada/ petició activada.

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

Registre d’habilitació de les interrupcions dels perifèrics del microcontrolador.

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

Registre de peticions d’interrupció dels perifèrics.


Nombre de
Nom bits Comentari
PSPIF 1 Bit reservat, s’ha de mantenir a “0”
valor de reset: 0
ADIF 1 Petició de les interrupcions del conversor AD
valor de reset: 0
RCIF 1 Petició d’interrupció per recepció de la USART
valor de reset: 0
TXIF 1 Petició d’interrupció de recepció de la USART
Valor de reset: 0
SSPIF 1 Petició d’interrupció del SSP
valor de reset: 0
CCP1IF 1 Petició d’interrupció del mòdul CCP1
valor de reset: 0
TMR2IF 1 Petició d’interrupció del Timer2
valor de reset: 0
TMR1IF 1 Petició d’interrupció del Timer1
valor de reset: 0
Taula 3.18 Bits del registre PIF1

Fig. 3.18 Diagrama lògic del funcionament de les interrupcions

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

Fig. 4.1 Diagrama de blocs del sistema

4.2 Disseny amb placa única

4.2.1 Bloc microcontrolador

Aquest mòdul s’encarrega del control i programació del xip de radiofreqüència


AT86RF211, mitjançant uns microinterruptors i un conjunt de LEDs es podrà interactuar
amb aquest per donar ordres i visualitzar estats. A continuació es descriuen les seves parts.

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 recepció i transmissió de missatges es curtcircuiten les línies Tx i Rx de la USART


del microcontrolador (pius 17 i 18) i es connecten a les línies 11 i 12 del connector.

4.2.1.5 Interfície de Control

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

Fig. 4.2 Esquema elèctric del mòdul microcontrolador

Cant Descr. Modelo


2 PIC 16F876
8 Resistencia 1K
8 Resistencia 10K
2 Microinterrutor DIP (4 interruptors)
2 Sòcol DIP 28 potes
8 LED vermell
4 Condensador 22p
2 Cristall Quartz 4MHz
2 Regleta 2 conexions
Taula 4.1 Llistat de components utilitzats al mòdulmicrocntrolador

4.2.2 Bloc de radiofreqüència

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.

Acompanyant l’AT86RF211 és necessiten una sèrie de components externs, que ens


definiran la banda de freqüència a la que es vol treballar, i la qualitat de la comunicació
(velocitat, distància), que es definirà segons els filtres i qualitat d’altres element que s’hi
connectin. Com la idea del projecte és crear un sistema senzill i de baix cost, es realitzarà
un disseny amb els mínims components necessaris per aconseguir un funcionament
acceptable.

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.

Fig. 4.3 Connexió del cristall

Aquesta font de rellotge és utilitzada pel sintetitzador de freqüència. Per optimitzar el


soroll de fase de la portadora al sintetitzador se li connecta un filtre de llaç del PLL als pins
FILT1 i VCOIN (41 i 42), s’ha optat per muntar el filtre típic recomanat per ATMEL.

FILT1 VCOIN

3,3 kO
560 pF

5,6 nF

Fig. 4.4 Connexió del PLL loop filter

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

Fig. 4.5 Connexió de SWOUT amb RXIN

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

Fig. 4.6 Connexió de DISCFILT

L’últim component utilitzat en el procés de recepció de la senyal és el condensador de 10


nF connectat a SKFILT, la seva funció es proporcionar la tensió de referència al
comparador del discriminador filtrant la senyal procedent del DSIN. Aquest mètode
s’utilitza quan es selecciona el mode extern, en l’aplicació del projecte no s’utilitza aquest
component ja que sempre es treballa amb la referència interna al comparador.

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

filtre adaptat ˜ 50O

Fig. 4.7 Esquema connexionat d’antena

48
Capítol 4 Descripció Hardware

La resta de components que es veuen a l’esquema són filtres per a l’alimentació


recomanats pel fabricant.
J2
BNC
2

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

Fig. 4.8 Esquema complet del bloc de radiofreqüència.

49
Capítol 4 Descripció Hardware

Fig. 4.9 PCB versió d’una placa( cara superior).

Fig. 4.10 PCB versió d’una placa(cara inferior).

50
Capítol 4 Descripció Hardware

Cant. Descr. Modelo Fabric. Farnell Far100(€) RS (ref)


(ref)
2 Inductor 1,5nH MEGGITT 323-7771 0,21
SIGMA
2 Inductor 4,7nH MEGGITT 323-7801 0,21
SIGMA
2 Inductor 12nH EPCOS 400-0389 0,94
2 Inductor 18nH EPCOS 400-0407 0,94
2 Inductor 33nH EPCOS 400-0420 0,94
2 Inductor 47nH EPCOS 400-0444 0,94
2 Inductor 1uH EPCOS 400-0572 0,94

2 Trim Capacitor 6,5/30 pF Murata 353-1442 1,08

2 Filtre 10.7MHz Murata 174-0692

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

4.3 Disseny amb dues plaques

4.3.1 Placa Microcontroladora

Aquesta és una placa dissenyada per provar el correcte funcionament de la placa


transceptora de ràdio.
ENTRADES

MICROCONTROLADOR
Tx/Rx

CONNECTOR
SORTIDES

INTERFÍCIE
DE
CONTROL

Fig. 4.11 Diagrama de blocs de placa microcontroladora

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.

El disseny és pràcticament idèntic utilitzat a l’apartat 4.2.1.

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

Fig. 4.12 Esquema elèctric de placa microcontroladora

Fig. 4.13 Disseny PCB de Placa microcontroladora

53
Capítol 4 Descripció Hardware

4.3.2 Placa Transceptora

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

Fig. 4.14 Diagrama de blocs de placa RF

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.

El treball experimental s’ha realitzat amb la versió basada en dues plaques.

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:

55h Longitud (n) Dada[n] ... Dada[0] cheksum 0Fh

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

5.2 Descripció del programa

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()

UART & RF Txmode()


Mode Tx RF211_Tx

Programa

No Canvi
Interruptor?

Si

Transmissió RFsnd()

UART & RF Rxmode()


Mode Rx RF211_Rx

No
Timeout?

Si
No Trama Tractament
rebuda? Error

Si
Tractament
de dades RFrecAtt(char*)

58
Capítol 5 Descripció Software

Fig. 5.1 Diagrama estació mestre

En aquest diagrama s’explica el funcionament bàsic de l’estació mestre. Primer es


realitzen les inicialitzacions de tots els elements del sistema, a continuació s’entra en un
bucle, on en una aplicació real l’estació realitzaria la seva funció, esperant que arribi la
senyal per iniciar la transmissió. A continuació realitza la transmissió i canvia a mode
receptor per esperar la resposta. Espera la resposta durant un temps determinat, timeout, si
passat aquest temps no s’ha rebut cap resposta interpretarà que hi ha hagut un error en la
transmissió.

Les funcions corresponents a cada bloc es comenten en l’apartat 5.3.

59
Capítol 5 Descripció Software

5.2.2 Esclau

RESET Funcions corresponents


a cada bloc

Inicialització
PIC IniPIC( )

Inicialització
AT86RF211 IniRF( )

UART & RF Rxmode( )


Mode Rx RF211_Rx

Programa

No Trama
Rebuda?

Si

Tractament
Dades RFrecAtt(char*)

UART & RF Txmode( )


Mode Tx RF211_Tx

Enviar
Resposta RFsnd( )

Fig. 5.2 Diagrama de l’estació escalava

En aquest diagrama es veu la seqüència d’accions realitzades per l’estació esclava. De la


mateixa manera que la mestre primer realitza les inicialitzacions tan del microcontrolador
com del AT86RF211. Un cop fet això es queda en mode recepció esperant rebre un
missatge. Tal com fa l’estació mestre en aquest punt el microcontrolador es pot dedicar a

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.

Interrupció Funcions corresponents


a cada bloc

No RCIF?

Si

Recepció de
No dada Int_rx()
T0IF?

Si

Control de
comptadors Int_Tmr0()

Fi
Interrupció

Fig. 5.3 Diagrama de l’atenció a interrupcions

5.2.3.1 Interrupció de Timer0

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

Fig. 5.4Diagrama d’atenció a Tmr0

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

5.2.3.2 Interrupció de recepció

Recepció

Si interframe?

No

Reiniciar Llegir Dada


buffer

Forma part No
Llegir Dada de trama?

Si

Guardar en
No Inici de
buffer
trama?

Si
No Final de
Guardar en trama?
buffer
Si

Funció trama Reiniciar


rebuda buffer

Reiniciar
buffer

Fi
Recepció

Fig. 5.5 Diagrama d’atenció a la recepció

En aquest diagrama es mostra el procés de recepció d’una dada. En primer lloc es


comprova l’indicador que ens mostra si ha passat el temps d’interframe des de l’anterior
byte rebut, si és així tractarà la dada rebuda com a inici d’una nova trama i ignorarà el
rebut anteriorment. Si no és així llegeix la dada i comprova si forma part de la trama, si no

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

5.2.4.1 Inicialització de l’AT86RF211

En aquest apartat es justifica el valor introduït a cada bit dels registres de l’integrat.

Registre CTRL1

Bit Nom Valor Descripció


[31] PDN 1 Activació del xip
[30] RXTX 1/0 Mode Transmissió/Recepció (segons estació)
[29] DATACLK 0 Comunicació asíncrona
[28] TXLOCK 1 Transmissor quan PLL es capturat
[27] PAPDN 1 Activació d’amplificador de Tx
[26] WUEN 0 Funció wake-up desactivada
[25] LNAGSEL 0 Màxim guany del LNA
[24] MVCC 0 Conversor A/D mesura RSSI
[23-18] TRSSI 100000 Valor llindar de RSSI (entre -85dB i -75dB)
[17-15] HRSSI 100 Histèresi de RSSI
[14-12] TXLVL 111 Màxima potència de transmissió
[11] TXFS 0 Selecció de F0&F1 (Freqüències de transmissió)
[10] 0
[9,8] RXFS 10 Selecció de F2 com freqüència de recepció de 0
[7] XTALFQ 0 Freqüència del cristall 10.245 MHz
[6] FSKBW 1 Ample de banda estàndard del discriminador
[5] FSKPOL 1 Polaritat directa de la senyal DATAMSG
[4] DSREF 1 Selecció de referència interna per al Data Slicer
[3-2] 00
Bit Nom Valor Descripció
[1] MOFFSET 1 Mesura del nivell DISCOUT DC
[0] 0
Taula 5.1 Inicialització de CTRL1

64
Capítol 5 Descripció Software

Registre DTR

Bit Nom Valor Descripció


Referència del Data Slicer (Inicialment
[5-2] DSREF 0111
seleccionem Vcc/2)
[1] DISCHIGH 0 Offset del discriminador desactivat
[0] DISCLOW 0 Offset del discriminador desactivat
Taula 5.2 Inicialització de 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

5.2.4.2 Inicialització general del PIC

Registre OPTION

Registre de configuració general del microcontrolador.

Bit Nom Valor Descripció


[7] !RBPU 1 Inhabilitació de Pull-ups del PORTB
[6] INTEDEG 1 Interrupció per flanc ascendent de RB0/INT
[5] T0CS 0 Cicle de instrucció intern com rellotge de TMR0
[4] T0SE 0 No té efecte en la amb TOCS a “0”
[3] PSA 0 Assigna prescaler al Timer0
[2-0] PS2:PS0 (111)2 Prescaler a 1:256
Taula 5.4 Inicialització de Option Register

Registre INTCON

Registre de configuració de les interrupcions del PIC, inicialment es troben totes


inhabilitades, només s’activa la de recepció quan la estació es trobi en aquest mode, i les
del Timer0 quan estigui comptabilitzant algun temps. Amb el bit PEIE activat, per habilitar
les interrupcions en la recepció s’ha d’activar el bit 5 del registre PIE1 (RCIE).

Bit Nom Valor Descripció

[7] GIE 1 Habilitació d’interrupcions


[6] PEIE 1 Habilitació d’interrupció de perifèrics (UART)
[5] T0IE 0 Inhabilitació d’interrupció de Timer0
[4] INTE 0 Inhabilitació d’interrupció de RB0
[3] RBIE 0 Inhabilitació d’interrupció de RB7-RB4
Taula 5.5 Inicialització de 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

Configura tot el PORTA com a sortida.

5.2.4.3 Inicialització de USART del PIC

Registre TXSTA

Registre de configuració de la transmissió.

Bit Nom Valor Descripció


[7] CSRC - En mode asíncron no té cap funció
[6] TX9 0 Selecció de transmissió de 8 bits
[5] TXEN 0 Inicialment transmissió inhabilitada
[4] SYNC 0 Selecció de comunicació asíncrona
[3] - - No implementat
[2] BRGH 1 Selecció d’alta velocitat
[1] TRMT - Bit de lectura
[0] TX9D 0 En mode 8 bits no s’utilitza
Taula 5.6 Inicialització de TXSTA

67
Capítol 5 Descripció Software

Registre RCSTA

Configuració de la recepció.

Bit Nom Valor Descripció


[7] SPEN 1 Activació de port sèrie
[6] RX9 0 Selecció de recepció de 8 bits
[5] SREN - En mode asíncron no té cap funció
[4] CREN 0 Inhabilita la recepció inicialment
[3] ADDEN 0 Inhabilita la detecció d’adreça en la recepció
[2] FERR - Bit de lectura
[1] OERR - Bit de lectura
[0] RX9D - Bit de lectura
Taula 5.7 Inicialització de RCSTA

Registre BRGH

En aquest registre es programa la velocitat de transmissió de dades de la USART. Per


aquesta finalitat utilitzarem les expressions vistes a l’apartat 3.2.2.3.

Velocitat = FOSC /(16(X+1))

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---------------------------------*/

bit SDATA @ (unsigned)&PORTB*8+2;


bit SLE @ (unsigned)&PORTB*8+1;
bit SCK @ (unsigned)&PORTB*8+3;

/*--------------------------------------------------------------------------*/

/*-------------Definició de les adreces dels registres del RF211------------*/

#define F0 0x0 /*0000B / Freqüència F0 */


#define F1 0x1 /*0001B / Freqüència F1 */
#define F2 0x2 /*0010B / Freqüència F2 */
#define F3 0x3 /*0011B / Freqüència F3 */

#define CTRL1 0x4 /*0100B / Registre de Control Principal*/


#define CTRL2 0xF /*1111B / Registre de Control(Lock Detect -
Clock Recovery) */
#define STAT 0x5 /*0101B / Registre d'estat */
#define DTR 0x6 /*0110B / Entrada del Data Slicer Ajustament de
l'Offset del Discriminador */

#define WUC 0x7 /*0111B / Wake-up Control Register */


#define WUR 0x8 /*1000B / Wake-up Data Rate Register */
#define WUA 0x9 /*1001B / Wake-up Address Register */
#define WUD 0xA /*1010B / Wake-up Data Register */

#define RESET 0xB /*1011B / Reset */

/*--------------------------------------------------------------------------*/

/*-------------Definició dels tamañs dels registres del RF211---------------*/

#define F0_LGTH 32 /* Freqüència F0 */


#define F1_LGTH 32 /* Freqüència F0 */
#define F2_LGTH 32 /* Freqüència F0 */
#define F3_LGTH 32 /* Freqüència F0 */

#define CTRL1_LGTH 32 /* Registre de Control Principal*/


#define CTRL2_LGTH 32 /* Registre de Control(Lock Detect -
Clock Recovery) */
#define STAT_LGTH 31 /* Registre d'estat */
#define DTR_LGTH 6 /* Entrada del Data Slicer Ajustament de
l'Offset del Discriminador */

#define WUC_LGTH 32 /* Wake-up Control Register */


#define WUR_LGTH 18 /* Wake-up Data Rate Register */
#define WUA_LGTH 25 /* Wake-up Address Register */
#define WUD_LGTH 32 /* Wake-up Data Register */

69
Capítol 5 Descripció Software

#define RESET_LGTH 1 /* Reset */

/*--------------------------------------------------------------------------*/

/*------------Definició de les funcions Principals del RF211----------------*/

#define RF211_Tx writerf(CTRL1,0x03,2,CTRL2_LGTH)


#define RF211_Rx writerf(CTRL1,0x02,2,CTRL2_LGTH)
#define RF211_OFF writerf(CTRL1,0x00,2,CTRL2_LGTH)

/*--------------------------------------------------------------------------*/

void IniRF();
void writerf(char,long,char,char);
long readrf(char,char,char);

/*-------------Escriptura als registres del AT86RF211-----------------------*/

void writerf(char a, long d, char length, char nbitreg)


{
char aux=0;

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;

for (aux=length;aux!=0;aux--) /*Escriptura de la dada*/


{
SCK=0;
d=d<<1;
SDATA=CARRY;
SCK=1;

}
SLE=1; /*Fi d’escriptura*/
}

/*-------------Lectura dels registres del AT86RF211------------------------*/

long readrf(char a, char length, char nbitreg)


{
char aux=0;
long d;

TRISB2=0;

SCK=0;
SLE=0; /*Habilita SDATA*/

a=a<<4; /*Situa bits utils a la part alta*/

70
Capítol 5 Descripció Software

for (aux=4;aux!=0;aux--) /*Escriu adreça*/


{
SCK=0;
a=a<<1;
SDATA=CARRY;
SCK=1;
}

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);
}

/*----------------Inicialització del AT86RF211-----------------------------*/

void IniRF()
{

/*Programació de Registres de freqüències per una una f de */


/*430 MHz amb una desviació de +/-50kHz i Configuració*/

writerf(F0,0xD84CEA40,32,F0_LGTH); /*F0 Emissió de 0*/


writerf(F1,0x38044C70,32,F1_LGTH); /*F1 Emissió de 1*/
writerf(F2,0x99E4485A,32,F2_LGTH); /*F2 Recepció 0*/
writerf(F3,0x092C6C5A,32,F3_LGTH); /*F3 Recepció 1*/
writerf(DTR,64,6,DTR_LGTH); /*Registre DTR*/
writerf(CTRL1,0xC8827270,32,CTRL1_LGTH); /*Registre de Control*/
}

void writerf(char, long, char, char)

Aquesta funció s’encarrega d’escriure als registres de configuració del AT86RF211, se li


ha de passar com a paràmetres l’adreça del registre que es vol escriure, les dades a escriure,
la quantitat de bits que es vol escriure ja que es poden fer escriptures parcials dels registres,
i per últim la longitud total del registre. La funció no retorna cap valor.

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.

long readrf(char, char, char)

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()

Aquesta funció s’encarrega de configurar els registres de freqüència, de control i DTR de


l’AT86RF211 amb els valors discutits en l’apartat anterior utilitzant la funció d’escriptura
anterior.

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>

#define interframe 61 /*interframe=50ms amb clock 4MHz*/


#define tresposta 20 /*temps d'espera de resposta 1s*/

72
Capítol 5 Descripció Software

/*----------------------Definició variables Globals-------------------------*/

char conta;
char EST_COM; /*Estat de la comunicació*/

/*--------------------------------------------------------------------------*/

/*----------Definició de bits de la variable d'estat de la comunicació------*/

#define SI_TRAMA_REBUDA (EST_COM&0x01) /*Indica si s'ha rebut


trama*/
#define SI_INTFR (EST_COM&0x02) /*Si ha passat el temps
d’interframe*/
#define SI_NO_RESPOSTA (EST_COM&0x04) /*Si ha passat temps
d'espera de resposta*/
#define SI_ESP_RESPOSTA (EST_COM&0x08) /*Si comptador dedicat a la
espera de resposta*/

#define TRAMA_REBUDA (EST_COM=EST_COM|0x01)


#define TRAMA_NO_REBUDA (EST_COM=EST_COM&0xFE)
#define INTFR (EST_COM=EST_COM|0x02)
#define NO_INTFR (EST_COM=EST_COM&0xFD)
#define NO_RESPOSTA (EST_COM=EST_COM|0x04)
#define RESPOSTA (EST_COM=EST_COM&0xFB)
#define ESP_RESPOSTA (EST_COM=EST_COM|0x08)
#define ESP_BYTE (EST_COM=EST_COM&0xF7)

/*--------------------------------------------------------------------------*/

/*------------Funcions per la gestió de la comunicció sèrie-----------------*/

void IniPic();
void IniUart();
void Txmode();
void Rxmode();
void espera();
void RFsnd(char,char*);
void int_rx();
void RFrecAtt(char*);
void intTmr0();

/*--------------------------------------------------------------------------*/

/*------------------------------Envia una Trama-----------------------------*/

void RFsnd(char len, char* ptr)


{
char n;
char chksum;

TXREG=0X55; /*Envia inici de trama*/


espera();

TXREG=len; /*Envia longitud de trama*/


espera();

chksum=0x55+len; /*calcula chksum*/

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();

TXREG=0x0F; /*Envia fi de trama*/


while (TRMT==0) /*Espera que es buidi*/
continue; /*shift register per acabar transmissió*/

/*--------------------------------------------------------------------------*/

/*------------------------------Recepció d'una Trama------------------------*/

void int_rx()
{
static char n=0;
static char chksum;
static char length;
static char buffer[10];

buffer[n]=RCREG; /*Guarda dada al buffer*/


if (((buffer[0]==0x55)&&(n==0)&&(SI_INTFR!=0)||n==1) /*Si inici de*/
/*trama i ha pasat intrframe o indicació de longitud */
{
chksum=chksum+buffer[n];
n++;
}
else
{
if ((n==buffer[1]+2)&&(buffer[n]==chksum)) /*Si chksum ok*/
{n++;}
else
{
if ((n==buffer[1]+3)&&(buffer[n]== 0x0f))/*fi ok*/
{
n=0; /*Reinicia buffer*/
chksum=0; /*Reinicia checksum*/
TRAMA_REBUDA; /*Indica trama rebuda*/
conta=0; /*Reinicia contador espera*/
T0IE=0; /*Inhabilita Int Tmr0*/

NO_INTFR; /*Baixa flag interframe*/


ESP_BYTE; /*Posa timer per intframe*/
TMR0=interframe; /*Carrega timer*/
T0IE=1; /*Habilita int. timer*/

RFrecAtt(buffer+2); /*Tractament de les dades*/


NO_ERROR; /*No hi ha hagut error*/

}
else
{
ERROR; /*Hi ha hagut error*/
chksum=0; /*Reinicia cheksum*/
n=0; /*Reinicia buffer*/

}
}

74
Capítol 5 Descripció Software

}
RCIF=0;
}

/*--------------------------------------------------------------------------*/

/*------------------------Espera per enviar nou byte------------------------*/

void espera()
{
while (TXIF==0) /*Espera a que es buidi el TXREG*/
continue;
TXIF=0;
}

/*--------------------------------------------------------------------------*/

/*-------------------------Tractament de dades rebudes----------------------*/

void RFrecAtt(char* leds)


{
PORTA=*leds; /*Encen els LEDs*/
}

/*--------------------------------------------------------------------------*/

/*-------------Definició de les adreces dels registres del RF211------------*/

void intTmr0()
{

if ((SI_ESP_RESPOSTA)!=0) /*Si esta esperant resposta*/


{
conta++;
TMR0=interframe;
if (conta==tresposta)
{
conta=0;
ESP_BYTE; /*Contador per interframe.*/
NO_RESPOSTA; /*Ha pasat el temps d'espera.*/

T0IE=0;
}
}
else /*Si espera nou element de trama*/
{
INTFR; /*Indica q ha sobrepasat temps d'espera*/
T0IE=0;
}
}

/*--------------------------------------------------------------------------*/

/*------------------------------Pic en mode Transmissor---------------------*/

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

/*--------------------------------------------------------------------------*/

/*------------------------------Pic en mode Transmissor---------------------*/

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*/
}

/*--------------------------------------------------------------------------*/

/*----------------------------Inicialització del Pic------------------------*/

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

EST_COM[2] 0: Timeout no sobrepassat


1: Timeout sobrepassat
EST_COM[1] 0: Interframe no sobrepassat
1: Interframe sobrepassat

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

Configura la USART del PIC per funcionar com a trasmissor.

void Rxmode()

Configura la USART del PIC per funcionar com a receptor.

void IniPic()

Inicialitza el microcontrolador tal com s’ha explicat en l’apartat 5.2.4.2

void IniUart()

Inicialitza la USART del microcontrolador de la manera que s’ha explicat a l’apartat


5.2.4.3.

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"

void interrupt isr();

/*--------------------------------------------------------------------------*/

/*------------------------Programa Principal Master-------------------------*/

main()
{

long t;
char pos, act, ant;

IniPic(); /*Inicialitza Pic*/


SLE=1; /*Inhibeix interficie am l’RF211*/
IniUart(); /*Inicialitza Usart del PIC*/
IniRF(); /*Inicialitza RF211*/

RF211_Tx; /*RF211 mode transmissor*/


Txmode(); Usart del Pic mode transmissor*/

for(;;)
{

78
Capítol 5 Descripció Software

act=PORTC&0x0F; /*Llegeix estat d'interruptors*/

if (act!=ant)
{

ant=act;
RFsnd(1,&act); /*Inicia Transmissió de la trama*/

Rxmode(); /*Mode recepció per esperar resposta*/


RF211_Rx;

for (t=0;t<10;t++) /*Temps de conmutació de RF211*/


continue;

conta=0; /*Reset del temps d'espera*/


ESP_RESPOSTA; /*Posem contador per espera de resposta*/
TMR0=interframe; /*Carrega TMR0*/
T0IE=1; /*Habilita Interrupcció de TMR0*/

while (((SI_TRAMA_REBUDA) == 0 ) && ((SI_NO_RESPOSTA)==0))


/*Mentre no rebi trama o pasi el temps espera */
{
continue;
}

if ((SI_NO_RESPOSTA)!=0) /*Si s'ha pasat temps d'espera*/


{
PORTA=0xFF; /*S’indica encenen tots els LEDs*/
RESPOSTA; /*Baixem flag del temps d'espera*/
}

RF211_Tx;
Txmode(); /*Mode Transmissor*/

TRAMA_NO_REBUDA; /*Baixa flag*/


NO_ERROR /*Baixa flag d’error*/

}
continue;
}
}
/*--------------------------------------------------------------------------*/

/*---------------------Funció d'atenció a la interrupció--------------------*/

void interrupt isr()


{
if (RCIF==1) /*Si interrupció de recepció*/
{
int_rx(); /*Crida a la funció de recepció*/
RCIF=0; /*Baixa flag de la interrupció*/
}
if (T0IF==1) /*Si interrupcció de Tmr0*/
{
intTmr0(); /*Crida a la funció de Tmr0*/
T0IF=0; /*Baixa el flag de la Interrupció*/
}

/*--------------------------------------------------------------------------*/

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"

void interrupt isr();

/*--------------------------------------------------------------------------*/

/*-------------------------Programa Principal Slave-------------------------*/


main()

char pos,t;

IniPic(); /*Inicialització PIC*/


SLE=1; /*Inhibir interfície de comunicació del RF211*/
IniUart(); /*Inicialització Usart del PIC*/
IniRF(); /*Inicialització del RF211*/

Rxmode(); /*Pic mode Receptor*/


RF211_Rx; /*RF mode Receptor*/

for(;;)
{
if (SI_TRAMA_REBUDA) /*Si ha rebut trama, contesta*/
{

pos=PORTC&0x0F; /*Llegeix interruptors*/


RF211_Tx; /*RF mode Transmissor*/
for (t=0;t<10;t++) /*Espera conmutació de l’RF211*/
continue;
Txmode(); /*Pic mode Transmissor*/
for (t=0;t<200;t++) /*Espera preparació de receptor*/
continue;

RFsnd(1,&pos); /*Envia resposta*/

80
Capítol 5 Descripció Software

Rxmode(); /*RF mode Receptor*/


RF211_Rx; /*Pic mode Receptor*/

TRAMA_NO_REBUDA; /*Posem a 0 indicador trama rebuda*/


}
continue;
}

/*--------------------------------------------------------------------------*/

/*--------------------Funció d'atenció a la interrupció---------------------*/

void interrupt isr()


{
if (RCIF==1) /*Si interrupció de recepció*/
{
int_rx(); /*Crida a la funció de recepció*/
RCIF=0; /*Baixa flag de la interrupció*/
}
if (T0IF==1) /*Si interrupcció de Tmr0*/
{
intTmr0(); /*Crida a la funció de Tmr0*/
T0IF=0; /*Baixa el flag de la Interrupció*/
}

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

6.1 Proves de distàncies

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.

Sabent que a DTR[5:2] = 0111 li correspon la meitat de la tensió d’alimentació i que a


partir d’aquí el bit menys significatiu té un pes de 15 mV per Volt d’alimentació (Vcc=3,4
V). Per obtenir el valor més baix escriurem “0000” i aquest valor correspondrà a:

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

Amb aquesta configuració obtenim un funcionament correcte fins a uns 8 m de distància,


enviant “1” i “0” independents. Aquests resultats són millors que els obtinguts amb la
desviació de 50 kHz però tampoc són els esperats.

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.

6.2 Proves de velocitat de transmissió

Les primeres proves es van realitzar amb la configuració de desviació de freqüència de


50kHz. En aquest cas es va iniciar amb una velocitat de 1,2 kbps i es va anar augmentant.
La velocitat màxima a que es va arribar a transmetre va ser de 19,2 kbps tot i que a aquesta
velocitat es produïa una tassa de error bastant elevada. Per tant la velocitat amb la que es
va aconseguir un funcionament adequat va ser de 9,6 kbps, tot i que la distància màxima
entre el mestre i l’esclau amb prou feines superava el metre.

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

You might also like