Sistema de reg automatitzat amb...

168
Sistema de reg automatitzat amb microcontrolador TITULACIÓ: Enginyeria Tècnica Industrial en Electrònica Industrial AUTOR: Daniel Figuerola Balaña DIRECTOR: Enrique F. Cantó Navarro DATA: Setembre 2015

Transcript of Sistema de reg automatitzat amb...

Page 1: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

Sistema de reg automatitzat amb microcontrolador

TITULACIÓ: Enginyeria Tècnica Industrial en Electrònica Industrial

AUTOR: Daniel Figuerola Balaña DIRECTOR: Enrique F. Cantó Navarro

DATA: Setembre 2015

Page 2: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

Vull donar les gràcies a la família, pel suport mostrat i per ajudar-me a arribar fins aquí, i molt especialment a la Irene, per estar al meu costat tots aquest any , i per ser com és.

Dedicat a la Rita

! 2

Page 3: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

index

Index 1 Memòria Descriptiva 7

1.1 Introducció 7

1.2 Antecedents 7

1.3. Objectius 9

1.4 Evapotranspiració del Cultiu (Bases Teòriques) 9

1.4.1 Evapotranspiració 9

1.4.2 Evapotranspiració de Referència (ETo) 9

1.4.3 Evapotranspiració del Cultiu (ETc) 10

1.4.3.1 Evapotranspiració del Cultiu sota Condicions Estàndard (ETc) 10

1.4.3.2 Evapotranspiració del Cultiu sota Condicions no Estàndard (ETc aj) 10

1.4.3.3 Equació de FAO Penman-Monteith 10

1.4.3.3.1 Temperatura 12

1.4.3.3.2 Humitat 12

1.4.3.3.3 Radiació 13

1.4.3.3.4 Velocitat del Vent 13

1.5 Evapotranspiració del Cultiu (Procediment de càlcul) 13

1.5.1 Càlcul de l’Evapotranspiració del Cultiu en Condicions Estàndard (ETc) 17

1.5.1.1 Càlcul del Coeficient Basal del Cultiu (Kcb) 17

1.5.1.2 Càlcul del Coeficient de l’Evaporació (Ke) 19

1.5.2 Càlcul de l’Evapotranspiració del Cultiu en Condicions no Estàndard (ETc aj) 22

1.5.2.1 Càlcul ETc sota Condicions d’Estrés Hídric 22

1.5.2.2 Càlcul ETc per a Cultius Intercal·lats 24

1.6 Càlcul del Reg 24

1.7 Descripció del Sistema 26

1.7.1. Sensor de Temperatura DS18B20 26

1.7.2. Sensor d’Humitat 27

1.7.3. Sensor de Radiació 28

1.7.4 Anemòmetre 29

"3

Page 4: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

index

1.7.5. Pluviòmetre 30

1.7.6. Pantalla LCD 30

1.7.7. Memòria EEPROM 31

1.7.8. Microcontrolador 32

1.7.8.1. PIC24FJ64GB002 32

1.7.9 Descripció del programa 34

1.7.9.1 Inicialització 34

1.7.9.2. Execució normal del programa 35

1.7.9.3 Interrupció del programa per part de l’usuari 36

2 Memòria de Càlcul 37

2.1 Sensor de Temperatura DS18B20 37

2.1.1 Descripció general 37

2.1.2 Bus 1-wire 38

2.1.2.1 Descripció General del Bus 1wire 38

2.1.2.2 Intervals de lectura i escriptura 39

2.1.2.3. Protocol de Comunicació 40

2.1.2.4 CRC 42

2.1.3 DS18B20 i PIC24FJ64GB002 43

2.1.3.1 Configuració del Port 43

2.1.3.2 Comunicació 1 wire 43

2.1.3.3 Mòdul CRC 44

2.1.3.3.1 Definició del Polinomi Generador 45

2.1.3.3.2 Amplada de les Dades 46

2.1.3.3.3 Realització del càlcul 47

2.2 Convertidor de llum a freqüència TSL235R 47

2.2.1. Descripció general 47

2.2.2 TSL235R i PIC24FJ64GB002 48

2.2.2.1 Configuració del Port 48

2.2.2.2 Input Capture with Dedicated Timer 48

"4

Page 5: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

index

2.2.2.2.1 Configuració 49

2.2.2.2.2 Gestió de la FIFO 49

2.3 Sensor d’Humitat HIH-4010 50

2.3.1 Descripció general 50

2.3.2 HIH-4010 i PIC24FJ64GB002 50

2.3.2.1 Configuració del Port 50

2.3.2.2 Mòdul ADC (Analogic Digital Converter) 51

2.4 Anemòmetre i Pluviòmetre 52

2.4.1 Reed Switch 52

2.4.2 Interfície amb el PIC24FJ64GB002 53

2.4.3 Anemòmetre 53

2.4.4 Pluviòmetre 53

2.5. Memòria EEPROM 24LC256 54

2.5.1 Descripció 54

2.5.2 Bus I2C 54

2.5.2.1. Direccionament dels esclaus 54

2.5.2.2 Lectura i Escriptura en el Bus I2C 54

2.5.3 24LC256 i PIC24FJ64GB002 56

2.5.3.1. Configuració del port 56

2.5.3.2 Mòdul I2C 56

2.5.3.2.1 Condició de Star a través del Mòdul I2C 57

2.5.3.2.2 Enviar Dada a través del Mòdul I2C 58

2.5.3.2.3 Llegir Dada a través del Mòdul I2C 58

2.5.3.2.4 Generar ACK i NACK a través del Mòdul I2C 59

2.5.3.2.5 Generar Stop a través del Mòdul I2C 60

2.5.3.2.6 Generar Restart a través del Mòdul I2C 60

2.5.3.2.7 Baud Rate 61

2.6 Pantalla LCD J1602A 61

2.6.1 Connexió al PIC24FJ64GB002 62

2.6.2 Connexió de la pantalla 63

"5

Page 6: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

index

2.6.3 Configuració i Operacions 64

2.7 Connexionat a Nivell de Hardware 64

2.7.1 Alimentació 64

2.7.2 Sensor de Temperatura DS18B20 65

2.7.3 Sensor de Temperatura HIH-4010 66

2.7.4 Sensor de radiació TSL235-R 67

2.7.5 Pluviòmetre 67

2.7.6 Anemòmetre 67

2.7.7 Pantalla LCD 68

2.7.8 Memòria EEPROM 68

3 Plànols 70

3.1 Esquema general 71

4 Resultats 72

5 Conclusions 75

Annexe I. Codi de programa 76

Annexe II. Datasheets components 125

"6

Page 7: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

1. Memòria Descriptiva

1.1 Introducció

En el present projecte realitzarem l’implementació d’un sistema per al control de reg d’un hort. Aquest sistema constarà d’un centre de processament de dades, d’una interfície d’usuari i de un seguit de sensors per mesurar diferents variables meteorològiques. Es pretén realitzar un prototip que sigui capaç de mesurar diferents variables meteorològiques, processar-les i determinar si hi ha necessitat de reg i en quina quantitat. Això implica el control diari de la temperatura, la humitat, la radiació solar, la velocitat del vent i la pluja, així com el càlcul del balanç d’aigua de la superfície del cultiu. 1.2 Antecedents

En els darrers anys a augmentat considerablement el nombre de persones, famílies i agrupacions que han decidit tenir un petit, o no tan petit, hort a casa o en terrenys propers. Aquest augment es dèu a diferents motivacions. Ja pot ser per la necessitat o il·lusió de l’autoconsum, poden menjar els aliments que un mateix conrea, o per motius més socials, com pot ser la recuperació de terrenys abandonats o la gestió comunitària d’espais. Al mateix temps, també a augmentat la sensibilitat de les persones sobre l’importància de no malgastar els recursos naturals existents, en especial l’aigua, pel que es veu idoni poder mesurar i acotar els regs a les necessitats reals del cultiu. En aquests context ja s’han realitzat, que sàpiga l’autor d’aquest projecte, diferents sistemes relacionats amb el que es podria considerar reg automatitzat dels cultius. Dins d’aquests projectes, podem trobar des de sistemes més “rudimentaris”, utilitzant simplement garrafes d’aigua i la gravetat per tal d’introduir l’aigua al terreny, fins a sistemes més elaborats on ja entren en joc microcontroladors i sensors d’humitat de la terra i de temperatura. En el present projecte es vol realitzar la planificació del reg seguint les directrius de l’Organització de les Nacions Unides per a l’Alimentació i l’Agricultura (FAO) explicades en el butlleti nº 25 de la serie “Riego y Drenaje” titulat “Evapotranspiración del Cultivo. Guías para la determinación de los requerimientos de agua de los cultivos”, elaborat per Richard G. Allen, Luis S. Pereira, Dirk Raes i Martin Smith (Roma, 2006). Dins d’aquest marc ja existeixen diversos sistemes de reg automatitzat o programes que calculen, a temps real o sobre calendaris de prediccions, els intervals de reg i la quantitat d’aigua necessària. Aquests sistemes normalment estan orientats a professionals o a estudis experimentals. 1.3. Objectius

Un primer i principal objectiu del projecte es realitzar un prototip per al control de reg segons les necessitats del cultiu en temps real. Amb aquest prototip es vol poder calcular les necessitats d’aigua del cultiu mitjançant el càlcul de l’evapotranspiració i

"7

Page 8: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

determinant el balanç d’aigua de la superfície cultivada. Així es pot minimitzar l’aigua de reg sense que afecti al bon desenvolupament i a la productivitat del cultiu. A diferència d’altres projectes, es vol implementar un reg per una superfície de policultiu (varis cultius junts), ja que és la configuració bàsica dels horts domèstics i comunitaris, parcel·la on va orientat aquest projecte. Degut a això, es vol intentar implementar un sistema econòmic possible però que sigui el més fiable possible, alhora que requereixi els coneixements tècnics mínims per part de l’usuari. Un segon objectiu és acadèmic. En aquest sentit, vull aprofundir en el coneixement dels microcontroladors, especialment en els pic de Microchip. En assignatures durant la carrera ja s’han tractat aquests microcontroladors però es vol aprofundir més en els seus perifèrics integrats. Per aquest motiu, els sensors triats també tindran una orientació específica per tal de que es puguin utilitzar varis perifèrics, poden experimentar així amb ells i treure un bon rendiment dels recursos del microcontrolador.

"8

Page 9: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

1.4 Evapotranspiració del Cultiu (Bases Teòriques) En aquest apartat farem una breu descripció de la metodologia explicada per la FAO en la serie “Riego y Drenaje” (Roma, 2006), introduint algunes bases teòriques i alguns procediments de càlculs. No s’inclourà tota la informació detallada, però aquesta es pot trobar en la publicació anteriorment citada.

1.4.1 Evapotranspiració

Tant els cultius com el terreny, durant l’etapa de creixement i desenvolupament dels primers, perden aigua. Aquesta aigua es pot perdre per evaporació en el terreny o per transpiració en les plantes. La combinació d’aquest dos factor s’anomena evapotranspiració.

Figura 1. Components de l’evaporació i la transpiració en l’evapotranspiració

En un primer període, tal i com mostra la figura 1, el component més important de l’evapotranspiració és l’evaporació de la terra. Això passa perquè, al principi del cultiu, aquest ocupa molt poca part del terreny, pel que l’efecte de la radiació solar i de la temperatura són més elevats en el terreny que quan la planta comença a créixer i projectar ombra. A partir d’aquest moment, com més avancem en el temps, l’evaporació del terreny va decreixent mentres que l’efecte de la transpiració pren més protagonisme. El càlcul de l’evapotranspiració és un procés complexe i que requereix del coneixement de varies dades meteorològiques i de diferents factors que afecten als cultius i al terreny. Per aquest motiu la FAO a elaborat un procediment de càlcul estandarditzat.

1.4.2 Evapotranspiració de Referència (ETo)

Per tal de tenir un estàndard de càlcul de l’evapotranspiració sense dependre del cultiu ni el tipus de terreny s’utilitza el concepte d’evapotranspiració de referència. L’evapotranspiració de referència és l’evapotranspiració d’un terreny cultivat de pastura, amb una alçada determinada i amb abundància d’aigua.

"9

Page 10: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

L’avantatge de tenir com a referència la ETo és que depèn únicament de paràmetres climàtics, així podem determinar la demanda d’evapotranspiració de l’atmosfera independentment del que estigui cultivat. Per tant, per poder calcular-la només tindrem la necessitat de conèixer les dades climàtiques de temperatura, humitat relativa, radiació solar i velocitat del vent.

1.4.3 Evapotranspiració del Cultiu (ETc)

L’evapotranspiració del cultiu, al estar relacionada amb el cultiu, a part de estar afectada per les condicions meteorològiques, també es veu afectada per l’etapa de creixement del cultiu. L’avantatge de tenir definida i calculada l’evapotranspiració de referència és que podem relacionar els dos conceptes mitjançant el coeficient del cultiu (Kc). Aquest coeficient va variant depenent de l’estat de desenvolupament del cultiu. Per tant, per poder calcular l’evapotranspiració del cultiu també haurem de tenir coneixement de l’etapa de desenvolupament on es troba el cultiu.

1.4.3.1 Evapotranspiració del Cultiu sota Condicions Estàndard (ETc)

Es coneix com a evapotranspiració del cultiu sota condicions estàndard (ETc), l’evapotranspiració que pateix un cultiu que es troba en condicions òptimes d’espai i d’aigua, sense malalties, amb bona fertilització i que té una producció d’acord amb les condicions climàtiques de la zona. L’ETc es relaciona amb la ETo a través del coeficient del cultiu.

1.4.3.2 Evapotranspiració del Cultiu sota Condicions no Estàndard (ETc aj)

Pot passar, i en algun moment de les etapes del cultiu és freqüent, que el cultiu surti d’aquesta zona de “confort estàndard”. Això pot passar per diferents motius, com poden ser malalties, restricció d’aigua (involuntària o voluntària per part de l’agricultor) o excés d’aigua, salinitat del sòl… Quan ens trobem en aquesta situació la relació anterior amb la ETo ja no és vàlida, i es necessari introduir un factor de correcció. Aquest factor s’anomena coeficient d’estrés hídric (Ks)

1.4.3.3 Equació de FAO Penman-Monteith

Tal i com indica la FAO: “El mètode de FAO Penman-Monteith es recomana com l’únic mètode per a determinar l’evapotranspiració de referència ETo” (Roma, 2006). La FAO insisteix molt en la necessitat i idoneïtat de disposar d’un mètode estàndard per calcular la ETo. Com veurem, aquest mètode requereix de varies dades meteorològiques que poden ser mesurades directament o derivades d’altres dades.

"10

Page 11: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

L’equació de FAO Penman-Monteith és la següent:

(1)

ETo evapotranspiració de referència (mm / dia) Rn radiació neta en la superfície del cultiu (MJ / m2 dia) Ra radiació extraterrestre (mm / dia) G flux del calor del sòl (MJ / m2 dia) T temperatura mitja de l’aire a 2 m d’altura (oC) u2 velocitat del vent a 2 m d’altura (m / s) es pressió de vapor de saturació (kPa) ea pressió real de vapor (kPa) es - ea dèficit de pressió de vapor (kPa) ∆ pendent de la corba de pressió de vapor (kPa / oC) ! constant psicomètrica (kPa / oC)

Per poder realitzar els càlculs de l’ETo, a part de la localització, es requereixen dades de temperatura de l’aire, humitat atmosfèrica, radiació y velocitat del vent. Abans de parlar de les variables principals que afecten a la evapotranspiració, realitzaré la definició d’alguns paràmetres atmosfèrics. La pressió atmosfèrica (P) és la pressió exercida pel pes de l’atmosfera terrestre. Tot i que afecta a l’evapotranspiració, no és un paràmetre que la faci variar molt. Tot i aixó s’ha de tenir en compte.

(2)

P Pressió atmosfèrica (kPa) z Elevació sobre el nivell del mar (m)

La constant psicomètrica (!) és un altre paràmetre que cal conèixer. Es pot expressar de la següent manera: (3)

! constant psicomètrica (kPa / oC) P pressió atmosfèrica (kPa)

"11

Page 12: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

λ calor latent de vaporització (2,54 MJ / kg) cp calor específic a pressió constant (1,013x10-3 MJ / kg oC) " quocient del pes molecular de vapor d’aigua / aire sec (0,622)

Per tant, per poder calcular l’evapotranspiració cal conèixer l’elevació sobre el nivell del mar (altitud) del terreny on es troba el cultiu. També caldrà conèixer la latitud ja que això determina la insolació diària màxima. La latitud s’expressa en radiants amb valor positiu per l’hemisferi nord i valor negatiu per l’hemisferi sud. L’elevació sobre el nivell del mar en metres. A continuació es descriuran les dades meteorològiques necessàries per tal de poder calcular l’evapotranspiració de referència.

1.4.3.3.1 Temperatura

Es necessària l’adquisició de la temperatura diària màxima i mínima en graus centígrads (oC) per poder calcular varis paràmetres necessaris a l’hora de realitzar el càlcul de la evapotranspiració. És millor realitzar aquest càlculs amb els valors màxim i mínims, tot i que també es podrien fer amb el valor de la temperatura mitjana, ja que la pressió de vapor de saturació no té una relació lineal amb la temperatura.

Figura 2. Pressió de saturació del vapor en funció de la temperatura

1.4.3.3.2 Humitat

Pel càlcul de la evapotranspiració és necessari conèixer els valors de pressió real del vapor. Si aquests valors no es coneixen es poden calcular a partir de la temperatura i dels valors màxims i mínims de la humitat relativa.

"12

Page 13: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

(4)

1.4.3.3.3 Radiació

També necessitem conèixer els valors de radiació neta solar. Aquest valors normalment es calculen a partir dels valors de la radiació solar d’ona curta o de la duració de les hores d’insolació. En el primer cas es faria servir un piranòmetre i en el segon un heliògraf.

1.4.3.3.4 Velocitat del Vent

També es necessari tenir les dades de la velocitat mitja diària del vent en metres per segon (m/s) mesurada a 2 metres d’altura sobre el nivell del sòl. L’altura de la mesura del vent és important ja que en el mateix moment, a diferents altures, aquesta pot variar considerablement. El càlcul de l’evapotranspiració es realitza amb valors de velocitat del vent mesurada a 2 metres d’altura. Si aquesta mesura es realitza a una altra altura es pot ajustar a l’altura estàndard amb l’equació 19.

1.5 Evapotranspiració del Cultiu (Procediment de càlcul)

En aquest apartat es presentaran les equacions i el procediment de càlcul de l’evapotranspiració. Totes les equacions surten de bases teòriques que aquí no explicarem. Per més informació es pot consultar la publicació de la FAO anteriorment citada (totes les equacions estan extretes d’aquesta publicació). Per poder realitzar un càlcul i planificació del reg a nivell diari, cal conèixer les següents dades:

• Temperatura de l’aire (màxima i mínima diària). • Humitat de l’aire per tal de calcular la mitjana diària de la pressió real del vapor

(ea). • Velocitat del vent (valors mitjans diaris de vent mesurats a una altura de 2 m) • Radiació. Radiació neta diària (Rn) mesurada o calculada de la radiació solar de

ona curta i llarga o de la duració real de les hores diàries de insolació (n). Per tal de calcular la pressió de saturació del vapor a una temperatura determinada (eo(T)) es fa servir la següent equació:

(5)

eo(T) pressió de saturació de vapor a la temperatura de l’aire T (kPa) T temperatura de l’aire (oC) exp [..] 2,7183 (base logaritme natural) elevat a la potència [..]

"13

Page 14: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

La pressió mitja de saturació de vapor per un dia es calcula fent la mitjana de la pressió de vapor de saturació a la temperatura màxima i a la temperatura mínima:

(6)

Com hem vist a l’equació 1, per tal de calcular la ETo també necessitem conèixer el pendent de la corba de pressió de saturació del vapor (∆), que ve donada per la següent formula:

(7)

∆ pendent de la corba de la pressió de saturació de vapor a la temperatura del aire T (kPa / oC) T temperatura de l’aire (oC) exp [..] 2,7183 (base logaritme natural) elevat a la potència [..]

La pressió real del vapor (ea) ve expressada per:

(8)

ea pressió real de vapor (kPa) eo(Tmin) pressió de saturació de vapor a la temperatura mínima diària (kPa) eo(Tmax) pressió de saturació de vapor a la temperatura màxima diària (kPa) HRmax humitat relativa màxima (%) HRmin humitat relativa mínima (%)

També necessitem conèixer la radiació neta en la superfície del cultiu: (9)

Rn radiació neta en la superfície del cultiu (MJ / m2 dia) Rns radiació neta d’ona curta (MJ / m2 dia) Rnl radiació neta d’ona llarga (MJ / m2 dia)

"14

Page 15: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

La radiació d’ona curta es pot relacionar amb la radiació solar entrant: (10)

Rns radiació neta solar o d’ona curta (MJ / m2 dia) # albedo o coeficient de reflexió del cultiu, que és 0,23 per al cultiu hipotètic de referència (adimensional) Rs radiació solar entrant (MJ / m2 dia)

A la vegada, la radiació solar entrant (Rs) es calcula de la següent manera:

(11)

Rs radiació solar entrant (MJ / m2 dia) n duració real de la insolació (hores) N duració màxima possible de la insolació (hores) n/N duració relativa de la insolació Ra radiació extraterrestre (MJ / m2 dia) as constant de regressió as+bs fracció de la radiació extraterrestre que arriba a la terra en dies clars (n = N)

Els valors de la constant de regressió i de la fracció de la radiació extraterrestre es poden ajustar a as = 0,25 i bs = 0,50. La radiació extraterrestre (Ra) ve donada en funció de la latitud i del dia de l’any:

(12)

Ra radiació extraterrestre (MJ / m2 dia) Gsc constant solar = 0,082 MJ / m2 min dr distància relativa inversa Terra-Sol ωs angle de radiació a la posta del sol (rad) $ latitud [rad] δ declinació solar [rad].

"15

Page 16: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

La distància relativa inversa Terra-Sol (dr) i la declinació solar (δ) venen donades per: (13)

(14)

on J és el número de dia de l’any

J es pot determinar per a cada dia (D) del mes (M) fent servir:

(15)

si M < 3 llavors J = J + 2 o si any de traspàs i M > 2 llavors J = J + 1

L’angle de radiació a la posta de sol ωs:

(16)

La radiació neta d’ona llarga (Rnl) es calcula utilitzant la següent equació:

(17)

Rnl radiació neta d’ona llarga (MJ / m2 dia) % constant de Stefan-Boltzmann (4,903 x 10-9 MJ / K4 m2 dia) Tmax,K temperatura màxima absoluta durant un període de 24 hores (K) Tmin,K temperatura mínima absoluta durant un període de 24 hores en (K) ea pressió de vapor real (kPa) Rs/Rso radiació relativa d’ona curta (valors ≤ 1,0) Rs radiació solar mesurada o calculada (MJ / m2 dia) Rso radiació en un dia clar (MJ / m2 dia)

"16

Page 17: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

La radiació en un dia clar (Rso), quan n = N, pot ser calculada de la següent forma:

(18)

z elevació de l’estació sobre el nivell del mar (m)

Per calcular l’ETo també necessitem la dada de fluxe de calor del sòl (G). Segons la publicació nº 56 de la serie “Estudio FAO Riego y drenaje”, s’explica que aquesta dada pot ser ignorada ja que és relativament petita. Pel que fa a la velocitat del vents, dada també necessària per poder calcular l’ETo, ha de ser mesurada a una altitud de 2 metres del terra. En el cas que això no pogués dur-se a terme, es poden ajustar les dades de velocitat del vent obtingudes a altures diferents de l’estàndard:

(19)

u2 velocitat del vent a 2 m sobre la superfície (m / s) uz velocitat del vent mesurada a z m sobre la superfície (m / s) z altura de mesura sobre la superfície (m)

1.5.1 Càlcul de l’Evapotranspiració del Cultiu en Condicions Estàndard (ETc)

Un cop es té l’evapotranspiració de referència (ETo) ja es pot calcular l’evapotranspiració del cultiu en condicions estàndard (ETc). Per calcular l’ETc anteriorment he comentat que es fa servir el coeficient del cultiu. Depenent de si la planificació del reg és mensual o diària a temps real, es farà servir el coeficient únic del cultiu (Kc) o el coeficient dual del cultiu (Kcb+ Ke). El coeficient dual del cultiu és més complexe de calcular però es fa necessari en les planificacions de reg en temps real. Seguint aquest mètode Kc = Kcb + Ke.

1.5.1.1 Càlcul del Coeficient Basal del Cultiu (Kcb)

Per tal de poder calcular els diferents valors de Kcb per un cultiu s’ha de conèixer la duració de les etapes de creixement del cultiu en qüestió, ja que aquest variarà depenent de la etapa en la que ens trobem (degut a que la planta creix i es desenvolupa). En el quadre A1.1 de l’annexe 1 es poden observar la duració de les etapes inicial, de desenvolupament, de mitjans de temporada i final de diversos cultius i per diferents tipus de clima i localitats. La corba del coeficient basal del cultiu, es pot traçar mitjançant solament tres valors, el corresponents a l’etapa inicial (Kcb ini), l’etapa de mitjans de temporada (Kcb med) i l’etapa final (Kcb fin). Durant tota l’etapa inicial el valor de Kcb serà el valor de Kcb ini. Durant l’etapa de desenvolupament, el valor anirà augmentat fins arribar al valor de Kcbmed.

"17

Page 18: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

Durant l’etapa de mitjans de temporada el valor de Kcb es mantindrà i al final de la temporada disminuirà fins arribar al valor Kcb fin.

Figura 3: Corba del coeficient del cultiu

En el quadre A1.2 de l’annexe 1 podem veure els valors de Kcb ini, Kcb med i Kcb fin per diferents tipus de cultius. En climes on el valor de HRmin sigui diferent a 45% o on la velocitat del vent sigui major o menor a 2 m/s els valors de Kcb med i Kcb fin que siguin majors de 0,45 s’hauran d’ajustar utilitzant la següent equació:

El valor de Kcb per cada dia de la temporada es calcula amb l’equació 21

(21)

i número de dia dins de la temporada de creixement Kcb i coeficient del cultiu per al dia i Letapa duració de l’etapa considerada (dies) ∑(Lprev) suma de les duracions de les etapes prèvies (dies) Kcb prev coeficient del cultiu per l’etapa anterior Kcb prox coeficient del cultiu per l’etapa pròxima

"18

Page 19: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

1.5.1.2 Càlcul del Coeficient de l’Evaporació (Ke)

Amb el coeficient Ke es dona magnitud a l’evaporació del sòl. Aquest valor variarà segons la quantitat d’aigua que hi hagi al sòl (serà elevat després d’un reg o una pluja). (22)

Ke coeficient de l’evaporació en el sòl Kcb coeficient basal del cultiu Kc max valor màxim de Kc després del reg o la pluja Kr coeficient adimensional de reducció de l’evaporació, depenent de la làmina acumulada d’aigua esgotada (evaporada) de la capa superficial del sòl. few fracció de la superfície del sòl a partir de la qual succeeix la major part de l’evaporació min [ ] valor màxim dels paràmetres separats per una coma

Aquest valor té un valor màxim expressat per la següent equació:

(23)

h altura màxima mitjana de les plantes durant el període de càlcul considerat (etapes inicial, desenvolupament, mitjans de temporada o final) (m) Kcb coeficient basal del cultiu max ( ) valor màxim dels paràmetres separats per una coma Aquí ens trobem amb un nou coeficient. El coeficient Kr . Aquest coeficient és el coeficient de reducció de l’evaporació. Expressa per tant les fluctuacions de la evaporació del sòl. Per realitzar el càlcul de Kr s’ha de fer un balanç diari d’humitat en la capa superficial del sòl. Quan la superfície del sòl es troba humida el valor de Kr és igual a 1. Aquest valor disminueix i pot arribar a zero a mesura que el sòl es va assecant. L’aigua evaporable total (AET) varia segons el tipus de terra. En el quadre 1 es poden veure diferents valors.

(24)

"19

Page 20: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

Kr coeficient adimensional de reducció de l’evaporació De, i-1 làmina acumulada d’evaporació (esgotament) en la capa superficial del sòl al final del dia anterior (mm) AET aigua evaporable total (mm) AFE aigua fàcilment evaporable (mm)

Quadre 1. Característiques típiques de l’humitat del sòl per a diferents tipus de sòl

Un altre valor que necessitem és la fracció exposada i humitejada del sòl few.

Aquesta variarà segons el tipus de reg que s’utilitzi o segons si ha plogut o no . S’expressa com el mínim entre (1-fc), on fc és la fracció mitjana de la superfície del sòl que està coberta per la vegetació, i fw, que representa la fracció de la superfície del sòl que es mulla a través del reg. Per tant few es calcula com:

(25)

1-fc fracció exposada mitjana del sòl que no es troba coberta per vegetació [0,01 - 1] fw fracció mitjana de la superfície del sòl mullada pel reg o pluja [0,01 - 1]

Quadre 2. Valors comuns de fw

"20

Page 21: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

La fracció del sòl coberta per la vegetació es denomina fc, per tant el terme (1-fc) representa la fracció del sòl que es troba exposada a la llum solar. El valor de fc ha de ser inferior a 0,99. Aquesta es pot estimar de la següent manera:

(26)

fc fracció efectiva de la superfície del sòl que es troba coberta per vegetació [0 - 0,99] Kcb valor del coeficient basal del cultiu per un dia o període particular Kc min valor mínim de Kc pel sòl sense cobertura i sec [≈ 0,15 - 0,20] Kc max valor màxim de Kc immediatament després de l’humitejament h altura mitjana de la planta [m]

Quadre 3: Valors comuns de fc i 1-fc

Per calcular Ke es requereix del càlcul del balanç diari de l’aigua present en la capa superficial del sòl per tal de determinar la làmina acumulada d’evaporació o esgotament.

(27)

De,i-1 làmina acumulada d’evaporació (esgotament) després d’un humitejament complet, originada a partir de la fracció exposada i humitejada de la porció superior del sòl al final del dia i-1 (mm) De,i làmina acumulada d’evaporació (esgotament) després d’un humitejament complet al final del dia i (mm) Pi precipitació en el dia i (mm) ROi escorriment de l’aigua precipitada en el dia i (mm) Ii làmina de reg en el dia i (mm) Ei evaporació en el dia i (o sigui Ei = Ke * ETo) (mm)

"21

Page 22: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

Tew,i làmina de transpiració que succeeix en la fracció exposada i humitejada de la capa superficial del sòl en el dia i (mm) DPe,i pèrdues per percolació profunda que succeeixen a partir de la capa superficial del sòl en el dia i, quan el contingut de la humitat excedeix la capacitat de camp (mm) fw fracció mitjana de la superfície del sòl mullada pel reg o pluja [0,01 - 1] few fracció exposada i humitejada del sòl [0,01 - 1]

Per iniciar el càlcul del balanç d’aigua en la capa superficial del sòl, es pot assumir que si s’ha regat ho ha plogut De,i és igual a 0 i que si ha passat un període llarg des de l’últim reg o pluja, De,i és igual a AET. Segons explica la FAO, el valor de ROi es pot considerar 0 quan es realitza el balaç d’aigua en la capa superficial del sòl ja que si plou de manera que provoqui escorriment, al mateix temps farà que el balanç d’aigua sigui 0, i pluges amb poca intensitat no produiran pràcticament escorriment. La làmina Tew també es pot considerar 0. Per tant es pot assumir la següent equació:

(28)

El drenatge (percolació) d’aigua a partir de la capa superficial del sòl es calcula:

(29)

1.5.2 Càlcul de l’Evapotranspiració del Cultiu en Condicions no Estàndard (ETc aj)

El que és normal en cultius on no els hi falta aigua i estan ben cuitats és que la evapotranspiració del cultiu sigui igual a la calculada anteriorment. Tot i això pot ser que el cultiu surti temporalment de les condicions estàndard i s’hagi d’aplicar un factor de correcció. També en els casos en que més d’un cultiu es desenvolupen conjuntament, els valors d’evapotranspiració poden ser diferents que en els que un cultiu creix en condicions estàndard de monocultiu.

1.5.2.1 Càlcul ETc sota Condicions d’Estrés Hídric

Quan el valor d’aigua disponible per la planta està per sota d’un valor determinat es diu que el cultiu està estressat. Això fa variar la evapotranspiració del cultiu, pel que s’ha d’ajustar al nou valor

"22

Page 23: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

(30)

Quan no es dona la situació descrita anteriorment el valor de Ks és 1. Sinó, el seu valor disminueix, ja que la planta no té tanta aigua, pel que transpira menys. El terre té una capacitat determinada per retenir aigua. Es coneix com a ADT (aigua disponible total), aquesta capacitat en la zona radicular de les plantes. (31)

&FC contingut d’humitat a capacitat de camp (m3 m3) &WP contingut d’humitat en el punt de marciment permanent (m3 m3) Zr profunditat arrels (m3)

D’aquesta quantitat d’aigua, n’hi ha una part que la planta pot extreure sense patir estrés hídric. Aquesta quantitat s’anomena aigua fàcilment aprofitable (AFA) (32)

p fracció mitjana del total d’aigua disponible en el sòl (ADT) que pot ser esgotada de la zona radicular sense estrés hídric [0 - 1]

En el quadre A1.3 de l’annexe 1 es poden veure valors de p per diferents cultius.

El coeficient d’estrés hídric pot ser calculat de la següent manera:

(33)

o Dr esgotament de la humitat en la zona radicular (mm)

Igual que per Ke, per calcular Ks cal realitzar un balanç diari de la humitat de la zona radicular. Aquest es pot expressar en termes d’esgotament al fina del dia:

(34)

Dr,i esgotament de humitat en la zona radicular al final del dia i (mm) Dr,i-1 contingut de humitat en la zona radicular al final del dia i-1 (mm) Pi precipitació en el dia i (mm) ROi escorriment superficial en el dia i (mm)

"23

Page 24: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

Ii làmina de reg en el dia i (mm) CRi ascens capil·lar provinent de l’aigua subterrània en el dia i (mm) ETc,i evapotranspiració del cultiu en el dia i (mm) DPi perdues d’aigua de la zona radicular per percolació profunda en elñ dia i (mm) Igual que abans, després d’una pluja important o un reg l’esgotament inicial és zero (Dr,i-1 = 0.).

Després d’un pluja abundant o reg es pot considerar que:

(35)

A partir del moment que Dr,i > 0 el valor de DPi = 0.

1.5.2.2 Càlcul ETc per a Cultius Intercal·lats

Fins ara, els càlculs de Kcb s’han realitzat tenint em compte una plantació d’un sòl cultiu. Tot i que el disseny es fa per horta, on els valors de Kcb no difereixen excessivament entre la majoria del cultius, el fet d’intercalar varis cultius en una mateixa plantació fa que aquest valor varii. Aquesta variació seria més important en el cas de que es tractessin de cultius amb diferències d’alçada i cobertura vegetal grans. Primer s’haurà de ajustar el valor de Kcb max. Aquest valor es calcularà utilitzant l’altura del cultiu de major altura (utilitzant la equació 23). Després, per obtenir el valor de Kcb diari general per a tots els cultius, es realitzarà la mitjana ponderada dels valors de Kcb diaris de cada cultiu segons el tant per cent de superfície que ocupi cada cultiu.

1.6 Càlcul del Reg

Un cop tenim calculada la ETc a través del càlcul dual del cultiu i realitzem els ajustaments necessaris en cas que no es trobi en les condicions estàndard (ETcaj), ja sabem l’aigua que la planta i el terra han perdut diàriament. Es requereix reg quan la quantitat d’aigua aportada per la pluja és insuficient per compensar la pèrdua per evapotranspiració. Per tal de poder determinar el calendari de reg es pot utilitzar el càlcul del balanç diari d’aigua present en la zona radicular del sòl Dr,i (equació 34). Això ens permet aplicar el reg en el moment precís i en la quantitat precisa. Per tal d’evitar estrés hídric cal aplicar reg quan Dr,i és menor o igual a AFA i per tal d’evitar pèrdues per percolació la quantitat de reg a de ser igual o menor de Dr,i. Ara ja sabem quan i en quina quantitat hem de regar. La quantitat d’aigua a aportar que necessiten les plantes s’anomena Necessitats Netes de Reg. El reg real que haurem d’aplicar però, serà una mica més elevat i s’anomena Necessitats Brutes de Reg. Aquesta diferència és deguda a la eficiència del sistema de reg (Ea).

"24

Page 25: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

(36)

NBR necessitats brutes de reg (mm) NNR necessitats netes de reg (mm) Ea eficiència del reg

El sistema es configurarà per a reg per goteig ja que és el que s’acostuma a utilitzar en els horts familiars. Es considera que un sistema de reg per goteig té una eficiència del 90%. Un cop sabem la quantitat bruta ja podem procedir al reg. Tant l’evapotranspiració com el balanç diari d’aigua en la zona radicular venen expressat en mil·límetres (mm) per unitat de temps (en el nostre cas per dia). Això expressa la quantitat d’aigua perduda d’una superfície cultivada en unitats d’altura d’aigua. Per exemple, si diem que s’ha perdut 1 mm en una superfície de 1000 m2, com que un mil·límetre són 0,001 m, estem expressant que s’ha perdut 1 m3, que equival a 1000 litres d’aigua. Per tal de poder calcular els temps de reg, al tractar-se d’un reg per goteig, cal conèixer el caudal del sistema de reg i la quantitat de goters per metre quadrat. En els sistemes de reg per goteig, principalment hi ha dos tipus de goters, els normals i els autocompensants. Els caudal dels goters normals ve donat en funció de la pressió del sistema de reg, mentres que el dels autocompensants és un caudal fixe, ja que compensa les variacions de pressió del sistema. en els primers, el fabricant ens indicarà la relació entre la pressió i el caudal. Un cop sabem el caudal de cada goter, calcularem quants goters hi ha per metre quadrat (distància entre els goters de cada fila i els de la fila contigua). Aquest valor dependrà de com l’usuari ha dissenyat l’hort i serà una dada que haurà d’introduir, igual que la del caudal per goter. Ara ja sabrem el caudal del sistema de reg per m2 de superfície. Amb això ja podrem calcular el temps de reg necessari:

(37)

on Trn temps de reg necessari (h) NBR necessitats brutes de reg C caudal del sistema de reg per m2 (l / h)

"25

Page 26: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

1.7 Descripció del Sistema

El prototip està format per tres grans blocs funcionals: - Mòdul de control: Format per el microcontrolador (en el nostre cas el PIC24FJ64GB002), la interfície d’entrada de dades de l’usuari (polsadors) i la memòria. - Mòdul d’adquisició: Format per els diferents sensors (temperatura, humitat, velocitat del vent, insolació i pluja). - Mòdul de visualització: Format per una pantalla LCD i dos leds, un que indica que el sistema està funcionant i l’altre que indica si s’està regant. Al inicialitzar-se el sistema, l’usuari ha d’introduir la data i hora actuals, el cultius que vol cultivar dins d’una gamma, el tipus de terreny i els goters per m2 i el seu caudal. A partir d’aquest moment el sistema ja no requereix de més intervenció per part de l’usuari. Calcula diàriament la evapotranspiració del cultiu, realitza el balanç de l’aigua i en el cas que sigui necessari regar activa el sistema de reg.

Figura 4. Esquema de blocs del sistema

1.7.1. Sensor de Temperatura DS18B20

Entre els sensors de temperatura existent hi ha una àmplia gamma que utilitza diferents tipus de tecnologia. Els principals tipus de sensors són els termistors, termopars, termoresistències i semiconductors. Es descarta utilitzar un termopar ja que degut a que té un ampli rang de temperatura (molt més gran del que necessita l’aplicació), suposaria disposar d’una baixa precisió.

"26

Pluja

Vent

Temperatura

Humitat

Pantalla LCD

Entrada dades

Memòria

Insolació

Sistema de reg

Microcontrolador

Page 27: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

Tot i que hi ha diferents opcions vàlides i potser més econòmiques, al final me decantat per utilitzar el sensor de temperatura DS18B20+ de Màxim Integrated (Dallas Instruments). Me decantat per aquest sensor perquè té una bona precisió de mesura, ±0.5 ºC en el rang de temperatures que mesurarà i perquè és un sensor digital. Això fa que les dades siguin fàcilment interpretables per el microcontrolador i que no faci falta cap etapa per adaptar la senyal. Com ja he comentat, aquest sensor te un preu algo més elevat que altres sensors que s’han consultat, però, tot i voler fer un sistema econòmic, aquest augment no afecta gaire el preu total del producte ja que hi han sensors molt més cars.

Figura 5. DS18B20

També s’ha trobat molt interessant (a nivell acadèmic i per a futures ampliacions de l’aplicació) que incorpori el protocol de comunicació 1-wire. Aquest protocol és un sistema de comunicació que permet, a través d’un sol canal, comunicar varis dispositius fins a una distància bastant elevada (uns 200 metres). Per l’aplicació actual, a part de només necessitar un pin per connectar-lo al microcontrolador, no té molta importància, però he trobat interessant familiaritzar-me amb aquest protocol ja que permetria incloure en el projecte sensors d´humitat de la terra, que permetrien mesures interessants per tal de complementar les ja presses. Gràcies a aquest sistema es podrien instal·lar varis sensors controlats només amb un pin i a distàncies elevades. En un apartat següent es descriurà més detalladament el bus 1-wire, les seves característiques principals i el seu protocol. 1.7.2. Sensor d’Humitat

S’ha optat per el sensor HIH-4010 de Honeywell. Aquest sensor és un sensor capacitiu de polímer termoestable amb condicionament de senyal incorporat. Té una resposta de voltatge aproximadament lineal respecte la humitat relativa, compensable segons la temperatura.

Figura 6. HIH-4010

"27

Page 28: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

Aquest sensor es ratiomètric, això vol dir que la resposta a la humitat relativa està directament relacionada amb el valor de la tensió d’alimentació del dispositiu. El sensor que s’utilitzaria per la versió definitiva del sistema seria el HIH-5030 de la mateixa casa, ja que té les mateixes prestacions que el HIH-4010 amb la diferència que pot operar a 3.3 V (voltatge permés per als pins analògics del microcontrolador), mentres que el HIH-4010 opera a valors mínims de 4.5 V. Això fa que s’hagi d’adequar la senyal perquè la pugui processar el microcontrolador. A part, el HIH-5030 és més econòmic. No s’ha utilitzat aquest últim sensor ja que és de muntatge superficial i en el projecte es realitza un prototip en placa perforada. Aquest canvi de sensor no modificaria substancialment ni el hardware ni el software del projecte, ja que opera de forma idèntica que l’actual, simplement canviant els nivells de tensió.

1.7.3. Sensor de Radiació

Per mesurar la radiació solar s’utilitzen piranòmetres. El problema dels piranòmetres és que tenen un cost molt elevat. Per tant, s’ha buscat una alternativa a aquests. Com que la radiació solar es pot calcular a partir de les hores de sol diàries reals (insolació diària), es pot utilitzar o una fotoresistència o un fotodíode com si fossin un heliògraf. Finalment es decideix utilitzar el sensor TSL253-R de Texas. Aquest sensor està compost per un fotodíode i un conversó de corrent a freqüència. Com a resultat proporciona com a senyal de sortida una freqüència proporcional a la irradiància.

Figura 7. TSL235R

El fet que la resposta sigui proporcional a la irradiància fa plantejar-se poder mesurar directament la radiació solar. Aquesta opció es descarta ja que les longituds d’ona que avarca no són exactament les de la radiació solar. El 97% de l’energia solar que arriba a l’atmosfera està dins l’interval espectral de 290nm-3000nm (veure figura 8), mentres que el fotodíode del sensor avarca longituds d’ona des de 300nm a 1100nm. Això, junt a que la resposta del sensor a les diferents longituds d’ona no és homogènia (la responsivitat del fotodíode varia entre valors de 0 a 1.2) fa que sigui molt difícil poder adquirir valors reals d’irradiància solar sense errors considerables. El sensor s’utilitzarà per mesurar la insolació diària, fent la funció que fa un heliògraf. Com que la resposta del sensor a una determinada configuració de la llum solar sempre és la mateixa, amb aquest mètode, encara que no podem sensar totes les longituds

"28

Page 29: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

d’ona de la radiació solar, es pretén poder determinar la seva resposta a la llum corresponent a un dia clar, que és el que necessitem per tal de poder derivar el valor de radiació solar corresponent.

Figura 8. Espectre de la radiació solar

1.7.4 Anemòmetre

L’instrument que s’utilitza per mesurar la velocitat del vent és l’anemòmetre. N’hi ha de diferents tipus i els més comuns són: de cassoleta, de molinet, de filferro calent i sònic. Els de cassoleta i d’hèlix tenen funcionaments similars. Relacionen la velocitat angular de rotació de l’eix amb la velocitat del vent. La principal diferència és que el de cassoleta consta de tres cassoletes que giren amb el vent, disposició que fa que no necessiti estar orientat cal vent, mentres que el de molinet fa rotar una hèlix i necessita estar orientat (això es soluciona incorporant un penell). El de filferro calent, sovint de tungstè, funciona calentant un filferro molt fi per damunt de la temperatura ambient. Segons el vent que faci aquest filferro es refredarà més o menys i com que hi ha una relació entre la temperatura del filferro i la resistència d’aquest es pot relacionar el vent amb la resistència elèctrica. El sònic es basa en que la velocitat de propagació del so depèn de la velocitat del vent. Funcionen mesurant el temps que tarda una senyal de so a recórrer una distància coneguda.

Figura 9. Anemòmetre de cassoletes

"29

Page 30: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

L’anemòmetre que s’utilitzarà serà un de cassoletes. Aquest incorpora un reed switch que amb el gir de l’anemòmetre es tanca dues vegades per cada volta. El fabricant del anemòmetre proporciona una relació entre tancament del reed switch i velocitat del vent.

1.7.5. Pluviòmetre L’instrument que s’utilitza per mesurar la quantitat de precipitació durant un període determinat és el pluviòmetre. De pluviòmetres bàsicament n’hi ha de dos tipus, totalitzadors o de balancí. El totalitzador consta d’un recipient, normalment alt i prim, amb un embut que recull l’aigua precipitada. N’hi ha de manuals, on l’usuari ha de mirar, mitjançant una regla calibrada, la quantitat d’aigua precipitada manualment i també n’hi ha d’electrònics que mesuren la diferència de conductivitat segons el nivell d’aigua acumulada. Aquests anemòmetres presenten l’inconvenient de que s’han d’anar buidant quant arriben al seu límit superior i que l’evaporació de l’aigua en cas de temperatures i radiació solar elevades poden subestimar la precipitació acumulada. El pluviòmetre de balancí consisteix en un balancí dins d’una carcassa que recull l’aigua i mitjançant un embut la dirigeix a ell. Aquest balancí, un cop ple una de les pales balanceja, obtenint el valor d’aigua precipitada comptant els balancejos efectuats ja que es coneix la capacitat de cadascuna de les pales. Aquest pluviòmetre té l’avantatge que no cal buidar-lo ja que ho fa automàticament.

Figura 10. Pluviòmetre de balancí

El pluviòmetre que farem servir per aquest projecte és de balancí. Igual que l’anemòmetre, té un reed switch que es tanca cada vegada que bascula el balancí i la capacitat de cada pala ve indicada pel fabricant.

1.7.6. Pantalla LCD

El sistema incorporarà una pantalla LCD per tal de mostrar el menú d’entrada de dades per l’usuari. En el prototip s’utilitzarà una pantalla LCD alfanumèrica de 2x16. LCD triat està basat en un microcontrolador compatible amb el HITACHI 44780, amb un mateix joc d’instruccions i una inicialització similar.

"30

Page 31: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

LCD triat, per raons de disponibilitat, s’ha d’alimentar a 5V, pel que es connectarà als pins del microcontrolador que toleren aquesta tensió. Això es fa per seguretat ja que realment no és necessari, perquè només es realitzen escriptures al LCD. Per models definitius seria interessant utilitzar LCD’s a 3,3V ja que actualment n’hi ha de disponibles en el mercat.

Figura 11. LCD alfanumèric 16x2

1.7.7. Memòria EEPROM

El sistema de reg que s’implementa recull les dades meteorològiques cada hora i al final del dia les utilitza per calcular la pèrdua d’aigua per evapotranspiració. Amb aquesta dada es calcula el balanç d’aigua del terreny (utilitzant també dades calculades el dia anterior) i determina si és necessari regar i la quantitat d’aigua (temps de reg) que s’ha de realitzar.

Figura 12. Memòria EEPROM 24LC256

Durant l’execució normal del microcontrolador, la necessitat d’aquestes dades no planteja cap problema ja que estan disponibles i actualitzades per el mateix programa. El problema es planteja en el cas que es realitzi una reinici en el microcontrolador (a causa de una fallada d’alimentació o per altres motius). En aquest cas, el microcontrolador reinicialitzaria el sistema arrencant de zero, perdent les dades actualitzades pel que el balanç d’aigua que calcularia no sería correcte. Per aquest motiu es decideix incloure una memòria EEPROM per tal d’emmagatzema les dades necessàries. Aquestes dades s’actualitzaran periòdicament. La memòria EEPROM triada és la 24LC256 de Microchip. Es tracta d’una memòria de 256kbits que pot operar en un rang de 1.7V a 5.5V i que es comunica a través d’un bus I2C. S’utilitzarà una memòria EEPROM externa ja que el PIC24FJ64GB002 no

"31

Page 32: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

disposa de memòria EEPROM de dades interna. Es podia emular una memòria de dades EEPROM (utilitzant part de la memòria de programa Flash del microcontrolador) segons indica el mateix Microchip en la Nota d’Aplicació AN1095 “Emulating data EEPROM”. Finalment però, es decideix utilitzar una memòria externa.

1.7.8. Microcontrolador

S’ha optat per a utilitzar un microcontrolador de la casa Microchip per la seva versatilitat, per la disponibilitat de perifèrics integrats dins del mateix xip i perquè és un microcontrolador al que ja estic familiaritzat al utilitzar-lo en varies assignatures de la carrera. Per tal de realitzar el projecte s’ha optat per adquirir la plataforma de desenvolupament per a microcontroladors de 16 i 32 bits Microstick II. Aquesta eina té un cost baix i és fàcil d’utilitzar. Té un kit de connexió USB que inclou un depurador/programador i està dissenyat per la seva inserció en una placa de prototipat, molt útil per a la connexió als circuits durant la fase de elaboració del projecte. Això també facilita poder realitzar la feina des de l’ordinador de casa. El paquet Microstick II inclou també quatre microcontroladors, un PIC24F, un PIC24H, un dsPIC33 i un PIC32. Per l’aplicació que necessitem desenvolupar descartem el dsPIC32 i el PIC32 (no necessitem prestacions dsp ni tampoc un pic de 32 bits). El PIC24H i el PIC24F són molt similars, tenen més o menys els mateixos perifèrics i el PIC24H és més ràpid. Com que amb tots dos pic’s es pot desenvolupar el projecte sense diferències circumstancials, finalment s’opta per el PIC24FJ64GB002, ja que la velocitat no és un factor important per l’aplicació i és més econòmic.

Figura 13: Microstick II

1.7.8.1. PIC24FJ64GB002

El pic que s’ha triat té les següent característiques:

- Arquitectura Harvar modificada - Fins a 16 MIPS d’operació (32 MHz) - Oscil·lador intern amb un 0.25% de precisió - 96 MHz PLL - Un rang de voltatge de 2.0V a 3.6V - Auto-programable sota control de software

"32

Page 33: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

- Pins tolerants a 5.5V (només els pins digitals) - Línies d’entrada i sortida d’alt corrent (18mA) en tots els pins - Memòria de programa Flash - Com a mínim 20 anys de retenció de dades - Pot detectar la fallada del rellotge i seleccionar el oscil·lador FRC - Regulador a 2.5V intern - Dos Watchdog Timers. - In-Circuit Serial Programming™ (ICSP™) and In-Circuit Debug (ICD) a

través de 2 pins

Com a perifèrics disposa de:

- Mòdul ADC de 10 bits amb 13 canals de conversió analògica -digitals. Conversió disponible durant els modes Sleep i Idel i tres comparadors analògics

- Selecció de pin perifèric que permet associar diferents pins a diferents perifèrics

- Port paral·lel de 8 bits (PMP/PSP) - Rellotge a temps real implementat per hardware (RTCC), amb funcions de

calendari i alarma - 2 mòduls SPI de 3 o 4 canals amb FIFO de 8 nivells - 2 mòduls I2C que poden operar en mode de varis mestres i esclaus amb

adreça de direccionament de 7 o 10 bits - 2 mòduls UART - 5 Timers de 16 bits amb preescalat programable - 5 mòduls de Captura d’entrada amb timer dedicat - 5 comparadors/ moduladors d’amplada de polsos (PWM) amb timer dedicat - Generador programable de CRC de 32 bits - 3 fonts d’interrupció externa

Figura 14: PIC24FJ64GB002

"33

Page 34: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

S’ha triat aquest microcontrolador ja que té varis perifèrics integrats que ens seran molt útils pel desenvolupament del projecte. Els perifèrics que utilitzarem seran:

- Captura d’entrada amb timer dedicat, per realitzar la lectura de la freqüència de sortida del TSL235R.

- El RTCC, que servirà per tenir un control del temps i de les dates de cultiu. - El convertidor ADC, que utilitzaré per adquisició de l’humitat relativa

proporcionada per el HIH 4010. - El mòdul CRC, per comprovar la validesa de les dades obtingudes del

DS18B20 sense haver-ho d’implementar per software. - El mòdul I2C, per comunicar-se amb la memòria EEPROM. - Dos fonts d’interrupció externa per adquirir les dades del pluviòmetre i

l’anemòmetre.

1.7.9 Descripció del programa

A continuació es farà una breu descripció del flux del programa. Per veure-ho en més detall mirar en els annexes els diagrames de flux i el codi de programació.

1.7.9.1 Inicialització

En una primera part s’inicia la configuració del microcontrolador. S’estableix com a oscil·lador l’oscil·lador intern del pic de 8 MHz i el LPRC (oscil·lador intern de baix poder) com a temps base per al rellotge a temps real (RTCC). Es configuren els pins (entrada o sortida, digital o analògic…), s’inicialitzen els perifèrics que s’utilitzen i s’estableix l’orde de prioritats de les interrupcions. Seguidament s’inicialitza la pantalla LCD en mode 4 bits. En aquest moment el microcontrolador comprova si és troba davant d’una nova execució del dispositiu per a iniciar el control de reg o si ha sofert un reinici en mig d’un procés de control de reg. Si es tracta del primer cas el microcontrolador demana a l’usuari que introdueixi les següents dades:

- La data i hora actual - El dia que l’usuari vol plantar el cultiu - Els cultius que vol plantar. Aquest es troben limitats per els existents dins de

la programació i per la temporada en la que s’està (hivern o estiu). - La superfície que ocuparà cada cultiu (en %) - El tipus de sòl - La latitud i l’altitud (elevació sobre el nivell del mar) - El caudal de cada goter i la distància entre goters (entre goters de la mateixa

fila i entre columnes

"34

Page 35: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

A continuació el programa calcula la data de finalització del cultiu (en base als cultius introduïts i realitza el càlcul de les dades inicials. En el cas que el dispositiu detecti que s’ha produït un reinici en mig del control de reg d’un cultiu, accedeix a la memòria EEPROM i descarrega totes les dades del dia anterior i les dades meteorològiques acumulades del dia, actualitza les dades en el programa i continua l’execució normal, mostrant per pantalla que hi ha hagut un error. En tots dos casos s’estableixen les alarmes corresponents en el RTCC i la hora de reg depenent de la temporada.

1.7.9.2. Execució normal del programa

A partir d’aquest moment el programa passa a mesurar la insolació diària. Aquesta es mesura en base a hores. Quan la freqüència que entrega el TSL235R supera un llindar determinat el programa guarda l’hora actual. En el moment que la freqüència passa a ser inferior a aquest valor, es torna a adquirir l’hora i es realitza la diferència. En el cas que torni a passar aquesta seqüencia el programa executa el mateix i després suma els intervals de temps. El RTCC està programat perquè s’executi una alarma cada hora. Quan això passa el programa deixa de mesurar la insolació i:

- Mesura la temperatura i estableix si és màxima o mínima (o cap de les dues) en base a les temperatures mesurades fins al moment

- Mesura l’humitat i estableix si és màxima o mínima (o cap de les dues) en base a les temperatures mesurades fins al moment

- Adquireix la insolació mesurada fins aquest moment - Les mesures de la velocitat del vent i de l’anemòmetre es fan per interrupció

A continuació mira si són les 12 de la nit o no. En el cas que no ho siguin, guarda a la memòria EEPROM les dades de temperatura i humitat màximes i mínimes, les hores d’insolació i els valors dels comptadors de precipitació i vent. A continuació torna a mesurar la insolació fins que s’activi la següent alarma. En el cas que siguin les 12 de la nit passa a calcular l’evapotranspiració del dia i el balanç d’aigua. En aquest moment és quan calcula també la velocitat del vent mitjana i la precipitació total del dia. Un cop té calculada l’evapotranspiració i el balanç d’aigua diari comprova si és necessari regar. En el cas que sigui necessari calcula les necessitats brutes de reg i el temps de reg necessari. Carrega al timer 2 en mode de 32 bits el temps de reg. Llavors guarda les dades diàries de evapotranspiració i balanç d’aigua del terreny a la memòria EEPROM. Si és l’hora del reg l’activa, sinó espera i torna a passar a calcular la insolació diària. L’execució del programa segueix així fins que arriba el final de la temporada. En aquest moment el sistema continua calculant l’evapotranspiració però deix d’executar la comanda de regar. El programa fa el mateix si l’usuari introdueix una data de sembra posterior a la data actual, començant les ordres de reg quan s’arriba a aquesta última data.

"35

Page 36: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria descriptiva

1.7.9.3 Interrupció del programa per part de l’usuari L’usuari pot interrompre el flux del programa en el moment que vulgui excepte si el microcontrolador està fent l’adquisició de dades o els càlculs d’evapotranspiració i de balanç d’aigua. En aquest cas ha d’esperar que acabi. L’usuari interromp el programa apretant un dels botons d’entrada de dades. En aquest moment se li presenta un menú amb les següents opcions:

- Veure l’hora (així pot comprovar si és correcte) - Canviar dia i hora. En cas que hi hagi un reinici en mig de l’execució, tot i

guardar les dades, quan es reinicia l’execució hi haurà un desfasament entre l’hora, i fins i tot pot ser el dia, actual i l’hora que té el microcontrolador. D’aquesta maner l’usuari pot tornar a ajustar-la.

- Finalitzar cultiu. Amb aquesta opció l’usuari pot interrompre el control de reg en el moment que vulgui. La pròxima vegada que es reinicii el dispositiu, aquest començarà el control de reg com si fos l’inici d’aquest.

"36

Page 37: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

2. Memòria de Càlcul

A continuació es realitzarà una descripció de tots els components del sistema (sensors, circuits condicionadors de senyal, etc.). Primerament es descriurà més detalladament cada sensor o component utilitzat, explicant la configuració del microcontrolador a nivell de software per la connexió amb ell i la recepció o transmissió de dades entre els dos. Després s’explicarà la connexió de cada component amb el microcontrolador a nivell de hardware, explicant, en el cas de que n’hi hagi, l’etapa adaptadora de senyal entre el component i el microcontrolador.

2.1 Sensor de Temperatura DS18B20

2.1.1 Descripció general Com ja he comentat en el capítol anterior, el sensor DS18B20 és un sensor de temperatura digital. El diagrama de blocs del sensor és el següent:

Figura 15. Diagrama de blocs DS18B20

Aquest sensor té un rang de temperatura de -55ºC a 125ºC, opera en un rang de voltatges de 3.0 V a 5.5 V i es comunica a través d’un bus 1-wire Es pot configurar la temperatura en quatre formats, de 9, 10, 11 i 12 bits, amb resolució de 0.5º, 0.25º, 0.125º i 0.0625º respectivament. El format de la dada és en complement a 2 amb signe. En el nostre cas deixarem la resolució per defecte de 12 bits. La dada que entrega el sensor és de 16 bits. Els cinc bits més significatius indiquen el signe de la temperatura (positiu o negatiu) i els quatre menys significatius els decimals. La resta de bits indiquen la part sencera de la temperatura (és pot veure un exemple de diferents temperatures en la figura 16). El dispositiu té una memòria SRAM interna per emmagatzemar diferents dades (figura 17). En el nostre cas, en cada lectura llegirem totes les dades de la memòria (9 bytes). En els bytes 0 i 1 hi haurà la informació de la temperatura mesurada per el sensor. La resta dels bytes els llegirem igualment per tal de comprovar que la lectura ha estat correcte a través del mòdul CRC. Més endavant ja s’entrarà més en detall sobre aquest tema.

37

Page 38: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

Figura 16. Relació entre la temperatura i la dada del DS18B20

Figura 17. Memòria SRAM i EEPROM interna del DS18B20

2.1.2 Bus 1-wire

2.1.2.1 Descripció General del Bus 1wire

El bus de comunicació 1-wire és un bus implementat per Dalla Semiconductors i consisteix en un protocol de comunicació que solament utilitza una línia de comunicació per transmetre dades. Una xarxa de dispositius 1-Wire està formada per un mestre i un o varis esclaus que tenen un sòl pin de dades de drenatge obert (open drain). La línia de transmissió es connecta a Vdd a través d’una resistència pull-up. Cada dispositiu esclau té una única i irrepetible identificació gravada en la seva memòria ROM en el moment de la seva fabricació. Això permet al mestre identificar cada dispositiu per tal de poder comunicar-se amb ells. Aquest identificació consta de 8 bits corresponents a la família, 48 bits de número de serie i 8 bits de CRC. És un bus serie síncron entre un dispositiu mestre i un o varis dispositiu esclaus. Les seves principals característiques són:

38

Page 39: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

- És un bus bidireccional (mestres i esclaus poden escriure en el bus però no a la vegada).

- Les transmissions es realitzen començant pel bit menys significatiu - Tots els dispositius tenen un oscil·lador intern per tal de sincronitzar-se amb

el mestre. Això fa que no sigui necessari una línia de rellotge ja que utilitzen els flancs de baixada de la línia.

2.1.2.2 Intervals de lectura i escriptura

Degut a que no hi ha rellotge de sincronització s’han de definir els intervals de lectura i escriptura. El mestre escriu dades en el DS18B20 en els intervals de temps d’escriptura i llegeix dades del DS18B20 en els intervals de temps de lectura. Es transmet només un bit pel bus 1-wire en cada interval de temps. L’interval de temps d’escriptura varia depenent de si s’escriu un ‘1’ o s’escriu un ‘0’. Tots els intervals de temps de lectura han de tenir un mínim de 60 µs de durada, amb un temps mínim de recuperació d’1µs entre cada lectura. Com es pot observar en la figura 18, per escriure un ‘0’, el mestre ha de posar el bus en baix entre 60 i 120 µs. En canvi, per escriure un ‘1’ el mestre a de posar en baix el bus i alliberar-lo al cap de 15 µs màxim. Entre escriptures s’ha de deixar com a mínim 1 µs.

Figura 18. Diagrama de temps d’escriptura

Els intervals de lectura també varien depenent de si es llegeix un ‘0’ o un ‘1’. El mestre comença les les seqüencies de lectura posant el bus a baix com a mínim 1 µs, deixant-lo lliure tot seguit. Llavors, si el DS18B20 vol transmetre un ‘0’, a de posar el bus

#39

Page 40: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

en baix abans que passin 15 µs del flanc de baixada que ha iniciat el procés. En el cas que vulgui transmetre un ‘1’ deixarà el bus lliure. Per tant, després de que el mestre inicii un interval de temps de lectura posant el bus a baix, a d’esperar 15 µs per llegir una dada.

2.1.2.3. Protocol de Comunicació

Una comunicació utilitzant el bus 1-wire es podria descriure amb els següents passos:

- Inicialització - Comandes i funcions ROM - Comandes i funcions de control i memòria

La comunicació a través d’un bus 1-wire comença amb una inicialització. D’aquesta manera, el mestre indica als esclaus que es preparin per rebre una comanda ROM. Una seqüencia d’inicialització consisteix:

- El mestre genera un pols d’inici ficant la línia a ‘0’ durant com a mínim 480 µs.

- Al cap de entre 15 i 60 µs els esclaus han de respondre posant la línia a ‘0’ entre 60 i 240 µs.

Figura 19. Seqüencia d’inicialització

Seguidament comença la seqüencia de comandes ROM. Aquestes comandes permeten que el mestre indiqui amb quin esclau es vol comunicar per tal que la resta entrin una altra vegada en repòs. Això és necessari ja que sinó hi hauria una col·lisió de dades, ja que tots els dispositius transmetrien dades alhora. Les comandes ROM són idèntiques per a tots els dispositius 1-wire i les transmet sempre el mestre. Aquí és on es fa necessari que cada esclau tingui un codi únic i irrepetible per tal de poder diferenciar-los entre ells. Aquest consisteix en un codi de 64 bits.

Les comandes ROM són les següents: - Read ROM (33h): Amb aquesta comanda el mestre transmet que vol llegir el codi d’identificació de 64 bits d’un dispositiu esclau. Evidentment aquesta comanda només serveix en el cas que hi hagi un sòl dispositiu connectat a la

#40

Page 41: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

línia, ja que sinó hi hauria una col·lisió de dades ja que tots els esclaus transmetrien alhora. - Match ROM (55h): Aquesta comanda serveix perquè el mestre es comuniqui amb un dispositiu concret quan hi ha més d’un dispositiu esclau. Després de la comanda s’envia el codi identificatiu del dispositiu en qüestió. A partir d’aquest moment la resta de dispositius entren en repòs. - Skip ROM (CCh): Aquesta comanda s’utilitza quan només hi ha un dispositiu esclau connectat a la línia. Quan s’envia aquesta comanda el dispositiu connectat passa en estat d’espera per rebre la següent ordre. Això fa que ens estalviem, en un sistema amb un únic dispositiu esclau, enviar la comanda Match ROM amb els següents 64 bits identificadors, suposant un estalvi de temps. - Search ROM (F0h): Aquesta comanda serveix perquè el mestre pugui llegir tots els números identificatius de 64 bits de tots els dispositius esclaus connectats a la línia. Es segueix un algoritme d’eliminació en el que no entrarem en detall ja que no s’utilitzarà en aquest projecte. - Alarm Search (ECh): Els dispositius esclaus tenen una bandera d’alarma que poden activar o desactiva (en el cas del DS18B20 s’activa si es sobrepassen uns valors límit indicats per l’usuari). Aquesta comanda opera de la mateixa manera que la Search ROM amb la diferència que només els esclaus amb el bit de bandera d’alarma activat responen.

Després de la comanda ROM pertinent, el mestre passa a transmetre comandes i funcions de control i de memòria. Aquestes comandes són específiques de cada família de dispositius (algunes poden coincidir) ja que tenen diferents funcions. A continuació explicarem les relatives als dispositius DS18B20.

- Convert T (44h): Quan el dispositiu DS18B20 rep aquesta comanda inicia una conversió de temperatura. El sensor realitzar una conversió de temperatura i emmagatzema el resultat al registre de temperatura de 2 bytes. El temps que tarda el dispositiu en realitzar la conversió i tenir la temperatura correcte en els corresponents bits de la memòria SRAM depèn de si està alimentat amb alimentació externa o paràsita (veure apartat de connexions dels dispositius). En el nostre cas com que utilitzem una alimentació externa, poden testejar el sensor enviant-li intervals de temps de lectura. El sensor respondrà amb un ‘0’ mentres la conversió estigui en curs i amb un ‘1’ quan ja estigui finalitzada. En el cas que el dispositiu estigui alimentat en mode paràsit, el temps ve indicat pel fabricant, determinat per la resolució configurada (tconv)

- Write Scratchpad (4Eh): Aquesta comanda serveix per escriure a la memòria SRAM del dispositiu. El mestre pot escriure 3 bytes de dades a la memòria SRAM del DS18B20. No entrarem en més detalls ja que no l’utilitzarem en aquest projecte.

- Read Scratchpad (BEh): Aquesta comanda serveix per llegir la memòria SRAM del dispositiu DS18B20. Es comença pel bit menys significatiu del byte 0 i continua fins al novè bit (byte 8, CRC). Si el mestre realitza un

#41

Page 42: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

reinici mentres dura la lectura aquesta es para automàticament, pel que es pot tenir un control sobre els bytes que es volen llegir.

- Copy Scratchpad (48h): Aquesta comanda copia el contingut dels registres TH, TL i Configuració de la memòria SRAM a la memòria EEPROM del dispositiu DS18B20.

- Recall E2 (B8h): Col·loca els valors de TH, TL i Configuració de la EEPROM als registres TH, TL i Configuració de la memòria SRAM del DS18B20.

- Read Power Supply (B4h): Aquesta comanda serveix al mestre saber si el dispositiu DS18B20 està alimentat en mode d’alimentació paràsita.

2.1.2.4 CRC

El bus de comunicació 1-wire disposa d’un sistema CRC per detectar possibles errors de transmissió que es traduirien en l’adquisició de dades errònies. El CRC (Cyclic Redundancy Checks) és un sistema de codi cíclic que permet detectar errors en la transmissió de dades. Es tracta d’un sistema que, a partir d’un polinomi generador de grau n, afegeix n bits al missatge a transmetre, de tal manera que aquest sigui divisible pel polinomi generador. El polinomi generador ha de ser conegut per als dos dispositius que es comuniquen. El que envia la dada afegirà els bits corresponents i el que la rep comprovarà si el missatge rebut és correcte. En el cas que no sigui divisible pel polinomi generador el missatge rebut és erroni. Els dispositius 1-wire utilitzen del següent polinomi generador:

x8+x5+x4+1

Segons el que indica Dallas (Maxim) en la nota d’aplicació 27 “Understanding and Using Cyclic Redundancy Checks with Maxim 1-Wire and iButton Products", el seu CRC pot detectar:

- Qualsevol nombre imparell d'errors en qualsevol lloc dins de la serie de 64 bits

- Tots els errors de dos bits en qualsevol lloc dins de la sèrie de 64 bits - Qualsevol grup d'error que pot ser contingut dins de 8 bits - La majoria dels cúmuls més grans d'errors

#42

Page 43: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

2.1.3 DS18B20 i PIC24FJ64GB002

2.1.3.1 Configuració del Port El dispositiu DS18B20, tal com he comentat a l’apartat anterior, opera a través d’un bus 1-wire. Aquest bus es connecta a Vdd a través d’una resistència pull-up i els dispositius que s’hi connecten operen a través de drenatge obert (open drain). El DS18B20 el connectarem al port A del pic, concretament el pin RA0. Per tant, haurem de configurar el pin RA0 com a open drain. Per configurar els pins com a open drain s’utilitzen els registres ODCA i ODCB per als ports A i B respectivament. Activant (‘1’) el bit corresponent al pin es configura com a open drain. En el nostre cas, haurem de carregar el registre ODCA amb 0x0001. D’aquesta manera quedaran tots els pins com a digital excepte el pin RA0 que serà open drain.

Figura 20. Diagrama de pin I/O

Com que la línia de comunicació entre el pic i el DS18B20 és bidireccional, el pin RA0 tan es configurarà com a entrada per rebre dades i com a sortida per enviar-les. Activant (1) el bit corresponent del registre TRISA per configurar-lo com a sortida i desactivant-lo (0) per configurar-lo com a entrada. Es desactivarà la resistència pull-up interna del pic (registre CNPUE) ja que s’utilitzarà una resistència externa de 4.7 kΩ tal i com indica el fabricant.

2.1.3.2 Comunicació 1 wire El microcontrolador PIC24FJ64GB002 no incorpora cap perifèric o mòdul específic per a la comunicació 1-wire. Degut a això, el control de les transmissions es realitzarà a través de software.

#43

Page 44: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

S’implementaran vaires funcions per la comunicació utilitzant la llibreria de XC16 “libpic30.h” per introduir els retards (veure Annexes per al codi programació i el diagrama de fluxe).

2.1.3.3 Mòdul CRC

El microcotnrolador PIC24FJ64GB002 té un perifèric incorporat per calcular el CRC, això ens estalvia haver-ho de fer per software. El generador de CRC del pic és un generador de CRC programable de 32 bits. Això vol dir que es poden realitzar CRC amb polinomis generadors de fins l’orde de x32. La dimensió de les dades també es variable i es pot configurar per dades de fins a 32 bits. L’estructura del CRC és la que mostren les següents figures:

Figura 21. Diagrama de blocs

Figura 22. Detall del generador CRC

#44

Page 45: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

Els registres del mòdul CRC són: - CRCCON1 (CRC Control Register 1) - CRCCON2 (CRC Control Register 2) - CRCXORL (CRC XOR Low Register) - CRCXORH (CRC XOR High Register) - CRCDATL (CRC Data Low Register) - CRCDATH (CRC Data High Register) - CRCWDATL (CRC Shift Low Register) - CRCWDATH (CRC Shift High Register)

A més a més, el mòdul disposa d’una FIFO que pot emmagatzemar fins a 16 dades, depenent de la mida d’aquestes. Els registres CRCDATH i CRCDATL serveixen per carregar dades a la FIFO, mentres que els CRCWDATH i el CRCWDATL emmagatzemen el resultat de la generació del CRC. El registres CRCXORL i CRCXORH junt amb els bits PLEN<4:0>, bits <4:0> del registre CRCCON2, serveixen per definir el polinomi de generació.

2.1.3.3.1 Definició del Polinomi Generador Mitjançant els bit PLEN<4:0>, bits <4:0> del registre CRCCON1, s’estableix l’ordre del polinomi. La definició d’aquest es realitza a través dels registres CRCXORH i CRCXORL. Es pot observar que amb els 5 bits de PLEN<4:0> teòricament com a màxim es pot establir un polinomi de l’orde de x31. Això no és així ja que l’orde del polinomi ve indicat per PLEN<4:0>+1. Activar un bit del registres CRCXORL i CRCXORH correpon a incloure una operació XOR en el bit corresponent del generador CRC. El bit 0 es necessari que sempre estigui activat per poder realitzar l’operació, pel que es igual el valor que se li carregui perquè sempre serà 1. Si l’amplada del polinomi s’ha establer a 32 (mitjançant PLEN<4:0>+1) s’assumeix que el polinomi és d’orde 32 (el bit 31 dels registres CRCXOR estableix x31 no x32). Per exemple, per al polinomi:

x32+x21+x16+x8+1

Els bits PLEN<4:0> haurien de tenir el valor 31 (11111), el registre CRCXORH el valor 33 (0000 0000 0010 0001) i el registre CRCXORH el valor 256 o 257 (0000 0001 0000 000x).

2.1.3.3.2 Amplada de les Dades

Per tal de generar o poder interpretar un codi CRC s’ha de conèixer l’amplada de les dades a transmetre.

#45

Page 46: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

L’amplada de les dades es defineix mitjançant els bits DWIDTH<4:0>, bits <12:8> del registre CRCCON2. Les dades s’introdueixen al mòdul a través dels registres CRCDATL i CRCDATH. Per amplades de dades iguals o inferiors a 16 bits només s’utilitza el registre CRCDATL. Per amplades superiors a 16 bits s’utilitzen els dos registres, escrivint sempre primer en el registre CRCDATL els 16 bits menys significatius. Això ha de ser així perqueèl’escriptura del bit més significatiu de l’amplada de dada triada, provoca que les dades s’introdueixin a la pila FIFO, pel que si s’escriu primer al registre CRCDATH s’entrarien dades errònies. Per dades d’amplada igual o inferior a 8 bytes, l’usuari ha d’entrar les dades al registre CRCDATL en operacions de byte. Això s’ha de fer així per una raó similar a l’anterior. En aquest casos, la primera dada s’escriu als bits <7:0> del registre CRCDATL. La següent dada s’introdueix als bits <16:8> del mateix registre i llavors les dades es carreguen a la FIFO. Si es fa una operació de 16 bits es carregarà tot el valor del CRCDATL interpretant que s’han escrit dues dades. El mòdul també es pot configurar perquè roti les dades en dues direccions. El bit LENDIAN, bit <3> del registre CRCCON1, indica la direcció de rotament. Un valor de 0 indica primer el bit més significatiu (Big Endian Mode), mentres que un valor de 1 indica primer el bit menys significatiu (Little Endian Mode). En el cas del DS18B20 haurem de configurar el mòdul per al polinòmi x8+x5+x4+1 amb una amplada de dades de byte (8bits) i en Little Endian Mode, ja que és el que indica el fabricant del dispositiu. La configuració del mòdul serà doncs:

PLEN<4:0> = 00111 (0x07) CRCXORL = 0000 0001 0011 0001 (0x0131) CRCXORH = 0000 0000 0000 0000 (0x0000) DWIDTH <4:0> = 00111 (0x07) LENDIAN = 1

El mòdul genera una interrupció quan es descarrega l’últim valor de la pila FIFO o quan s’ha acabat el càlcul i el resultat ja es pot llegir als registres CRCWDATL i CRCWDATH. Tant en el manual de referència “Section 41. 32-Bit Programmable CRC” com en el datasheet de la familia PIC24FJ64GB004 de Microchip s’ha trobat una contradicció. En tots dos documents s’explica que si el bit CRCISEL, bit <5> del registre CRCCON1 té el valor de ‘1’ es genera una interrupció quan el càlcul a finalitzat i si té el valor ‘0’, l’interrupció es genera quan la FIFO es buida però el càlcul encara no ha finalitzat. Al mateix temps, en tots dos documents, en el gràfic explicatiu del registre CRCCON1, quan indica els possibles valors del bit CRCISEL i el que signifiquen ho explica al revés. Després de realitzar el codi es comprova que l’explicació correcte és la primera.

#46

Page 47: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

2.1.3.3.3 Realització del càlcul

En el nostre cas, per realitzar una seqüència de càlcul de CRC, després de configurar el mòdul tal i com he comentat anteriorment, es seguiran els següents passos:

1. CRCISEL = 1 (es selecciona interrupció quan el càlcul estigui finalitzat). 2. S’introduiran els valors carregant-los en el registre CRCDATL, en operacions

de byte ja que és l’amplada de les dades. 3. S’activarà el bit CRCGO del registre CRCCON1 <4> 4. S’esperarà a que la bandera d’interrupció CRCIF s’activi, el que voldrà dir

que el càlcul ja està fet. 5. S’agafarà el resultat del registre CRCWDATL.

En els Annexes es pot consulta el diagrama de flux i el codi de programació (funció comprovar_crc(unsigned char *crc))

2.2 Convertidor de llum a freqüència TSL235R

2.2.1. Descripció general

El sensor TSL235R és la combinació d’un fotodíode i un convertidor de corrent a freqüència. El convertidor converteix la corrent que circula pel fotodíode a freqüència proporcionant d’aquesta manera una freqüència proporcional a la llum existent. Com es pot observar en les gràfiques que proporciona el fabricant, la relació irradiància freqüència és pràcticament lineal i en una proporció per la qual 1µW/cm2 correspon a aproximadament 1 kHz de freqüència.

Figura 23. Relació freqüència irradiància TSL235R

La senyal de sortida del sensor és una senyal quadrada amb un cicle de treball del 50%. L’amplitud d’aquesta és la tensió d’alimentació del sensor, que en el nostre cas serà de 3.3. V.

#47

Page 48: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

Com ja he comentat anteriorment, no es farà servir el sensor per determinar la irradiància real ja que, pels motius comentats, la mesura proporcionaria un error difícil d’acotar per ser corregit. Per això és mesurarà la resposta que aquest sensor exposant-lo a la llum solar varis dies i es determinarà a partir de quina freqüència es comencen a contar hores d’insolació.

2.2.2 TSL235R i PIC24FJ64GB002

2.2.2.1 Configuració del Port El sensor es connectarà al pin RA1 del microcontrolador (port A). Aquest pin es configurarà com a entrada digital. Aquest pin s’associarà al perifèric del pic Input Capture with Dedicated Timer (mòdul de captura amb timer dedicat). Com que la senyal de sortida del sensor és una ona quadrada de 3.3 V, no caldrà realitzar cap adaptació de la senyal per connectar-lo al pic.

2.2.2.2 Input Capture with Dedicated Timer

Utilitzarem aquest mòdul del pic per tal de mesura la freqüència de la senyal del TSL235R. Una alternativa hauria sigut utilitzar la interrupció externa o la notificació de canvi d’estat per mesurar la freqüència, però he estimat que era millor utilitzar aquest mòdul ja que per hardware s’encarrega de capturar els temps, alleugerint així el programa El mòdul Input Capture with Dedicated Timer s’encarrega de capturar els valors de temps d’un esdeveniment de canvi de nivell en el pin seleccionat. Té la capacitat de generar interrupció i es pot programar cada quants esdeveniments es realitza la captura i en quin tipus d’esdeveniment. Es pot associar a qualsevol dels Timers del pic.

Figura 24. Diagrama del mòdul Input Capture with Dedicated Timer

#48

Page 49: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

2.2.2.2.1 Configuració

Hi ha quatre mòduls input capture i cadascun té dos registres de control, ICxCON1 i ICxCON2. Nosaltres utilitzarem el mòdul 1. En el registre ICxCON1, entre altres opcions, es configura el Timer que s’utilitzarà, cada quants esdeveniments es genera interrupció, l’estat del buffer de captures i quins esdeveniments generen captura. Els bits ICI, bits <6:5> del registre ICxCON1 serveixen per definir cada quants esdeveniments de captura es generarà interrupció. En el nostre cas seleccionarem cada dos esdeveniments de captura Els bits ICM, bits <2:0> del registre ICxCON1, serveixen per definir el mode de captura, o sigui, quan es realitza una captura del timer. En el nostre cas, com que les fluctuacions de llum no són molt ràpides, seleccionarem que es realitzi una captura cada setzè flanc. Els bits ICTSEL, bits <12:10> del registre ICxCON serveixen per configurar quin timer utilitzarem per al mòdul. El mòdul disposa d’una pila FIFO de quatre nivells per emmagatzemar els valors capturats. El registre ICxBUF serveix per accedira aquesta FIFO. Els bits ICOV i ICBNE, bits <4> i <3> respectivament del registre ICxCON, ens donen informació sobre l’estat del buffer de captura. El bit ICBNE ens indica si el buffer està buit o no (‘1’ no està buit i ‘0’ està buit). El bit ICOV ens indica si hi ha hagut una condició de desbordament en el buffer. Aquesta dada es important tal i com es veurà a continuació. La configuració del mòdul quedarà:

- IC1CON1 = 0x1C25. Rellotge del sistema, interrupció per cada segon esdeveniments i captura d’esdeveniments a cada 16e flanc ascendent.

- IC1CON2 = 0x0000. Comptador de 16 bits, no sincronitzat amb cap altre mòdul

2.2.2.2.2 Gestió de la FIFO Cada vegada que es realitza una captura el valor del Timer associat al mòdul es guarda en el buffer. A la vegada, cada cop que es llegeix el registre ICxBUF, el valor llegit del buffer es borra. Per tant, si es fa una captura i es realitza una lectura del valor abans que es torni a realitzar una captura, aquest s’esborrarà del buffer i quedarà buit. Això vol dir que tenim capacitat per emmagatzemar quatre captures en la FIFO a la vegada. El problema que podria passar es que si es fan quatre captures d’esdeveniments i no es llegeix cap vegada el buffer, la cinquena captura no es realitzarà, el mòdul continuarà operant però no realitzarà cap captura i no generarà cap interrupció. En aquest cas el bit ICOV s’activarà. Per tal que el mòdul torni a realitzar captures i a generar interrupcions hi ha tres opcions a realitzar:

- Posar els bits ICM a ‘0’. - Reiniciar el mòdul - Llegir el buffer fins que el bit ICBNE = 0.

#49

Page 50: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

Qualsevol d’aquestes accions fan que es tornin a realitzar captures i es tornin a generar interrupcions. El rang de freqüències de resposta del TSL235R, en principi no faria preveure que un desbordament del buffer ja que amb l’oscil·lador intern del pic obtenim una freqüència d’instrucció de 4 MHz. Tot i això, es testarà el bit ICOV durant el flux del programa per evitar un desbordament per altres causes (com podria ser la interrupció per part de l’usuari per entrar en el menú de configuració, tal i com es veurà en l’apartat on s’explica el codi de programa). Per tant, en el flux normal del programa es testarà el bit ICOV, i en cas que sigui ‘1’ es posaran els bits ICM a ‘0’, per desfer la condició de desbordament i es tornaran a configurar per tal que el mòdul continúi operant amb normalitat.

2.3 Sensor d’Humitat HIH-4010

2.3.1 Descripció general

El sensor d’humitat HIH-4010 proporciona una sortida de voltatge relacionada amb la humitat relativa. Aquesta relació l’indica el fabricant i és la següent:

(38) Aquesta relació és vàlida a 25ª C de temperatura. El fabricant també facilita una equació per corregir la humitat mesurada en funció de la temperatura ambient:

(39)

Per tal de poder interpretar la senyal de sortida s’utilitzarà el ADC del pic. Aquest sensor opera amb una tensió d’alimentació de 4 a 5.5 V. Tal i com es veurà més endavant s’alimentarà a 5 V i es connectarà al pic a través d’un divisor de tensió per adequar la tensió de sortida al rang permés per les entrades analógiques del pic (0 a 3.3 V).

2.3.2 HIH-4010 i PIC24FJ64GB002

2.3.2.1 Configuració del Port

El sensor es connectarà al pint AN10 (RB14). La senyal que proporciona el sensor HIH-4010 és una senyal analògica pel que aquest pin es configurarà com a entrada analògica.

#50

Page 51: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

El registre AD1PCFG serveix per configurar el pins (que tenen aquesta opció) com a analògics o digitals. Posant el bit x d’aquest registre a ‘1’ el corresponent pin ANx queda configurat com a port digital, mentres que si es posa a ‘0’ queda com a analògic. Com que el pin que utilitzarem serà el pin AN10, el valor del registre AD1PCFG serà 0xFBFF (la resta de pins seran digitals).

2.3.2.2 Mòdul ADC (Analogic Digital Converter)

El PIC24FJ64GB002 disposa d’un mòdul ADC de 10 bits. Això significa que té una resolució de Vref/1024. En el nostre cas Vref serà 3.3 V (la tensió d’alimentació del pic), pel que tindrem una resolució de 3.2 mV (cada increment d’1 en el valor resultant del convertidor representarà 3.2 mV d’increment). El mòdul disposa dels següents registres per la seva configuració:

- AD1CON1: A/D Control Register 1 - AD1CON2: A/D Control Register 2 - AD1CON3: A/D Control Register 3 - AD1CHS: A/D Input Channel Select Register - AD1PCFG: A/D Port Configuration Register - AD1CSSL: A/D Input Scan Select Register

Els registres AD1CONx serveixen per configurar i controlar el mòdul ADC. El registre AD1CHS serveix per seleccionar el canal d’entrada del que es vol fer la conversió, el registre AD1PCFG, tal i com he comentat abans, serveix per definir si els pins són analògics o digitals i el registre AD1CSSL serveix per seleccionar els canals que es volen utilitzar per un escanejat seqüencial. Per configurar el mòdul s’ha seleccionar la tensió de referència V- i V+ amb la qual es treballarà. Això es fa a través dels bits VCFG<2:0>, bits <15:13> del registre AD1CON2. Es poden seleccionar voltatges externs o el voltatge del pic. Es seleccionarà el voltatge del pic ja que la senyal d’entrada anirà dels 3.3V aproximadament als 0V. També s’ha d’indicar el temps de mostreig. El mòdul permet que es sincronitzi a través del Timer·, a través de la INT0 o utilitzant el comptador intern del mòdul. Això es configura amb els bits SSR<2:0>, bits 7:5> del registre AD1CON1. Es seleccionarà el comptador intern del mòdul (auto conversió). En el registre AD1CON3 es selecciona el temps de mostreig, El temps que tarda el mòdul a realitzar la lectura i conversió a digital de l’entrada analògica és diu Temps A/D de Conversió Total. Aquest temps és la suma del tems de mostreig (sampling time) i el temps de conversió (A/D conversion time).Aquest temps ve determinat per valor de TAD. El valor mínim de TAD a de ser de 75 ns per indicacions del Microchip, per tant, a l’hora de configurar el registre AD1CON3 s’ha de tenir en compte l’oscil·lador que utilitzem. En el nostre cas configurarem el mòdul perquè faci auto conversió amb un rellotge de conversió de 5 TCY i un temps de mostreig de 31 TAD.

#51

Page 52: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

Figura 25. Diagrama del mòdul ADC

2.4 Anemòmetre i Pluviòmetre

Com ja s’ha vist anteriorment, tan l’anemòmetre com el pluviòmetre, funcionen de la mateixa manera, amb un reed switch que es tanca degut al moviment d’algun dels seus components.

2.4.1 Reed Switch

Un reed switch és un interruptor que es tanca o obra per acció d¡un camp magnètic. Consisteix en un parell de contactes metàl·lics tancats al buit dins d’un tub de vidre. Quan un camp magnètic s’apropa al dispositiu fa que els contactes és tanquin, generant corrent si s’aplica una diferència de potencial entre els seus extrems. El camp magnètic es pot generar a través d’un imant. D’aquesta manera, al apropar-lo al reed switch, fa que els contactes es tanquin, mentres que al allunyar-lo, els contactes tornen a obrir-se.

#52

Page 53: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

Com ja he comentat, el moviment dels components mecànics de l’anemòmetre i del pluviòmetre apropen o allunyen l’imant del reed switch, generant un seguit de polsos.

2.4.2 Interfície amb el PIC24FJ64GB002 La solució adoptada serà la mateixa pels dos sensors, variant només el processament de les dades obtingudes. Tots dos sensors es connectaran a pins que s’associaran a les interrupcions externes 1 i 2. Aquestes es configuraran, a través del registre INTCON2, per a que generin una interrupció en flanc de baixada (posant els bits INT1EP i INT2EP, bits <1> i <2> respectivament, a ‘1’). En les rutines de servei de les interrupcions s’incrementarà el comptador corresponent, obtenint així els polsos totals diaris. Amb la relació de polsos velocitat del vent i pluja acumulada facilitats pel fabricant, al final del dia es calcularà la velocitat del vent mitjana i la pluja acumulada total.

2.4.3 Anemòmetre El fabricant indica que cada tancament del reed switch per segon correspon a una velocitat del vent de 2.4 km/h. En la escala de vent de Beaufort, que tipifica els diferents tipus de vent segons la seva força, s’indica que a partir de 118 km/h es consideren vent huracanats. A aquesta velocitat, molt elevada ja, el nostre sensor generaria un tren de polsos amb una freqüència aproximada de 50Hz, molt fàcilment mesurable pel microcontrolador Per tant, al final del dia, per calcular la velocitat mitjana diària, dividirem el total de polsos acumulats pel temps transcorregut:

(40)

Aquesta serà la velocitat del vent en km/h, que es convertirà en m/s per poder aplicar-la als càlculs.

2.4.4 Pluviòmetre El fabricant indica que cada tancament del reed switch equival a 0.28 mm de precipitació. A partir de valors de pluja més grans de 60 mm/h es consideren pluges torrencials. En aquest cas l’anemòmetre generaria un tren de polsos amb una freqüència d’uns 18Hz, també fàcilment mesurable pel microcontrolador. Per calcular la precipitació acumulada durant el dia, es multiplicaran els polsos mesurats per 0.28, obtenint així els mm/dia totals.

#53

Page 54: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

2.5. Memòria EEPROM 24LC256

2.5.1 Descripció

El sistema disposarà també d’una memòria EEPROM per tal d’emmagatzemar dades. La memòria 24LC256 es comunica a través del bus I2C. A continuació es fa una breu descripció d’aquest bus

2.5.2 Bus I2C

El bus I2C és un bus serie i síncron que es comunica a través de dos línies, una de dades (SDA) i l’altra de rellotge (SCL). Opera en drenatge obert (open drain) pel que les dues línies estan connectades a Vdd a través de resistencies pull-up. Aquestes resistencies varien de valor depenent del dispositiu, normalment en un rang de 1.8 a 10 kΩ. El bus permet de la connexió de varis esclaus i de varis mestres també.

2.5.2.1. Direccionament dels esclaus

Cada dispositiu esclau té una direcció determinada. Aquesta direcció consta normalment de 7 bits, tot i que hi ha sistemes que operen amb 10 bits.

En el nostre cas, la memòria 2LC256 opera amb direccionaments de 7 bits.

Figura 26. Byte de direccionament de dispositiu esclau Com es pot observar en la figura 26, dels 7 bits de direcció de la memòria, els quatre més significatius són fixes, mentre que els tres restants són variables. Els valors d’aquests últims es determinen connectant els pins A2, A1 i A0 de la memòria a terra o a Vdd. D’aquesta manera podríem tenir fins a 8 dispositius esclaus connectats al mateix bus I2C.

2.5.2.2 Lectura i Escriptura en el Bus I2C

Hi ha dos tipus d’operacions en un bus I2C, lectura i escriptura. Totes dues operacions comencen amb una condició d’inici (start) i finalitzen amb una de parada (stop). Les dades sempre es transmeten començant pel bit més significatiu. Per començar una operació en el bus I2C el mestre a de generar una condició de Start. Això consisteix en posar la línia de dades SDA a ‘0’ mentres la línia de rellotge SCL

#54

Page 55: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

està a ‘1’. Això fa que els dispositius esclaus connectats a la línia es “despertin” i esperin una comunicació a través del bus. Per finalitzar una operació, el mestre generarà una condició de Stop, que consisteix en posar la línia de dades SDA a ‘1’ mentres la línia del rellotge està a ‘1’. Com es pot observar, en totes dues condicions, la línia de rellotge està a ‘1’. Això és així perquè tots els canvis d’estat de la línia de dades SDA per a transmetre direccions o dades s’han de realitzar quan la línia de rellotge està a ‘0’. Si no es fa així, els esclaus interpretaran que es tracta d’una condició de Start o Stop.

Figura 27. Transferència d’un byte

Les transferències de dades a través del bus I2C es realitzen byte a byte. Aquesta transferència consta de dues fases, en una primera el mestre o l’esclau posa 8 bits a la línia de dades durant 8 cicles de rellotge consecutius, començant pel més significatiu. Quan el dispositiu que rep les dades a rebut els 8 bits, envia un bit de reconeixement (ACK) a la línia, posant-la a ‘0’. Si al finalitzar la transmissió d’un byte no es posa la línia de dades el dispositiu que transmet interpretarà que no s’han rebut les dades.

Figura 28. Transferència d’un byte A continuació es descriuen les seqüencies d’escriptura i lectura en el bus I2C:

Lectura: - Condició de Start per part del mestre - El mestre posa 7 bits corresponents al codi del dispositiu més 1 bit ‘0’. Aquest bit ‘0’ indica que el mestre vol realitzar una operació d’escriptura. Cada bit es posa a la línia en un cicle de rellotge. - Si el dispositiu direccionat està disponible contesta posant la línia a ‘0’ (ACK) en el següent cicle de rellotge (nové). - El mestre envia el número de registre o direcció on vol escriure dades. Depenent del dispositiu ho farà en un o varis bytes (amb els seus corresponents bits de reconeixement per part de l’esclau). - El mestre envia les dades que vol escriure (byte a byte).

#55

Page 56: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

- El mestre genera una condició de Stop quan vol finalitzar l’escriptura.

Escriptura: - Condició de Start per part del mestre - El mestre posa 7 bits corresponents al codi del dispositiu més 1 bit ‘0’. Aquest bit ‘0’ indica que el mestre vol realitzar una operació d’escriptura. Si el dispositiu direccionat està disponible contesta posant la línia a ‘0’ (ACK) en el següent cicle de rellotge (nové). - El mestre envia el número de registre o direcció on vol escriure dades. Depenent del dispositiu ho farà en un o varis bytes (amb els seus corresponents bits de reconeixement per part de l’esclau). - Es torna a posa una condició de Star a la línia (Restar) - El mestre posa 7 bits corresponents al codi del dispositiu més 1 bit ‘1’. Aquest bit ‘1’ indica que el mestre vol realitzar una operació de lectura. - El mestre passa a rebre les dades que li envia l’esclau generant un bit de reconeixement al finalitzar cada byte - Quan el mestre rep l’última dada que vol llegir, enlloc d’enviar un bit de reconeixement (ACK) deixa la línia a ‘1’ (NACK). - Seguidament el mestre genera una condició de Stop per parar la transmissió de dades.

Com es pot observar, una seqüencia de lectura sempre comença amb una seqüencia d’escriptura ja que s’ha d’indicar quina posició de memòria o registre es vol llegir.

2.5.3 24LC256 i PIC24FJ64GB002

El microcontrolador disposa de dos mòdul específics per la comunicació a través del bus I2C. Per realitzar la comunicació entre la memòria 24LC256 i el microcontrolador s’utilitzarà el mòdul 2 del dispositiu.

2.5.3.1. Configuració del port

La línia de dades de la EEPROM es connectarà al pin SDA2 (RB2) i la línia de rellotge al pin SCL2 (RB3). Les dues línies es connectaran a 3.3 V a través de resistències pull-up. Els dos pins es configuraran inicialment com a entrada (TRISBx = 1). El mòdul quan s’activa i realitza les comunicacions ja s’encarrega de la gestió del registres TRIS.

2.5.3.2 Mòdul I2C

Tal i com ja he dit, el pic té un mòdul que s’encarrega de la comunicació I2C. Aquest mòdul és de gran ajuda ja que s’encarrega de gran part dels passos que s’han de seguir per poder realitzar una comunicació a través del bus I2C amb èxit.

#56

Page 57: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

Figura 29. Seqüencia start

El mòdul consta dels següents registres de control i estat: - I2C2CON - I2C2STAT - I2C2MSK - I2C2RCV - I2C2TRN - I2C2ADD - I2C2BRG

El registre I2C2CON serveix per configurar el mòdul. El bit I2CEN d’aquest registre, bit <15>, activa o desactiva el mòdul, i els bits ACKDT, ACKEN, RCEN, PEN, RSEN i SEN serveixen per generar condicions de start, stop, restart i de reconeixement. Quan expliqui el mode de funcionament del mòdul ja entraré en més detalls. El registre I2C2STAT serveix per comprovar l’estat en que es troba la comunicació. En el registre I2C2RCV es guarda la dada rebuda pel pic quan està llegint d’un dispositiu i en el registre I2C2TRN es col·loca la dada que el pic vol transmetre. El bus de comunicació I2C pot tenir diferent velocitats de transmissió. Això ve determinat pels dispositius que si poden connectar. El registre I2C2BRG serveix per establir la velocitat de transmissió del bus.

2.5.3.2.1 Condició de Star a través del Mòdul I2C

A continuació s’explica la la seqüencia a seguir per generar una condició de star en el bus:

- L’usuari, a través de software, activa el bit SEN, I2C2CON <0>, per generar condició de start.

- Automàticament, a través de hardware, s’activa el bit d’estat S (I2C2STAT<3>) i s’esborra el bit P. Així s’indica que s’ha generat una condició de start.

- Quan s’ha acabat la generació de la condició de start, també per hardware, s’esborra el bit SEN i, si està habilitada, es genera una interrupció (MI2C2IF).

#57

Page 58: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

2.5.3.2.2 Enviar Dada a través del Mòdul I2C

- A través de software es comprova si s’està transmetent alguna dada mitjançant el bit TBF (I2C2STAT<0>). Si està a ‘1’ es que hi ha una dada en trànsit i ens em d’esperar.

- Un cop el bit TBF passa a 0, per software es posa la dada que es vol transmetre al registre I2C2TRN. Automàticament la dada comença a ser transmesa.

- Durant la transmissió els bits TRSTAT (I2C2STAT<14>) i TBF (I2C2STAT<0>) s’activen.

- Quan s’ha transmés el 8è bit el bit TBF passa a ‘0’ - Quan ha passa el 9è cicle de rellotge el bit TRSTAT passa a ‘0’ - Llavors, per software, l’usuari pot comprovar a través del bit ACKSTAT

(I2C2STAT<15>), si s’ha rebut el bit de ACK de dispositiu esclau. Si aquest bit és ‘1’ és que no s’ha rebut.

Figura 30. Seqüencia de transmissió de dada

2.5.3.2.3 Llegir Dada a través del Mòdul I2C

Prèviament a la seqüencia descrita a continuació, hauríem de generar una condició de start, escriure el codi del dispositiu seleccionat amb una ordre d’escriptura de dada, escriure l’adreça que volem llegir, una condició de restart i escriure el codi del dispositiu amb una orde de lectura tal i com s’ha descrit anteriorment.

- L’usuari, per software, activa el bit RCEN (I2C2CON<3>) - Al final del 8e cicle de rellotge el bit RCEN automàticament es borra - El contingut del registre I2C2RSR (que és on es van introduint els bits

rebuts) es transfereix al registre I2C2RCV - El bit RBF (I2C2STAT<1>) s’activa per indicar que la dada ja està

disponible. - Si està habilitada, el mòdul genera una interrupció.

#58

Page 59: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

Figura 31. Seqüencia de recepció de dada 2.5.3.2.4 Generar ACK i NACK a través del Mòdul I2C

Després de rebre una dada satisfactòriament, el mestre envia el bit de reconeixement. En el cas que aquesta sigui la última dada que es vol llegir es genera un NACK.

- L’usuari determina si vol enviar un ACK o un NACK utilitzant el bit ACKDT (I2C2CON<5>). Si aquest bit té un valor de ‘0’ es generarà un ACK, sinó un NACK

- L’usuari activa el bit ACKEN (I2C2CON <4>) - Quan ja s’ha generat el ACK o NACK el bit ACKEN automàticament es

borra.

Figura 32. Seqüencia ACK

#59

Page 60: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

Figura 33. Seqüencia NACK

2.5.3.2.5 Generar Stop a través del Mòdul I2C

- L’usuari, per software, activa el bit PEN (I2C2CON<2>) - S’activa el bit P (I2C2STAT<4>) i es desactiva el bit S (I2C2STAT<3>) - Al finalitzar l’esdeveniment automàticament es borra el bit PEN - Es genera una interrupció si està activada.

Tot i que no forma part estrictament de la seqüencia de start es troba convenient esborrar els bits IWOL i BCL del registre I2C2STAT <7> i <10> respectivament. Així s’eliminen les banderes de col·lisió de dades per a la propera transmissió.

Figura 34. Seqüencia Stop

2.5.3.2.6 Generar Restart a través del Mòdul I2C

- L’usuari, per software, activa el bit RSEN (I2C2CON <1>) - S’activa el bit S (I2C2STAT<3>) i es desactiva el bit P (I2C2STAT<4>) - El bit RSEN s’esborra automàticament quan finalitza la condició de restart.

#60

Page 61: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

Figura 35. Seqüencia Restart

2.5.3.2.7 Baud Rate

Com ja he comentat anteriorment, el bus I2C té varies velocitats de transmissió possibles. Les més comunes són a 100 kHz o a 400 kHz, però es poden arribar a velocitats de fins a 1MHz. La velocitat del bus es configura a través del registre I2C2BRG. Depenent del valor amb que es carregui aquest registre i a la freqüència del cicle d’instrucció es determina la velocitat del bus. Aquesta relació ve definida amb la següent equació:

(41)

o FCY freqüència del cicle d’instrucció FSCL freqüència del bus I2C

En el nostre cas, com que la freqüència del cicle d’instrucció és de 4 MHz i volem establir una valor de 100 kHz de freqüència del bus I2C, hauríem de carregar el registre I2CBRG amb un valor de 38.6. Aquest valor no es pot carregar en el registre ja que no és un valor enter. Microchip recomana en aquest cas carregar una valor de 39, obtenint una freqüència en el bus I2C de 99 kHz aproximadament.

2.6 Pantalla LCD J1602A

El el disseny s’ha decidit incloure una pantalla LCD. Aquesta pantalla permetrà visualitzar les dades inicials necessàries que ha d’introduir el futur usuari per tal de poder començar la planificació automàtica del reg.

#61

Page 62: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

Taula 1. Assignació de pins LCD J1602A

També permetrà mostrar a l’usuari si hi ha hagut algun error (pèrdua d’alimentació temporal del circuit…), modificar la data i hora i finalitzar la planificació del sistema de reg en qualsevol moment, tornant a iniciar el dispositiu si es desitja. Utilitzarem una pantalla LCD 1602A. Es tracta d’una pantalla LCD alfanumèrica de 2x16 retroiluminada. Disposa d’un controlador ks0066u, molt similar al HITACHI HD44780.

2.6.1 Connexió al PIC24FJ64GB002

La pantalla la connectarem al port B, utilitzant els pins digitals que toleren tensions de fins a 5.5 V. Utilitzarem 6 pins, concretament els RB5, RB7, RB8, RB9, RB10 i RB11. En l’apartat de connexionat es pot veure on està connectat cada pin. La pantalla s’alimenta a un voltatge de 5V, per això, s’utilitzaran els pins amb tolerància de fins a 5.5 V. Tot i que no és estrictament necessari, ja que no es llegirà mai la pantalla LCD, això es fa per seguretat. Per tant, els pins seran configurats com a sortides digitals, activant els bits corresponents del registre TRISB a ‘1’.

#62

Pin Nom Funció

1 Vss Terra (0V)

2 Vdd Alimentació (5V)

3 Vo Contrast (Vss≤Vo≤Vdd)

4 RS Mode (dada = 1 / comanda = 0)

5 RW Lectura / escriptura (lectura = 1 / escriptura = 0)

6 E Enable (Validació del contingut de D<7:0> en flanc 1 -> 0)

7 D0 Bit 0 de dada (LSB)

8 D1 Bit 1 de dato

9 D2 Bit 2 de dato

10 D3 Bit 3 de dato

11 D4 Bit 4 de dato

12 D5 Bit 5 de dato

13 D6 Bit 6 de dato

14 D7 Bit 7 de dato

15 A Ànode (+) retroalimentació

16 K Càtode (-) retroalimentació

Page 63: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

2.6.2 Connexió de la pantalla La pantalla disposa de 16 pins de connexió. Els pins Vdd, Vss són d’alimentació i el pin Vo serveix per ajustar el contrast. Els pins RS, RW i E són de control i els D7:D0 de dades. Els A i K són la retroiluminació de la pantalla. Els pins RW i E es connectaran als pins RB5 i RB7 respectivament. Com que només realitzarem escriptures el pin RW es deixarà connectat a terra.

La comunicació amb la pantalla LCD es realitzarà en mode 4 bits, pel que els pins D0:D3 també es deixaran connectats a terra. Els pins D7:D4 es connectaran als pins RB11:RB8 respectivament.

Taula 2. Instruccions pantalla LCD

#63

Page 64: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

2.6.3 Configuració i Operacions

La pantalla, inicialment està configurada en mode 8 bits. Es pot inicialitzar en mode 4 bits per instruccions seguint el procediment detallat en el diagrama de flux de la següent pàgina. Un cop inicialitzada en mode 4 bits, per tal de transmetre dades, primer s’ha de col·locar al bus els 4 bits més significatius i posteriorment els menys significatius seguint les especificacions de temps indicades pel fabricant. Per escriure una dada o una comanda al LCD, es segueix el següent procediment:

- Primer es té la lína E (enable) a ‘0’ - Si la línia RS es posa a ‘1’ es transmetrà una dada, mentres que si està a ‘0’

serà una comanda. - Esperar un temps mínim (tSU1) indicat pel fabricant - Posar la línia E a ‘1’ - Posar les dades o la comanda al bus - Esperar un temps mínim (tSU2) indicat pel fabricant - Tornar a posa la línia E a ‘0’

En mode 4 bits aquesta operació s’ha de realitzar dues vegades per tal de transmetre un byte. El fet de tenir la línia de control E, possibilita que als mateixos pins del LCD podem tenir connectats altres dispositius, ja que mentres la línia E està a 0, els canvis en la resta de línies no afecta al LCD.

2.7 Connexionat a Nivell de Hardware

2.7.1 Alimentació

En el sistema tenim components que necessiten alimentació a 5V, altres a 3.3V i altres que es poden alimentar a les dues tensions. Degut a això s’ha inclós en el circuit d’alimentació dos reguladors de tensió, un LM7805 i un LD1117V33. El regulador de tensió LM7805 té un rang d’entrada de 20 a 7 V i té un voltatge de sortida de 5V amb un marge del 4% (±0,2 V). El regulador de tensió LD1117V33 té un rang d’entrada de 15 a 5.3 V i un voltatge de sortida de 3.3V amb un marge del 2% (±66mV) Al tractar-se d’un prototip estarà alimentat amb 6 piles AA de 1.5 V c, obtenint així 9 V, suficients pels dos reguladors. En el diseny definitiu seria recomanable alimentar el dispositiu a través de la xarxa d’alimentació de 220V o a través d’una font d‘energia més duradora. En el cas que s’alimentés en alterna de 220V seria necessari incloure un transformador i una etapa rectificadora per adequar la senyal als reguladors (dins del marge de 15 a 7V i en continua). Al tenir una entrada ja en DC, per al LM7805 només són necessaris dos condensadors, un de 0,33 µF entre l’entrada i terra i l’altre de 0,1 µF entre la sortida i terra .

#64

Page 65: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

Figura 36. Esquema connexionat LM7805

La configuració del LD1117V33 és idèntica a la del LM7805, només canviant els valors dels condensadors, 100 nF a l’entrada i 10 µF a la sortida:

Figura 37: Esquema connexionat LD1117V33

2.7.2 Sensor de Temperatura DS18B20

El sensor de temperatura DS18B20 és un sensor digital que pot operar en un rang de tensió d’alimentació de 3 a 5 V. En aquest projecte s’alimentarà amb una tensió de 3.3 V per no tenir que adaptar la tensió de sortida al microcontrolador. El sensor té tres pins, un per alimentació (Vdd), un de control (DQ) i un per terra (GND). És necessari connectar una resistència de pull-up en la línia de control DQ ja que el dispositiu opera en drenatge obert. El valor de la resistència indicat pel fabricant és de 4.7 kΩ. El dispositiu té dos modes d’alimentació: Alimentació externa o Alimentació paràsita. L’alimentació externa consisteix a connectar una font d’alimentació al pin Vdd tal i com es mostra en l’esquema següent:

Figura 38. DS18B20 amb alimentació externa

#65

Page 66: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

L’alimentació paràsita consisteix en que el dispositiu s’alimenta a través de la línia de control aprofitant quant aquesta està en alt i carregant un condensador intern Cpp per quan la línia està a ‘0’. Aquest mode està pensat per quan s’han d’agafar mesures de temperatura a distàncies elevades del circuit central de control, evitant així haver de fer arribar la alimentació a aquests punts. Durant les operacions de conversió de temperatura o d’escriptura a l’EEPROM el dispositiu requereix d’una corrent elevada, que pot arribar a 1.5 mA. Com que aquest demanda de corrent pot causar una caiguda de tensió inacceptable en la resistència pull-up i és més corrent de la que pot subministrar el condensador Cpp, en aquesta configuració es fa necessari un MOSFET per connectar el bus a Vdd quan s’estan realitzant aquestes operacions. Durant aquest temps el bus no pot ser utilitzat per cap altre dispositiu.

Figura 39. DS18B20 amb alimentació paràsita

En aquest projecte s’alimentarà el DS18B20 en alimentació externa, connectant el pin Vdd a la tensió d’alimentació, ja que el dispositiu es trobarà a la placa principal.

2.7.3 Sensor de Temperatura HIH-4010

Aquest sensor proporciona com a sortida un voltatge proporcional a la humitat relativa. Té un rang d’alimentació de 4 a 5.8 V. En aquest cas estarà alimentat a 5 V. La sortida del sensor es connectarà a un pin configurat com a entrada analògica. Aquest pins tenen una tolerància màxima de 3.3 V. Com que la sortida del sensor pot oscil·lar entre els 0 V i aproximadament el 4V serà necessari adaptar la senyal per evitar danyar el microcontrolador i per poder realitzar la lectura correcta amb el convertidor ADC. Per fer això simplement es connectaran dues resistències a mode de divisor de tensió. Els valors de les resistències seran de 100 kΩ i 24 kΩ tal i com mostra el següent esquema:

Figura 40. Divisor de tensió a la sortida del HIH-4010

#66

Page 67: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

D’aquesta manera tindrem uns valors després del divisor que oscil·laran entre 0 i 3.2 V, dins del marge que pot suportar el microcontrolador.

(42)

2.7.4 Sensor de radiació TSL235-R Aquest sensor proporciona una senyal d’ona quadrada de freqüència proporcional a la irradiància. El seu rang d’alimentació és de 2.7 a 5.5 V. Estarà alimentat a 3.3 V pel que no serà necessari cap circuit addicional per adequar la senyal. Per desacoplar la línia d’alimentació s’instal·larà un condensador de 0,1 µF.

Figura 41. Connexionat del TSL235R

2.7.5 Pluviòmetre Com ja he comentat anteriorment, el pluviòmetre consta d’un reed switch que es tanca quan hi ha un balanceig. Es connectarà una resistència entre l’alimentació i el reed switch per limitar la corrent tal i com s’indica en l’esquema següent:

Figura 42. Connexionat del pluviòmetre

Aquesta resistència serà de 10 kΩ. També es col·locarà un condensador en paral·lel al reed switch per eliminar els rebots provocats per aquest quan es tanca i s’obra.

2.7.6 Anemòmetre L’anemòmetre, igual que el pluviòmetre, consta d’un reed switch que es tanca dues vegades per cada volta completa de les cassoletes. Es realitzarà un circuit idèntic al del pluviòmetre.

#67

Page 68: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

2.7.7 Pantalla LCD

Com ja he comentat prèviament, es tracta d’una pantalla LCD alfanumèrica de 2x16. Consta de 16 pins (veure taula 1) El pin Vss es connectarà a terra i el Vdd a l’alimentació de 5V. Es connectarà un potenciòmetre de 10 kΩ entre terra, alimentació i Vo per regular el contrast de la pantalla. Es connectarà també un diòde entre l’alimentació i el pin Vdd per tal de protegir el LCD d’una inversió de l’alimentació. Com ja s’ha explicat, la comunicació amb LCD es realitzarà en mode 4-bits, pel que els quatre pins corresponents als quatre bits menys significatius D<3.0> es deixaran connectats a terra. Com que no es pretén realitzar cap lectura des del microcontrolador de la memòria de l’LCD, es deixarà el pin RW connectat a terra (sempre en mode escriptura). Tot i que la pantalla estarà alimentada a 5V, el fet que els pins del microcontrolador entreguin una senyal de 3.3 V corresponent a un ‘1’ lògic i de 0 V corresponent al ‘0’, això no suposarà un inconvenient. Aquest valors són bons perquè LCD interpreta un ‘1’ per tensions d’entrada a partir de 2.2 V i un ‘0’ per tensions de -0.3 V a 0.6 V.

Figura 43. Connexionat de la pantalla LCD

2.7.8 Memòria EEPROM

La memòria EEPROM s’alimentarà a 3.3.V. Els pins A2, A1 i A0 es connectaran a terra (la direcció del dispositiu serà 0b1010000x). Tal i com ja he comentat, el bus I2C opera en drenatge obert pel que es connectaran resistències entre les línies SDA i SCL i Vdd. El pin WP es connectarà a terra per permetre l’escriptura.

#68

Page 69: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

memòria de càlcul

Figura 44. Connexionat de la memòria EEPROM

#69

Page 70: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

3. Plànols

!70

Page 71: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa
Page 72: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

resultats

4. Resultats

4.1. Sensor DS18B20

Els resultats obtinguts pel sensor de temperatura DS18B20 són satisfactoris. Per una banda s’ha comprovat que l’accés a les dades del sensor i la seva interpretació són correctes. Això se sap perquè el sensor, per defecte, cada cop que es connecta després d’haver estat sense connexió, té guardat, als bytes corresponents a la temperatura de la memòria SRAM, el valor de 85º. Per tant, si es fa una lectura de la temperatura sense abans haver indicat al sensor que fes una conversió de temperatura (Convert T), la dada que s’ha de llegir són els 85º. Això s’ha comprovat i és correcte. Gràcies a això, en el moment de l’implementació del sensor, i de la seva comunicació amb el microcontrolador, vaig poder adornar-me que en un principi hi havia un error de comunicació. Aquest error consistia en que no comprovava bé si el sensor havia finalitzat la conversió de temperatura, llegint la memòria abans que aquesta hagues finalitzat. El resultat era que la primera lectura de temperatura sempre era 85º. Les següents ja no, però mai era la temperatura actual, sinó l’anterior conversió. Un cop solucionat aquest problema, les lectures obtingudes són satisfactòries. També s’ha aconseguit configurar i utilitzar el mòdul CRC amb èxit. Això suposa un gran estalvi de memòria de programa i de dades, ja que la implementació de les funcions de càlcul de CRC requereixen de taules de comprovació o algoritmes complexos. Per tot això es considera que l’implementació del sensor amb el microcontrolador s’ha realitzat amb èxit.

4.2. Sensor TSL235R

Tal i com ja he comentat, el sensor TSL235R és un sensor que proporciona una freqüència proporcional a la llum ambient. Per mesurar la freqüència s’ha utilitzat el modul de captura del pic. Aquest s’ha pogut configurar amb èxit, obtenint la lectura de la freqüència de la i poden observar com aquesta varia amb la variació de la llum. En la fase experimental s’ha observat que el sensor té un límit de resposta de freqüència a la llum (que s’ha establit al voltant dels 800kHz), saturant-se en aquest moment. En aquest moment, el microcontrolador segueix funcionant normalment, i en pic baixa la intensitat de la llum, torna a mostrar els valors que subministra el sensor. Tot i que la implementació entre el sensor i el microcontrolador s’ha pogut realitzar amb èxit, s’ha establert que el sensor TSL235R no és l’adequat per realitzar la funció que tenia adjudicada. Això és així per la següent raó: Per tal de mesurar la insolació diària, hores de sol brillant diàries, s’estableix que s’han de començar a comptar com a hores d’insolació a partir del moment que la radiació supera els 120W/m2. El que sembla que passa amb el sensor és que abans que s’arribi a aquest valor llindar ja s’ha saturat, pel que no es poden establir les hores d’insolació. Això s’hauria d’acabar de comprovar amb un piranómetre

!72

Page 73: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

resultats

(no s’ha realitzat perquè no es té accés a un). Tot i això, s’ha pogut comparar amb estacions meteorològiques properes i tot sembla indicar que això és així. Com a treball futur i de millores es podria optar per dues solucions:

- Rebaixar la intensitat de llum a través d’un filtre opac o instal·lant el sensor dins d’una caixa. Aquesta seria una possible solució. S’hauria de buscar el factor de reducció per tal de poder establir una relació entre la intensitat de la llum que li arriba al sensor i la irradiància real.

- Substituir el sensor per una resistència LDR. Això suposaria deixar d’utilitzar el mòdul de captura i utilitzar el mòdul ADC. A través d’un divisor de tensió amb la LDR i una resistència coneguda, es podria establir el valor de la resistència de LDR, tenint així una relació amb la insolació.

A nivell de cost es creu que sería millor realitzar la substitució per LDR. Tot i que no el sensor no pot realitzar la funció per la que es va triar, a nivell acadèmic es creu que s’ha assolit l’objectiu de poder utilitzar el mòdul de captura per mesurar una freqüència variant.

4.3. Sensor HIH-4010

Els resultat obtinguts amb el sensor d’humitat HIH-4010 són satisfactoris. S’ha pogut configurar el mòdul ADC amb èxit. Les lectures obtingudes s’han comparat amb un altre sensor d’humitat i són equiparables (amb una petita diferència assumible pel sistema). S’ha testejat el sensor variant els temps de mostreig i de conversió del mòdul. S’ha pogut observar que fins a valors petits de temps de mostreig, la lectura obtinguda era correcte. Tot i això, com que la velocitat no és un requisit del sistema, s’ha optat per realitzar un temps de mostreig elevat, per tal de tenir més precisió en la lectura. Degut a que es pren una mesura cada hora, per tal d’evitar erros de lectura per sorolls externs, cada vegada es realitzaran nou mesures. D’aquesta manera, realitzant una mediana, es pot minimitzar l’efecte. Per tant, es considera que tan la configuració del mòdul com l’adquisició de les dades s’han realitzat amb èxit.

4.4. Pluviòmetre

En un principi, les lectures obtingudes pel pluviòmetre no eren correctes. El problema que tenia és que al tractar-se d’un reed switch, el tancament d’aquest provocava rebots, fet que feia que el microcontrolador interpretés que es tancava més d’una vegada, incrementant en dos o tres les lectures obtingudes. Això s’ha solucionat instal·lant un condensador (tal i com es pot veure a la figura 42). S’ha comprovat que així s’eliminen els rebots i la lectura es correcte. El valor del condensador serà de 0.1 µF. El resultat ha estat satisfactori, poden mesurar la precipitació correctament.

!73

Page 74: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

resultats

4.5. Anemòmetre

L’anemòmetre funciona igual que el pluviòmetre. La diferència és que es tanca dues vegades per volta. En un principi tenia el mateix problema que amb el pluviòmetre però s’ha solucionat de la mateix manera, amb un condensador.

4.6 Pantalla LCD

Per implementar la pantalla s’ha creat una llibreria per tal d’inicialitzar-la i poder escriure en ella. Els resultats obtinguts són satisfactoris, ja que s’ha pogut mostrar per pantalla les dades que es requerien. Com a futures millores sería interessant afegir un interruptor per poder apagar la retroiluminació quan no fos necessari mostrar res per pantalla. Això suposaria un estalvi d’energia. Es podria utilitzar un transistor controlat a través del microcontrolador.

4.7. Memòria EEPROM

Per poder llegir i escriure a la memòria EEPROM externa s’ha utilitzat el mòdul I2C del microcontrolador. S’ha pogut configurar amb èxit i s’ha creat una llibreria amb les funcions necessàries per escriure i llegir les dades. Per tant, es pot dir que tant la configuració del mòdul com la comunicació amb la memòria externa s’ha resolt satisfactòriament. S’ha pogut comprovar que el mòdul és molt útil per aquest tipus de comunicació ja que, un cop configurat, facilita molt la gestió dels temps del bus I2C, alleugerint així el codi del programa.

!74

Page 75: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

conclusions

5. Conclusions

A nivell acadèmic, la valoració global del projecte és positiva. S’ha aconseguit la comunicació amb tots els sensors i components externs del projecte, aconseguint i interpretant correctament les dades facilitades per aquest. A servit per aprofundir en el coneixement dels microcontroladors de Microchip, especialment en la família 24F, amb els que no havia treballat mai. També s’ha pogut desenvolupar un prototip que funciona segons les expectatives. Els resultats del projecte els valoro positivament, tot i que per tirar endavant el prototip seria necessari replantejar-se la utilitat del sensor TSL235R, intentant una adequació d’aquest o substituint-lo per una LDR tal i com he comentat abans.

Com a treball per línies futures i millores, aprofitant que disposem d’una memòria EEPROM externa, es podrien emmagatzemar les dades de reg i evapotranspiració durant la temporada de cultiu. D’aquesta manera es podria fer un balanç global de la temporada, l’aigua total utilitzada i així fer una comparativa d’estalvi d’aigua i recursos. Això suposaria afegir al dispositiu algun mecanisme de comunicació per poder extreure les dades (afegir algun port serie, usb…), i així poder visualitzar-les i analitzar-les amb un ordinador. També es podria substituir la memòria EEPROM per una targeta SD. També es podrien afegir sensor per analitzar el tipus de terra, facilitant així les dades a aportar per part de l’usuari. Tot això estaria subjecte a un estudi econòmic, ja que l’objectiu és aconseguir un producte el més econòmic possible.

!75

Page 76: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

Annexe I. Codi del programa

Per fer-lo més llegible, el programa s’ha distribuït en varis fitxers. En el fitxer main hi ha el programa principal. En aquest fitxer s’inclouen varis fitxers amb les diferents funcions d’entrada de dades, de gestió de la EEPROM, dels sensor DS18B20… El programa s’ha realitzat en llenguatge C (XC16 de Microchip).

MAIN.C

#include <p24FJ64GB002.h>#include <stdio.h>#include <stdlib.h>#include <math.h>#define FCY 4000000UL // Definir FCY (meitat de freqüencia

// rellotge (necessari per utilizar// llibreria libpic per delays)

#include <libpic30.h> // Llibreria amb funcions de retard#include "general.h" // Prototips funcions

///////// Variables globals ///////////////

typedef struct estructura_planta char nom[12]; // Estructura on es guarden totes les int duracio_etapes[8]; // característiques de les plantes float Kcb[3]; float altura; float arrels[2]; cultiu;

typedef struct dades_diaries // Estructura on s’emmagatzemen les // dades diàries calculades float kcb; float ke; float kc; float Zr; float AFA; float ks; float altura;valors_diaris;

typedef struct estructura_terra // Estructura amb les propietats dels // diferents tipus de terra char nom[17]; float CC; float PMP; float AFE; terra;

const cultiu cultius[15] = “Broquil", 35,45,40,15,0,0,0,0, 0.15,0.95,0.85, 0.3, 0.2,0.4,“Col", 40,60,50,15,0,0,0,0, 0.15,0.95,0.85, 0.4, 0.2,0.5,“Coliflor”, 35,50,40,15,0,0,0,0, 0.15,0.95,0.85, 0.4, 0.2,0.4,“Enciam”, 25,35,30,10,20,30,15,10, 0.15,0.90,0.90, 0.3, 0.2,0.3,“Ceba", 20,35,110,45,15,25,70,40, 0.15,0.95,0.65, 0.4, 0.2,0.3,“Espinacs", 20,20,25,5,20,20,15,5, 0.15,0.95,0.85, 0.3, 0.2,0.3,

!76

Page 77: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

"Ceba tendre”, 0,0,0,0,25,30,10,5, 0.15,0.90,0.90, 0.3, 0.2,0.3,“Alberginia", 0,0,0,0,30,40,40,20, 0.15,1.1,0.7, 0.8, 0.2,0.7,“Pebrot”, 0,0,0,0,25,35,40,20, 0.15,1.0,0.8, 0.7, 0.2,0.5,“Tomaquet", 0,0,0,0,30,40,45,30, 0.15,1.1,0.7, 0.6, 0.2,0.7,“Carbasso", 0,0,0,0,25,35,25,15, 0.15,0.9,0.7, 0.3, 0.2,0.6,“Carabassa", 0,0,0,0,20,30,30,20, 0.15,0.95,0.70, 0.4, 0.2,1.0,“Bajoca", 0,0,0,0,20,30,30,10, 0.15,1.0,0.8, 0.4, 0.2,0.5,“Fabes", 0,0,0,0,20,30,35,15, 0.15,1.1,1.05, 0.8, 0.2,0.5,“Pesols", 0,0,0,0,20,30,35,15, 0.15,1.1,1.05, 0.5, 0.2,0.6;

const terra terres[9] = "Arenos", 0.12, 0.045, 4.5, "Arenofranca", 0.15, 0.065, 6, "Franca-Arenosa", 0.23, 0.11, 8, "Franca", 0.25, 0.12, 9, "Franca llimosa", 0.29, 0.15, 9.5, "Llimosa", 0.32, 0.17, 9.5, "F-Argil-Llimosa", 0.33, 0.20, 9.5, "Argilosa-Llimosa",0.36, 0.23, 10, "Argilosa", 0.36, 0.22, 10,;

const float PI=3.1415392653;

unsigned char tipus_terra[12], cultivat[15], superficie[15];valors_diaris diari[15];

unsigned char espera=1, fi_bucle=0, error_ds18B20, error_EEPROM;unsigned int t0, t, cont_ane, cont_pluv;

float fw_prev, fwirrig=0.35, RNN_prev, Defin_prev, AFE, AET, aigua_dispo, Dr_prev, Dr_corr_prev;

#include "lcd_control.c" //Funcions control LCD#include "rtcc.h" //Funcions control RTCC i calcul dies#include "entrada_dades.h" //Funcions d'entrada de dades#include "1wire_protocol.c" //Funcions de control DS18B20#include "eeprom.h" //Funcions per entrar i llegir dades

//EEPROM#include "calculs.h" //Funcions de càlcul

//evapotranspiració i reg

/////// Paraules de configuració /////////

_CONFIG1 (JTAGEN_OFF & FWDTEN_OFF); //Mòdul JTAG deshabilitat (RB5-RB9 //i/o digitals) i WDT desactivat

_CONFIG2 (POSCMOD_NONE & OSCIOFNC_ON & FNOSC_FRC); //Oscil·lador primari desactivat, RA3 i/o //digital, Oscil·lador FRC seleccionat (8MHz)

_CONFIG3 (SOSCSEL_IO); //RA4 i RB4 i/o digitals

_CONFIG4 (RTCOSC_LPRC); //Es selecciona el LPRC intern com a //rellotge de referència del mòdul RTCC

!77

Page 78: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

/////// Rutines interrupció ////////

void _ISR _RTCCInterrupt( void) espera = 0; //Torna a activar estat espera _RTCIF = 0; //Esborra la bandera d'interrupció

void _ISR _IC1Interrupt(void)

t0 = IC1BUF; //Agafar valors capturats pel mòdul t = IC1BUF; _IC1IF = 0; //Esborra la bandera d'interrupció

void _ISR _INT1Interrupt(void) cont_pluv++; //Incrementa comptador _INT1IF = 0; //Esborra la bandera d'interrupció

void _ISR _INT2Interrupt(void) cont_ane++; //Incrementa comptador _INT2IF = 0; //Esborra la bandera d'interrupció

void _ISR _T1Interrupt (void) error_ds18B20 = 1; //Activa avis d’alarma _T1IF = 0; //Esborra la bandera d'interrupció

void _ISR _T3Interrupt(void) _LATB0 = 0; //Apaga reg _T3IF = 0; //Esborra bandera interrupció

/////// Funcions /////////////////

int lectura_ADC()

AD1CON1bits.ADON = 1; //Activa mòdulAD1CHS = 10; //Selecciona canalAD1CON1bits.SAMP = 1; //Comença mostreigwhile (!AD1CON1bits.DONE); //Espera finalitzi conversióreturn(ADC1BUF0); //Retorna valor convertit

int mediana_ADC() int temporal, valors[9]; unsigned char i, j;

!78

Page 79: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

for (j=0; j<10; j++) valors[j]=lectura_ADC(10); //Realitza deu conversions

for (j=0; j<9; j++) //Calcula mediana for (i=j+1; i<9; i++) if (valors[i]<valors[j]) temporal = valors[i]; valors[i] = valors[j]; valors[j] = temporal;

return (valors[4]); //Retorna valor

float calcul_humitat (int vol_hr, float temp) float hr_prev, tensio_adc;

tensio_adc = vol_hr*0.0032; //Converteix la lectura del ADC a //volts (3,3/1024 = 0.0032)

tensio_adc = tensio_adc*124/100; //Converteix tensió llegida a la //corresponent tensió sense el //divisor

hr_prev = ((tensio_adc/5)-0.16)/0.0062;

//Calcula Humitat Relativa corresponent al voltage //sortida segons indica fabricant

return (hr_prev/(1.0546-0.00216*temp)); //Ajusta valor HR segons //temperatura

void inicialitzacio_periferics()//Inicialització perifèrics

// Configurar RPn.// Macro que realitza seqüencia de desbloquejament per assignació de RPn

__builtin_write_OSCCONL(OSCCON & 0xbf); RPINR7 = 0x0006; //IC1 associat al port RP6 (RA1) RPINR0 = 0x0D00; //INT1 associat al port RP13 (RB13) RPINR1 = 0x000F; //INT2 associat al port RP15 (RB15)__builtin_write_OSCCONL(OSCCON | 0x40);

// Macro que realitza seqüencia de bloquejament per assignació de RPn

// Configurar Input Capture IC1

IC1CON1 = 0x1C25; // Selecciona rellotge del sistema, interrupció //per cada 2 event amb event a cada 16è flanc //ascendent

IC1CON2 = 0x0000;

!79

Page 80: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

//Configurar Timer1 T1CON = 0x0030; //Timer en preescaler 1:256 (a 8MHz

//incrementa cada 64us)PR1 = 0xffff;

//Configurar Timer 2 en mode 32 bits amb Timer3

T2CON = 0x0030; //Timers en preescaler 1:256 (a 8MHz incrementa //cada 64us)

T3CON = 0x0000;T2CONbits.T32 = 1; //Configurar timer 2 i 3 en mode 32 bits_T2IE = 0; //Desactivar interrupcions timer 2 i 3_T3IE = 0;

//Configura ADC.AD1CON1 = 0x00E0; //Seqüencia de control de conversió automàtica.

//Format de la dada de sortida enter sense signeAD1CSSL = 0; //No es requereix escaneigAD1CON2 = 0; //Utilitzar MUXA. AVss i AVdd s'utilitzen com a

//Vref+/-AD1CON3 = 0x1F02; // Rellotge del sistema. Tad = 2 x Tcy = 0,5 µs

inicialitzar_i2c(); //Inicialització mòdul I2C

void inicialitzacio_interrupcions() _NSTDIS = 1; //Anidament de interrupcions desactivat INTCON2 = 0x0006; //Interrupcions externes 1 i 2 en flanc de baixada

_INT1IP = 5; //Establir prioritats interrupció _INT2IP = 4; _RTCIP = 3; _T1IP = 5; _T3IP = 3; _T4IP = 5; _IC1IP = 2; _CRCIP = 2;

_INT1IF = 0; // Esborra banderes interrupció _INT2IF = 0; _RTCIF = 0; _T1IF = 0; _T3IF = 0; _T4IF = 0; _IC1IF = 0; _CRCIF = 0;

void carregar_timer32_T2T3 (unsigned long temps) TMR3 = 0x00; //Inicialitza Timer 3 a 0 TMR2 = 0x00; //Inicialitzar Timer 2 a 0 PR3 = temps>>16; //Carrega MSW a PR3 PR2 = temps; //Carrega LSW a PR2 _T3IF = 0; //Borra bandera interrupció

!80

Page 81: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

_T3IE = 1; //Activa interrupció T2CONbits.TON = 1; //Activa el Timer 2 i 3

float medir_insolacio (float *h_ini, unsigned char *cont) unsigned int periode; float freq; float hores_total, h_fin; unsigned char buf[10];

if (t>t0) periode = t-t0; freq = (4000000*16)/((float)periode*1000); //Frequencia en kHz

if (freq>500) //Si la freqüencia és superior a 500kHz //inicia compte d’hores if (*cont == 0) *h_ini = adquirir_hora(); *cont = 1; else if (*cont == 1) //Si és inferior i s’estava realitzan //compte d’hores, aturar h_fin = adquirir_hora(); hores_total = h_fin - *h_ini; *cont = 0; return(hores_total); if (IC1CON1bits.ICOV == 1) IC1CON1bits.ICM = 0; IC1CON1bits.ICM = 5; return (0);

unsigned char mostrar_menu() unsigned char fi;

__delay_ms(500); while(1) escriure_cmd (0x01); escriure_cmd(0x02); escriure_txt("Veure hora"); while (_RB4 == 0) if (_RA4 == 1) mostrar_hora ();

!81

Page 82: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

__delay_ms(5000); break; __delay_ms(500); escriure_cmd (0x01); escriure_cmd(0x02); escriure_txt("Cambiar dia i hora"); while (_RB4 == 0) if (_RA4 == 1) entrar_dia_hora(); mostrar_hora (); __delay_ms(3000); break; __delay_ms(500); escriure_cmd (0x01); escriure_cmd(0x02); escriure_txt("Finalitzar hort"); while (_RB4 == 0) if (_RA4 == 1) fi = test_si_no("Segur?"); if (fi) return(1); __delay_ms(500); escriure_cmd (0x01); escriure_cmd(0x02); fi = test_si_no("Sortir?"); if (fi) return(0); __delay_ms(500); return (0);

void inicialitzar_dades(float t_max, float t_min, float ins, float h_max, float h_min, int cont_p, int cont_a) t_max = 0; //Estableix valors inicials per començar t_min = 0; //mesura diària ins = 0; h_max = 0; h_min = 0; cont_p = 0; cont_a = 0;

!82

Page 83: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

void main(void) //Cos del programa

//Variables

unsigned char temporada, j, buf[12];unsigned char contant=0, regar;float temp_max=0, temp_min=0, hr_max=0, hr_min=0, vel_vent=0, precip=0, latitud_rad, RNN;float hora_inicial=0, h_insolacio=0;float temperatura, humitat, eto, etc;unsigned int tensio, elev_mar;unsigned int J, sembra, final;float kc_ponderat, RBN, Trn, t_reg_minuts, caudal, hora_final;unsigned long temps_reg;unsigned char hora_reg, hora_actual, reiniciar=0;

//Configurar pins

AD1PCFG = 0xfBff; //Tots els ports digitals menys AN10 //(RB14) analògic

TRISA = 0x13; //Port A sortida menys RA0(DS18B20), //RA1(TSL235R) i RA4 (polsador)

_ODA0 = 1; _LATB0 = 0;//Configuració del port B//Es fa bit a bit perquè sinó s'ha //observat que el mòdul I2C deixa de//funcionar

TRISBbits.TRISB0 = 0; //Sortida. Avis reg TRISBbits.TRISB1 = 0; TRISBbits.TRISB2 = 1; //Entrada. SDA I2C TRISBbits.TRISB3 = 1; //Entrada. SCL I2C TRISBbits.TRISB4 = 1; //Entrada. Polsador TRISBbits.TRISB5 = 0; //Sortida. RS LCD TRISBbits.TRISB7 = 0; //Sortida. E LCD TRISBbits.TRISB8 = 0; //Sortida. Dades LCD TRISBbits.TRISB9 = 0; //Sortida. Dades LCD TRISBbits.TRISB10 = 0; //Sortida. Dades LCD TRISBbits.TRISB11 = 0; //Sortida. Dades LCD TRISBbits.TRISB13 = 1; //Entrada. Pluviòmetre TRISBbits.TRISB14 = 1; //Entrada. HIH 4010 TRISBbits.TRISB15 = 1; //Entrada. Anemòmetre

//Inicialitzar perifèrics i interrupcions

inicialitzacio_periferics(); inicialitzacio_interrupcions();

ini_LCD_4bits(); //Inicialitza LCD en mode 4 bits __delay_ms(1000); //Espera 1 segon

LATBbits.LATB2=1; LATBbits.LATB3=1; _TRISA2 = 0; _TRISA3 = 0;

!83

Page 84: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

//Introduir dades while (1) if (1 == mirar_inici()) //Si s’ha realitzat un reinici inesperat hora_actual = recuperar_dades_eeprom_hora(&temp_max, &temp_min, &h_insolacio, &hr_max, &hr_min, &cont_pluv, &cont_ane, &regar); recuperar_dades_eeprom_dia(&sembra, &temporada, &elev_mar, &latitud_rad, &caudal, hora_actual);

calcul_AET_AFE ();//Calcular el dia que finalitza l'hort

final = final_temporada(sembra, temporada);

else for (j=0; j<15; j++) //Inicialitza dades cultivat[j] = 0; superficie[j] = 0; if (j<12) tipus_terra[j] = 0;

temporada = entrar_data(); //Entrar la data (dia i hora) i//mira si està dins de //temporada de cultiu

sembra = entrar_data_sembra(); //Entra dia que es sembra introduir_cultius(temporada); //Introduir cultius de l'hort //Calcular el dia que finalitza l'hort

final = final_temporada(sembra, temporada); intro_superficie_cultiu(); //Introduir % que ocuparà cada //cultiu tipus_de_terra(); //Introduir tipus de terreny latitud_rad = cal_latitud_rad (); elev_mar = intro_var(2001,-1,"Altitut:",1); caudal = calcul_caudal_reg(); //Introduir i calcular

//caudal del sistema de reg

//Inicialitzar dades pel primer dia

calcul_AET_AFE ();

for (j=0;j<15;j++) diari[j].Zr = cultius[j].arrels[0]; diari[j].altura = 0; RNN_prev = 0; Defin_prev = AET; inicialitzar_dades(temp_max, temp_min, h_insolacio, hr_max, hr_min, cont_pluv, cont_ane);

!84

Page 85: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

//Alarmes i hores de reg

alarma_RTCC(0,0,0,0,0,0); //Estableix alarma del RTCC

if (temporada == 0 ) //Estableix hora de reg hora_reg = 11; //11h del matí si és hivern else hora_reg = 6; //6h del matí si és estiu

//Bucle del programa (adquisició de dades, càlcul ETo, ETc i RNN i reg

_INT1IE = 1; //Activa interrupció Interrupcio Externa 1 _INT2IE = 1; //Activa interrupció Interrupcio Externa 2 _T1IE = 1; _T3IE = 1; _T4IE = 1;

reiniciar = 0;

while(!reiniciar) espera = 1;

_IC1IE = 1; //Activa interrupció IC1 //Mentres no alarma del RTCC(espera=0)

while ((espera)&&(_RB4 == 0)) //Medir insolació h_insolacio = h_insolacio + medir_insolacio(&hora_inicial, &contant); __delay_ms(400);

if (espera == 1) //Si s’ha sortit del bucle sense alarma reiniciar = mostrar_menu(); if (reiniciar == 1) reiniciar_eeprom(); else _IC1IE = 0; //Desactivar interrupció IC1 error_ds18B20 = 0; TMR1 = 0; _TON = 1; //Inicia temporització per fallada de comunicació temperatura = llegir_temperatura(&error_ds18B20); _TON = 0; //Apaga Timer1 if (error_ds18B20 == 1) escriure_cmd (0x01); //Borrar LCD escriure_cmd(0x02); escriure_txt("Error DS18B20"); else if ((temp_max==0)&&(temp_min==0)) //Per la primera lectura

//de temperatura

!85

Page 86: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

temp_min = temperatura; temp_max = temperatura; else if (temperatura > temp_max) //Actualitza temperatura màxima temp_max = temperatura; else if (temperatura < temp_min) //Actualitza temperatura mínima temp_min = temperatura;

tensio = mediana_ADC(); humitat = calcul_humitat(tensio, temperatura); if ((hr_max==0)&&(hr_min==0)) //Per la primera lectura de

//temperatura hr_min = humitat; hr_max = humitat; else if (humitat > hr_max) //Actualitza temperatura màxima hr_max = humitat; else if (humitat < hr_min) //Actualitza temperatura mínima hr_min = humitat;

if (contant == 1) hora_final = adquirir_hora(); h_insolacio = h_insolacio + (hora_final - hora_inicial); contant = 0;

guardar_dades_eeprom_hora(temp_max, temp_min, h_insolacio, hr_max, hr_min, cont_pluv, cont_ane, regar);

_RTCPTR = 1; //Comença seqüència de lectura de hora hora_actual = (unsigned char) RTCVAL; hora_actual = passar_binari (hora_actual);

if (hora_actual == 0) //Inicia calcul ETo, ETc i RNN precip = (float) cont_pluv; precip = cont_pluv*0.28; //Calcula la precipitació total cont_pluv = 0; //Inicialitza el comptador per el proper dia

vel_vent = (float)cont_ane; vel_vent = (vel_vent*2.4)/(24*3600); //Velocitat mitja

//diaria en km/h vel_vent = vel_vent*(1000/3600); //Velocitat del vent mitja

//diaria en m/s cont_ane = 0; //Inicialitza el comptador per el proper dia

!86

Page 87: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

J = calcul_dia()-1; //Dia pel que es calcula la ETo i //ETc (dia anterior)

eto = calcul_eto (latitud_rad, temp_max, temp_min, hr_min, hr_max, vel_vent, h_insolacio, J, elev_mar);

if (J>=sembra) for (j=0; j<15; j++) if (cultivat[j]==1)//Calcula dades dels cultius existents diari[j].kcb = calcul_kcb_diari(J,j,temporada, sembra); diari[j].ke = calcul_ke_diari(j, eto, vel_vent, hr_min, diari[j].kcb, precip); diari[j].kc = diari[j].kcb+diari[j].ke; diari[j].Zr = prof_radicular_dia(J, j, sembra, diari[j].kcb, temporada); diari[j].AFA = calcul_AFA_diari (j);

kc_ponderat = calcul_kc_ponderat(); //Calcula el Kc de l'hort etc = eto*kc_ponderat; //Calcula l'ETc del dia

//Mirar si hi ha necessitat de reg RNN = calcul_reg_net_necessari(etc, eto, precip); if (RNN > 0) //Si hi ha necessitat de reg RNN_prev = RNN; RBN = (RNN/90)*100; //Reg brut necessari. Eficiència del

//reg del 90% Trn = RBN/caudal; //Temps de reg necessari. Reg brut

//dividit per caudal del sistema de reg t_reg_minuts = passar_hores_minuts(Trn); temps_reg = t_reg_minuts * 937500;

//A 8MHz amb preescaler de 256, 937500 equival a 1 minut regar = 1; else RNN_prev = 0;

if (J == final) escriure_cmd (0x01); escriure_cmd(0x02); escriure_txt("Final de temporada"); reiniciar_eeprom(); reiniciar = 1; else inicialitzar_dades(temp_max, temp_min, h_insolacio, hr_max, hr_min, cont_pluv, cont_ane); guardar_dades_eeprom_hora(temp_max, temp_min, h_insolacio, hr_max, hr_min, cont_pluv, cont_ane, regar); guardar_dades_eeprom_dia(sembra, temporada, elev_mar,latitud_rad, caudal); else

!87

Page 88: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

for (j=0; j<15; j++)

if (cultivat[j]==1) //Calcula dades dels cultius existents diari[j].kcb = cultius[j].Kcb[0]; diari[j].ke = calcul_ke_diari (j, eto, vel_vent, hr_min, diari[j].kcb, precip); diari[j].kc = diari[j].kcb+diari[j].ke; diari[j].Zr = prof_radicular_dia(J,j,sembra,diari[j].kcb, temporada); diari[j].AFA = calcul_AFA_diari (j); kc_ponderat = calcul_kc_ponderat(); //Calcula el Kc de l'hort etc = eto*kc_ponderat; //Calcula l'ETc del dia

//Mirar si hi ha necessitat de reg RNN = calcul_reg_net_necessari(etc, eto, precip); inicialitzar_dades(temp_max, temp_min, h_insolacio, hr_max, hr_min, cont_pluv, cont_ane); guardar_dades_eeprom_hora(temp_max, temp_min, h_insolacio, hr_max, hr_min, cont_pluv, cont_ane, regar); guardar_dades_eeprom_dia(sembra, temporada, elev_mar, latitud_rad, caudal);

if (regar) if (hora_actual==hora_reg) carregar_timer32_T2T3 (temps_reg); //Carrega el Timer 3 amb el

//temps de reg total _LATB0 = 1; //Activa reg regar = 0; espera = 1; //Torna a entrat en estat d'espera mesurant insolació

FI MAIN

!88

Page 89: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

General.h

//=========================== Prototips ===============================//

//Inicialització sistema (data, cultius, tipus terra...)

unsigned int intro_var(int num_max, int num_min, char text[8], int increment);float intro_var_float(float num_max, float num_min, char text[8], float increment);unsigned char calcul_dies_mes(unsigned char mes1, unsigned char any1);unsigned char test_si_no();unsigned char mirar_temporada(unsigned char mes1);void introduir_cultius(unsigned char temporada);void tipus_de_terra();void calcul_AET_AFE ();void intro_superficie_cultiu();

//Funcions control LCD

void port_4bits (char dada);void escriure_byte (char dada);void escriure_cmd (char dada);void ini_LCD_4bits ();void escriure_txt (char *txt);

//Funcions RTCC

unsigned char passar_bcd (unsigned char binari);unsigned char passar_binari (unsigned char bcd);void iniciar_RTCC (unsigned char any1, unsigned char mes1, unsigned char dia1, unsigned char diaset1, unsigned char hora1, unsigned char minuts1, unsigned char segons1);void alarma_RTCC (unsigned char almes, unsigned char aldia, unsigned char aldiaset, unsigned char alhora, unsigned char alminuts, unsigned char alsegons);void mostrar_hora ();unsigned int calcul_dia();unsigned char calcul_any_traspas();float adquirir_hora();unsigned char adquirir_min();unsigned int passar_hores_minuts(float hores_reg);unsigned int final_temporada(unsigned int jsem, unsigned char i);

//Funcions EEPROM

void i2c_stop();void inicialitzar_i2c();void i2c_start();void i2c_restart();unsigned char escriure_byte_I2C(unsigned char dada8);unsigned char rebre_byte_I2C ();void generar_ACK();void generar_NACK();unsigned char escriure_int_i2c(unsigned int dada16);

!89

Page 90: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

unsigned int rebre_int_i2c();unsigned int rebre_ultim_int_i2c();void escriure_float_i2c(float dada32);float rebre__float_i2c();float rebre_ultim_float_i2c();void guardar_dades_eeprom_hora(float t_max, float t_min, float ins, float h_max, float h_min, int cont_p, int cont_a, unsigned char reg);unsigned char recuperar_dades_eeprom_hora(float *t_max, float *t_min, float *ins, float *h_max, float *h_min, unsigned int *cont_p, unsigned int *cont_a, unsigned char *reg);void recuperar_dades_eeprom_dia (unsigned int *dia_sembra, unsigned char *i, unsigned int *altitut, float *latitut, float *cau_reg, unsigned char h);void reiniciar_eeprom();unsigned char mirar_inici();

//Calculs

int lectura_ADC();float calcul_humitat (int vol_hr, float temp);float cal_latitud_rad();float pressio_vapor_temp(float t);float calcul_eto(float lat_rad, float t_max, float t_min, float HRmin, float HRmax, float vent, float n, unsigned int dia_any, int el_mar);float calcul_kcb_diari(unsigned int dia_any, unsigned char x, unsigned char i, unsigned int jsem);float calcul_kcb_ajustat_clima (float k, unsigned char x, float vent, float HRmin);float calcul_ke_diari(unsigned char x, float ETo, float vent, float HRmin, float Kcb, float precip_dia);float calcul_kc_ponderat();float prof_radicular_dia(int dia_any, unsigned char x, int dia_ini, float Kcb, unsigned char i);float calcul_AFA_diari (unsigned char x);float calcul_reg_net_necessari(float ETc, float ETo, float precip_dia); float calcul_caudal_reg ();

!90

Page 91: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

lcd_control.c

#define LCD_PIN_RS _LATB5 //Pin RS, dada = 1/comanda=0#define LCD_PIN_E _LATB7 //Pin E, validació DB<7:4> en flanc 1->0#define LCD_PIN_DB4 _LATB8 //Pins DB7:DB4, bits 4, 5, 6 i 7 de dades (MSB)#define LCD_PIN_DB5 _LATB9#define LCD_PIN_DB6 _LATB10#define LCD_PIN_DB7 _LATB11

void port_4bits (char dada) LCD_PIN_DB4 = dada & 1; LCD_PIN_DB5 = (dada & 2)>>1; LCD_PIN_DB6 = (dada & 4)>>2; LCD_PIN_DB7 = (dada & 8)>>3;

void escriure_byte (char dada) char hg_4bits;

LCD_PIN_E = 0; LCD_PIN_RS = 1; //Mode dada __delay_us(1); LCD_PIN_E = 1; hg_4bits = dada >>4; //4 bits alts del caràcter port_4bits (hg_4bits); //Transmetre els 4 bits alts al LCD __delay_us(1); LCD_PIN_E = 0; __delay_us(1); LCD_PIN_E = 1; port_4bits (dada); //Transmetre els 4 bits baixos al LCD __delay_us(1); LCD_PIN_E = 0; __delay_us(50);

void escriure_cmd (char dada) char hg_4bits;

hg_4bits = dada >>4; LCD_PIN_E = 0; LCD_PIN_RS = 0; //Mode comanda port_4bits(hg_4bits); //4 bits alts al port LCD_PIN_E = 1; __delay_us(1); LCD_PIN_E = 0; __delay_us(1); LCD_PIN_E = 0; LCD_PIN_RS = 0; //Mode comanda port_4bits(dada); //4 bits baixos al port LCD_PIN_E = 1; __delay_us(1);

!91

Page 92: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

LCD_PIN_E = 0; __delay_ms(2);

void ini_LCD_4bits () __delay_ms(50); //Inicialitza LCD en mode 4 bits LCD_PIN_E = 0; LCD_PIN_RS = 0; port_4bits(0x02); LCD_PIN_E = 1; __delay_us(1); LCD_PIN_E = 0; __delay_us(1); escriure_cmd(0x28); //Function set escriure_cmd(0x0E); //Display on, cursor on, blink off escriure_cmd(0x01); //Clear display escriure_cmd(0x06); //Increment mode y entrire shift off

void escriure_txt (char *txt) int i;

for (i=0; i<16; i++) if (*txt!=0x00) escriure_byte(*txt++);

!92

Page 93: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

rtcc.h

unsigned char passar_bcd (unsigned char binari) return (((binari/10)<<4) + (binari)%10);

unsigned char passar_binari (unsigned char bcd) return (((bcd&15) + (bcd>>4)*10));

void iniciar_RTCC (unsigned char any1, unsigned char mes1, unsigned char dia1, unsigned char diaset1, unsigned char hora1, unsigned char minuts1, unsigned char segons1)

any1 = passar_bcd(any1); //Passa data i hora de binari a BCD mes1 = passar_bcd(mes1); dia1 = passar_bcd(dia1); diaset1 = passar_bcd(diaset1); hora1 = passar_bcd(hora1); minuts1 = passar_bcd(minuts1); segons1 = passar_bcd(segons1);

//Seqüència per activar bit RTCWREN per poder escriure als registres //de data, dia, hora, minuts i segons asm volatile("disi #5"); asm volatile("mov #0x55, w7"); asm volatile("mov w7,_NVMKEY"); asm volatile("mov #0xAA, w8"); asm volatile("mov w8,_NVMKEY"); asm volatile("bset _RCFGCAL, #13"); // Activa RTCWREN =1 asm volatile("nop"); asm volatile("nop");

_RTCEN = 0; //Desactiva el mòdul RTCC

_RTCPTR = 3; //Comença la seqüència establiment data i hora RTCVAL = any1; // Any RTCVAL = (mes1<<8) + dia1; // Mes/Dia RTCVAL = (diaset1<<8) + hora1; // Dia setmana/Hora RTCVAL = (minuts1<<8) + segons1; // Minuts/Segons

_RTCEN = 1; //Activa el mòdul RTCC _RTCWREN = 0; //Desactiva i bloqueja l'escriptura al mòdul RTCC

void alarma_RTCC (unsigned char almes, unsigned char aldia, unsigned char aldiaset, unsigned char alhora, unsigned char alminuts, unsigned char alsegons)

//Passa data i hora alarmes de binari a BCD almes = passar_bcd(almes); aldia = passar_bcd(aldia); aldiaset = passar_bcd(aldiaset);

!93

Page 94: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

alhora = passar_bcd(alhora); alminuts = passar_bcd(alminuts); alsegons = passar_bcd(alsegons);

_ALRMEN = 0; //Desactiva alarma RTCC

_ALRMPTR = 2; //Comença la seqüència establiment establiment alarma ALRMVAL = (almes<<8) + aldia; //Mes / Dia ALRMVAL = (aldiaset<<8) + alhora; //Dia setmana / Hora ALRMVAL = (alminuts<<8) + alsegons; //Minuts / Segons

_ARPT = 0; //Activa el comptador de repeticions _CHIME = 1; //Repetir indefinidament

//Activa la mascara de l'alarma _AMASK = 0b0011; //Cada hora _ALRMEN = 1; //Activa alarma _RTCIF = 0; //Esborra la bandera d'interrupció _RTCIE = 1; //Activa la interrupció

void mostrar_hora () unsigned int diaset_hora, min_seg; char buf[9];

_RTCPTR = 1; //Comença la seqüència de lectura de hora diaset_hora = RTCVAL; min_seg = RTCVAL;

//Converteix codi BCD a caràcters ASCII buf[0]= (unsigned char)(((diaset_hora>>4)&0x0003)+0x30); buf[1]= (unsigned char)((diaset_hora&0x000F)+0x30); buf[2]= 0x3A; buf[3]= (unsigned char)(((min_seg>>12)&0x0007)+0x30); buf[4]= (unsigned char)(((min_seg>>8)&0x000F)+0x30); buf[5]= 0x3A; buf[6]= (unsigned char)(((min_seg>>4)&0x0007)+0x30); buf[7]= (unsigned char)((min_seg&0x000F)+0x30); buf[8]= 0x00;

escriure_cmd (0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici

escriure_txt(buf); //Escriu hora al LCD __delay_ms(500); //Espera 500ms per realitzar refresc de //pantalla del LCD

unsigned int calcul_dia(void) unsigned char mes, dia, any, traspas; unsigned int any_bcd, mes_dia, j;

_RTCPTR = 3; any_bcd = RTCVAL; mes_dia = RTCVAL;

!94

Page 95: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

any = (unsigned char) (any_bcd&0xFF); mes = (unsigned char) ((mes_dia>>8)&0xFF); dia = (unsigned char) (mes_dia&0xFF);

any = passar_binari(any); mes = passar_binari(mes); dia = passar_binari(dia); traspas = calcul_any_traspas();

j = (unsigned int)((275*mes/9-30+dia)-2); if (mes<3) return (j+2); else if ((mes>2) && (traspas == 1)) //Si mes és superior a 2 i any de

//traspàs return (j+1);

else return (j);

unsigned char calcul_any_traspas() unsigned char any; unsigned int a, any_bcd;

_RTCPTR = 3; any_bcd = RTCVAL;

any = (unsigned char) (any_bcd&0xFF); any = passar_binari(any);

a = any + 2000;

if (a%4==0) if (a%100!=0) return (1); else if (a%400==0) return (1); return(0);

float adquirir_hora()

unsigned char hora, minuts, segons; unsigned int diaset_hora, min_seg; float h;

_RTCPTR = 1; diaset_hora = RTCVAL;

!95

Page 96: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

min_seg = RTCVAL;

hora = (unsigned char) (diaset_hora&0x003F); minuts = (unsigned char) ((min_seg>>8)&0x007F); segons = (unsigned char) (min_seg&0x007F);

hora = passar_binari(hora); minuts = passar_binari(minuts); segons = passar_binari(segons);

h = (float) ((hora + ((float)minuts/60)+ ((float)segons/3600)));

return (h);

unsigned char adquirir_min() unsigned char minuts; unsigned int min_seg;

_RTCPTR = 0; min_seg = RTCVAL;

minuts = (unsigned char) ((min_seg>>8)&0x007F); minuts = passar_binari(minuts); return (minuts);

unsigned int passar_hores_minuts(float hores_reg) unsigned int hores, minuts, segons;

hores = (int) hores_reg; //Hores de reg hores_reg = (hores_reg - hores)*60; minuts = (int) hores_reg; //Minuts de reg hores_reg = ((hores_reg-minuts)/60)*3600; segons = (int) hores_reg; //Segons reg

if (segons > 30) //Arrodoneix per dalt si s'escau return ((hores*60) + minuts); //Temps de reg en minuts else return ((hores*60) + minuts + 1); //Temps de reg en minuts

unsigned int final_temporada(unsigned int jsem, unsigned char i) unsigned char j, x; unsigned int fi_temp, max=0;

for (j=0; j<15; j++) if (cultivat[j]==1) fi_temp = jsem; for (x=0; x<4; x++) fi_temp = fi_temp+(cultius[j].duracio_etapes[x+i]); if (fi_temp>max)

!96

Page 97: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

max = fi_temp; return (max);

!97

Page 98: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

entrada_dades.h

float intro_var_float(float num_max, float num_min, char text[8], float increment)

unsigned char buf[5]; float var=0;

escriure_cmd (0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt(text); sprintf (buf, "%.2f", var); escriure_txt (buf); while ((_RB4 == 0)||(var == num_min)) if (_RA4 == 1) if (var >= num_max) var = 0; else var= var+increment; escriure_cmd (0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt(text); sprintf (buf, "%.2f", var); escriure_txt (buf); __delay_ms(300); //Elimina rebots pulsador __delay_ms(500); //Elimina rebots pulsador return(var);

unsigned int intro_var(int num_max, int num_min, char text[8],int increment)

unsigned char buf[5]; unsigned char var=0;

escriure_cmd (0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt(text); sprintf (buf, "%d", var); escriure_txt (buf); while ((_RB4 == 0)||(var == num_min)) //Introduïr any //__delay_ms(100); if (_RA4 == 1) if (var == num_max) var = 0; else var= var+increment;

!98

Page 99: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

escriure_cmd (0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt(text); sprintf (buf, "%d", var); escriure_txt (buf); __delay_ms(300); //Elimina rebots pulsador __delay_ms(500); //Elimina rebots pulsador return(var);

unsigned char calcul_dies_mes(unsigned char mes1, unsigned char any1) switch (mes1) case 1: case 3: case 5: case 7: case 8: case 10: case 12: return(31); break; case 2: if (any1%4 == 0) return(29); else return(28); break; default: return(30);

unsigned char test_si_no(char text[]) unsigned char test=0;

escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt(text); escriure_txt(" NO"); while (_RB4 == 0) if (_RA4 == 1) if (test == 0) test = 1; escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt(text); escriure_txt(" SI"); __delay_ms(400);

!99

Page 100: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

else test = 0; escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt(text); escriure_txt(" NO"); __delay_ms(400); __delay_ms(500); return(test);

unsigned char mirar_temporada(unsigned char mes1) if ((mes1>8)&&(mes1<12)) //Començament de dates per plantar hort hivern escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt("Hort hivern"); return(0);

else if (((mes1>2)&&(mes1<6))) escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt("Hort estiu"); return(4); else escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt("Fora temporada"); return(2);

while(_RB4 == 0); __delay_ms(500);

void introduir_cultius(unsigned char i) unsigned char j, jmax, jmin, correcte = 0;

for (j=0; j<15; j++) cultivat[j]=0;

if (i == 0)

!100

Page 101: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

jmin = 0; jmax = 5; else jmin = 3; jmax = 15;

escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt("Intro cultius:"); while(_RB4 == 0); __delay_ms(500);

while (correcte == 0) for (j=jmin; j<jmax; j++) cultivat[j]= test_si_no(cultius[j].nom); escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt("Has intoduit:"); __delay_ms(2000); for (j=0;j<15;j++) if (cultivat[j]==1) escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); escriure_txt(cultius[j].nom); __delay_ms(2000); correcte = test_si_no("Correcte?");

void tipus_de_terra() unsigned char j=0;

j = (unsigned char) intro_var(8,-1,"Tipus sol: ",1); tipus_terra[j] = 1;

void calcul_AET_AFE () unsigned char j=0;

while (tipus_terra[j]==0) j++; aigua_dispo = 1000*(terres[j].CC-terres[j].PMP); AET =1000*(terres[j].CC-terres[j].PMP*0.5)*0.1; AFE = terres[j].AFE;

!101

Page 102: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

void intro_superficie_cultiu() unsigned char j=0, total=0;

escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt ("Intro super cultiu"); while (_RB4 == 0); __delay_ms(500);

for (j=0; j<15; j++) if (cultivat[j]!=0) superficie[j] = (unsigned char) intro_var(100,0,cultius[j].nom,5); total = total + superficie[j]; if ((j==14)&&(total!=100)) escriure_cmd (0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt("Error de percentatge"); __delay_ms(2000); j=0; total = 0;

unsigned char entrar_data() unsigned char dia=0, mes=0, any=0, hora=0, minuts=0, segons=0, max_dies, temp;

escriure_txt ("Intro la data"); while (_RB4 == 0); __delay_ms(100); //Elimina rebots pulsador escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici

any = (unsigned char) intro_var(99,0,"Any: ",1); mes = (unsigned char) intro_var(12,0,"Mes: ",1); max_dies = calcul_dies_mes(mes,any); dia = (unsigned char) intro_var(max_dies,0,"Dia: ",1); hora = (unsigned char) intro_var(24,-1,"Hora: ",1); minuts = (unsigned char) intro_var(59,-1,"Minuts: ",1); segons = (unsigned char) intro_var(59,-1, "Segons: ",1);

//Configurar RTCC amb la data actual iniciar_RTCC (any, mes, dia, 0, hora, minuts, segons);

temp = mirar_temporada(mes);

return(temp);

!102

Page 103: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

void entrar_dia_hora() unsigned char dia=0, mes=0, any=0, hora=0, minuts=0, segons=0, max_dies; unsigned int any_bcd, mes_dia;

_RTCPTR = 3; any_bcd = RTCVAL; mes_dia = RTCVAL;

any = (unsigned char) (any_bcd&0xFF); mes = (unsigned char) ((mes_dia>>8)&0xFF); any = passar_binari(any); mes = passar_binari(mes); max_dies = calcul_dies_mes(mes,any); dia = (unsigned char) intro_var(max_dies,0,"Dia: ",1); hora = (unsigned char) intro_var(24,-1,"Hora: ",1); minuts = (unsigned char) intro_var(59,-1,"Minuts: ",1); segons = (unsigned char) intro_var(59,-1, "Segons: ",1);

//Configurar RTCC amb la data actual iniciar_RTCC (any, mes, dia, 0, hora, minuts, segons);

unsigned int entrar_data_sembra() unsigned char mes=0, max_dies=0, dia=0, temp=2, j, traspas;

escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt ("Intro data sembra"); while (_RB4 == 0); __delay_ms(400); //Elimina rebots pulsador

while (temp == 2) mes = (unsigned char) intro_var(12,0,"Mes: ",1); temp = mirar_temporada(mes); if (temp == 2) __delay_ms(2000); else max_dies = calcul_dies_mes(mes,0); dia = (unsigned char) intro_var(max_dies,0,"Dia: ",1); traspas = calcul_any_traspas(); j = (unsigned int)((275*mes/9-30+dia)-2); if (mes<3) return (j+2); else if ((mes>2) && (traspas == 1)) //Si mes és superior a 2 i any de traspàs return (j+1); else return (j);

!103

Page 104: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

1wire_protocol.c

#define Search_rom 0xF0#define Read_rom 0x33#define Match_rom 0x55#define Skip_rom 0xCC#define Alarm_search 0xEC

//Comandes de funció

#define Convert_T 0x44#define Write_scratchpad 0x4E#define Read_scratchpad 0xBE#define Copy_scratchpad 0x48#define Recall_E 0xB8#define Read_power_supply 0xB4

unsigned char pols_reset_OW(void) //Funció que realitza el pols de //reset del bus

//i espera pols de presència de //l’esclau

unsigned char presencia;

_TRISA0 = 0; //RB2 com a sortida

_LATA0 = 0; //Col�loca el bus en estat baix __delay_us(480); //Espera 480 microsegons (us)

_LATA0 = 1; //Allibera el bus __delay_us(70); //Espera 70 microsegons (us)

_TRISA0 = 1; //RB2 com a entrada

presencia = _RA0; //Mira si hi ha pols de pres�ncia per part de l'esclau __delay_us(410); //Espera 410 microsegons (us)

_TRISA0 = 0; //RB2 com a sortida _LATA0 = 1; //Allibera el bus

return(presencia);

void escriure_bit_OW(unsigned char dada) //Funció per escriure 1 bit al //bus

_TRISA0 = 0; //RB2 com a sortida

if (dada) //Escriu un bit '1' _LATA0 = 0; //Col·loca el bus en estat baix __delay_us(6); //Espera 6 microsegons (us) _LATA0 = 1; //Allibera el bus __delay_us(64); //Espera 64 microsegons(us) else //Escriu un bit '0'

!104

Page 105: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

_LATA0 = 0; //Col·loca el bus en estat baix __delay_us(60); //Espera 60 microsegons(us) _LATA0 = 1; //Allibera el bus __delay_us(10); //Espera 10 microsegons de recuperació

//(us)

unsigned char llegir_bit_OW(void) unsigned char dada; //Per llegir el bit

_TRISA0 = 0; //RB2 com a sortida

_LATA0 = 0; //Col·loca el bus en estat baix __delay_us(6); //Espera 6 microsegons (us) _LATA0 = 1; //Allibera el bus __delay_us(9); //Espera 9 microsegons (us)

_TRISA0 = 1; //RB2 com a entrada dada = _RA0; //Llegeix l'estat de RB2 __delay_us(55); //Espera 55 microsegons (us)

return(dada);

void escriure_byte_OW(unsigned char dada) unsigned char i; for (i=0; i<8; i++) escriure_bit_OW(dada&0x01); //Envia primer el bit menys significatiu dada >>= 1; //Corre el byte per transmetre el següent bit

unsigned char llegir_byte_OW(void) unsigned char i, dada=0; for (i = 0; i < 8; i++) dada >>= 1; //Corre el byte per preparar-lo per rebre el pr�xim bit if (llegir_bit_OW()) dada |= 0x80; //Si el bit �s 1, activar el MS-bit de result return(dada);

!105

Page 106: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

unsigned char comprovar_crc (unsigned char *crc) unsigned char *p, j;

p=(unsigned char *)&CRCDATL; //Per amplades de dades menors o iguals de 8 bits

//s'han d'introduir al CRCDATL en operacions de byte

CRCCON1bits.CRCEN=1; //Activar el mòdul CRC CRCCON2bits.PLEN=0x07; //Tamany del polinomi - 1 (8-1) CRCXORL=0x0131; //Configurar el polinomi (x8+x5+x4+1) CRCXORH=0x0000; CRCCON2bits.DWIDTH=0x07; //Amplada de les dades -1 (byte) CRCCON1bits.LENDIAN=1; //Direcció shift, LSb primer (litte endian) CRCCON1bits.CRCISEL=1; //Selecciona interrupció al finalitzar càlcul

for (j=0; j<8; j++) //Introdueix dades a la FIFO *p = *crc++;

CRCWDATL = 0x0000; //Inicialitza càlcul Nop (); CRCCON1bits.CRCGO=1; //Comença càlcul CRC while(IFS4bits.CRCIF!=1); //Espera que el càlcul finalitzi IFS4bits.CRCIF = 0; //Abaixa bandera interrupció Nop ();

return (CRCWDATL);

float llegir_temperatura (unsigned char *correcte) int temp; float temperatura; unsigned char crc_ok=1, crc[9], i;

_IC1IE = 0; //Desactiva interrupció IC1 _INT1IE = 0; //Desactiva interrupció Interrupcio Externa 1 _INT2IE = 0; //Desactiva interrupció Interrupcio Externa 2

*correcte = 0;

while ((crc_ok!=0)&&(!*correcte)) while ((pols_reset_OW()==1)&&(!*correcte)); //Realitzar

//reset i esperar pols presència ds18b20

if (!*correcte) escriure_byte_OW(Skip_rom); //Saltar orde ROM

escriure_byte_OW(Convert_T); //Indicar a ds18b20 //que realitzi conversió temperatura

//Esperar que ds18b20 acabi conversió temperatura

while ((llegir_bit_OW()==0)&&(!*correcte));

!106

Page 107: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

while ((pols_reset_OW()==1)&&(!*correcte)); //Realitzar reset i esperar pols presència ds18b20

escriure_byte_OW(Skip_rom); //Saltar orde ROM

escriure_byte_OW(Read_scratchpad); //Llegir dades de ds18b20

for (i=0; i<9; i++) crc[i] = llegir_byte_OW(); //Guarda el valor dels

//9 bytes del scratchpad

//Comprovar si la lectura ha estat correcte crc_ok = comprovar_crc(crc); //Al quart intent de lectura amb fallo CRC

//sortir i avisar

_IC1IE = 1; //Activa interrupció IC1 _INT1IE = 1; //Activa interrupció Interrupcio Externa 1 _INT2IE = 1; //Activa interrupció Interrupcio Externa 2

if (*correcte == 1) return (25);

temp = crc[1] << 8; temp = temp | crc[0]; //Uneix LSB i MSB de la temperatura en 2 bytes

if (temp & 0x80) //Temperatura negativa temp = ~temp + 1; temperatura = (((float) temp)/16)* (-1); else //Temperatura positiva temperatura = ((float) temp)/16;

return (temperatura);

!107

Page 108: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

eeprom.h

#define eeprom_i2c_w 0xA0#define eeprom_i2c_r 0xA1

//// FUNCIONS/////

void i2c_stop() I2C2CONbits.PEN = 1; while (I2C2CONbits.PEN); //Espera que finalitzi condició de stop I2C2CONbits.RCEN = 0; I2C2STATbits.IWCOL = 0; I2C2STATbits.BCL = 0;

void inicialitzar_i2c() unsigned char buidar;

I2C2BRG = 39; // A 8MHZ correspon a 100kHz I2C2CONbits.I2CEN = 0; // Desactiva el modul I2C2CONbits.DISSLW = 1; // Desactiva el slew rate control I2C2CONbits.I2CEN = 1; // Activa el modul i2c buidar = I2C2RCV; // Buidar el registre i2c_stop();

void i2c_start() I2C2CONbits.ACKDT = 0; I2C2CONbits.SEN = 1; // Activa condició de start while (I2C2CONbits.SEN); // Espera que finalitzi condició de start

void i2c_restart() I2C2CONbits.RSEN = 1; while (I2C2CONbits.RSEN);

unsigned char escriure_byte_I2C(unsigned char dada8)

while (I2C1STATbits.TBF); I2C2TRN = dada8; // Automàticament TBF = 1 while (I2C2STATbits.TBF); // Espera que finalitzi transissió i

//rebre ACK while (I2C2STATbits.TRSTAT); if (I2C2STATbits.ACKSTAT == 1)

return(1); return(0);

!108

Page 109: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

unsigned char rebre_byte_I2C () unsigned char dada=0;

I2C2CONbits.RCEN = 1; while (I2C2STATbits.RBF==0); // Espera que finalitzi transmissió dada = I2C2RCV; return (dada);

void generar_ACK() I2C2CONbits.ACKDT = 0; I2C2CONbits.ACKEN = 1; while (I2C2CONbits.ACKEN);

void generar_NACK() I2C2CONbits.ACKDT = 1; I2C2CONbits.ACKEN = 1; while (I2C2CONbits.ACKEN);

unsigned char escriure_int_i2c(unsigned int dada16) unsigned char dadaL, dadaH, fet;

dadaL = *((char *) &dada16); dadaH = *((char *) &dada16+1);

fet = escriure_byte_I2C(dadaH);

if (fet == 0) fet = escriure_byte_I2C(dadaL); else fet = 1;

return (fet);

unsigned int rebre_int_i2c() unsigned int dada16; unsigned char dadaL, dadaH; dadaH = rebre_byte_I2C (); generar_ACK(); dadaL = rebre_byte_I2C (); generar_ACK(); *((char *) &dada16) = dadaL; *((char *) &dada16+1) = dadaH;

!109

Page 110: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

return (dada16);

unsigned int rebre_ultim_int_i2c() unsigned int dada16; unsigned char dadaL, dadaH;

dadaH = rebre_byte_I2C ();

generar_ACK();

dadaL = rebre_byte_I2C ();

generar_NACK();

*((char *) &dada16) = dadaL; *((char *) &dada16+1) = dadaH;

return (dada16);

void escriure_float_i2c(float dada32)

unsigned int dada16L, dada16H;

dada16L = *((int *) &dada32); dada16H = *((int *) &dada32+1);

escriure_int_i2c(dada16H);

escriure_int_i2c(dada16L);

float rebre__float_i2c() float dada32; unsigned int dada16L, dada16H;

dada16H = rebre_int_i2c(); dada16L = rebre_int_i2c();

*((int *) &dada32) = dada16L; *((int *) &dada32+1) = dada16H;

return (dada32);

float rebre_ultim_float_i2c() float dada32; unsigned int dada16L, dada16H;

dada16H = rebre_int_i2c(); dada16L = rebre_ultim_int_i2c();

!110

Page 111: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

*((int *) &dada32) = dada16L; *((int *) &dada32+1) = dada16H;

return (dada32);

void guardar_dades_eeprom_hora(float t_max, float t_min, float ins, float h_max, float h_min, int cont_p, int cont_a, unsigned char reg) unsigned char error=1, hora; int timer_lsw=0, timer_msw=0;

_RTCPTR = 1; hora = (unsigned char) RTCVAL; hora = passar_binari (hora);

if (reg == 1) timer_lsw = TMR2; timer_msw = TMR3HLD;

while (error == 1) //Esperar que la eeprom respongui i enviar //comanda escriure

i2c_start(); error = escriure_byte_I2C(eeprom_i2c_w); escriure_int_i2c(0x0000); //Adreça de l'eeprom on es començarà a

//escriure escriure_byte_I2C(0x01); //Indicador de que hi han dades guardades escriure_float_i2c(t_max); escriure_float_i2c(t_min); escriure_float_i2c(ins); escriure_float_i2c(h_max); escriure_float_i2c(h_min); escriure_int_i2c(cont_p); escriure_int_i2c(cont_a); escriure_byte_I2C(reg); if (reg==1) //Si el reg està activat guardar dades timer escriure_int_i2c(timer_msw); escriure_int_i2c(timer_lsw); escriure_byte_I2C(hora); i2c_stop();

!111

Page 112: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

unsigned char recuperar_dades_eeprom_hora(float *t_max, float *t_min, float *ins, float *h_max, float *h_min, unsigned int *cont_p, unsigned int *cont_a, unsigned char *reg) unsigned char error=1, hora; int timer_lsw=0, timer_msw=0; unsigned long timer32;

while (error == 1) //Esperar que la eeprom respongui i enviar comanda escriure

i2c_start(); error = escriure_byte_I2C(eeprom_i2c_w); escriure_int_i2c(0x0001); //Inici lectura de dades i2c_restart(); escriure_byte_I2C(eeprom_i2c_r); *t_max = rebre__float_i2c(); *t_min = rebre__float_i2c(); *ins = rebre__float_i2c(); *h_max = rebre__float_i2c(); *h_min = rebre__float_i2c(); *cont_p = rebre_int_i2c(); *cont_a = rebre_int_i2c(); *reg = rebre_byte_I2C (); generar_ACK(); if (*reg == 1) timer_msw = rebre_int_i2c(); timer_lsw = rebre_int_i2c(); hora = rebre_byte_I2C (); generar_NACK(); i2c_stop(); //Lectura dades

if (*reg == 1) *((char *) &timer32+1) = timer_msw; *((char *) &timer32) = timer_lsw; carregar_timer32_T2T3 (timer32);

return (hora);

void guardar_dades_eeprom_dia(unsigned int dia_sembra, unsigned char i, unsigned int altitut, float latitut, float cau_reg) unsigned char j, terra_codi=0, cultivat_codi=0, error=1; unsigned char mes, dia, any; unsigned int any_bcd, mes_dia;

for (j=15; j>0; j--) //Codificar els cultius i el tipus de terra en 1 byte cadascún escriure_cmd (0x01); //Borrar LCDescriure_cmd(0x02);

!112

Page 113: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

escriure_txt("ini codi");

cultivat_codi = cultivat_codi<<1; if (cultivat[j-1] == 1) cultivat_codi = cultivat_codi|0x01; terra_codi = terra_codi<<1; if (tipus_terra[j-1] == 1) terra_codi = terra_codi | 0x01;

escriure_cmd (0x01); //Borrar LCDescriure_cmd(0x02);escriure_txt("codificat");__delay_ms(2000);

error = 1; while (error == 1) //Esperar que la eeprom respongui i enviar comanda escriure i2c_start(); error = escriure_byte_I2C(eeprom_i2c_w);

escriure_cmd (0x01); //Borrar LCDescriure_cmd(0x02);escriure_txt("comunicat");__delay_ms(2000);

escriure_int_i2c(0x001F); //Adreça de l'eeprom on es començarà a escriure escriure_byte_I2C(cultivat_codi); escriure_byte_I2C(terra_codi); i2c_stop();

_RTCPTR = 3; //Comença seqüencia de lectura de hora any_bcd = RTCVAL; mes_dia = RTCVAL;

any = (unsigned char) (any_bcd&0xFF); mes = (unsigned char) ((mes_dia>>8)&0xFF); dia = (unsigned char) (mes_dia&0xFF);

any = passar_binari(any); mes = passar_binari(mes); dia = passar_binari(dia);

error = 1; while (error == 1) //Esperar que la eeprom respongui i enviar comanda escriure i2c_start(); error = escriure_byte_I2C(eeprom_i2c_w);

!113

Page 114: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

escriure_int_i2c(0x0021); //Adreça de l'eeprom on es començarà a escriure escriure_byte_I2C(any); escriure_byte_I2C(mes); escriure_byte_I2C(dia); escriure_int_i2c(dia_sembra); escriure_byte_I2C(i); escriure_int_i2c(altitut); escriure_float_i2c(latitut); for (j=0; j<15; j++) if (cultivat[j] == 1) escriure_float_i2c(diari[j].AFA); escriure_float_i2c(cau_reg); i2c_stop(); //Aturar ja que potser s'ha escrit una pàgina

error = 1; while (error == 1) //Esperar que la eeprom respongui i enviar comanda escriure i2c_start(); error = escriure_byte_I2C(eeprom_i2c_w); escriure_int_i2c(0x0061); //Adreça de l'eeprom on es començarà a escriure escriure_float_i2c(Defin_prev); escriure_float_i2c(Dr_prev); escriure_float_i2c(Dr_corr_prev); for (j=0; j<15; j++) if (cultivat[j] == 1) escriure_float_i2c(diari[j].altura); escriure_float_i2c(fw_prev); i2c_stop(); //Aturar ja que potser s'ha escrit una pàgina

error = 1; while (error == 1) //Esperar que la eeprom respongui i enviar comanda escriure i2c_start(); error = escriure_byte_I2C(eeprom_i2c_w); escriure_int_i2c(0x00A1); //Adreça de l'eeprom on es començarà a escriure for (j=0; j<15; j++) if (cultivat[j] == 1) escriure_byte_I2C(superficie[j]); escriure_float_i2c(diari[j].Zr);

!114

Page 115: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

escriure_float_i2c(RNN_prev); i2c_stop(); //Aturar ja que potser s'ha escrit una pàgina

void recuperar_dades_eeprom_dia (unsigned int *dia_sembra, unsigned char *i, unsigned int *altitut, float *latitut, float *cau_reg, unsigned char h) unsigned char j, terra_codi=0, cultivat_codi=0, error; unsigned char mes, dia, any;

error = 1; while (error == 1)

//Esperar que la eeprom respongui i enviar comanda escriure i2c_start(); error = escriure_byte_I2C(eeprom_i2c_w); escriure_int_i2c(0x001F); //Inici lectura de dades i2c_restart(); escriure_byte_I2C(eeprom_i2c_r); cultivat_codi = rebre_byte_I2C (); generar_ACK(); terra_codi = rebre_byte_I2C (); generar_NACK(); i2c_stop();

for (j=0; j<15; j++) if (cultivat_codi&0x01) cultivat[j] = 1; tipus_terra[j] = 1; cultivat_codi = cultivat_codi>>1;

error = 1; while (error == 1)

//Esperar que la eeprom respongui i enviar comanda escriure i2c_start(); error = escriure_byte_I2C(eeprom_i2c_w); escriure_int_i2c(0x0021); //Inici lectura de dades i2c_restart(); escriure_byte_I2C(eeprom_i2c_r); any = rebre_byte_I2C (); generar_ACK(); mes = rebre_byte_I2C (); generar_ACK(); dia = rebre_byte_I2C (); generar_ACK(); *dia_sembra = rebre_int_i2c(); *i = rebre_byte_I2C (); generar_ACK();

!115

Page 116: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

*altitut = rebre_int_i2c(); *latitut = rebre__float_i2c(); for (j=0; j<15; j++) if (cultivat[j] == 1) diari[j].AFA = rebre__float_i2c(); *cau_reg = rebre_ultim_float_i2c(); i2c_stop();

iniciar_RTCC (any, mes, dia, 0, h, 0, 0);

error = 1; while (error == 1)

//Esperar que la eeprom respongui i enviar comanda escriure i2c_start(); error = escriure_byte_I2C(eeprom_i2c_w); escriure_int_i2c(0x0061); //Inici lectura de dades i2c_restart(); escriure_byte_I2C(eeprom_i2c_r); Defin_prev = rebre__float_i2c(); Dr_prev = rebre__float_i2c(); Dr_corr_prev = rebre__float_i2c(); for (j=0; j<15; j++) if (cultivat[j] == 1) diari[j].altura = rebre__float_i2c(); fw_prev = rebre_ultim_float_i2c(); i2c_stop();

//Aturar ja que potser s'ha escrit una pàgina

error = 1; while (error == 1)

//Esperar que la eeprom respongui i enviar comanda escriure i2c_start(); error = escriure_byte_I2C(eeprom_i2c_w); escriure_int_i2c(0x00A1); //Inici lectura de dades i2c_restart(); escriure_byte_I2C(eeprom_i2c_r); for (j=0; j<15; j++) if (cultivat[j] == 1) superficie[j] = rebre_byte_I2C (); generar_ACK(); diari[j].Zr = rebre__float_i2c(); RNN_prev = rebre_ultim_float_i2c(); i2c_stop();

!116

Page 117: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

void reiniciar_eeprom() unsigned char error=1;

while (error == 1) //Esperar que la eeprom respongui i enviar comanda escriure i2c_start(); error = escriure_byte_I2C(eeprom_i2c_w); escriure_int_i2c(0x0000); //Adreça de l'eeprom on es començarà a escriure escriure_byte_I2C(0x00); //Indicador de que hi han dades guardades i2c_stop();

unsigned char mirar_inici() unsigned char error=1, buit;

while (error == 1) //Esperar que la eeprom respongui i enviar comanda escriure i2c_start(); error = escriure_byte_I2C(eeprom_i2c_w); escriure_int_i2c(0x0000); //Inici lectura de dades i2c_restart(); escriure_byte_I2C(eeprom_i2c_r); buit = rebre_byte_I2C(); generar_NACK(); i2c_stop();

return (buit);

!117

Page 118: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

càlculs.h

float cal_latitud_rad() float latitud_graus; unsigned char graus=0, minuts=0, hemisferi, test=0;

escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt ("Intro latitut"); while (_RB4 == 0); __delay_ms(500);

graus = (unsigned char) intro_var(70,0,"Graus: ",1); minuts = (unsigned char) intro_var(59,0,"Minuts ",1);

escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt("Introduir hemisferi"); while (_RB4 == 0); __delay_ms(500);

escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt("N"); while (_RB4 == 0) if (_RA4 == 1) if (test == 0) test = 1; escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt("S"); hemisferi = 'S'; __delay_ms(500); else test = 0; escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt("N"); hemisferi = 'N'; __delay_ms(500); __delay_ms(500); latitud_graus = graus + minuts/60;

if (hemisferi == 'S') latitud_graus = -latitud_graus; return ((PI/180)*latitud_graus);

!118

Page 119: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

float pressio_vapor_temp(float t) return(0.6108*exp(17.27*t/(t+237.3)));

float calcul_eto(float lat_rad, float t_max, float t_min, float HRmin, float HRmax, float vent, float n, unsigned int dia_any, int el_mar) float declinacio, p_curva_p_vapor, ws, N, dr, t_mitja; float Rn, Rnl, Rns, Ra, Rs, Rso; float es, ea, etmin, etmax, etmitja, ETo; float P, const_psico;

//Càlcul pressió atmosfèrica i constant psicomètrica P = (101.3*pow(((293-0.0065*el_mar)/293),5.26)); const_psico = 0.000665*P;

//Càlcul temperatura mitjana diaria

t_mitja = (t_max+t_min)/2;

//càlcul de ? (pendent de la curva de pressió de vapor)

etmitja = pressio_vapor_temp(t_mitja); //Càlcul pressió del vapor a la temperatura mitjana

p_curva_p_vapor = (4098*etmitja)/pow((t_mitja+237.3),2);

//càlcul de la radiació neta en la superfície del cultiu Rn

declinacio = 0.409*sin((2*PI*dia_any/365)-1.39); //Càlcul de la declinació solar (?)

ws = acos(-tan(lat_rad)*tan(declinacio)); //Càlcul de l'àngle de radiació a la posta de sol (?s)

N = 24*ws/PI; //Càlcul de la duració màxima de la insolació en hores

dr = 1+0.033*cos(2*PI*dia_any/365); //Càlcul distancia relativa inversa Terra-Sol

Ra = ((24*60)/PI)*0.082*dr*(ws*sin(lat_rad)*sin(declinacio)+cos(lat_rad)*cos(declinacio)*sin(ws));

//Càlcul radiació extraterrestre

Rs = (0.25+0.5*n/N)*Ra; //Càlcul radiació solar

Rns = (1-0.23)*Rs; //Càlcul radiació neta d'ona curta

etmin = pressio_vapor_temp(t_min); //Càlcul pressió del vapor a la temperatura mínima

etmax = pressio_vapor_temp(t_max);

!119

Page 120: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

//Càlcul pressió del vapor a la temperatura màxima

ea = ((etmin*HRmax/100)+(etmax*HRmin/100))/2; //Càlcul de la pressió real de vapor

Rso = (0.75+0.00002*el_mar)*Ra; //Càlcul radiació solar en un dia clar

Rnl = 0.000000004903*((pow(t_max+273.16,4)+pow(t_min+273.16,4))/2)*(0.34-0.14*sqrt(ea))*((1.35*Rs/Rso)-0.35);

//Càlcul radiació neta d'ona llarga

Rn = Rns-Rnl; //Radiació neta sobre la superfície del cultiu

//Càlcul pressió mitja de vapor de saturació

es = (etmax+etmin)/2;

//Càlcul evapotranspiració del cultiu de referència

ETo = (0.408*p_curva_p_vapor*Rn+const_psico*(900/(t_mitja+273))*vent*(es-ea))/(p_curva_p_vapor+const_psico*(1+0.34*vent));

return(ETo);

float calcul_kcb_diari(unsigned int dia_any, unsigned char x, unsigned char i, unsigned int jsem) int Lprev, Letapa; float Kcprev, Kcprox;

if (dia_any<=jsem+(cultius[1].duracio_etapes[0+i]))return(cultius[x].Kcb[0]);

else if (dia_any<=jsem+(cultius[x].duracio_etapes[0+i]+cultius[x].duracio_etapes[1+i])) Kcprev=cultius[x].Kcb[0]; Kcprox=cultius[x].Kcb[1]; Lprev=cultius[x].duracio_etapes[0+i]; Letapa=cultius[x].duracio_etapes[1+i]; return(Kcprev+((dia_any-Lprev)/Letapa)*(Kcprox-Kcprev));

else if (dia_any<=jsem+(cultius[x].duracio_etapes[0+i]+cultius[x].duracio_etapes[1+i]+cultius[x].duracio_etapes[2+i]))

return(cultius[x].Kcb[1]); else Kcprev=cultius[x].Kcb[1]; Kcprox=cultius[x].Kcb[2];

Lprev=cultius[x].duracio_etapes[0+i]+cultius[x].duracio_etapes[1+i]+cultius[x].duracio_etapes[2+i];

Letapa=cultius[x].duracio_etapes[3+i];

!120

Page 121: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

return(Kcprev+((dia_any-Lprev)/Letapa)*(Kcprox-Kcprev));

float calcul_ke_diari(unsigned char x, float ETo, float vent, float HRmin, float Kcb, float precip_dia) float h, Kcmax, Kr, few, fc, fw, Deini, Ke, E, Defin, DPe;

//calcular altura actual de la planta h = Kcb*cultius[x].altura/cultius[x].Kcb[1];//Comparar altura calculada amb la altura del cultiu el dia //anterior i agafa el màxim h = max(h, diari[x].altura);

diari[15].altura = h; //Actualitz altura dia anterior (agafa

//valor de l'altura actual pel càlcul del dia següent)

//calcula Kcmax per al dia actual

Kcmax = 1.2*(0.04*(vent-2)-0.004*(HRmin-45))*pow(h/3,0.3); Kcmax = max(Kcmax,Kcb+0.05);

//calcula fc fc = pow(((Kcb-cultius[x].Kcb[0])/(Kcmax-cultius[x].Kcb[0])),(1+0.5*h)); fc = max(fc,0.01);

//calcul fwif (RNN_prev/fwirrig>0) //Si hi ha hagut reg llavors fw de la irrigació fw = fwirrig;else if (precip_dia>0) //Si hi ha hagut pluja llavors 1 fw = 1; else fw = fw_prev; //Sinó, el valor de la fw del dia abansfw_prev = fw; //Actualitza fw_prev pels càlculs del dia següent

//càlcul fewfew = min(1-fc,fw);

//càlcul làmina acumulada d'evaporació inici del diaDeini = Defin_prev-precip_dia-RNN_prev/fwirrig;Deini = max(Deini,0);if (Deini > AET) Deini = AET;

//càlcul Krif (Deini<=AFE) Kr = 1;else Kr = (AET-Deini)/(AET-AFE);Kr = max(Kr,0);

//càlcul KeKe = min(Kr*(Kcmax-Kcb),few*Kcmax);

!121

Page 122: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

//Càlcul de dades necessàries per poder calcular Ke el següent dia

//calcul evaporació E = Ke*ETo;

//calcul drenatge DPe = precip_dia-RNN_prev/fwirrig-Defin_prev; DPe = max (DPe,0);

//càlcul làmina acumulada d'evaporació al final del diaDefin = Defin_prev-precip_dia-RNN_prev/fwirrig+E/few+DPe;Defin_prev = Defin; //Actualitza valor Defin_prev per als

//càlculs del dia següentif (Defin_prev>AET) Defin_prev = AET;

return(Ke);

float calcul_kc_ponderat() float numerador=0, denominador=0; unsigned char j;

for (j=1;j<15;j++) if (cultivat[j]==1) denominador = denominador + ((superficie[j]/100)*diari[j].altura); numerador = numerador + ((superficie[j]/100)*diari[j].altura*diari[j].kc); return(numerador/denominador);

float prof_radicular_dia(int dia_any, unsigned char x, int dia_ini, float Kcb, unsigned char i) float Zr;

if(dia_any<dia_ini+cultius[x].duracio_etapes[0+i]+cultius[x].duracio_etapes[1+i])

Zr = cultius[x].arrels[0]+(cultius[x].arrels[1]-

cultius[x].arrels[0])*(Kcb-cultius[x].Kcb[0])/(cultius[x].Kcb[1]-cultius[x].Kcb[0]);

Zr = max (Zr,diari[x].Zr); else Zr = cultius[x].arrels[1]; //Màxima profunditat arrels

return (Zr);

!122

Page 123: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

float calcul_AFA_diari (unsigned char x) float AFA;

AFA = 0.5*diari[x].Zr*aigua_dispo; AFA = max(AFA, diari[x].AFA);

return (AFA);

float calcul_reg_net_necessari(float ETc, float ETo, float precip_dia)

float kc_ponderat_aj, Dr, Dr_corr; unsigned char j;

//càlcul final agotament Dr = Dr_prev - precip_dia - RNN_prev + ETc; Dr_prev = Dr; //Actualitzar valor Dr per càlculs dia següent

for (j=0;j<15;j++) if (cultivat[j]==1) if (Dr>diari[j].AFA) diari[j].ks = (diari[j].Zr*aigua_dispo-Dr)/

(diari[j].Zr*aigua_dispo-diari[j].AFA); else diari[j].ks = 1; diari[j].kc = diari[j].kcb*diari[j].ks+diari[j].ke;

kc_ponderat_aj = calcul_kc_ponderat();

//càlcul final agotament corregit Dr_corr = Dr_corr_prev-precip_dia-RNN_prev+kc_ponderat_aj*ETo; Dr_corr_prev = Dr_corr;

for (j=0;j<15;j++) if (Dr_corr>diari[j].AFA) return(Dr_corr); return(0);

float calcul_caudal_reg () float dist_a=0, dist_b=0, c_goter=0;

escriure_cmd(0x01); //Borrar LCD escriure_cmd(0x02); //Cursor a l'inici escriure_txt("Intro caudal goter"); while(_RB4 == 0); __delay_ms(500);

c_goter = intro_var_float(5, 0, "Cau goter: ", 0.5);

!123

Page 124: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

dist_a = intro_var_float(1.00, 0, "Dist a: ", 0.05); dist_b = intro_var_float(2.00, 0, "Dist b: ", 0.05);

return((1/(dist_a*dist_b)*c_goter));

!124

Page 125: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

Annexe II. Datasheets components

!125

Page 126: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

AVAILABLE

For pricing, delivery, and ordering information, please contact Maxim Direct at 1-888-629-4642, or visit Maxim’s website at www.maxim .com.

REV: 042208

DESCRIPTION The DS18B20 digital thermometer provides 9-bit to 12-bit Celsius temperature measurements and has an alarm function with nonvolatile user-programmable upper and lower trigger points. The DS18B20 communicates over a 1-Wire bus that by definition requires only one data line (and ground) for communication with a central microprocessor. It has an operating temperature range of -55°C to +125°C and is accurate to ±0.5°C over the range of -10°C to +85°C. In addition, the DS18B20 can derive power directly from the data line (“parasite power”), eliminating the need for an external power supply. Each DS18B20 has a unique 64-bit serial code, which allows multiple DS18B20s to function on the same 1-Wire bus. Thus, it is simple to use one microprocessor to control many DS18B20s distributed over a large area. Applications that can benefit from this feature include HVAC environmental controls, temperature monitoring systems inside buildings, equipment, or machinery, and process monitoring and control systems. FEATURES Unique 1-Wire® Interface Requires Only One

Port Pin for Communication Each Device has a Unique 64-Bit Serial Code

Stored in an On-Board ROM Multidrop Capability Simplifies Distributed

Temperature-Sensing Applications Requires No External Components Can Be Powered from Data Line; Power Supply

Range is 3.0V to 5.5V Measures Temperatures from -55°C to +125°C

(-67°F to +257°F) ±0.5°C Accuracy from -10°C to +85°C Thermometer Resolution is User Selectable

from 9 to 12 Bits Converts Temperature to 12-Bit Digital Word in

750ms (Max)

User-Definable Nonvolatile (NV) Alarm Settings

Alarm Search Command Identifies and Addresses Devices Whose Temperature is Outside Programmed Limits (Temperature Alarm Condition)

Available in 8-Pin SO (150 mils), 8-Pin µSOP, and 3-Pin TO-92 Packages

Software Compatible with the DS1822 Applications Include Thermostatic Controls,

Industrial Systems, Consumer Products, Thermometers, or Any Thermally Sensitive System

PIN CONFIGURATIONS

DS18B20 Programmable Resolution

1-Wire Digital Thermometer

TO-92 (DS18B20)

1

(BOTTOM VIEW)

2 3

MAXIM 18B20

1

GN

D

DQ

V

DD

2 3

SO (150 mils) (DS18B20Z)

N.C.

N.C.

N.C.

N.C.

GND DQ

VDD

N.C.

6

8 7

5

3

1 2

4

MA

XIM

18B20

N.C. VDD N.C. N.C. N.C. GND

N.C.

DQ

6

8 7

5

3

1 2

4

18B20

µSOP (DS18B20U)

1-Wire is a registered trademark of Maxim Integrated Products, Inc.

Page 127: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

2 of 22

ORDERING INFORMATION PART TEMP RANGE PIN-PACKAGE TOP MARK

DS18B20 -55°C to +125°C 3 TO-92 18B20 DS18B20+ -55°C to +125°C 3 TO-92 18B20 DS18B20/T&R -55°C to +125°C 3 TO-92 (2000 Piece) 18B20 DS18B20+T&R -55°C to +125°C 3 TO-92 (2000 Piece) 18B20 DS18B20-SL/T&R -55°C to +125°C 3 TO-92 (2000 Piece)* 18B20 DS18B20-SL+T&R -55°C to +125°C 3 TO-92 (2000 Piece)* 18B20 DS18B20U -55°C to +125°C 8 µSOP 18B20 DS18B20U+ -55°C to +125°C 8 µSOP 18B20 DS18B20U/T&R -55°C to +125°C 8 µSOP (3000 Piece) 18B20 DS18B20U+T&R -55°C to +125°C 8 µSOP (3000 Piece) 18B20 DS18B20Z -55°C to +125°C 8 SO DS18B20 DS18B20Z+ -55°C to +125°C 8 SO DS18B20 DS18B20Z/T&R -55°C to +125°C 8 SO (2500 Piece) DS18B20 DS18B20Z+T&R -55°C to +125°C 8 SO (2500 Piece) DS18B20 +Denotes a lead-free package. A “+” will appear on the top mark of lead-free packages. T&R = Tape and reel. *TO-92 packages in tape and reel can be ordered with straight or formed leads. Choose “SL” for straight leads. Bulk TO-92 orders are straight leads only. PIN DESCRIPTION

PIN NAME FUNCTION

SO µSOP TO-92 1, 2, 6,

7, 8 2, 3, 5,

6, 7 — N.C. No Connection

3 8 3 VDD Optional VDD. VDD must be grounded for operation in parasite power mode.

4 1 2 DQ Data Input/Output. Open-drain 1-Wire interface pin. Also provides power to the device when used in parasite power mode (see the Powering the DS18B20 section.)

5 4 1 GND Ground OVERVIEW Figure 1 shows a block diagram of the DS18B20, and pin descriptions are given in the Pin Description table. The 64-bit ROM stores the device’s unique serial code. The scratchpad memory contains the 2-byte temperature register that stores the digital output from the temperature sensor. In addition, the scratchpad provides access to the 1-byte upper and lower alarm trigger registers (TH and TL) and the 1-byte configuration register. The configuration register allows the user to set the resolution of the temperature-to-digital conversion to 9, 10, 11, or 12 bits. The TH, TL, and configuration registers are nonvolatile (EEPROM), so they will retain data when the device is powered down. The DS18B20 uses Maxim’s exclusive 1-Wire bus protocol that implements bus communication using one control signal. The control line requires a weak pullup resistor since all devices are linked to the bus via a 3-state or open-drain port (the DQ pin in the case of the DS18B20). In this bus system, the microprocessor (the master device) identifies and addresses devices on the bus using each device’s unique 64-bit code. Because each device has a unique code, the number of devices that can be addressed on one

Page 128: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

3 of 22

bus is virtually unlimited. The 1-Wire bus protocol, including detailed explanations of the commands and “time slots,” is covered in the 1-Wire Bus System section. Another feature of the DS18B20 is the ability to operate without an external power supply. Power is instead supplied through the 1-Wire pullup resistor via the DQ pin when the bus is high. The high bus signal also charges an internal capacitor (CPP), which then supplies power to the device when the bus is low. This method of deriving power from the 1-Wire bus is referred to as “parasite power.” As an alternative, the DS18B20 may also be powered by an external supply on VDD.

Figure 1. DS18B20 Block Diagram OPERATION—MEASURING TEMPERATURE The core functionality of the DS18B20 is its direct-to-digital temperature sensor. The resolution of the temperature sensor is user-configurable to 9, 10, 11, or 12 bits, corresponding to increments of 0.5°C, 0.25°C, 0.125°C, and 0.0625°C, respectively. The default resolution at power-up is 12-bit. The DS18B20 powers up in a low-power idle state. To initiate a temperature measurement and A-to-D conversion, the master must issue a Convert T [44h] command. Following the conversion, the resulting thermal data is stored in the 2-byte temperature register in the scratchpad memory and the DS18B20 returns to its idle state. If the DS18B20 is powered by an external supply, the master can issue “read time slots” (see the 1-Wire Bus System section) after the Convert T command and the DS18B20 will respond by transmitting 0 while the temperature conversion is in progress and 1 when the conversion is done. If the DS18B20 is powered with parasite power, this notification technique cannot be used since the bus must be pulled high by a strong pullup during the entire temperature conversion. The bus requirements for parasite power are explained in detail in the Powering the DS18B20 section.

The DS18B20 output temperature data is calibrated in degrees Celsius; for Fahrenheit applications, a lookup table or conversion routine must be used. The temperature data is stored as a 16-bit sign-extended two’s complement number in the temperature register (see Figure 2). The sign bits (S) indicate if the temperature is positive or negative: for positive numbers S = 0 and for negative numbers S = 1. If the DS18B20 is configured for 12-bit resolution, all bits in the temperature register will contain valid data. For 11-bit resolution, bit 0 is undefined. For 10-bit resolution, bits 1 and 0 are undefined, and for 9-bit resolution bits 2, 1, and 0 are undefined. Table 1 gives examples of digital output data and the corresponding temperature reading for 12-bit resolution conversions.

VPU

4.7k

POWER-SUPPLY SENSE

64-BIT ROM AND

1-Wire PORT

DQ

VDD

INTERNAL VDD

CPP

PARASITE POWER CIRCUIT

MEMORY CONTROL LOGIC

SCRATCHPAD

8-BIT CRC GENERATOR

TEMPERATURE SENSOR

ALARM HIGH TRIGGER (TH) REGISTER (EEPROM)

ALARM LOW TRIGGER (TL)

REGISTER (EEPROM)

CONFIGURATION REGISTER (EEPROM)

GND

DS18B20

Page 129: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

4 of 22

Figure 2. Temperature Register Format

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 LS BYTE 23 22 21 20 2-1 2-2 2-3 2-4

BIT 15 BIT 14 BIT 13 BIT 12 BIT 11 BIT 10 BIT 9 BIT 8 MS BYTE S S S S S 26 25 24

S = SIGN

Table 1. Temperature/Data Relationship

TEMPERATURE (°C) DIGITAL OUTPUT (BINARY)

DIGITAL OUTPUT (HEX)

+125 0000 0111 1101 0000 07D0h +85* 0000 0101 0101 0000 0550h

+25.0625 0000 0001 1001 0001 0191h +10.125 0000 0000 1010 0010 00A2h

+0.5 0000 0000 0000 1000 0008h 0 0000 0000 0000 0000 0000h

-0.5 1111 1111 1111 1000 FFF8h -10.125 1111 1111 0101 1110 FF5Eh -25.0625 1111 1110 0110 1111 FE6Fh

-55 1111 1100 1001 0000 FC90h *The power-on reset value of the temperature register is +85°C. OPERATION—ALARM SIGNALING After the DS18B20 performs a temperature conversion, the temperature value is compared to the user-defined two’s complement alarm trigger values stored in the 1-byte TH and TL registers (see Figure 3). The sign bit (S) indicates if the value is positive or negative: for positive numbers S = 0 and for negative numbers S = 1. The TH and TL registers are nonvolatile (EEPROM) so they will retain data when the device is powered down. TH and TL can be accessed through bytes 2 and 3 of the scratchpad as explained in the Memory section.

Figure 3. TH and TL Register Format

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 S 26 25 24 23 22 21 20

Only bits 11 through 4 of the temperature register are used in the TH and TL comparison since TH and TL are 8-bit registers. If the measured temperature is lower than or equal to TL or higher than or equal to TH, an alarm condition exists and an alarm flag is set inside the DS18B20. This flag is updated after every temperature measurement; therefore, if the alarm condition goes away, the flag will be turned off after the next temperature conversion.

Page 130: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

5 of 22

The master device can check the alarm flag status of all DS18B20s on the bus by issuing an Alarm Search [ECh] command. Any DS18B20s with a set alarm flag will respond to the command, so the master can determine exactly which DS18B20s have experienced an alarm condition. If an alarm condition exists and the TH or TL settings have changed, another temperature conversion should be done to validate the alarm condition. POWERING THE DS18B20 The DS18B20 can be powered by an external supply on the VDD pin, or it can operate in “parasite power” mode, which allows the DS18B20 to function without a local external supply. Parasite power is very useful for applications that require remote temperature sensing or that are very space constrained. Figure 1 shows the DS18B20’s parasite-power control circuitry, which “steals” power from the 1-Wire bus via the DQ pin when the bus is high. The stolen charge powers the DS18B20 while the bus is high, and some of the charge is stored on the parasite power capacitor (CPP) to provide power when the bus is low. When the DS18B20 is used in parasite power mode, the VDD pin must be connected to ground. In parasite power mode, the 1-Wire bus and CPP can provide sufficient current to the DS18B20 for most operations as long as the specified timing and voltage requirements are met (see the DC Electrical Characteristics and AC Electrical Characteristics). However, when the DS18B20 is performing temperature conversions or copying data from the scratchpad memory to EEPROM, the operating current can be as high as 1.5mA. This current can cause an unacceptable voltage drop across the weak 1-Wire pullup resistor and is more current than can be supplied by CPP. To assure that the DS18B20 has sufficient supply current, it is necessary to provide a strong pullup on the 1-Wire bus whenever temperature conversions are taking place or data is being copied from the scratchpad to EEPROM. This can be accomplished by using a MOSFET to pull the bus directly to the rail as shown in Figure 4. The 1-Wire bus must be switched to the strong pullup within 10µs (max) after a Convert T [44h] or Copy Scratchpad [48h] command is issued, and the bus must be held high by the pullup for the duration of the conversion (tCONV) or data transfer (tWR = 10ms). No other activity can take place on the 1-Wire bus while the pullup is enabled. The DS18B20 can also be powered by the conventional method of connecting an external power supply to the VDD pin, as shown in Figure 5. The advantage of this method is that the MOSFET pullup is not required, and the 1-Wire bus is free to carry other traffic during the temperature conversion time. The use of parasite power is not recommended for temperatures above +100°C since the DS18B20 may not be able to sustain communications due to the higher leakage currents that can exist at these temperatures. For applications in which such temperatures are likely, it is strongly recommended that the DS18B20 be powered by an external power supply. In some situations the bus master may not know whether the DS18B20s on the bus are parasite powered or powered by external supplies. The master needs this information to determine if the strong bus pullup should be used during temperature conversions. To get this information, the master can issue a Skip ROM [CCh] command followed by a Read Power Supply [B4h] command followed by a “read time slot”. During the read time slot, parasite powered DS18B20s will pull the bus low, and externally powered DS18B20s will let the bus remain high. If the bus is pulled low, the master knows that it must supply the strong pullup on the 1-Wire bus during temperature conversions.

Page 131: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

6 of 22

Figure 4. Supplying the Parasite-Powered DS18B20 During Temperature Conversions

Figure 5. Powering the DS18B20 with an External Supply

64-BIT LASERED ROM CODE Each DS18B20 contains a unique 64–bit code (see Figure 6) stored in ROM. The least significant 8 bits of the ROM code contain the DS18B20’s 1-Wire family code: 28h. The next 48 bits contain a unique serial number. The most significant 8 bits contain a cyclic redundancy check (CRC) byte that is calculated from the first 56 bits of the ROM code. A detailed explanation of the CRC bits is provided in the CRC Generation section. The 64-bit ROM code and associated ROM function control logic allow the DS18B20 to operate as a 1-Wire device using the protocol detailed in the 1-Wire Bus System section.

Figure 6. 64-Bit Lasered ROM Code

8-BIT CRC 48-BIT SERIAL NUMBER 8-BIT FAMILY CODE (28h)

MSB MSB LSB LSB LSB MSB

VPU

VPU

4.7k 1-Wire BUS

µP

DS18B20 GND VDD DQ

TO OTHER 1-WIRE DEVICES

VDD (EXTERNAL SUPPLY) DS18B20 GND VDD DQ

VPU

4.7k TO OTHER 1-WIRE DEVICES 1-Wire BUS

µP

Page 132: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

7 of 22

MEMORY The DS18B20’s memory is organized as shown in Figure 7. The memory consists of an SRAM scratchpad with nonvolatile EEPROM storage for the high and low alarm trigger registers (TH and TL) and configuration register. Note that if the DS18B20 alarm function is not used, the TH and TL registers can serve as general-purpose memory. All memory commands are described in detail in the DS18B20 Function Commands section.

Byte 0 and byte 1 of the scratchpad contain the LSB and the MSB of the temperature register, respectively. These bytes are read-only. Bytes 2 and 3 provide access to TH and TL registers. Byte 4 contains the configuration register data, which is explained in detail in the Configuration Register section. Bytes 5, 6, and 7 are reserved for internal use by the device and cannot be overwritten.

Byte 8 of the scratchpad is read-only and contains the CRC code for bytes 0 through 7 of the scratchpad. The DS18B20 generates this CRC using the method described in the CRC Generation section.

Data is written to bytes 2, 3, and 4 of the scratchpad using the Write Scratchpad [4Eh] command; the data must be transmitted to the DS18B20 starting with the least significant bit of byte 2. To verify data integrity, the scratchpad can be read (using the Read Scratchpad [BEh] command) after the data is written. When reading the scratchpad, data is transferred over the 1-Wire bus starting with the least significant bit of byte 0. To transfer the TH, TL and configuration data from the scratchpad to EEPROM, the master must issue the Copy Scratchpad [48h] command.

Data in the EEPROM registers is retained when the device is powered down; at power-up the EEPROM data is reloaded into the corresponding scratchpad locations. Data can also be reloaded from EEPROM to the scratchpad at any time using the Recall E2 [B8h] command. The master can issue read time slots following the Recall E2 command and the DS18B20 will indicate the status of the recall by transmitting 0 while the recall is in progress and 1 when the recall is done. Figure 7. DS18B20 Memory Map

SCRATCHPAD

(POWER-UP STATE)

Byte 0 Temperature LSB (50h)

Byte 1 Temperature MSB (05h) EEPROM Byte 2 TH Register or User Byte 1* TH Register or User Byte 1 Byte 3 TL Register or User Byte 2* TL Register or User Byte 2 Byte 4 Configuration Register* Configuration Register Byte 5 Reserved (FFh) Byte 6 Reserved Byte 7 Reserved (10h) Byte 8 CRC*

*Power-up state depends on value(s) stored in EEPROM.

(85°C)

Page 133: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

8 of 22

CONFIGURATION REGISTER Byte 4 of the scratchpad memory contains the configuration register, which is organized as illustrated in Figure 8. The user can set the conversion resolution of the DS18B20 using the R0 and R1 bits in this register as shown in Table 2. The power-up default of these bits is R0 = 1 and R1 = 1 (12-bit resolution). Note that there is a direct tradeoff between resolution and conversion time. Bit 7 and bits 0 to 4 in the configuration register are reserved for internal use by the device and cannot be overwritten.

Figure 8. Configuration Register

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

0 R1 R0 1 1 1 1 1

Table 2. Thermometer Resolution Configuration

R1 R0 RESOLUTION (BITS)

MAX CONVERSION TIME

0 0 9 93.75ms (tCONV/8) 0 1 10 187.5ms (tCONV/4) 1 0 11 375ms (tCONV/2) 1 1 12 750ms (tCONV)

CRC GENERATION CRC bytes are provided as part of the DS18B20’s 64-bit ROM code and in the 9th byte of the scratchpad memory. The ROM code CRC is calculated from the first 56 bits of the ROM code and is contained in the most significant byte of the ROM. The scratchpad CRC is calculated from the data stored in the scratchpad, and therefore it changes when the data in the scratchpad changes. The CRCs provide the bus master with a method of data validation when data is read from the DS18B20. To verify that data has been read correctly, the bus master must re-calculate the CRC from the received data and then compare this value to either the ROM code CRC (for ROM reads) or to the scratchpad CRC (for scratchpad reads). If the calculated CRC matches the read CRC, the data has been received error free. The comparison of CRC values and the decision to continue with an operation are determined entirely by the bus master. There is no circuitry inside the DS18B20 that prevents a command sequence from proceeding if the DS18B20 CRC (ROM or scratchpad) does not match the value generated by the bus master. The equivalent polynomial function of the CRC (ROM or scratchpad) is:

CRC = X8 + X5 + X4 + 1

The bus master can re-calculate the CRC and compare it to the CRC values from the DS18B20 using the polynomial generator shown in Figure 9. This circuit consists of a shift register and XOR gates, and the shift register bits are initialized to 0. Starting with the least significant bit of the ROM code or the least significant bit of byte 0 in the scratchpad, one bit at a time should shifted into the shift register. After shifting in the 56th bit from the ROM or the most significant bit of byte 7 from the scratchpad, the polynomial generator will contain the re-calculated CRC. Next, the 8-bit ROM code or scratchpad CRC from the DS18B20 must be shifted into the circuit. At this point, if the re-calculated CRC was correct, the shift register will contain all 0s. Additional information about the Maxim 1-Wire cyclic redundancy check

Page 134: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

9 of 22

is available in Application Note 27: Understanding and Using Cyclic Redundancy Checks with Maxim iButton Products. Figure 9. CRC Generator 1-WIRE BUS SYSTEM The 1-Wire bus system uses a single bus master to control one or more slave devices. The DS18B20 is always a slave. When there is only one slave on the bus, the system is referred to as a “single-drop” system; the system is “multidrop” if there are multiple slaves on the bus. All data and commands are transmitted least significant bit first over the 1-Wire bus.

The following discussion of the 1-Wire bus system is broken down into three topics: hardware configuration, transaction sequence, and 1-Wire signaling (signal types and timing). HARDWARE CONFIGURATION The 1-Wire bus has by definition only a single data line. Each device (master or slave) interfaces to the data line via an open-drain or 3-state port. This allows each device to “release” the data line when the device is not transmitting data so the bus is available for use by another device. The 1-Wire port of the DS18B20 (the DQ pin) is open drain with an internal circuit equivalent to that shown in Figure 10.

The 1-Wire bus requires an external pullup resistor of approximately 5kΩ; thus, the idle state for the 1-Wire bus is high. If for any reason a transaction needs to be suspended, the bus MUST be left in the idle state if the transaction is to resume. Infinite recovery time can occur between bits so long as the 1-Wire bus is in the inactive (high) state during the recovery period. If the bus is held low for more than 480µs, all components on the bus will be reset. Figure 10. Hardware Configuration

(MSB) (LSB)

XOR XOR XOR

INPUT

VPU

4.7k

5μA TYP

Rx

Tx

DS18B20 1-Wire PORT

100Ω MOSFET

TX

Rx

Rx = RECEIVE Tx = TRANSMIT

1-Wire BUS

DQ PIN

Page 135: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

10 of 22

TRANSACTION SEQUENCE The transaction sequence for accessing the DS18B20 is as follows:

Step 1. Initialization Step 2. ROM Command (followed by any required data exchange)

Step 3. DS18B20 Function Command (followed by any required data exchange) It is very important to follow this sequence every time the DS18B20 is accessed, as the DS18B20 will not respond if any steps in the sequence are missing or out of order. Exceptions to this rule are the Search ROM [F0h] and Alarm Search [ECh] commands. After issuing either of these ROM commands, the master must return to Step 1 in the sequence.

INITIALIZATION All transactions on the 1-Wire bus begin with an initialization sequence. The initialization sequence consists of a reset pulse transmitted by the bus master followed by presence pulse(s) transmitted by the slave(s). The presence pulse lets the bus master know that slave devices (such as the DS18B20) are on the bus and are ready to operate. Timing for the reset and presence pulses is detailed in the 1-Wire Signaling section. ROM COMMANDS After the bus master has detected a presence pulse, it can issue a ROM command. These commands operate on the unique 64-bit ROM codes of each slave device and allow the master to single out a specific device if many are present on the 1-Wire bus. These commands also allow the master to determine how many and what types of devices are present on the bus or if any device has experienced an alarm condition. There are five ROM commands, and each command is 8 bits long. The master device must issue an appropriate ROM command before issuing a DS18B20 function command. A flowchart for operation of the ROM commands is shown in Figure 11. SEARCH ROM [F0h] When a system is initially powered up, the master must identify the ROM codes of all slave devices on the bus, which allows the master to determine the number of slaves and their device types. The master learns the ROM codes through a process of elimination that requires the master to perform a Search ROM cycle (i.e., Search ROM command followed by data exchange) as many times as necessary to identify all of the slave devices. If there is only one slave on the bus, the simpler Read ROM command (see below) can be used in place of the Search ROM process. For a detailed explanation of the Search ROM procedure, refer to the iButton® Book of Standards at www.maxim-ic.com/ibuttonbook. After every Search ROM cycle, the bus master must return to Step 1 (Initialization) in the transaction sequence.

READ ROM [33h] This command can only be used when there is one slave on the bus. It allows the bus master to read the slave’s 64-bit ROM code without using the Search ROM procedure. If this command is used when there is more than one slave present on the bus, a data collision will occur when all the slaves attempt to respond at the same time. MATCH ROM [55h] The match ROM command followed by a 64-bit ROM code sequence allows the bus master to address a specific slave device on a multidrop or single-drop bus. Only the slave that exactly matches the 64-bit ROM code sequence will respond to the function command issued by the master; all other slaves on the bus will wait for a reset pulse.

iButton is a registered trademark of Maxim Integrated Products, Inc.

Page 136: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

11 of 22

SKIP ROM [CCh] The master can use this command to address all devices on the bus simultaneously without sending out any ROM code information. For example, the master can make all DS18B20s on the bus perform simultaneous temperature conversions by issuing a Skip ROM command followed by a Convert T [44h] command. Note that the Read Scratchpad [BEh] command can follow the Skip ROM command only if there is a single slave device on the bus. In this case, time is saved by allowing the master to read from the slave without sending the device’s 64-bit ROM code. A Skip ROM command followed by a Read Scratchpad command will cause a data collision on the bus if there is more than one slave since multiple devices will attempt to transmit data simultaneously.

ALARM SEARCH [ECh] The operation of this command is identical to the operation of the Search ROM command except that only slaves with a set alarm flag will respond. This command allows the master device to determine if any DS18B20s experienced an alarm condition during the most recent temperature conversion. After every Alarm Search cycle (i.e., Alarm Search command followed by data exchange), the bus master must return to Step 1 (Initialization) in the transaction sequence. See the Operation—Alarm Signaling section for an explanation of alarm flag operation. DS18B20 FUNCTION COMMANDS After the bus master has used a ROM command to address the DS18B20 with which it wishes to communicate, the master can issue one of the DS18B20 function commands. These commands allow the master to write to and read from the DS18B20’s scratchpad memory, initiate temperature conversions and determine the power supply mode. The DS18B20 function commands, which are described below, are summarized in Table 3 and illustrated by the flowchart in Figure 12. CONVERT T [44h] This command initiates a single temperature conversion. Following the conversion, the resulting thermal data is stored in the 2-byte temperature register in the scratchpad memory and the DS18B20 returns to its low-power idle state. If the device is being used in parasite power mode, within 10µs (max) after this command is issued the master must enable a strong pullup on the 1-Wire bus for the duration of the conversion (tCONV) as described in the Powering the DS18B20 section. If the DS18B20 is powered by an external supply, the master can issue read time slots after the Convert T command and the DS18B20 will respond by transmitting a 0 while the temperature conversion is in progress and a 1 when the conversion is done. In parasite power mode this notification technique cannot be used since the bus is pulled high by the strong pullup during the conversion. WRITE SCRATCHPAD [4Eh] This command allows the master to write 3 bytes of data to the DS18B20’s scratchpad. The first data byte is written into the TH register (byte 2 of the scratchpad), the second byte is written into the TL register (byte 3), and the third byte is written into the configuration register (byte 4). Data must be transmitted least significant bit first. All three bytes MUST be written before the master issues a reset, or the data may be corrupted.

READ SCRATCHPAD [BEh] This command allows the master to read the contents of the scratchpad. The data transfer starts with the least significant bit of byte 0 and continues through the scratchpad until the 9th byte (byte 8 – CRC) is read. The master may issue a reset to terminate reading at any time if only part of the scratchpad data is needed.

Page 137: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

12 of 22

COPY SCRATCHPAD [48h] This command copies the contents of the scratchpad TH, TL and configuration registers (bytes 2, 3 and 4) to EEPROM. If the device is being used in parasite power mode, within 10µs (max) after this command is issued the master must enable a strong pullup on the 1-Wire bus for at least 10ms as described in the Powering the DS18B20 section. RECALL E2 [B8h] This command recalls the alarm trigger values (TH and TL) and configuration data from EEPROM and places the data in bytes 2, 3, and 4, respectively, in the scratchpad memory. The master device can issue read time slots following the Recall E2 command and the DS18B20 will indicate the status of the recall by transmitting 0 while the recall is in progress and 1 when the recall is done. The recall operation happens automatically at power-up, so valid data is available in the scratchpad as soon as power is applied to the device.

READ POWER SUPPLY [B4h] The master device issues this command followed by a read time slot to determine if any DS18B20s on the bus are using parasite power. During the read time slot, parasite powered DS18B20s will pull the bus low, and externally powered DS18B20s will let the bus remain high. See the Powering the DS18B20 section for usage information for this command. Table 3. DS18B20 Function Command Set

COMMAND DESCRIPTION PROTOCOL 1-Wire BUS

ACTIVITYAFTER COMMAND IS ISSUED

NOTES

TEMPERATURE CONVERSION COMMANDS Convert T Initiates temperature

conversion. 44h

DS18B20 transmits conversion status to master (not applicable for parasite-powered DS18B20s).

1

MEMORY COMMANDS Read Scratchpad

Reads the entire scratchpad including the CRC byte. BEh DS18B20 transmits up to 9

data bytes to master. 2

Write Scratchpad

Writes data into scratchpad bytes 2, 3, and 4 (TH, TL, and configuration registers).

4Eh

Master transmits 3 data bytes to DS18B20. 3

Copy Scratchpad

Copies TH, TL, and configuration register data from the scratchpad to EEPROM.

48h

None

1

Recall E2 Recalls TH, TL, and configuration register data from EEPROM to the scratchpad.

B8h

DS18B20 transmits recall status to master.

Read Power Supply

Signals DS18B20 power supply mode to the master. B4h

DS18B20 transmits supply status to master.

Note 1: For parasite-powered DS18B20s, the master must enable a strong pullup on the 1-Wire bus during temperature

conversions and copies from the scratchpad to EEPROM. No other bus activity may take place during this time. Note 2: The master can interrupt the transmission of data at any time by issuing a reset. Note 3: All three bytes must be written before a reset is issued.

Page 138: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

13 of 22

Figure 11. ROM Commands Flowchart

CCh SKIP ROM COMMAND

MASTER TX RESET PULSE

DS18B20 TX PRESENCE

PULSE

MASTER TX ROM COMMAND

33h READ ROM COMMAND

55h MATCH ROM COMMAND

F0h SEARCH ROM

COMMAND

ECh ALARM SEARCH

COMMAND

MASTER TX BIT 0

DS18B20 TX BIT 0

DS18B20 TX BIT 0

MASTER TX BIT 0

BIT 0 MATCH?

MASTER TX BIT 1

BIT 1 MATCH?

BIT 63 MATCH?

MASTER TX BIT 63

N

Y Y Y Y Y

N N N N

N

N

N

Y

Y

Y

DS18B20 TX BIT 1

DS18B20 TX BIT 1

MASTER TX BIT 1

DS18B20 TX BIT 63

DS18B20 TX BIT 63

MASTER TX BIT 63

BIT 0 MATCH?

BIT 1 MATCH?

BIT 63 MATCH?

N

N

N

Y

Y

Y

DS18B20 TX FAMILY CODE

1 BYTE

DS18B20 TX SERIAL NUMBER

6 BYTES

DS18B20 TX CRC BYTE

DS18B20 TX BIT 0

DS18B20 TX BIT 0

MASTER TX BIT 0

N

Y

DEVICE(S) WITH ALARM FLAG SET?

Initialization Sequence

MASTER TX FUNCTION COMMAND

(FIGURE 12)

Page 139: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

14 of 22

Figure 12. DS18B20 Function Commands Flowchart

MASTER TX FUNCTION COMMAND

Y

N 44h

CONVERT TEMPERATURE

?

PARASITE POWER

?

N Y

DS18B20 BEGINS CONVERSION

DEVICE CONVERTING

TEMPERATURE ?

N

Y

MASTER RX “0s”

MASTER RX “1s”

MASTER ENABLES STRONG PULLUP ON DQ

DS18B20 CONVERTS TEMPERATURE

MASTER DISABLES STRONG PULLUP

Y

N 48h

COPY SCRATCHPAD

?

PARASITE POWER

?

N Y

MASTER ENABLES STRONG PULL-UP ON DQ

DATA COPIED FROM SCRATCHPAD TO EEPROM

MASTER DISABLES STRONG PULLUP

MASTER RX “0s”

COPY IN PROGRESS

?

Y

MASTER RX “1s”

N

RETURN TO INITIALIZATION SEQUENCE (FIGURE 11) FOR

NEXT TRANSACTION

B4h READ

POWER SUPPLY ?

Y

N

PARASITE POWERED

?

N

MASTER RX “1s”

MASTER RX “0s”

Y

MASTER TX TH BYTE TO SCRATCHPAD

Y

N 4Eh

WRITE SCRATCHPAD

?

MASTER TX TL BYTE TO SCRATCHPAD

MASTER TX CONFIG. BYTE TO SCRATCHPAD

Y

N

Y

BEh READ

SCRATCHPAD ?

HAVE 8 BYTES BEEN READ

?

N

MASTER TX RESET

?

MASTER RX DATA BYTE FROM SCRATCHPAD

N

Y

MASTER RX SCRATCHPAD CRC BYTE

MASTER RX “1s”

Y

N B8h RECALL E2

?

MASTER BEGINS DATA RECALL FROM E2 PROM

DEVICE BUSY RECALLING

DATA ?

N

Y

MASTER RX “0s”

Page 140: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

15 of 22

1-WIRE SIGNALING The DS18B20 uses a strict 1-Wire communication protocol to ensure data integrity. Several signal types are defined by this protocol: reset pulse, presence pulse, write 0, write 1, read 0, and read 1. The bus master initiates all these signals, with the exception of the presence pulse. INITIALIZATION PROCEDURE—RESET AND PRESENCE PULSES All communication with the DS18B20 begins with an initialization sequence that consists of a reset pulse from the master followed by a presence pulse from the DS18B20. This is illustrated in Figure 13. When the DS18B20 sends the presence pulse in response to the reset, it is indicating to the master that it is on the bus and ready to operate. During the initialization sequence the bus master transmits (TX) the reset pulse by pulling the 1-Wire bus low for a minimum of 480µs. The bus master then releases the bus and goes into receive mode (RX). When the bus is released, the 5kΩ pullup resistor pulls the 1-Wire bus high. When the DS18B20 detects this rising edge, it waits 15µs to 60µs and then transmits a presence pulse by pulling the 1-Wire bus low for 60µs to 240µs. Figure 13. Initialization Timing READ/WRITE TIME SLOTS The bus master writes data to the DS18B20 during write time slots and reads data from the DS18B20 during read time slots. One bit of data is transmitted over the 1-Wire bus per time slot. WRITE TIME SLOTS There are two types of write time slots: “Write 1” time slots and “Write 0” time slots. The bus master uses a Write 1 time slot to write a logic 1 to the DS18B20 and a Write 0 time slot to write a logic 0 to the DS18B20. All write time slots must be a minimum of 60µs in duration with a minimum of a 1µs recovery time between individual write slots. Both types of write time slots are initiated by the master pulling the 1-Wire bus low (see Figure 14). To generate a Write 1 time slot, after pulling the 1-Wire bus low, the bus master must release the 1-Wire bus within 15µs. When the bus is released, the 5kΩ pullup resistor will pull the bus high. To generate a Write 0 time slot, after pulling the 1-Wire bus low, the bus master must continue to hold the bus low for the duration of the time slot (at least 60µs).

LINE TYPE LEGEND Bus master pulling low

DS18B20 pulling low

Resistor pullup

VPU

GND

1-WIRE BUS

480µs minimum 480µs minimum DS18B20 TX

presence pulse 60-240µs

MASTER TX RESET PULSE

MASTER RX

DS18B20 waits 15-60µs

Page 141: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

16 of 22

The DS18B20 samples the 1-Wire bus during a window that lasts from 15µs to 60µs after the master initiates the write time slot. If the bus is high during the sampling window, a 1 is written to the DS18B20. If the line is low, a 0 is written to the DS18B20. Figure 14. Read/Write Time Slot Timing Diagram READ TIME SLOTS The DS18B20 can only transmit data to the master when the master issues read time slots. Therefore, the master must generate read time slots immediately after issuing a Read Scratchpad [BEh] or Read Power Supply [B4h] command, so that the DS18B20 can provide the requested data. In addition, the master can generate read time slots after issuing Convert T [44h] or Recall E2 [B8h] commands to find out the status of the operation as explained in the DS18B20 Function Commands section. All read time slots must be a minimum of 60µs in duration with a minimum of a 1µs recovery time between slots. A read time slot is initiated by the master device pulling the 1-Wire bus low for a minimum of 1µs and then releasing the bus (see Figure 14). After the master initiates the read time slot, the DS18B20 will begin transmitting a 1 or 0 on bus. The DS18B20 transmits a 1 by leaving the bus high and transmits a 0 by pulling the bus low. When transmitting a 0, the DS18B20 will release the bus by the end of the time slot, and the bus will be pulled back to its high idle state by the pullup resister. Output

45µs 15µs

VPU

GND

1-WIRE BUS

60µs < TX “0” < 120µs 1µs < TREC < ∞

DS18B20 Samples MIN TYP MAX

15µs 30µs

> 1µs

MASTER WRITE “0” SLOT MASTER WRITE “1” SLOT

VPU

GND

1-WIRE BUS

15µs

MASTER READ “0” SLOT MASTER READ “1” SLOT

Master samples Master samples

START OF SLOT

START OF SLOT

> 1 µs

1µs < TREC < ∞

15µs 15µs 30µs 15µs

DS18B20 Samples MIN TYP MAX

LINE TYPE LEGEND Bus master pulling low DS18B20 pulling low

Resistor pullup

> 1µs

Page 142: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

17 of 22

data from the DS18B20 is valid for 15µs after the falling edge that initiated the read time slot. Therefore, the master must release the bus and then sample the bus state within 15µs from the start of the slot.

Figure 15 illustrates that the sum of TINIT, TRC, and TSAMPLE must be less than 15µs for a read time slot. Figure 16 shows that system timing margin is maximized by keeping TINIT and TRC as short as possible and by locating the master sample time during read time slots towards the end of the 15µs period.

Figure 15. Detailed Master Read 1 Timing

Figure 16. Recommended Master Read 1 Timing RELATED APPLICATION NOTES The following application notes can be applied to the DS18B20 and are available on our website at www.maxim-ic.com. Application Note 27: Understanding and Using Cyclic Redundancy Checks with Maxim iButton Products Application Note 122: Using Dallas' 1-Wire ICs in 1-Cell Li-Ion Battery Packs with Low-Side N-Channel Safety FETs Master Application Note 126: 1-Wire Communication Through Software Application Note 162: Interfacing the DS18x20/DS1822 1-Wire Temperature Sensor in a Microcontroller Environment Application Note 208: Curve Fitting the Error of a Bandgap-Based Digital Temperature Sensor Application Note 2420: 1-Wire Communication with a Microchip PICmicro Microcontroller Application Note 3754: Single-Wire Serial Bus Carries Isolated Power and Data Sample 1-Wire subroutines that can be used in conjunction with Application Note 74: Reading and Writing iButtons via Serial Interfaces can be downloaded from the Maxim website.

VPU

GND

1-WIRE BUS

15µs

VIH of Master

TRC TINT > 1µs Master samples

LINE TYPE LEGEND Bus master pulling low

Resistor pullup

VPU

GND

1-WIRE BUS

15µs

VIH of Master

TRC = small

TINT = small

Master samples

Page 143: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

18 of 22

DS18B20 OPERATION EXAMPLE 1 In this example there are multiple DS18B20s on the bus and they are using parasite power. The bus master initiates a temperature conversion in a specific DS18B20 and then reads its scratchpad and recalculates the CRC to verify the data.

MASTER MODE DATA (LSB FIRST) COMMENTS Tx Reset Master issues reset pulse. Rx Presence DS18B20s respond with presence pulse. Tx 55h Master issues Match ROM command. Tx 64-bit ROM code Master sends DS18B20 ROM code. Tx 44h Master issues Convert T command.

Tx DQ line held high by strong pullup

Master applies strong pullup to DQ for the duration of the conversion (tCONV).

Tx Reset Master issues reset pulse. Rx Presence DS18B20s respond with presence pulse. Tx 55h Master issues Match ROM command. Tx 64-bit ROM code Master sends DS18B20 ROM code. Tx BEh Master issues Read Scratchpad command.

Rx 9 data bytes

Master reads entire scratchpad including CRC. The master then recalculates the CRC of the first eight data bytes from the scratchpad and compares the calculated CRC with the read CRC (byte 9). If they match, the master continues; if not, the read operation is repeated.

DS18B20 OPERATION EXAMPLE 2 In this example there is only one DS18B20 on the bus and it is using parasite power. The master writes to the TH, TL, and configuration registers in the DS18B20 scratchpad and then reads the scratchpad and recalculates the CRC to verify the data. The master then copies the scratchpad contents to EEPROM.

MASTER MODE DATA (LSB FIRST) COMMENTS Tx Reset Master issues reset pulse. Rx Presence DS18B20 responds with presence pulse. Tx CCh Master issues Skip ROM command. Tx 4Eh Master issues Write Scratchpad command. Tx 3 data bytes Master sends three data bytes to scratchpad (TH, TL, and config). Tx Reset Master issues reset pulse. Rx Presence DS18B20 responds with presence pulse. Tx CCh Master issues Skip ROM command. Tx BEh Master issues Read Scratchpad command.

Rx 9 data bytes

Master reads entire scratchpad including CRC. The master then recalculates the CRC of the first eight data bytes from the scratchpad and compares the calculated CRC with the read CRC (byte 9). If they match, the master continues; if not, the read operation is repeated.

Tx Reset Master issues reset pulse. Rx Presence DS18B20 responds with presence pulse. Tx CCh Master issues Skip ROM command. Tx 48h Master issues Copy Scratchpad command.

Tx DQ line held high by strong pullup

Master applies strong pullup to DQ for at least 10ms while copy operation is in progress.

Page 144: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

19 of 22

ABSOLUTE MAXIMUM RATINGS Voltage Range on Any Pin Relative to Ground .................................................................. -0.5V to +6.0V Operating Temperature Range ....................................................................................... -55°C to +125°C Storage Temperature Range ........................................................................................... -55°C to +125°C Solder Temperature ..................................................... Refer to the IPC/JEDEC J-STD-020 Specification. These are stress ratings only and functional operation of the device at these or any other conditions above those indicated in the operation sections of this specification is not implied. Exposure to absolute maximum rating conditions for extended periods of time may affect reliability. DC ELECTRICAL CHARACTERISTICS (-55°C to +125°C; VDD=3.0V to 5.5V)

PARAMETER SYMBOL CONDITIONS MIN TYP MAX UNITS NOTES Supply Voltage VDD Local Power +3.0 +5.5 V 1 Pullup Supply Voltage VPU Parasite Power +3.0 +5.5 V 1,2 Local Power +3.0 VDD Thermometer Error tERR -10°C to +85°C ±0.5 °C 3 -55°C to +125°C ±2 Input Logic-Low VIL -0.3 +0.8 V 1,4,5

Input Logic-High VIH Local Power +2.2

The lower of 5.5 or

VDD + 0.3

V 1, 6 Parasite Power +3.0

Sink Current IL VI/O = 0.4V 4.0 mA 1 Standby Current IDDS 750 1000 nA 7,8 Active Current IDD VDD = 5V 1 1.5 mA 9 DQ Input Current IDQ 5 µA 10 Drift ±0.2 °C 11

NOTES: 1) All voltages are referenced to ground. 2) The Pullup Supply Voltage specification assumes that the pullup device is ideal, and therefore the

high level of the pullup is equal to VPU. In order to meet the VIH spec of the DS18B20, the actual supply rail for the strong pullup transistor must include margin for the voltage drop across the transistor when it is turned on; thus: VPU_ACTUAL = VPU_IDEAL + VTRANSISTOR.

3) See typical performance curve in Figure 17. 4) Logic-low voltages are specified at a sink current of 4mA. 5) To guarantee a presence pulse under low voltage parasite power conditions, VILMAX may have to be

reduced to as low as 0.5V. 6) Logic-high voltages are specified at a source current of 1mA. 7) Standby current specified up to +70°C. Standby current typically is 3µA at +125°C. 8) To minimize IDDS, DQ should be within the following ranges: GND ≤ DQ ≤ GND + 0.3V or

VDD – 0.3V ≤ DQ ≤ VDD. 9) Active current refers to supply current during active temperature conversions or EEPROM writes. 10) DQ line is high (“high-Z” state). 11) Drift data is based on a 1000-hour stress test at +125°C with VDD = 5.5V.

Page 145: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

20 of 22

AC ELECTRICAL CHARACTERISTICS—NV MEMORY (-55°C to +100°C; VDD = 3.0V to 5.5V)

PARAMETER SYMBOL CONDITIONS MIN TYP MAX UNITS NV Write Cycle Time tWR 2 10 ms EEPROM Writes NEEWR -55°C to +55°C 50k writes EEPROM Data Retention tEEDR -55°C to +55°C 10 years

AC ELECTRICAL CHARACTERISTICS (-55°C to +125°C; VDD = 3.0V to 5.5V)

PARAMETER SYMBOL CONDITIONS MIN TYP MAX UNITS NOTES

Temperature Conversion Time tCONV

9-bit resolution 93.75

ms 1 10-bit resolution 187.5 11-bit resolution 375 12-bit resolution 750

Time to Strong Pullup On tSPON Start Convert T Command Issued 10 µs

Time Slot tSLOT 60 120 µs 1 Recovery Time tREC 1 µs 1 Write 0 Low Time tLOW0 60 120 µs 1 Write 1 Low Time tLOW1 1 15 µs 1 Read Data Valid tRDV 15 µs 1 Reset Time High tRSTH 480 µs 1 Reset Time Low tRSTL 480 µs 1,2 Presence-Detect High tPDHIGH 15 60 µs 1 Presence-Detect Low tPDLOW 60 240 µs 1 Capacitance CIN/OUT 25 pF

NOTES: 1) See the timing diagrams in Figure 18. 2) Under parasite power, if tRSTL > 960µs, a power-on reset may occur.

Figure 17. Typical Performance Curve

DS18B20 Typical Error Curve

-0.5-0.4-0.3-0.2-0.1

00.10.20.30.40.5

0 10 20 30 40 50 60 70

Temperature (°C)

Ther

mom

eter

Err

or (°

C)

Mean Error

+3s Error

-3s Error

Page 146: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

21 of 22

Figure 18. Timing Diagrams

Page 147: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

DS18B20

REVISION HISTORY REVISION

DATE DESCRIPTION PAGES CHANGED

030107 In the Absolute Maximum Ratings section, removed the reflow oven temperature value of +220°C. Reference to JEDEC specification for reflow remains.

19

101207

In the Operation—Alarm Signaling section, added “or equal to” in the desciption for a TH alarm condition 5

In the Memory section, removed incorrect text describing memory. 7 In the Configuration Register section, removed incorrect text describing configuration register. 8

042208 In the Ordering Information table, added TO-92 straight-lead packages and included a note that the TO-92 package in tape and reel can be ordered with either formed or straight leads.

2

Maxim Integrated 160 Rio Robles, San Jose, CA 95134 USA 1-408-601-1000

Maxim cannot assume responsibility for use of any circuitry other than circuitry entirely embodied in a Maxim product. No circuit patent licenses are implied. Maxim reserves the right to change the circuitry and specifications without notice at any time. The parametric values (min and max limits) shown in the Electrical Characteristics table are guaranteed. Other parametric values quoted in this data sheet are provided for guidance.

© Maxim Integrated The Maxim logo and Maxim Integrated are trademarks of Maxim Integrated Products, Inc.

Page 148: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

HIH-4010/4020/4021 Series

Humidity Sensors

DESCRIPTION The HIH-40104020/4021 Series Humidity Sensors are

designed specifically for high volume OEM (Original Equipment

Manufacturer) users.

Direct input to a controller or other device is made possible by

this sensor’s near linear voltage output. With a typical current

draw of only 200 µA, the HIH-4010/4020/4021 Series is often

ideally suited for low drain, battery operated systems.

Tight sensor interchangeability reduces or eliminates OEM

production calibration costs. Individual sensor calibration data

is available.

The HIH-4010/4020/4021 Series delivers instrumentation-

quality RH (Relative Humidity) sensing performance in a

competitively priced, solderable SIP (Single In-line Package).

The HIH-4010 is an uncovered integrated humidity sensor, the

HIH-4020 is a covered integrated circuit humidity sensor, and

the HIH-4021 is a covered, condensation-resistant, integrated

circuit humidity sensor. All three products are available in two

lead space configurations.

The RH sensor is a laser trimmed, thermoset polymer

capacitive sensing element with on-chip integrated signal

conditioning.

The sensing element's multilayer construction provides

excellent resistance to most application hazards such as

wetting, dust, dirt, oils and common environmental chemicals.

Both products are available in two lead spacing configurations,

as well as with or without calibration and data printouts.

FEATURES

• Molded thermoset plastic housing

• Near linear voltage output vs %RH

• Laser trimmed interchangeability

• Low power design

• Enhanced accuracy

• Fast response time

• Stable, low drift performance

• Chemically resistant

POTENTIAL APPLICATIONS

• Refrigeration equipment

• HVAC (Heating, Ventilation and Air Conditioning)

equipment

• Medical equipment

• Drying

• Metrology

• Battery-powered systems

• OEM assemblies

Page 149: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

HIH-4010/4020/4021 Series

2 www.honeywell.com/sensing

TABLE 1. PERFORMANCE SPECIFICATIONS (At 5 Vdc supply and 25 !C [77 !F] unless otherwise noted.) Parameter Minimum Typical Maximum Unit Specific

Note Interchangeability (first order curve) ñ ñ ñ ñ ñ

0% RH to 59% RH -5 ñ 5 % RH ñ 60% RH to 100% RH -8 ñ 8 % RH ñ

Accuracy (best fit straight line) -3.5 ñ +3.5 % RH 1 Hysterisis ñ 3 ñ % RH ñ Repeatability ñ ±0.5 ñ % RH ñ Settling time ñ ñ 70 ms ñ Response time (1/e in slow moving air) ñ 5 ñ s ñ Stability (at 50 %RH in 1 year) ñ ±1.2 ñ % RH 2 Stability (at 50 %RH in 1 year) ñ ±0.5 ñ % RH 3 Voltage supply 4 ñ 5.8 Vdc 4 Current supply ñ 200 500 µA ñ Voltage output (1st order curve fit) VOUT=(VSUPPLY)(0.0062(sensor RH) + 0.16), typical at 25 +C Temperature compensation True RH = (Sensor RH)/(1.0546 – 0.00216T), T in +C Output voltage temp. coefficient at 50% RH, 5 V ñ -4 ñ mV/+C ñ Operating temperature -40[-40] See Figure 1. 85[185] +C[+F] ñ Operating humidity (HIH-4010) 0 See Figure 1. 100 % RH 5 Operating humidity (HIH-4020) 0 See Figure 1. 100 % RH 5 Operating humidity (HIH-4021) 0 See Figure 1. 100 % RH ñ Storage temperature -50[-58] ñ 125[257] +C[+F] ñ Storage humidity See Figure 2. % RH 5 Specific Notes: 1. For HIH-4010/20/21-003/004 catalog listings only. 2. Includes testing outside of recommended operating zone. 3. Includes testing for recommended operating zone only. 4. Device is calibrated at 5 Vdc and 25 +C. 5. Non-condensing environment. When liquid water falls on the

humidity sensor die, output goes to a low rail condition indicating no humidity.

General Notes: • Sensor is ratiometric to supply voltage. • Extended exposure to >90% RH causes a reversible

shift of 3% RH. • Sensor is light sensitive. For best performance, shield

sensor from bright light.

FACTORY CALIBRATION DATA HIH-4010/4020/4021 Sensors may be ordered with a calibration and data printout. See Table 2 and the order guide on the back page. TABLE 2. EXAMPLE DATA PRINTOUT

Model HIH-4010-003 Channel 92 Wafer 030996M MRP 337313 Calculated values at 5 V VOUT at 0% RH VOUT at 75.3% RH

0.958 V 3.268 V

Linear output for 3.5% RH accuracy at 25 °C Zero offset Slope Sensor RH

0.958 V 30.680 mV/%RH (VOUT - zero offset)/slope (VOUT - 0.958)/0.0307

Ratiometric response for 0% RH to 100% RH VOUT

VSUPPLY (0.1915 to 0.8130)

For HIH-4010-001/002/003/004 catalog listings only.

For HIH-4020-001/002/003/004 and HIH-4021-001/002/003/ 004 catalog listings only.

Page 150: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

Humidity Sensors

Honeywell Sensing and Control 3

FIGURE 1. OPERATING ENVIRONMENT (Non-condensing environment for HIH-4010 and HIH-4020 catalog listings only.)

FIGURE 2. STORAGE ENVIRONMENT (Non-condensing environment for HIH-4010 and HIH-4020 catalog listings only.)

Rel

ativ

e H

umid

ity

Page 151: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

HIH-4010/4020/4021 Series

4 www.honeywell.com/sensing

FIGURE 3. TYPICAL OUTPUT VOLTAGE VS RELATIVE HUMIDITY (At 25 !C and 5 V.)

0.5

1

1.5

2

2.5

3

3.5

4

0 20 40 60 80 100

Relative Humidity (%RH)

Out

put V

olta

ge (V

dc)

Sensor ResponseSensor ResponseBest Linear Fit

FIGURE 4. TYPICAL OUTPUT VOLTAGE (BFSL) VS RELATIVE HUMIDITY (At 0 !C, 70 !C and 5 V.)

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

0 10 20 30 40 50 60 70 80 90 100

Relative Humidity (%)

Out

put V

olta

ge (V

dc)

0 C70 C

Page 152: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

Humidity Sensors

Honeywell Sensing and Control 5

FIGURE 5. HIH-4010 MOUNTING DIMENSIONS (For reference only. mm/[in])

FIGURE 6. HIH-4020 MOUNTING DIMENSIONS (For reference only. mm/[in])

Page 153: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

HIH-4010/4020/4021 Series

6 www.honeywell.com/sensing

FIGURE 7. HIH-4021 MOUNTING DIMENSIONS (For reference only. mm/[in])

Page 154: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

Humidity Sensors

Honeywell Sensing and Control 7

FIGURE 8. TYPICAL APPLICATION CIRCUIT

ORDER GUIDE

Catalog Listing

Description

HIH-4010-001 Integrated circuit humidity sensor, 2,45 mm [0.100 in] lead pitch SIP HIH-4010-002 Integrated circuit humidity sensor, 1.27 mm [0.050 in] lead pitch SIP HIH-4010-003 Integrated circuit humidity sensor, 2,45 mm [0.100 in] lead pitch SIP, calibration and data printout HIH-4010-004 Integrated circuit humidity sensor, 1.27 mm [0.050 in] lead pitch SIP, calibration and data printout HIH-4020-001 Covered integrated circuit humidity sensor, 2,45 mm [0.100 in] lead pitch SIP HIH-4020-002 Covered integrated circuit humidity sensor, 1.27 mm [0.050 in] lead pitch SIP HIH-4020-003 Covered integrated circuit humidity sensor, 2,45 mm [0.100 in] lead pitch SIP, calibration and data printout HIH-4020-004 Covered integrated circuit humidity sensor, 1.27 mm [0.050 in] lead pitch SIP, calibration and data printout HIH-4021-001 Covered, filtered integrated circuit humidity sensor, 2,45 mm [0.100 in]lead pitch SIP HIH-4021-002 Covered, filtered integrated circuit humidity sensor, 1.27 mm [0.050 in] lead pitch SIP HIH-4021-003 Covered, filtered integrated circuit humidity sensor, 2,45 mm [0.100 in] lead pitch SIP, calibration and data

printout HIH-4021-004 Covered, filtered integrated circuit humidity sensor, 1.27 mm [0.050 in] lead pitch SIP, calibration and data

printout FURTHER HUMIDITY SENSOR INFORMATION See the following associated literature at www.honeywell.com/sensing: • Product installation instructions • Application sheets:

ñ Humidity Sensor Performance Characteristics ñ Humidity Sensor Theory and Behavior ñ Humidity Sensor Moisture and Psychrometrics ñ Thermoset Polymer-based Capacitive Sensors

Page 155: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

Automation and Control Solutions Sensing and Control

Honeywell

1985 Douglas Drive North

Minneapolis, MN 55422

www.honeywell.com/sensing

009020-1-EN IL50 GLO Printed in USA January 2007 © 2007 Honeywell International Inc. All rights reserved.

WARNING MISUSE OF DOCUMENTATION • The information presented in this product sheet is for

reference only. Do not use this document as a product installation guide.

• Complete installation, operation, and maintenance information is provided in the instructions supplied with each product.

Failure to comply with these instructions could result in death or serious injury.

WARRANTY/REMEDY Honeywell warrants goods of its manufacture as being free of defective materials and faulty workmanship. Honeywell’s standard product warranty applies unless agreed to otherwise by Honeywell in writing; please refer to your order acknowledgement or consult your local sales office for specific warranty details. If warranted goods are returned to Honeywell during the period of coverage, Honeywell will repair or replace, at its option, without charge those items it finds defective. The foregoing is buyer’s sole remedy and is in lieu of all other warranties, expressed or implied, including those of merchantability and fitness for a particular purpose. In no event shall Honeywell be liable for consequential, special, or indirect damages.

While we provide application assistance personally, through our literature and the Honeywell web site, it is up to the customer to determine the suitability of the product in the application.

Specifications may change without notice. The information we supply is believed to be accurate and reliable as of this printing. However, we assume no responsibility for its use.

WARNING PERSONAL INJURY DO NOT USE these products as safety or emergency stop devices or in any other application where failure of the product could result in personal injury. Failure to comply with these instructions could result in death or serious injury.

SALES AND SERVICE Honeywell serves its customers through a worldwide network of sales offices, representatives and distributors. For application assistance, current specifications, pricing or name of the nearest Authorized Distributor, contact your local sales office or:

E-mail: [email protected]

Internet: www.honeywell.com/sensing

Phone and Fax: Asia Pacific +65 6355-2828 +65 6445-3033 Fax Europe +44 (0) 1698 481481 +44 (0) 1698 481676 Fax Latin America +1-305-805-8188 +1-305-883-8257 Fax USA/Canada +1-800-537-6945 +1-815-235-6847 +1-815-235-6545 Fax

Page 156: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

Weather Sensor Assembly p/n 80422 Imported by Argent Data Systems Usage Notes This kit includes a wind vane, cup anemometer, and tipping bucket rain gauge, with associated mounting hardware. These sensors contain no active electronics, instead using sealed magnetic reed switches and magnets to take measurements. A voltage must be supplied to each instrument to produce an output. Assembly The wind sensor arm mounts on top of the two-piece metal mast and supports the wind vane and anemometer. A short cable connects the two wind sensors. Plastic clips on the underside of the arm hold this cable in place. Screws are provided to secure the sensors to the arm. The rain gauge may be mounted lower on the mast using its own mounting arm and screw, or it may be mounted independently. Rain Gauge The rain gauge is a self-emptying tipping bucket type. Each 0.011” (0.2794 mm) of rain causes one momentary contact closure that can be recorded with a digital counter or microcontroller interrupt input. The gauge’s switch is connected to the two center conductors of the attached RJ11-terminated cable. Anemometer The cup-type anemometer measures wind speed by closing a contact as a magnet moves past a switch. A wind speed of 1.492 MPH (2.4 km/h) causes the switch to close once per second. The anemometer switch is connected to the inner two conductors of the RJ11 cable shared by the anemometer and wind vane (pins 2 and 3.)

Page 157: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

Wind Vane The wind vane is the most complicated of the three sensors. It has eight switches, each connected to a different resistor. The vane’s magnet may close two switches at once, allowing up to 16 different positions to be indicated. An external resistor can be used to form a voltage divider, producing a voltage output that can be measured with an analog to digital converter, as shown below. The switch and resistor arrangement is shown in the diagram to the right. Resistance values for all 16 possible positions are given in the table. Resistance values for positions between those shown in the diagram are the result of two adjacent resistors connected in parallel when the vane’s magnet activates two switches simultaneously. Example wind vane interface circuit. Voltage readings for a 5 volt supply and a resistor value of 10k ohms are given in the table.

Direction (Degrees)

Resistance (Ohms)

Voltage (V=5v, R=10k)

0 33k 3.84v 22.5 6.57k 1.98v 45 8.2k 2.25v 67.5 891 0.41v 90 1k 0.45v 112.5 688 0.32v 135 2.2k 0.90v 157.5 1.41k 0.62v 180 3.9k 1.40v 202.5 3.14k 1.19v 225 16k 3.08v 247.5 14.12k 2.93v 270 120k 4.62v 292.5 42.12k 4.04v 315 64.9k 4.78v 337.5 21.88k 3.43v

Page 158: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

TSL235R

LIGHT-TO-FREQUENCY CONVERTER

TAOS038E −SEPTEMBER 2007

1

The LUMENOLOGY Company

Copyright 2007, TAOS Inc.

www.taosinc.com

High-Resolution Conversion of LightIntensity to Frequency With No ExternalComponents

Communicates Directly With aMicrocontroller

Compact Three-Leaded Clear-PlasticPackage

Single-Supply Operation Down to 2.7 V

Nonlinearity Error Typically 0.2% at 100 kHz

Stable 150 ppm/°C Temperature Coefficient

Single-Supply Operation

RoHS Compliant (−LF Package Only)

DescriptionThe TSL235R light-to-frequency converter combines a silicon photodiode and a current-to-frequency converteron a single monolithic CMOS integrated circuit. Output is a square wave (50% duty cycle) with frequency directlyproportional to light intensity (irradiance) on the photodiode. The digital output allows direct interface to amicrocontroller or other logic circuitry. The device has been temperature compensated for theultraviolet-to-visible light range of 320 nm to 700 nm and responds over the light range of 320 nm to 1050 nm.The TSL235R is characterized for operation over the temperature range of −25°C to 70°C and is supplied ina 3-lead clear plastic side-looker package with an integral lens. When supplied in the lead (Pb) free package,the device is RoHS compliant.

Functional Block Diagram

Light Current-to-FrequencyConverterPhotodiode Output

Available Options

DEVICE TA PACKAGE − LEADS PACKAGE DESIGNATOR ORDERING NUMBER

TSL235R −25°C to 70°C 3-lead Sidelooker S TSL235R

TSL235R −25°C to 70°C 3-lead Sidelooker—Lead (Pb) Free S TSL235R−LF

TSL235R −25°C to 70°C 3-lead Surface-Mount Sidelooker—Lead (Pb) Free SM TSL235RSM−LF

Terminal Functions

TERMINALTYPE DESCRIPTION

NAME NO.TYPE DESCRIPTION

GND 1 Power supply ground (substrate). All voltages are referenced to GND.

OUT 3 O Output frequency.

VDD 2 Supply voltage.

Texas Advanced Optoelectronic Solutions Inc.1001 Klein Road Suite 300 Plano, TX 75074 (972) 673-0759

PACKAGE SSIDELOOKER(FRONT VIEW)

1GND

2VDD

3OUT

PACKAGE SMSURFACE MOUNT

SIDELOOKER(FRONT VIEW)

1GND

2VDD

3OUT

Page 159: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

TSL235R

LIGHT-TO-FREQUENCY CONVERTER

TAOS038E −SEPTEMBER 2007

2

Copyright 2007, TAOS Inc. The LUMENOLOGY Company

www.taosinc.com

Absolute Maximum Ratings over operating free-air temperature range (unless otherwise noted)†

Supply voltage, VDD (see Note 1) 6 V. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operating free-air temperature range, TA −25°C to 70°C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Storage temperature range, Tstg −25°C to 85°C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lead temperature 1,6 mm (1/16 inch) from case for 10 seconds (S Package) 260°C. . . . . . . . . . . . . . . . . . . . Reflow solder, in accordance with J-STD-020C or J-STD-020D (SM Package) 260°C. . . . . . . . . . . . . . . . . . .

† Stresses beyond those listed under “absolute maximum ratings” may cause permanent damage to the device. These are stress ratings only, andfunctional operation of the device at these or any other conditions beyond those indicated under “recommended operating conditions” is notimplied. Exposure to absolute-maximum-rated conditions for extended periods may affect device reliability.

NOTE 1: All voltage values are with respect to GND.

Recommended Operating Conditions

MIN NOM MAX UNIT

Supply voltage, VDD 2.7 5 5.5 V

Operating free-air temperature range, TA −25 70 °C

Electrical Characteristics at VDD = 5 V, TA = 25°C (unless otherwise noted)

PARAMETER TEST CONDITIONS MIN TYP MAX UNIT

VOH High-level output voltage IOH = −4 mA 4 4.5 V

VOL Low-level output voltage IOL = 4 mA 0.25 0.4 V

IDD Supply current 2 3 mA

Full-scale frequency‡ 500 kHz

Temperature coefficient of output frequency Wavelength < 700nm ±150 ppm/°C

kSVS Supply-voltage sensitivity VDD = 5 V ±10% ±0.5 %/V‡ Full-scale frequency is the maximum operating frequency of the device without saturation.

Operating Characteristics at VDD = 5 V, TA = 25°C

PARAMETER TEST CONDITIONS MIN TYP MAX UNIT

f Output frequencyEe = 430 μW/cm2, λp = 635 nm 200 250 300 kHz

fO Output frequencyEe = 0 μW/cm2 0.4 10 Hz

N li it §fO = 0 kHz to 10 kHz ±0.1% %F.S.

Nonlinearity §fO = 0 kHz to 100 kHz ±0.2% %F.S.

Step response to full-scale step input1 pulse of new

frequency plus 1 μs‡ Full-scale frequency is the maximum operating frequency of the device without saturation.§ Nonlinearity is defined as the deviation of fO from a straight line between zero and full scale, expressed as a percent of full scale.

Page 160: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

TSL235R

LIGHT-TO-FREQUENCY CONVERTER

TAOS038E −SEPTEMBER 2007

3

The LUMENOLOGY Company

Copyright 2007, TAOS Inc.

www.taosinc.com

TYPICAL CHARACTERISTICS

1

0.1

0.01

0.0010.001 0.01 0.1 1 10

10

100

OUTPUT FREQUENCYvs

IRRADIANCE

100 1 k

Ee − Irradiance − μW/cm2

VDD = 5 Vλp = 635 nmTA = 25°C

1000

f O —

Ou

tpu

t F

req

uen

cy —

kH

z

Figure 1 Figure 2

300 400 500 600 700 1000800 900 1100λ − Wavelength − nm

No

rmal

ized

Res

po

nsi

vity

0

0.2

0.4

0.6

0.8

1.0

1.2

PHOTODIODE SPECTRAL RESPONSIVITY

DARK FREQUENCYvs

TEMPERATURE

VDD = 5 VEe = 0

TA − Temperature − °C λ − Wavelength of Incident Light − nm

VDD = 5 V

TEMPERATURE COEFFICIENTOF OUTPUT FREQUENCY

vsWAVELENGTH OF INCIDENT LIGHT

−25 0 25 50 750

0.2

0.4

0.6

0.8

1

1.2

0

1000

2000

3000

4000

5000

6000

7000

300 400 500 600 700 1000800 900Tem

per

atu

re C

oef

fici

ent

of

Ou

tpu

t F

req

uen

cy —

pp

m/

C

f O(d

ark)

— D

ark

Fre

qu

ency

— H

z

Figure 3 Figure 4

Page 161: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

TSL235R

LIGHT-TO-FREQUENCY CONVERTER

TAOS038E −SEPTEMBER 2007

4

Copyright 2007, TAOS Inc. The LUMENOLOGY Company

www.taosinc.com

TYPICAL CHARACTERISTICS

OUTPUT FREQUENCYvs

SUPPLY VOLTAGE

VDD − Supply Voltage − V

No

rmal

ized

Ou

tpu

t F

req

uen

cy

2.5 3 3.5 4 4.5 50.980

0.985

0.990

0.995

1.000

1.005

1.010

5.5

TA = 25°CfO = 250 kHz

Figure 5

Page 162: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

TSL235R

LIGHT-TO-FREQUENCY CONVERTER

TAOS038E −SEPTEMBER 2007

5

The LUMENOLOGY Company

Copyright 2007, TAOS Inc.

www.taosinc.com

APPLICATION INFORMATION

Power-supply considerations

Power-supply lines must be decoupled by a 0.01-μF to 0.1-μF capacitor with short leads placed close to theTSL235R (Figure 6).

Output interface

The output of the device is designed to drive a standard TTL or CMOS logic input over short distances. If linesgreater than 12 inches are used on the output, a buffer or line driver is recommended.

Measuring the frequency

The choice of interface and measurement technique depends on the desired resolution and data-acquisitionrate. For maximum data-acquisition rate, period-measurement techniques are used.

Period measurement requires the use of a fast reference clock with available resolution directly related toreference-clock rate. The technique is employed to measure rapidly varying light levels or to make a fastmeasurement of a constant light source.

Maximum resolution and accuracy may be obtained using frequency-measurement, pulse-accumulation,or integration techniques. Frequency measurements provide the added benefit of averaging out random- orhigh-frequency variations (jitter) resulting from noise in the light signal. Resolution is limited mainly by availablecounter registers and allowable measurement time. Frequency measurement is well suited for slowly varyingor constant light levels and for reading average light levels over short periods of time. Integration, theaccumulation of pulses over a very long period of time, can be used to measure exposure — the amount of lightpresent in an area over a given time period.

TSL235R Timer /Port

MCU

0.1 μF

VDD

2

3

1

Figure 6. Typical TSL235R Interface to a Microcontroller

Page 163: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

TSL235R

LIGHT-TO-FREQUENCY CONVERTER

TAOS038E −SEPTEMBER 2007

6

Copyright 2007, TAOS Inc. The LUMENOLOGY Company

www.taosinc.com

APPLICATION INFORMATION

PCB Pad Layout

Suggested PCB pad layout guidelines for the SM surface mount package are shown in Figure 7.

3.2

1.0 1.0 1.0

1.01.0

NOTES: A. All linear dimensions are in millimeters.B. This drawing is subject to change without notice.

Figure 7. Suggested SM Package PCB Layout

Page 164: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

TSL235R

LIGHT-TO-FREQUENCY CONVERTER

TAOS038E −SEPTEMBER 2007

7

The LUMENOLOGY Company

Copyright 2007, TAOS Inc.

www.taosinc.com

MECHANICAL DATA

The device is supplied in a clear plastic three-lead through-hole sidelooker package (S).

PACKAGE S PLASTIC SINGLE-IN-LINE SIDE-LOOKER PACKAGE

1.642.60

2.30

4.60

R 0.90

1.80

0.42

1

2 20.47 TYP

TOP VIEW

SIDE VIEWFRONT VIEW

0.42

1.56

14.86 0.50

4.60

0.15Note B

Lead FreeAvailable

Pb

NOTES: A. All linear dimensions are in millimeters; tolerance is ± 0.25 mm unless otherwise stated.B. Dimension is to center of lens arc, which is located below the package face.C. The integrated photodiode active area is typically 0.92 mm2 in size and is located in the center of the lens and 0.97 mm below the

top of the lens surface.D. Index of refraction of clear plastic is 1.55.E. Lead finish for TSL235R: solder dipped, 63% Sn/37% Pb. Lead finish for TSL235R−LF: solder dipped, 100% Sn.F. This drawing is subject to change without notice.

Figure 8. Package S — Single-In-Line Side-Looker Package Configuration

Page 165: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

TSL235R

LIGHT-TO-FREQUENCY CONVERTER

TAOS038E −SEPTEMBER 2007

8

Copyright 2007, TAOS Inc. The LUMENOLOGY Company

www.taosinc.com

MECHANICAL DATA

PACKAGE SM PLASTIC SURFACE MOUNT SIDE-LOOKER PACKAGE

1.642.60

2.30

4.60

R 0.90

1.80

0.421.00

0.47 TYP

TOP VIEW

SIDE VIEWFRONT VIEW

0.42

5.73 0.50

4.60

0.15 Note B

2.59

0.62 0.101.97

0.62 +0.10−0.15

Lead Free

Pb2 2

NOTES: A. All linear dimensions are in millimeters; tolerance is ± 0.25 mm unless otherwise stated.B. Dimension is to center of lens arc, which is located below the package face.C. The integrated photodiode active area is typically located in the center of the lens and 0.97 mm below the top of the lens surface.D. Index of refraction of clear plastic is 1.55.E. Lead finish for TSL235RSM−LF: solder dipped, 100% Sn.F. This drawing is subject to change without notice.

Figure 9. Package SM — Surface Mount Side-Looker Package Configuration

Page 166: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

TSL235R

LIGHT-TO-FREQUENCY CONVERTER

TAOS038E −SEPTEMBER 2007

9

The LUMENOLOGY Company

Copyright 2007, TAOS Inc.

www.taosinc.com

PRODUCTION DATA — information in this document is current at publication date. Products conform tospecifications in accordance with the terms of Texas Advanced Optoelectronic Solutions, Inc. standardwarranty. Production processing does not necessarily include testing of all parameters.

LEAD-FREE (Pb-FREE) and GREEN STATEMENTPb-Free (RoHS) TAOS’ terms Lead-Free or Pb-Free mean semiconductor products that are compatible with the currentRoHS requirements for all 6 substances, including the requirement that lead not exceed 0.1% by weight in homogeneousmaterials. Where designed to be soldered at high temperatures, TAOS Pb-Free products are suitable for use in specifiedlead-free processes.

Green (RoHS & no Sb/Br) TAOS defines Green to mean Pb-Free (RoHS compatible), and free of Bromine (Br) andAntimony (Sb) based flame retardants (Br or Sb do not exceed 0.1% by weight in homogeneous material).

Important Information and Disclaimer The information provided in this statement represents TAOS’ knowledge andbelief as of the date that it is provided. TAOS bases its knowledge and belief on information provided by third parties,and makes no representation or warranty as to the accuracy of such information. Efforts are underway to better integrateinformation from third parties. TAOS has taken and continues to take reasonable steps to provide representativeand accurate information but may not have conducted destructive testing or chemical analysis on incoming materials andchemicals. TAOS and TAOS suppliers consider certain information to be proprietary, and thus CAS numbers and otherlimited information may not be available for release.

NOTICETexas Advanced Optoelectronic Solutions, Inc. (TAOS) reserves the right to make changes to the products contained in thisdocument to improve performance or for any other purpose, or to discontinue them without notice. Customers are advisedto contact TAOS to obtain the latest product information before placing orders or designing TAOS products into systems.

TAOS assumes no responsibility for the use of any products or circuits described in this document or customer productdesign, conveys no license, either expressed or implied, under any patent or other right, and makes no representation thatthe circuits are free of patent infringement. TAOS further makes no claim as to the suitability of its products for any particularpurpose, nor does TAOS assume any liability arising out of the use of any product or circuit, and specifically disclaims anyand all liability, including without limitation consequential or incidental damages.

TEXAS ADVANCED OPTOELECTRONIC SOLUTIONS, INC. PRODUCTS ARE NOT DESIGNED OR INTENDED FORUSE IN CRITICAL APPLICATIONS IN WHICH THE FAILURE OR MALFUNCTION OF THE TAOS PRODUCT MAYRESULT IN PERSONAL INJURY OR DEATH. USE OF TAOS PRODUCTS IN LIFE SUPPORT SYSTEMS IS EXPRESSLYUNAUTHORIZED AND ANY SUCH USE BY A CUSTOMER IS COMPLETELY AT THE CUSTOMER’S RISK.

LUMENOLOGY, TAOS, the TAOS logo, and Texas Advanced Optoelectronic Solutions are registered trademarks of Texas AdvancedOptoelectronic Solutions Incorporated.

Page 167: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

TSL235R

LIGHT-TO-FREQUENCY CONVERTER

TAOS038E −SEPTEMBER 2007

10

Copyright 2007, TAOS Inc. The LUMENOLOGY Company

www.taosinc.com

Page 168: Sistema de reg automatitzat amb microcontroladordeeea.urv.cat/public/PROPOSTES/pub/pdf/2284pub.pdf · Microcontrolador 32 1.7.8.1. PIC24FJ64GB002 32 1.7.9 Descripció del programa

Referències

1. Richard G. Allen, Luis S. Pereira, Dirk Raes i Martin Smith. Evapotranspiración del cultivo. Guías para la

2. determinación de los requerimientos de agua de los cultivos. FAO. Roma 2006

3. http://www.agroes.es/agricultura/agua-riegos-regadios

4. http://www.maximintegrated.com/en/app-notes/index.mvp/id/27

5. http://www.microchip.com/