Está en la página 1de 135

1.1.

EL ALGORITMO DE CLCULO

Como se ha comentado en el apartado anterior, el objetivo de nuestro equipo de medida ser la determinacin del porcentaje de potencia que los mdulos de la instalacin fotovoltaica estn dejando de producir en un instante determinado debido a la suciedad presente sobre su superficie frontal. La presencia de esta suciedad tiene como consecuencia directa que la irradiancia que reciben las clulas del mdulo es menor que la que recibiran si el vidrio frontal estuviera limpio. Esta reduccin en la irradiancia recibida trae como consecuencia una reduccin proporcional en la potencia de salida del mdulo, y es precisamente la determinacin de esta ltima el objetivo de nuestro equipo. En nuestro equipo, el clculo de la prdida de potencia por suciedad se llevar a cabo en base a la prdida de irradiancia que se produce por este factor. Esta prdida en la irradiancia incidente es igual a la diferencia entre la irradiancia que existe tras el vidrio sucio y la que existira si dicho vidrio estuviera limpio. Para llevar a cabo la medida de estos dos niveles de irradiancia, nuestro equipo ha sido diseado de forma que dispone de un cristal frontal con dos zonas diferenciadas: Una zona mayoritaria expuesta a la intemperie, cuyo nivel de suciedad ser aproximadamente igual al de los mdulos de los alrededores. Para que esto ocurra es condicin necesaria que el equipo sea instalado con la misma orientacin e inclinacin que los mdulos, y en las proximidades de stos. Una pequea zona en su parte superior que se mantendr aproximadamente limpia gracias al disco de proteccin con el que cuenta el equipo. De esta forma, colocando sensores de irradiancia de forma adecuada tras ambas zonas del cristal, podemos determinar de forma aproximada la prdida de irradiancia que en un instante determinado se est produciendo en los mdulos de la instalacin debido a la suciedad presente. A la irradiancia incidente medida por nuestro equipo tras la zona sucia del cristal la vamos a denotar por G sucio, mientras que la correspondiente a la parte limpia la denotaremos por Glimpio.

Con el objetivo de que estas medidas de irradiancia se vean lo menos afectadas posible por la tolerancia de los componentes de los circuitos de medicin, nuestro equipo dispondr de un total de 8 sensores de irradiancia dispuestos en dos grupos de 4. Cada uno de estos grupos ser colocado tras una zona del cristal frontal, de forma que la irradiancia incidente tras cada una de estas dos zonas ser determinada como el valor medio de las irradiancias medidas por cada uno de los 4 sensores instalados tras ella. Es decir, el valor Gsucio ser igual al valor medio de las irradiancias medidas por los 4 fotodiodos situados tras la parte sucia del cristal frontal, mientras que G limpio ser igual al valor medio de las irradiancias medidas por los 4 fotodiodos situados tras la parte limpia del cristal. Estas mediciones de irradiancia sern llevadas a cabo a travs de 8 circuitos, cada uno de los cuales est compuesto de un fotodiodo como sensor de irradiancia y de un amplificador de transimpedancia como circuito de acondicionamiento de seal. Dichos sensores fueron calibrados experimentalmente de forma que fue obtenida su curva de fotocorriente generada en funcin de la irradiancia incidente (curva I F-G). De esta forma, a la salida de estos circuitos de medicin se obtiene una tensin de salida proporcional al nivel de irradiancia detectado por el sensor. Las salidas de estos circuitos de medicin de irradiancia estarn conectadas a las entradas del convertidor analgico-digital de nuestro microcontrolador, el cual ser el encargado de realizar las conversiones AD cada vez que el equipo realice una medida. A la hora de realizar dichas conversiones y con el objetivo de que stas sean lo ms precisas posible, utilizaremos el modo de conversin de precisin disponible en nuestro microcontrolador, en el cual el micro se coloca en estado de parada previamente a la conversin para reducir de esta forma el ruido digital. Una vez finalizada la conversin, ser la interrupcin habilitada del ADC la que saque al micro de dicho estado para que contine ejecutando el programa. A pesar de que en este modo de conversin de precisin el resultado de la medida obtenido tiene un tamao de 10 bits, con el objeto de simplificar la programacin del algoritmo de clculo teniendo en cuenta que nuestro microcontrolador es de 8 bits, nicamente tomaremos los 8 bits de mayor peso del resultado obtenido. El diseo del hardware de nuestro micro ya considera este modo de funcionamiento puesto que los 10 bits

correspondientes a un resultado de conversin de precisin son almacenados de forma que los 8 bits ms significativos quedan en un registro, mientras que los dos bits menos significativos son almacenados en otro diferente. De esta forma, la lectura tamao byte correspondiente a una conversin de precisin siempre est disponible en el primero de estos dos registros. Como qued establecido cuando explicamos el funcionamiento del ADC de nuestro micro, si tenemos en cuenta que la referencia de tensin utilizada por este dispositivo es de 2,5V y que la resolucin utilizada en las conversiones ser de 8 bits, se obtena que la expresin que nos relacionaba la tensin de entrada analgica al convertidor, V ADCIN, con la lectura tamao byte obtenida vena dada por:
V (V ) Lectura _ tamao _ byte = Parte _ entera _ de ADCIN 28 = VREF (V ) (V ) V = Parte _ entera _ de ADCIN 256 2,5

En nuestro equipo, esta tensin de entrada analgica, V ADCIN, ser la tensin de salida de los diferentes circuitos de medicin de irradiancia. Por otro lado, la curva de calibracin que obtuvimos experimentalmente para el modelo de fotodiodo utilizado en la implementacin de nuestro prototipo vena dada por:
I F ( A) = 1,623 G (W / m 2 ) 405 , siendo vlida para valores de G500 W/m 2.

Si en la expresin de la tensin de salida de los circuitos de medicin de irradiancia:


Vo = I F R r

introducimos, por un lado, la ecuacin de la fotocorriente en funcin de la irradiancia incidente obtenida experimentalmente, y por otro lado, el valor nominal de las resistencias de realimentacin utilizadas en nuestros circuitos de medicin, obtenemos una expresin que nos relaciona la tensin de salida de los circuitos de medicin de irradiancia detectada por los sensores:
V0 (V ) = I F ( A) Rr () = [(1,623 G (W / m 2 ) 405) 10 6 A] [1,6 10 3 ] = = 2,5968 10 3 G (W / m 2 ) 0,6480

con la irradiancia incidente

siendo vlida esta expresin para valores de G500 W/m 2.

Si ahora sustituimos esta ltima expresin en aquella que nos relaciona la lectura tamao byte obtenida tras una conversin con la tensin de entrada analgica al convertidor, VADCIN, obtenemos lo siguiente:
V (V ) 8 Lectura _ tamao _ byte = Parte _ entera _ de ADCIN 2 = VREF (V ) (V ) V = Parte _ entera _ de ADCIN 256 = 2,5 256 = Parte _ entera _ de ( 2,5968 10 3 G (W / m 2 ) 0,6480 ) = 2.5 2 = Parte _ entera _ de 0,2659 G (W / m ) 66,3552

siendo vlida esta expresin para valores de G500 W/m 2. Por lo tanto, hemos llegado a una expresin que nos relaciona la lectura tamao byte obtenida tras una conversin AD de la tensin de salida de un circuito de medicin de irradiancia valores de G500 W/m2:
Lectura _ tamao _ byte(G ) = Parte _ entera _ de[0,2659 G (W / m 2 ) 66,3552]

con el valor de irradiancia incidente

detectado por el sensor de dicho circuito, siendo vlida dicha expresin para

siendo G500 W/m2. Si ahora en esta expresin despejamos la irradiancia incidente en funcin de la lectura tamao byte obtenida en la conversin, obtenemos lo siguiente:
G (W / m 2 ) = 3,7606 Lectura _ tamao _ byte + 249,5379 , siendo G500 W/m2.

Por lo tanto, mediante esta expresin podemos determinar la irradiancia incidente detectada por el sensor del circuito de medicin en funcin de la lectura tamao byte obtenida por el ADC en la conversin de la tensin de salida del circuito al que pertenece el sensor. Como ya hemos comentado, a la hora de determinar la irradiancia incidente tras las dos zonas del cristal frontal, nuestro equipo de medida tomar como valor de irradiancia el valor medio de las irradiancias individuales detectadas por cada uno de los dos grupos de sensores situados tras ellas. Por lo tanto, si denotamos por Lectura sucio al valor medio de las 4 lecturas correspondientes a los 4 fotodiodos situados tras la zona sucia de cristal, y por Lecturalimpio al valor medio de las 4 lecturas correspondientes a los fotodiodos localizados tras la porcin de cristal limpio, las irradiancias incidentes tras las dos zonas del cristal frontal del equipo vendrn dadas por:

G sucio (W / m 2 ) = 3,7606 Lectura sucio + 249,5379


Glim pio (W / m 2 ) = 3,7606 Lectura lim pio + 249,5379

y, por lo tanto, la prdida de irradiancia por suciedad vendr definida por la siguiente expresin:
Gsuciedad (W / m 2 ) = Glim pio Gsucio = 3,7606 ( Lecturalim pio Lectura sucio ) = 3,7606 Lectura

siendo vlida esta expresin para valores de G500 W/m 2. La expresin anterior nos relaciona la prdida de irradiancia por suciedad con la diferencia entre los valores medios de las lecturas obtenidas por el ADC del micro para cada grupo de sensores de nuestro equipo (sensores situados tras la parte limpia del cristal y sensores situados tras la parte sucia). Ahora bien, puesto que nuestro equipo de medida debe determinar el porcentaje de potencia que los mdulos estn dejando de producir debido a la suciedad, debemos relacionar esta prdida de irradiancia con la consiguiente prdida de potencia. Para ello hemos considerado que los mdulos de la instalacin van a funcionar siempre en el punto de mxima potencia correspondiente a las condiciones de funcionamiento existentes en cada momento. Para conseguir esto, la mayora de los sistemas fotovoltaicos incorporan un dispositivo denominado Seguidor del PMP cuya funcin es hacer que los mdulos de la instalacin trabajen siempre en este punto independientemente de la resistencia de carga presente en cada momento. Una vez introducida esta suposicin, veamos en el apartado anterior cuando hablbamos de los mdulos utilizados en nuestro diseo que, para valores elevados de irradiancia, la potencia mxima generada por un mdulo variaba de forma aproximadamente proporcional a esta variable. Esto es debido al comportamiento que presentan tanto la corriente como la tensin de salida del mdulo en el punto de mxima potencia para valores elevados de irradiancia. A valores elevados de esta variable de funcionamiento, por un lado, la tensin en el punto de mxima potencia, V PMP, tiende a hacerse constante, tomando un valor aproximadamente igual al 80% de la tensin de circuito abierto V oc que presenta el mdulo en dichas condiciones de funcionamiento, mientras que por otro lado, la corriente en el punto de mxima potencia, I PMP, vara de forma proporcional a la irradiancia incidente. Por lo tanto, teniendo en cuenta ambas

consideraciones, llegbamos a la conclusin de que, para valores elevados de irradiancia y considerando una temperatura de clula constante de 25C, la potencia mxima generada por el mdulo para cada valor de irradiancia poda ser calculada de forma aproximada mediante la siguiente expresin:
Pmax (G ) = I PMP (G ) [0,8 VOC
STC

siendo: Pmax(G) = Potencia mxima (en W) que genera el mdulo para una irradiancia incidente de valor G(W/m 2) y una temperatura de clula de 25C. IPMP(G) = Corriente (en A) en el punto de mxima potencia correspondiente a una irradiancia incidente de valor G(W/m 2) y una temperatura de clula de 25C. VOC,STC = Tensin (en V) de circuito abierto que presenta el mdulo en condiciones STC. Con el objetivo de que la consideracin anterior introduzca el menor error posible en los resultados obtenidos por nuestro equipo, hemos introducido en el mismo la condicin de que el nivel de irradiancia existente para que el equipo proceda a realizar una medida sea mayor o igual a 800 W/m 2. Es decir, si la irradiancia medida por el equipo tras la parte de cristal limpia es menor a esta cantidad, el equipo no llevar a cabo el clculo de la prdida de potencia. Por el contrario, si la irradiancia incidente tras el cristal limpio es mayor o igual a esta cantidad, el equipo proceder a calcular la prdida de potencia por suciedad, utilizando para ello la expresin anterior. Si consultamos la hoja de caractersticas del modelo de mdulo elegido para el diseo de nuestro prototipo, vemos que la tensin de circuito abierto que presenta el mdulo bajo condiciones STC viene dado por: VOC,STC = 44,4 V Por otro lado, en el apartado anterior obtuvimos experimentalmente la curva de variacin de la corriente en el punto de mxima potencia en funcin de la irradiancia incidente para valores de esta variable mayores o iguales a 800 W/m2. Esta curva present una variacin lineal de I PMP frente a G, obtenindose una recta de regresin de ecuacin:

I PMP (G ) = 0,0043 G 0,1331 , siendo G800W/m2.

Introduciendo ahora estas dos ltimas expresiones en la expresin anterior de la potencia mxima del mdulo para valores elevados de irradiancia obtenemos lo siguiente:
Pmax (G ) = I PMP (G ) [0,8 VOC
STC

]=

= [0,0043 G (W / m 2 ) 0,1331] [0,8 44,4] = = 0,1527 G (W / m 2 ) 4,7277

siendo G800W/m2. Esta expresin ser la utilizada por nuestro equipo de medida a la hora de determinar la potencia mxima de salida del mdulo para cada valor de irradiancia incidente. Utilizando la expresin anterior podemos determinar que, bajo condiciones STC, la potencia mxima de salida del mdulo determinada experimentalmente a partir de las consideraciones expuestas anteriormente toma un valor dado por:
Pmax (1000W / m 2 ) 148W

Por lo tanto y como primera conclusin de todo lo expuesto hasta el momento, la prdida de potencia por suciedad calculada por nuestro equipo de medida para los valores de irradiancia medidos por ste tras las dos zonas de su cristal frontal vendra dada por la siguiente expresin:
Psuciedad (W ) = Pmax (Glim pio ) Pmax (G sucio )

donde: Glimpio = irradiancia incidente medida por el equipo tras la zona limpia del cristal Gsucio = irradiancia incidente medida por el equipo tras la zona sucia del cristal A su vez, cada una de estas potencias mximas vendr dada en funcin del nivel de irradiancia medido por el equipo tras las dos zonas del cristal frontal a travs de la expresin obtenida anteriormente:
Pmax (Glim pio ) = 0,1527 Glim pio 4,2777

Pmax (G sucio ) = 0,1527 G sucio 4,2777

Puesto que nuestro equipo va a dar como resultado de medida el porcentaje de prdida de potencia por suciedad, procedemos a expresar la

prdida de potencia por suciedad anterior en tanto por ciento, obteniendo la siguiente expresin:
Psuciedad (%) = Pmax (Glim pio ) Pmax (G sucio ) Pmax (Glim pio ) 100 = Psuciedad 100 Pmax (Glim pio )

donde todas estas expresiones seran vlidas para valores de G800W/m 2. Sustituyendo ahora estas potencias mximas por la expresin que nos relaciona estas variables con las correspondientes irradiancias medidas por el equipo tras las dos zonas de su cristal frontal, las expresiones anteriores de la prdida de potencia por suciedad queda del siguiente modo:
Psuciedad (W ) = Pmax (Glim pio ) Pmax (G sucio ) = = [0,1527 Glim pio 4,2777] [0,1527 G sucio 4,2777] = = 0,1527 (Glim pio G sucio ) = = 0,1527 G suciedad

Psuciedad (%) = =

Pmax (Glim pio ) Pmax (G sucio ) Pmax (Glim pio )

100 =

Psuciedad 100 = Pmax (Glim pio )

0,1527 G suciedad 100 Pmax (Glim pio )

siendo vlidas ambas expresiones para valores de G800W/m 2. Como podemos observar en las dos expresiones anteriores, con las consideraciones que hemos realizado se obtiene que la prdida de potencia por suciedad vara de forma proporcional a la prdida de irradiancia que se produce en el mdulo por este factor. Si ahora sustituimos nuevamente en estas dos expresiones la prdida de irradiancia por suciedad por la expresin obtenida anteriormente que nos relacionaba esta variable con los valores medios de las lecturas obtenidas por el ADC del micro en las conversiones de las tensiones de salida correspondientes a los dos grupos de circuitos de medicin de irradiancia presentes en nuestro equipo, obtenemos lo siguiente:
Psuciedad (W ) = 0,1527 G suciedad = 0,1527 [3.7606 ( Lecturalim pio Lectura sucio )] = = 0,5744 ( Lectura lim pio Lectura sucio ) = 0,5744 Lectura

Psuciedad (%) = =

0,5744 ( Lectura lim pio Lectura sucio ) Psuciedad 100 = 100 = Pmax (Glim pio ) Pmax (Glim pio )

0,5744 Lectura 100 Pmax (Glim pio )

siendo vlidas ambas expresiones para valores de G800W/m 2.

Por lo tanto, la ltima de estas expresiones nos permite calcular el porcentaje de potencia que el mdulo est dejando de producir debido a la suciedad presente sobre su vidrio frontal a partir de la diferencia de los valores medios de las lecturas obtenidas por el ADC del micro en las conversiones de las tensiones de salida de los dos grupos de fotodiodos presentes en el equipo. Sin embargo, como podemos ver en la expresin anterior, dicho porcentaje de prdida de potencia est referido a la potencia mxima que producira el mdulo si su vidrio frontal estuviera limpio para el nivel de irradiancia particular existente en el momento de realizar la medida (P max(Glimpio)). Este hecho nos impedira realizar una comparativa de los resultados obtenidos por el equipo a lo largo de su tiempo de funcionamiento, ya que cada uno de estos resultados estara referido a un valor diferente de irradiancia incidente. Para poder comparar estos resultados entre s con el objeto de llevar a cabo un estudio de la evolucin de las prdidas energticas por suciedad en una instalacin fotovoltaica a lo largo del tiempo, se hace necesario normalizar estos resultados a un determinado nivel de irradiancia incidente. Por ello, puesto que la mayor parte de las caractersticas de un mdulo estn referidas a un valor de irradiancia incidente de 1000 W/m2, hemos elegido precisamente este valor para llevar a cabo la normalizacin de los resultados de nuestro equipo de medida. Para llevar a cabo esta normalizacin de resultados de nuestro equipo de medida a una irradiancia incidente de 1000 W/m 2 se ha considerado que, dado un determinado nivel de suciedad presente en el mdulo en el momento de realizar la medicin, la prdida en la irradiancia incidente asociada a dicho nivel de suciedad permanecer aproximadamente constante para los valores de irradiancia para los que el equipo lleva a cabo medidas (G800W/m 2). Esta suposicin nos permite realizar una traslacin en el eje de irradiancia de la medida de la prdida de irradiancia por suciedad obtenida por el equipo; es decir, si para el nivel de suciedad y para el valor de irradiancia incidente G limpio (siendo Glimpio800W/m2) presentes en el momento de la medicin, nuestro equipo ha medido una prdida de irradiancia incidente por suciedad de valor Gsuciedad, la consideracin anterior implica suponer que, para el mismo nivel de suciedad pero para una irradiancia incidente de 1000 W/m 2, el valor de la prdida de irradiancia por suciedad permanece constante. En la figura 117 se mostraba una representacin de la suposicin anterior, la cual nos permite

normalizar los resultados del equipo a una irradiancia incidente de 1000 W/m 2. Con el objetivo de aclarar esta suposicin realizada, volvemos a representar dicha figura:

Figura 125. Suposicin introducida en el algoritmo de clculo del porcentaje de prdida de potencia por suciedad para normalizar los resultados de medida a un valor de irradiancia incidente de 1000 W/m 2. Esta suposicin que introducimos en el algoritmo de clculo del porcentaje de prdida de potencia por suciedad nos permite que nuestros resultados de medida estn normalizados a un valor de irradiancia incidente de 1000 W/m 2, lo que nos permitir poder comparar entre s estos resultados para estudiar la evolucin temporal de las prdidas energticas por suciedad en la instalacin fotovoltaica. Introduciendo ahora esta suposicin en la expresin anterior del porcentaje de potencia que el mdulo est dejando de producir debido a la suciedad, obtenemos finalmente la expresin que utilizar nuestro equipo para obtener sus resultados de medida:

Psuciedad (%) G =1000W / m 2 ,T = =

c =25 C

Psuciedad 100 = Pmax (1000W / m 2 ) 100 =

0,5744 ( Lectura lim pio Lectura sucio ) Pmax (1000W / m 2 ) 0,5744 Lectura 100 Pmax (1000W / m 2 )

siendo vlida esta expresin para valores de G800W/m 2. Si ahora sustituimos en la expresin anterior la potencia mxima que produce el mdulo para una irradiancia incidente de 1000 W/m 2 que fue determinado experimentalmente en prrafos anteriores, obtenemos la siguiente expresin:
Psuciedad (%) G =1000W / m 2 ,T =25 C =
c

0,5744 Lectura 0,5744 Lectura 100 = 100 2 148 Pmax (1000W / m )

siendo vlida esta expresin para valores de G800W/m 2. Esta expresin ser la utilizada por nuestro equipo de medida para determinar el porcentaje de prdida de potencia por suciedad normalizado a una irradiancia incidente de 1000 W/m 2 y a una temperatura de clula de 25C, que en un instante determinado se est produciendo en los mdulos instalados en las proximidades de nuestro equipo de medida. En la expresin anterior se tiene que Lectura es la diferencia entre los valores medios de las lecturas individuales de los dos grupos en los que hemos dividido los sensores del equipo. A partir de la expresin anterior construimos la siguiente tabla en la que se determina el valor que toma el porcentaje de prdida de potencia por suciedad normalizado a una irradiancia de 1000 W/m2 y una temperatura de clula de 25C, para cada valor de la diferencia entre los valores medios de las lecturas obtenidas por el ADC del micro:

Diferencia obtenida en las lecturas de irradiancia Porcentaje de prdida de potencia por correspondientes a las 2 suciedad normalizado a una irradiancia zonas del cristal frontal incidente de 1000 W/m2 de nuestro equipo

Lectura = Lectura_Limpio Lectura_Sucio

Byte correspondiente al porcentaje de prdida de potencia por suciedad que ser almacenado en la direccin de la memoria de datos interna asociada a la etiqueta "Perdida_Potencia"

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

Po , suciedad (%)

0 00h 0,5744 Lectura 100 2 = 0 W /m 00h G =1000 148 1 01h 1 01h 2 02h 2 02h 2 02h 3 03h 3 03h 3 03h 4 04h 4 04h 5 05h 5 05h 5 05h 6 06h 6 06h 7 07h 7 07h 7 07h 8 08h 8 08h 9 09h 9 09h 9 09h 10 10h 10 10h 10 10h 11 11h 11 11h 12 12h 12 12h 12 12h 13 13h 13 13h 14 14h 14 14h 14 14h

Diferencia obtenida en las lecturas de irradiancia Porcentaje de prdida de potencia por correspondientes a las 2 suciedad normalizado a una irradiancia zonas del cristal frontal incidente de 1000 W/m2 de nuestro equipo

Lectura = Lectura_Limpio Lectura_Sucio

Byte correspondiente al porcentaje de prdida de potencia por suciedad que ser almacenado en la direccin de la memoria de datos interna asociada a la etiqueta "Perdida_Potencia"

38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74

Po , suciedad

15 15h 0,5744 Lectura 15 15h (%) G =1000 W / m 2 = 100 16 16h 148 16 16h 16 16h 17 17h 17 17h 17 17h 18 18h 18 18h 19 19h 19 19h 19 19h 20 20h 20 20h 21 21h 21 21h 21 21h 22 22h 22 22h 23 23h 23 23h 23 23h 24 24h 24 24h 24 24h 25 25h 25 25h 26 26h 26 26h 26 26h 27 27h 27 27h 28 28h 28 28h 28 28h 29 29h

Diferencia obtenida en las lecturas de irradiancia Porcentaje de prdida de potencia por correspondientes a las 2 suciedad normalizado a una irradiancia zonas del cristal frontal incidente de 1000 W/m2 de nuestro equipo

Lectura = Lectura_Limpio Lectura_Sucio

Byte correspondiente al porcentaje de prdida de potencia por suciedad que ser almacenado en la direccin de la memoria de datos interna asociada a la etiqueta "Perdida_Potencia"

Po , suciedad (%)

G =1000 W / m 2

0,5744 Lectura 100 148

75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111

29 29 30 30 31 31 31 32 32 33 33 33 34 34 35 35 35 36 36 36 37 37 38 38 38 39 39 40 40 40 41 41 42 42 42 43 43

29h 29h 30h 30h 31h 31h 31h 32h 32h 33h 33h 33h 34h 34h 35h 35h 35h 36h 36h 36h 37h 37h 38h 38h 38h 39h 39h 40h 40h 40h 41h 41h 42h 42h 42h 43h 43h

Diferencia obtenida en las lecturas de irradiancia Porcentaje de prdida de potencia por correspondientes a las 2 suciedad normalizado a una irradiancia zonas del cristal frontal incidente de 1000 W/m2 de nuestro equipo

Lectura = Lectura_Limpio Lectura_Sucio

Byte correspondiente al porcentaje de prdida de potencia por suciedad que ser almacenado en la direccin de la memoria de datos interna asociada a la etiqueta "Perdida_Potencia" 43h

112

43

Po , suciedad (%)

G =1000 W / m 2

0,5744 Lectura = 100 148

113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148

44 44 45 45 45 46 46 47 47 47 48 48 49 49 49 50 50 50 51 51 52 52 52 53 53 54 54 54 55 55 55 56 56 57 57 57

44h 44h 45h 45h 45h 46h 46h 47h 47h 47h 48h 48h 49h 49h 49h 50h 50h 50h 51h 51h 52h 52h 52h 53h 53h 54h 54h 54h 55h 55h 55h 56h 56h 57h 57h 57h

Diferencia obtenida en las lecturas de irradiancia Porcentaje de prdida de potencia por correspondientes a las 2 suciedad normalizado a una irradiancia zonas del cristal frontal incidente de 1000 W/m2 de nuestro equipo

Lectura = Lectura_Limpio Lectura_Sucio 149 150 58 58

Byte correspondiente al porcentaje de prdida de potencia por suciedad que ser almacenado en la direccin de la memoria de datos interna asociada a la etiqueta "Perdida_Potencia" 58h

Po , suciedad (%)

G =1000 W / m 2

0,5744 Lectura 58h = 100 148

151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185

59 59 59 60 60 61 61 61 62 62 62 63 63 64 64 64 65 65 66 66 66 67 67 68 68 68 69 69 69 70 70 71 71 71 72

59h 59h 59h 60h 60h 61h 61h 61h 62h 62h 62h 63h 63h 64h 64h 64h 65h 65h 66h 66h 66h 67h 67h 68h 68h 68h 69h 69h 69h 70h 70h 71h 71h 71h 72h

Diferencia obtenida en las lecturas de irradiancia Porcentaje de prdida de potencia por correspondientes a las 2 suciedad normalizado a una irradiancia zonas del cristal frontal incidente de 1000 W/m2 de nuestro equipo

Lectura = Lectura_Limpio Lectura_Sucio 186 187 188 189 190

Byte correspondiente al porcentaje de prdida de potencia por suciedad que ser almacenado en la direccin de la memoria de datos interna asociada a la etiqueta "Perdida_Potencia"

Po , suciedad

72 72h 0,5744 Lectura 73 73h (%) G =1000 W / m 2 = 100 73 73h 148 73 73h 74 74h

191 192 193 194 195 196 197 198 199

74 75 75 75 76 76 76 77 77

74h 75h 75h 75h 76h 76h 76h 77h 77h

Tabla 16. Clculo del porcentaje de prdida de potencia por suciedad normalizado a una irradiancia incidente de 1000 W/m 2 y una temperatura de clula de 25C, para cada valor de la diferencia entre los valores medios de las lecturas obtenidas por el ADC del micro tras las dos zonas del cristal frontal del equipo. Por lo tanto, a la hora de realizar una medida, nuestro equipo proceder en primer lugar a almacenar en la memoria de datos interna del microcontrolador las lecturas correspondientes a los 8 circuitos de medicin de irradiancia de los que dispone el equipo; 4 de estas lecturas procedern de los 4 fotodiodos situados tras la parte sucia del cristal frontal, mientras que las 4 restantes procedern de los 4 fotodiodos ubicados tras la zona limpia de ste. Una vez almacenadas estas 8 lecturas y previa comprobacin de que las condiciones de medida cumplen una serie de requisitos (estos requisitos sern explicados con detalle en el prximo apartado del presente proyecto en el que se desarrolla el funcionamiento del equipo de medida), el microcontrolador pasar a determinar los valores medios de estos dos grupos de 4 lecturas; por un lado calcular el valor medio de las 4 lecturas procedentes de los fotodiodos situados tras la zona sucia del cristal, y por otro lado calcular el valor medio de las 4 lecturas procedentes de los fotodiodos situados tras la zona limpia del cristal. Estos valores medios sern los considerados por el equipo de medida para determinar la prdida de irradiancia que se est produciendo debido a la suciedad depositada sobre el cristal. Una vez calculados estos valores medios y almacenados en la memoria de datos interna del microcontrolador, ste proceder a calcular la diferencia entre ambos valores medios, es decir, determinar la diferencia entre el valor medio de las 4 lecturas de los fotodiodos limpios y el valor medio de las 4 lecturas de los fotodiodos sucios. Esta diferencia, una vez almacenada en la memoria de datos interna, ser la que determine la prdida de irradiancia por suciedad en el equipo y ser el

valor a partir del cual el microcontrolador calcular el porcentaje de prdida de potencia por suciedad normalizado a condiciones STC. Para llevar esto a cabo, una vez calculada esta diferencia entre los valores medios de las lecturas, el microcontrolador buscar en la tabla anterior (la cual habr sido almacenada convenientemente en la memoria de programa del micro) el valor del porcentaje de prdida de potencia normalizado que le corresponde al valor obtenido. Una vez obtenido este valor de la tabla, el micro proceder a almacenar en su memoria EEPROM los 3 bytes que conformarn el resultado de esta medida realizada (byte del porcentaje de la prdida de potencia por suciedad calculada y bytes del mes y da del mes en el que ha sido realizada la medida), y a encender el LED de salida correspondiente al resultado obtenido. Una vez concluida la medida, almacenados los bytes de resultado y encendido el LED de salida correspondiente, el microcontrolador proceder a reprogramar los registros de la alarma del RTC para que sta vuelva a activarse al da siguiente las 11:30:00 hora solar aproximada, y se colocar en estado de pseudo-parada hasta dicho instante.

1.1.2

FUNCIONAMIENTO DEL EQUIPO DE MEDIDA

Una vez detallados los diferentes componentes de nuestro equipo de medida, su diseo exterior as como el algoritmo de clculo que ser usado para la determinacin del porcentaje de prdida de potencia por suciedad normalizado a condiciones STC para el modelo de mdulo utilizado en el diseo de nuestro prototipo, procedemos en el presente apartado a desarrollar el funcionamiento de nuestro equipo de medida. Antes de entrar a describir en detalle dicho funcionamiento, conviene sealar que nuestro sistema ser programado para que realice una medida diaria del porcentaje de prdida de potencia por suciedad normalizado a condiciones STC. Para ello, gracias al reloj en tiempo real incorporado en nuestro diseo, cada da a las 11:30:00 hora solar aproximada, la CPU de nuestro microcontrolador se activar para llevar a cabo dicha medida. Sin embargo, si tenemos en cuenta todas las hiptesis que hemos realizado tanto a la hora de disear el equipo como muy especialmente a la hora de desarrollar el algoritmo de clculo que ser usado para determinar las prdidas por

suciedad, podemos deducir que para que un resultado de medida obtenido por nuestro equipo tenga validez, las condiciones en las que dicho resultado ha sido obtenido deberan ajustarse a dichas hiptesis. Adems de esto, para que una medida obtenida sea vlida, deber cumplir adicionalmente una serie de condiciones impuestas tanto por las caractersticas del tipo de medicin que se lleva a cabo como por el principio de funcionamiento que ha servido de base para nuestro diseo. Por esta razn, el proceso de medida en nuestro equipo constar de una serie de etapas en las que se comprueban diferentes aspectos de la medida. Dichas etapas se irn ejecutando de forma secuencial y a travs de ellas el sistema comprobar si las caractersticas de la medida son las adecuadas para que el sistema la pueda dar por vlida. Estas condiciones que deber cumplir la medida para que el sistema le d validez van a ser explicadas detalladamente en los siguientes apartados. De esta forma, si la medida que realiza el equipo a las 11:30:00 hora solar aproximada cumple todas las condiciones impuestas por nuestro programa de medida, el equipo proceder a almacenar el resultado obtenido en la memoria EEPROM del microcontrolador y encender el LED de salida correspondiente. Posteriormente la CPU del micro se colocar en estado de pseudo-parada hasta que de nuevo, a las 11:30:00 hora solar aproximada del da siguiente, vuelva a repetirse el proceso anterior. Por el contrario, si la medida realizada por el equipo a las 11:30:00 no cumple todas las condiciones impuestas por nuestro programa de medida, el micro proceder a reprogramar la alarma del RTC para que se vuelva a activar 15 minutos ms tarde (a las 11:45:00 hora solar aproximada), y su CPU se colocar en estado de pseudo-parada hasta dicho instante. De esta forma, cuando a las 11:45:00 se activa la alarma del RTC, la CPU de nuestro micro sale del estado de pseudo-parada para proceder a realizar un nuevo intento de medida. Al igual que ocurri en el intento de medida anterior, el sistema comprobar que esta segunda medida cumple todas las condiciones impuestas por nuestro programa, en cuyo caso el equipo proceder a almacenar el resultado obtenido en la memoria EEPROM del microcontrolador y encender el LED de salida correspondiente. Posteriormente, la alarma del RTC ser reprogramada para que se active nuevamente a las 11:30:00 del da siguiente y la CPU del micro se colocar en estado de pseudo-parada hasta dicho instante.

Sin embargo, si este segundo intento de medida tampoco cumple todas las condiciones impuestas por nuestro programa, el micro proceder nuevamente a reprogramar la alarma del RTC para que se active 15 minutos ms tarde (a las 12:00:00 hora solar aproximada), y su CPU volver al estado de pseudoparada hasta ese instante. Este proceso se repetir nuevamente a las 12:15:00 y a las 12:30:00, momento en el cual el equipo realizar el ltimo intento de medida del da. Si tras estos cinco intentos, ninguna de las medidas obtenidas verifica todas las condiciones impuestas en nuestro programa, el microcontrolador reprogramar la alarma del RTC para que se active a las 11:30:00 del da siguiente, tras lo cual su CPU se colocar en estado de pseudo-parada hasta dicho instante. Por lo tanto y como conclusin a todo lo anterior, podemos decir que nuestro equipo ser programado para obtener una medida diaria del porcentaje de prdida de potencia por suciedad. El proceso de obtencin de dicha medida dar comienzo a las 11:30:00 hora solar aproximada, pudiendo llegar a realizarse un total de 5 intentos de medida a intervalos de 15 minutos si los resultados obtenidos no cumplen las condiciones impuestas en nuestro programa. En el programa de funcionamiento del equipo, el cual es explicado lnea a lnea en el siguiente apartado del proyecto, el primer bloque de instrucciones no est dirigido propiamente al microcontrolador, sino al programa ensamblador que llevar a cabo el ensamblado del programa. Por tanto, no son instrucciones en lenguaje ensamblador ejecutables por el microprocesador del equipo. En este primer bloque son definidos un conjunto de smbolos que sern utilizados posteriormente en las diferentes partes del programa. Estas definiciones consistirn en la asociacin de determinados valores numricos con sus smbolos correspondientes, utilizando para ello la directiva de definicin de smbolos EQU del ensamblador. Cada uno de estos valores numricos va a definir un aspecto concreto del funcionamiento del equipo, por lo que esta definicin inicial nos permitir reajustar determinados parmetros del funcionamiento del mismo modificando simplemente estas lneas de cdigo. A continuacin se definen los diferentes segmentos en los que va a quedar organizada tanto la memoria interna de datos como la memoria de programa de nuestro microcontrolador. En esta parte del programa se definirn etiquetas y

se reservar el espacio de memoria adecuado para llevar a cabo el almacenamiento temporal de los diferentes datos que el equipo va a ir obteniendo a lo largo del proceso de medida. Adems de ello, se definir tanto la ubicacin como la extensin de la pila de nuestro programa. Una vez que hemos informado al programa ensamblador de la forma en la que queremos que nuestro programa sea ensamblado, comenzamos a desarrollar el programa propiamente dicho, es decir, aquellas instrucciones que sern ejecutadas por el micro del equipo y que definirn su funcionamiento. El punto de partida considerado ser el de reinicio del sistema (Reset). Debemos recordar que en nuestro diseo fue incluido un condensador conectado entre la alimentacin Vcc y el terminal de RESET del microcontrolador, con el objetivo de poder realizar un reset de encendido simplemente desconectando la alimentacin del sistema. Una vez provocado el reseteo del sistema, la ejecucin del programa almacenado en la memoria de cdigo de nuestro microcontrolador comienza en la primera ubicacin de dicha memoria: la direccin 0000h. Dentro del programa propiamente dicho, en un primer bloque de instrucciones se llevar a cabo la definicin de los vectores de interrupcin que sern utilizados por nuestro programa, as como la inicializacin de los registros internos tanto del microcontrolador como del reloj en tiempo real. Con respecto a los vectores de interrupcin, en dichas ubicaciones de memoria sern colocadas instrucciones de salto incondicional hasta las subrutinas de servicio correspondientes. Por otro lado, la configuracin inicial de los registros internos del microcontrolador se realizar de forma que el equipo comience a operar de modo adecuado, inicializando de forma conveniente el puntero de pila, los registros de habilitacin y de asignacin de prioridad de las interrupciones, los bits de puerto que controlan diferentes aspectos del equipo de medida (LEDs de salida, entradas del driver de alimentacin del motor, etc.), as como los registros de control y modo de funcionamiento del ADC, del interfaz serie SPI, de los temporizadores y del puerto serie. Asimismo, tambin ser inicializado el registro de control de energa, y el registro de control auxiliar. Todos los dems registros se dejarn con su valor por defecto tras reset. Finalmente, la configuracin inicial de los registros internos de nuestro reloj en tiempo real ser llevada a cabo mediante una subrutina de

inicializacin de dicho dispositivo. Dicha subrutina dejar configurados los registros de control del RTC de forma que el dispositivo quedar preparado para que su alarma sea programada en el momento adecuado. Debemos recordar que dicho reloj debe estar sincronizado con la hora solar aproximada del lugar de instalacin del sistema, y que dicha hora ser mantenida en los registros internos del reloj, incluso tras un corte en el suministro de energa, gracias a la batera de apoyo incluida en el equipo. Una vez concluidas todas estas operaciones de inicializacin de registros internos, el microcontrolador proceder a programar la alarma 1 del RTC para que se active a las 11:30:00 hora solar aproximada. Esta programacin ser llevada a cabo por la subrutina correspondiente y utilizar los bits de mscara de los registros internos de esta alarma para que se active una vez al da a la hora configurada en dichos registros. De esta forma, a las 11:30:00 hora solar aproximada, nuestro RTC activar su alarma 1, lo que provocar que su terminal INT/SQW (conectado al terminal P3.2/INT0 del micro) se ponga a nivel bajo. En el caso de que la interrupcin externa 0 de nuestro microcontrolador est habilitada, se producir una peticin de interrupcin a la CPU de dicho dispositivo. Una vez programada la alarma 1 del RTC a las 11:30:00, se habilitarn las tres interrupciones que sern utilizadas en el funcionamiento del equipo: interrupcin del ADC, interrupcin externa 0 e interrupcin del puerto serie. Concluido lo anterior, la CPU del microcontrolador se colocar en estado de pseudo-parada mientras espera a que la saque de dicho estado una cualquiera de las dos siguientes interrupciones: Interrupcin del puerto serie: en el caso de que conectemos un PC al puerto serie RS232 de nuestro equipo, con objeto de acceder a los resultados de medida almacenados en la memoria EEPROM del micro. Interrupcin externa 0: en el caso de que se haya activado la alarma del RTC, indicando que son las 11:30:00 hora solar aproximada

Cuando se produce una peticin de interrupcin por parte de una cualquiera de estas dos interrupciones, la CPU del microcontrolador sale del estado de pseudo-parada en el que se encontraba, y responde a dicha peticin desviando la ejecucin hasta el vector de interrupcin correspondiente. De esta forma, las instrucciones de salto incondicional situadas en dichos vectores, redirigen la ejecucin hasta la rutina de servicio correspondiente. En el caso de que la interrupcin producida sea la correspondiente al puerto serie, la rutina de servicio enviar por dicho puerto todos los resultados de medida que en dicho momento se encuentren almacenados en la memoria EEPROM del microcontrolador. Por el contrario, si la interrupcin producida es la interrupcin externa 0 asociada a la seal de alarma del RTC, la rutina de servicio correspondiente se limitar a borrar la bandera de activacin de la alarma 1 (bit A1F) en los registros internos de dicha alarma en el RTC. Esto provocar que su terminal INT/SQW vuelva a ponerse a nivel alto. Una vez ejecutada la rutina de servicio correspondiente a la interrupcin producida, la ejecucin del programa pasar a la instruccin inmediatamente siguiente a la que puso a la CPU en estado de pseudo-parada. Una vez en este punto, para poder distinguir cul de estas dos interrupciones ha sacado a la CPU de su estado de pseudo-parada, hemos utilizado el bit F0 del registro Palabra de Estado del Programa (PSW). Dicho bit es un bit de bandera de propsito general disponible para aplicaciones de usuario. De esta forma, si la interrupcin que saca a la CPU del estado de parada es la interrupcin del puerto serie, la rutina de servicio asociada a dicha interrupcin no modificar la bandera de propsito general F0, dejndola con su valor inicial de 0. Sin embargo, si la interrupcin que saca a la CPU del estado de parada es la interrupcin externa 0 (INT0), la cual est asociada a la alarma del reloj en tiempo real, la rutina de servicio de dicha interrupcin contendr una instruccin que active el bit de bandera F0 en el registro PSW. Por lo tanto, una vez ejecutada la rutina de servicio de interrupcin, el micro pasa a comprobar cul de estas dos interrupciones se ha producido, verificando para ello el estado en el que se encuentra el anterior bit. Si el micro comprueba que la interrupcin que se ha producido es la interrupcin del puerto serie, la CPU del microcontrolador vuelve a colocarse en

estado de pseudo-parada a la espera de que la saque nuevamente de dicho estado una cualquiera de las dos interrupciones anteriores. Por el contrario, si el micro detecta que la interrupcin producida es la correspondiente a la interrupcin externa 0 asociada a la alarma del RTC, contina con la ejecucin del programa principal, borrando en primer lugar el bit de bandera F0 con el objetivo de rearmarlo para usos posteriores. A partir de aqu, el micro comienza a ejecutar por primera vez en el da el proceso de obtencin de la medida del porcentaje de prdida de potencia por suciedad diseado para nuestro equipo. Como comentamos al principio de este apartado, dicho proceso est dividido en un conjunto de etapas que se ejecutan de forma secuencial y que comprueban diferentes aspectos tanto de las condiciones de medida en las que se encuentra el equipo como de las lecturas obtenidas por el mismo, con el objeto de que la medida realizada tenga validez de acuerdo a los criterios que han sido utilizados a la hora de desarrollar nuestro algoritmo de clculo. Sin embargo, antes de comenzar a ejecutar este proceso de medida, el microcontrolador deshabilita temporalmente la interrupcin del puerto serie, con el objetivo de que las acciones llevadas a cabo en su rutina de servicio no interfieran con las que se realizan en este proceso de medida. Una vez concluido el proceso de medida, el microcontrolador volver a habilitar esta interrupcin. De esta forma, en los siguientes puntos vamos a ir desarrollando cada una de las etapas que componen el proceso de obtencin de la medida del porcentaje de prdida de potencia por suciedad en nuestro equipo. En estos momentos son las 11:30:00 hora solar aproximada y la CPU de nuestro microcontrolador ha salido del estado de pseudo-parada debido a la peticin de interrupcin realizada por la interrupcin externa 0, asociada a la seal de alarma del RTC. Como respuesta a dicha peticin de interrupcin, se ha ejecutado la rutina de servicio correspondiente, en la cual se lleva a cabo el borrado de la bandera de dicha alarma en el registro interno correspondiente del RTC, lo que provoca que su terminal INT/SQW retorne al nivel alto. Una vez que el micro ha comprobado que ha sido sta la interrupcin producida y ha borrado el bit de bandera F0 utilizado en dicha comprobacin, el microcontrolador pasa a ejecutar la primera de las comprobaciones que conforman el proceso de obtencin de una medida en nuestro equipo.

En esta primera etapa del proceso de medida, el microcontrolador, a travs de los sensores de irradiancia situados tras la zona sucia del cristal frontal, comprueba la existencia de riesgo de lluvia en el momento de la medicin. El objetivo fundamental de esta primera etapa es asegurarnos de que no se produce el accionamiento del disco de proteccin en presencia de lluvia, ya que esto podra alterar el estado de limpieza de la zona protegida del cristal frontal. A este respecto, en nuestro equipo de medida se ha considerado que no existir riesgo de lluvia cuando alguno de los fotodiodos situados tras la parte sucia del cristal frontal detecte un nivel de irradiancia mayor o igual a 600 W/m2. Utilizando la expresin obtenida anteriormente que nos relacionaba la irradiancia incidente detectada por nuestros fotodiodos con la lectura tamao byte obtenida por el ADC del micro tras la conversin de la tensin de salida de los circuitos de medicin de irradiancia, obtenemos que para una irradiancia incidente de 600 W/m2, la lectura tamao byte obtenida por el ADC del micro sera de:
Lectura _ tamao _ byte(G ) = 0,2659 G (W / m 2 ) 66,3552 Lectura _ tamao _ byte(600W / m 2 ) = 0,2659 (600) 66,3552 93

Por lo tanto, ste ser el valor de referencia que utilizar nuestro equipo para determinar la existencia de riesgo de lluvia en el momento de realizar la medicin. Al comienzo de nuestro programa principal, dentro del bloque de directivas dirigidas al ensamblador, este valor obtenido ha sido asociado al smbolo Referencia1. Esto permite que, si posteriormente queremos modificar dicho valor, nicamente ser necesario modificar esta lnea de cdigo. Esta comprobacin de la existencia de riesgo de lluvia en el momento de la medicin es llevada a cabo por la subrutina correspondiente. En ella, el sistema va tomando una a una las medidas de irradiancia correspondientes a los 4 fotodiodos situados tras la zona sucia del cristal, y compara la lectura obtenida por el ADC del micro en cada medida con el valor de referencia anterior. En el caso de que ninguna de las 4 lecturas obtenidas sea mayor o igual a este valor de referencia (es decir, en el caso de que ninguno de los 4 fotodiodos situados tras la zona sucia del cristal detecte un nivel de irradiancia mayor o igual a 600 W/m2), el sistema considerar que existe riesgo de lluvia, en cuyo caso se dar por concluido este primer intento de medida. Como

consecuencia de ello, el microcontrolador proceder a reprogramar la alarma del RTC para que se active a las 11:45:00 hora solar aproximada, habilitar nuevamente la interrupcin del puerto serie, y finalmente colocar a su CPU en estado de pseudo-parada hasta que una de las dos interrupciones mencionadas anteriormente la saque de dicho estado. Por el contrario, si al menos una de las lecturas obtenidas es mayor o igual al valor de referencia anterior (es decir, si al menos uno de los 4 fotodiodos situados tras la zona sucia del cristal frontal detecta un nivel de irradiancia mayor o igual a 600 W/m 2), el sistema considerar que no existe riesgo de lluvia, con lo que el proceso de medida pasar a su segunda etapa. En esta segunda etapa, el microcontrolador proceder en primer lugar, mediante la ejecucin de la subrutina correspondiente, a posicionar el disco de proteccin de forma que la porcin de cristal frontal protegido por ste quede al descubierto. Para ello, dicho disco ser posicionado de forma que su abertura quede ubicada justamente sobre la parte de cristal protegida, de forma que queden expuestos a la luz solar los 4 fotodiodos situados tras la misma. El proceso de posicionamiento del disco en esta posicin de realizacin de medida ser explicado con detalle en el apartado dedicado a la subrutina encargada de realizar dicha funcin. Una vez ejecutada esta subrutina, el microcontrolador comprobar si ha sido posible realizar con xito el posicionamiento del disco en la posicin de realizacin de medida. En el caso de que no haya sido posible realizar dicho posicionamiento, el microcontrolador dar por concluido este primer intento de medida y, como consecuencia de ello, proceder a reprogramar la alarma del RTC para que se active a las 11:45:00 hora solar aproximada, habilitar nuevamente la interrupcin del puerto serie, y finalmente colocar a su CPU en estado de pseudo-parada hasta que una de las dos interrupciones mencionadas en el punto anterior la saque de dicho estado. Por el contrario, si el microcontrolador comprueba que el disco de proteccin ha sido posicionado correctamente en la posicin de realizacin de medida, pasa a activar su convertidor analgico digital para llevar a cabo las siguientes medidas: En primer lugar, el microcontrolador tomar las lecturas de irradiancia de los 4 fotodiodos situados tras la parte limpia del

cristal frontal. Dichas lecturas, cada una de las cuales tendr un tamao de 1 byte, sern almacenadas en las posiciones de memoria reservadas al efecto en la memoria de datos interna del microcontrolador. En segundo lugar, el microcontrolador proceder a tomar las lecturas de los 4 fotodiodos situados tras la parte sucia del cristal. Al igual que en el caso anterior, dichas lecturas sern almacenadas en las posiciones de la memoria de datos interna que fueron reservadas para ello en el bloque de directivas dirigidas al programa ensamblador. Tras la toma de estas 8 lecturas de irradiancia, el microcontrolador, a travs de la subrutina correspondiente, esperar que transcurra un intervalo de 2 segundos antes de llevar a cabo el ltimo grupo de medidas. Dicha subrutina de retraso utilizar el temporizador 0 en modo 1 para generar dicho intervalo de tiempo. Transcurridos estos 2 segundos, el microcontrolador tomar de nuevo las lecturas de irradiancia correspondientes a los 4 fotodiodos situados tras el cristal limpio, y las almacenar en sus posiciones correspondientes dentro de la memoria de datos interna. La parte del programa que lleva a cabo todas estas medidas y su almacenamiento en las posiciones correspondientes dentro de la memoria de datos interna, es una subrutina que utilizar la interrupcin del ADC para la obtencin de conversiones de precisin de las tensiones de salida de los circuitos de medicin de irradiancia. Debemos recordar que las salidas de dichos circuitos se encuentran conectadas a las entradas del ADC del microcontrolador. Por lo tanto, una vez concluido este proceso, el microcontrolador contendr en su memoria de datos interna dos lecturas de irradiancia para cada fotodiodo situado tras el cristal limpio, las cuales han sido tomadas con

dos segundos de diferencia, y una lectura de irradiancia para cada fotodiodo situado tras la parte sucia del cristal. Acto seguido, ejecutando nuevamente la subrutina correspondiente, el microcontrolador proceder a aplicarle al disco de proteccin un giro de 180 grados, con lo que teniendo en cuenta que la posicin inicial de ste es la posicin de realizacin de medida, quedar posicionado de forma que la porcin limpia de cristal quede nuevamente cubierta por las lengetas de goma del disco. Una vez que las 12 lecturas de irradiancia (8 correspondientes a los fotodiodos limpios y 4 a los fotodiodos sucios) se encuentran almacenadas en las posiciones correspondientes dentro de la memoria de datos interna del micro, el sistema comenzar a hacer una serie de comprobaciones encaminadas a determinar si las condiciones de medida son las adecuadas teniendo en cuenta las hiptesis realizadas en el desarrollo de nuestro algoritmo de clculo y las caractersticas propias del proceso de medida que se est llevando a cabo. Como comentamos cuando desarrollamos el algoritmo de clculo que utilizar nuestro equipo para determinar las prdidas de potencia por suciedad en condiciones STC, el estudio de la variacin de la corriente de salida del mdulo en el punto de mxima potencia (I PMP) en funcin de la irradiancia incidente (G) para el modelo de mdulo utilizado en nuestro diseo, fue realizado considerando nicamente valores de irradiancia mayores o iguales a 800 W/m2. Por lo tanto, para que el resultado de una medida tenga validez en nuestro equipo debe verificarse que el nivel de irradiancia presente en el momento de la medicin cumpla dicha condicin. Para realizar esta primera comprobacin, nuestro sistema utilizar el conjunto de las 4 primeras lecturas que fueron obtenidas de los fotodiodos situados tras la parte limpia del cristal. De esta forma, nuestro sistema considerar que el nivel de irradiancia presente en el momento de la medicin es mayor o igual a 800 W/m 2 si se verifica que todos y cada uno de dichos fotodiodos han detectado un nivel de irradiancia mayor o igual a dicho valor. Si tenemos en cuenta la expresin obtenida anteriormente que nos relacionaba el valor G de irradiancia incidente detectado por un fotodiodo con la lectura tamao byte que obtiene el ADC del micro en la conversin de la tensin de salida del circuito de medicin de irradiancia

correspondiente, obtenemos que la lectura tamao byte correspondiente a una irradiancia incidente de 800 W/m2 viene dada por:
Lectura _ tamao _ byte(G ) = 0,2659 G (W / m 2 ) 66,3552 Lectura _ tamao _ byte(800W / m 2 ) = 0,2659 (800) 66,3552 146

ste ser el valor de referencia que utilizar nuestro equipo para determinar si cada uno de los fotodiodos limpios ha detectado un nivel de irradiancia mayor o igual a 800 W/m 2. Al comienzo de nuestro programa principal, dentro del bloque de directivas dirigidas al ensamblador, este valor obtenido ha sido asociado al smbolo Referencia2. Esto permite que si posteriormente queremos modificar dicho valor, nicamente ser necesario modificar esta lnea de cdigo. Por lo tanto, nuestro equipo de medida considerar que el nivel de irradiancia incidente existente en el momento de la medicin es mayor o igual a 800 W/m2 cuando todos los fotodiodos limpios detecten un nivel de irradiancia mayor o igual a este valor. Para comprobar que se cumple esta condicin, nuestro microcontrolador comparar las 4 primeras lecturas obtenidas de dichos fotodiodos con el valor de referencia anterior. De esta forma, si alguna de estas 4 lecturas es menor que el valor de referencia, el equipo considerar que la irradiancia incidente existente en el momento de la medicin no verifica la condicin anterior, con lo cual dar por finalizado este primer intento de medida. Como consecuencia de ello, el microcontrolador proceder a reprogramar la alarma del RTC para que se active a las 11:45:00 hora solar aproximada, habilitar nuevamente la interrupcin del puerto serie, y finalmente colocar a su CPU en estado de pseudo-parada hasta que una de las dos interrupciones mencionadas en los puntos anteriores la saque de dicho estado. Por el contrario, si estas 4 lecturas son mayores o iguales al valor de referencia, el equipo considerar que se cumple la condicin impuesta a la irradiancia incidente existente en el momento de la medicin, con lo que pasar a realizar la siguiente comprobacin. En esta nueva comprobacin, el equipo verifica si alguna de las tensiones de salida correspondientes a las 4 primeras lecturas obtenidas de los fotodiodos limpios ha superado el valor de la tensin superior de referencia (VAREF) del convertidor analgico digital. Como se coment cuando

hablbamos de las caractersticas del ADC de nuestro microcontrolador, dicho dispositivo consta de una referencia de tensin superior de +2,5V suministrada por un circuito integrado de precisin. De esta forma, si la tensin de entrada analgica al convertidor, VADC,IN, es mayor o igual a dicho valor, la lectura tamao byte que se obtiene en la conversin es FFh. Debemos recordar en este punto que nuestros circuitos de medicin de irradiancia fueron dimensionados de forma que bajo las condiciones de medida ms desfavorables consideradas (Irradiancia incidente=1200W/m 2, temperatura de operacin de 80C), la tensin de salida de dichos circuitos siempre fuera menor a la tensin superior de referencia del ADC. Sin embargo, si por cualquier circunstancia de funcionamiento la tensin de salida de los circuitos de medicin de irradiancia superan el valor VREF, la lectura obtenida ya no ser proporcional a la irradiancia incidente, con lo que no podr ser utilizada en nuestros clculos. Por todo ello, esta nueva comprobacin realizada por el equipo tiene como objetivo verificar que las tensiones de salida de los circuitos de medicin se mantienen por debajo del valor VREF, lo que nos garantiza una relacin lineal entre la lectura obtenida en la conversin y la irradiancia detectada por el sensor. Para realizar dicha comprobacin, el equipo comparar las 4 primeras lecturas obtenidas de los fotodiodos limpios con el valor FFh. De esta forma, si alguna de estas lecturas toma este valor, el equipo considerar que la tensin de salida correspondiente ha superado el valor VREF del ADC, con lo cual dar por finalizado este primer intento de medida. Como consecuencia de ello, el microcontrolador proceder a reprogramar la alarma del RTC para que se active a las 11:45:00 hora solar aproximada, habilitar nuevamente la interrupcin del puerto serie, y finalmente colocar a su CPU en estado de pseudo-parada hasta que una de las dos interrupciones mencionadas en los puntos anteriores la saque de dicho estado. Por el contrario, si ninguna de estas 4 lecturas es igual a este valor, el equipo considerar que las tensiones de salida de los circuitos de medicin de irradiancia no han superado el valor VREF, con lo que pasar a realizar la siguiente comprobacin de las condiciones de medida. Esta nueva comprobacin que realiza el equipo con las lecturas de irradiancia almacenadas en su memoria de datos interna, tiene como objetivo verificar que las medidas obtenidas a partir de nuestros fotodiodos no se han

visto afectadas por la presencia de nubes o bruma que puedan haber alterado el nivel de irradiancia incidente entre una medicin y otra. Experimentalmente hemos comprobado que la aparicin de nubes o simplemente bruma altera rpida y sustancialmente el nivel de irradiancia existente y, por lo tanto, hace que las tensiones de salida de nuestros circuitos de medicin varen de forma prcticamente instantnea. Puesto que nuestro sistema de medida basa el clculo de las prdidas energticas por suciedad en la prdida de irradiancia incidente que se produce por este motivo, resulta evidente que para dar validez a nuestras medidas debemos estar seguros de que las diferencias en los niveles de irradiancia detectados por los diferentes sensores son debidas nicamente a la cantidad de suciedad depositada sobre la superficie del cristal y no a la presencia de nubes o bruma que haya alterado el nivel de irradiancia incidente entre una medida y otra. Para llevar a cabo esta nueva comprobacin, el equipo de medida utilizar los dos grupos de 4 lecturas que hemos obtenido anteriormente de los fotodiodos limpios, las cuales fueron almacenadas en los lugares correspondientes dentro de la memoria de datos interna del microcontrolador. Debemos recordar que ambos grupos de 4 lecturas fueron obtenidos con un intervalo de espera intermedio superior a 2 segundos. Este proceso de comprobacin consistir en comparar entre s las dos lecturas correspondientes a cada uno de los fotodiodos limpios, las cuales fueron obtenidas por nuestro equipo con 2 segundos de diferencia. De esta forma, si ambas lecturas presentan una diferencia tal que pueda hacer pensar que han podido verse influidas por la presencia de nubes, el sistema considerar dichas lecturas como no vlidas, dando por concluido en este punto este primer intento de medida. A este respecto, nuestro equipo considerar que las lecturas de irradiancia obtenidas no se habrn visto afectadas por la presencia de nubes o bruma, cuando se verifique que los niveles de irradiancia medidos por cada fotodiodo limpio en las dos lecturas realizadas con cada uno de ellos presentan una diferencia menor de 50 W/m 2. Si tenemos en cuenta nuevamente la expresin que relaciona la irradiancia incidente G detectada por nuestros fotodiodos con la lectura tamao byte obtenida por el ADC en la conversin de la tensin de salida del circuito de medicin de irradiancia, tenemos que a una diferencia de irradiancia de 50

W/m2 le corresponde una diferencia en las lecturas obtenidas que viene dada por:
Lectura _ tamao _ byte(G ) = 0,2659 G (W / m 2 ) 66,3552 Lectura _ tamao _ byte(G1 ) = 0,2659 G1 (W / m 2 ) 66,3552 Lectura _ tamao _ byte(G2 ) = 0,2659 G2 (W / m 2 ) 66,3552
Lectura _ tamao _ byte = Lectura _ tamao _ byte(G2 ) Lectura _ tamao _ byte(G1 ) = = 0,2659 (G2 G1 ) = 0,2659 (50) 13

Por lo tanto, ste ser el valor de referencia que utilizar nuestro equipo para determinar si las dos lecturas de irradiancia correspondientes a cada fotodiodo limpio se diferencian en ms de 50 W/m 2. Dicho valor ha sido asociado al smbolo Referencia3 en el bloque de directivas dirigidas al ensamblador al comienzo de nuestro programa. De esta forma, si posteriormente queremos ajustar este parmetro de funcionamiento, simplemente deber ser modificada esta lnea de cdigo. Por lo tanto, para comprobar la presencia de nubes o bruma durante la medicin, nuestro equipo comparar entre s las dos lecturas obtenidas de cada uno de los fotodiodos limpios. De esta forma, si alguno de estos 4 pares de lecturas presenta una diferencia mayor o igual al valor de referencia anterior, nuestro equipo considerar que las lecturas obtenidas pueden estar afectadas por la presencia de nubes, con lo que dar por finalizado este primer intento de medida. Como consecuencia, el microcontrolador proceder a reprogramar la alarma del RTC para que se active a las 11:45:00, habilitar nuevamente la interrupcin del puerto serie y colocar a su CPU en estado de pseudo-parada hasta el momento en el que una de las interrupciones habilitadas la saque de dicho estado. Por el contrario, si estas 4 parejas de medidas presentan una diferencia menor que el valor de referencia anterior, el equipo considerar que las lecturas almacenadas en su memoria de datos interna no estn afectadas por la presencia de nubes o bruma, con lo que contina con la siguiente etapa del proceso de medida. En esta siguiente etapa del proceso de medida, el equipo comprobar si alguno de los fotodiodos situados tras la parte sucia del cristal frontal puede estar afectado por suciedad local concentrada (como por ejemplo, la

procedente de las aves). Como se coment cuando hablbamos del diseo exterior del equipo, los niveles de irradiancia presentes tras las dos zonas del cristal frontal (zona sucia y zona limpia) sern determinados como el valor medio de las lecturas obtenidas a partir de los fotodiodos situados tras ellas. De esta forma, la irradiancia incidente presente tras la zona sucia del cristal sera determinada como el valor medio de las 4 lecturas de irradiancia correspondientes a los 4 fotodiodos situados tras dicha zona. Sin embargo, como ya ha sido sealado en varias ocasiones a lo largo del texto, el objetivo de nuestro equipo es determinar las prdidas energticas por suciedad, entendiendo por suciedad aquella capa de residuos aproximadamente uniforme que se va depositando a lo largo del tiempo sobre la superficie de los mdulos fotovoltaicos. Por lo tanto, para que la medida obtenida por nuestro equipo tenga validez debemos asegurarnos de que las lecturas correspondientes a los fotodiodos sucios no estn afectadas por suciedad local concentrada, ya que esto reducira de forma errnea el valor medio obtenido a partir de dichas lecturas, con lo que el equipo obtendra un nivel de irradiancia tras el cristal sucio menor al que est llegando realmente a las clulas de los mdulos. Por esta razn se hace necesario que nuestro sistema desestime aquellas lecturas procedentes de los fotodiodos sucios que puedan estar afectadas por suciedad local concentrada. En este sentido y teniendo presente que en una etapa anterior del proceso de medida ya ha sido comprobado que el nivel de irradiancia real existente en el momento de la medicin es mayor o igual a 800 W/m2, en nuestro equipo se ha considerado que un fotodiodo sucio no estar afectado por suciedad local concentrada cuando el nivel de irradiancia que detecta es mayor o igual a 500 W/m 2. Nuevamente, utilizando la expresin que nos relaciona la irradiancia G detectada por nuestros fotodiodos con la lectura tamao byte obtenida por el ADC en la conversin de la tensin de salida del circuito de medicin, obtenemos que a este valor de irradiancia le correspondera una lectura tamao byte dada por:
Lectura _ tamao _ byte(G ) = 0,2659 G (W / m 2 ) 66,3552 Lectura _ tamao _ byte(500W / m 2 ) = 0,2659 (500W / m 2 ) 66,3552 67

ste ser el valor de referencia utilizado por nuestro equipo de medida para determinar si un fotodiodo sucio est o no afectado por suciedad local

concentrada. Dicho valor ha sido asociado al smbolo Referencia4 en el bloque de directivas dirigidas al ensamblador al comienzo de nuestro programa. De esta forma, para llevar a cabo cualquier modificacin en este parmetro de funcionamiento nicamente deber ser modificada dicha lnea de cdigo. Por lo tanto, teniendo presente que ya ha sido comprobado en una etapa anterior que el nivel de irradiancia presente en el momento de la medicin es mayor o igual a 800 W/m 2, nuestro equipo de medida considerar que un fotodiodo sucio est afectado por suciedad local concentrada (al cual denominaremos en lo sucesivo fotodiodo sucio sombreado) cuando el nivel de irradiancia detectado por ste es menor de 500 W/m 2. Para llevar a cabo esta comprobacin, el equipo comparar la lectura obtenida de cada uno de estos fotodiodos con el valor de referencia anterior, y proceder a desestimar aquellas lecturas inferiores a dicho valor de referencia. Sin embargo, como fue explicado en apartados anteriores, el objetivo de calcular la irradiancia incidente tras las dos zonas del cristal como el valor medio de las irradiancias individuales medidas por los diferentes sensores situados tras ellas, fue intentar reducir la dispersin que introduce en estas lecturas la tolerancia de los componentes de los circuitos de medicin de irradiancia. Por esta razn, en el caso de nuestro equipo de medida, se ha considerado que para poder calcular la irradiancia incidente tras la zona sucia del cristal deber existir al menos un mnimo de dos fotodiodos sucios que no estn afectados por suciedad local concentrada (fotodiodos sucios no sombreados). De esta forma, la irradiancia incidente tras la zona sucia del cristal ser calculada por nuestro equipo como el valor medio las lecturas de irradiancia correspondientes a aquellos de los fotodiodos sucios que no estn afectados por suciedad local concentrada, siempre que dicho nmero de fotodiodos sea mayor o igual a 2. Por lo tanto, como conclusin a lo dicho en los prrafos anteriores, podemos decir que en esta etapa del proceso de medida nuestro equipo comprobar si existe un nmero mnimo de 2 fotodiodos situados tras la parte sucia del cristal que no estn afectados por suciedad local concentrada. En el caso de que no se cumpla lo anterior, el equipo dar por concluido este primer intento de medida, con lo que el microcontrolador pasar a reprogramar la

alarma del RTC para que se active nuevamente a las 11:45:00, habilitar la interrupcin del puerto serie y colocar a su CPU en estado de pseudo-parada hasta que la saque de dicho estado una de las interrupciones habilitadas en nuestro equipo. Por el contrario, si nuestro equipo comprueba que el nmero de fotodiodos sucios no afectados por suciedad local concentrada es mayor o igual a 2, la ejecucin pasar a la siguiente etapa del proceso de medida. En esta siguiente etapa de nuestro proceso de medida, el equipo lleva a cabo en primer lugar el clculo de los valores de irradiancia incidente tras las dos zonas del cristal frontal. Dichos valores de irradiancia son determinados como el valor medio de las lecturas individuales correspondientes a los fotodiodos situados tras estas dos zonas del cristal; es decir: Por un lado, el valor de la irradiancia incidente tras la zona limpia del cristal frontal es determinado como el valor medio de las 4 primeras lecturas de irradiancia correspondientes a los fotodiodos situados tras dicha zona. Por otro lado, el valor de la irradiancia incidente tras la zona sucia del cristal frontal es determinado como el valor medio de aquellas lecturas de irradiancia correspondientes a fotodiodos sucios no afectados por suciedad local concentrada. Debemos recordar que en cualquier caso, el nmero de estos fotodiodos ser mayor o igual a 2. Una vez calculados ambos valores medios, sern almacenados en las posiciones de memoria correspondientes que fueron reservadas al efecto en la memoria de datos interna del microcontrolador al comienzo de nuestro programa. La ltima comprobacin que lleva a cabo nuestro equipo antes de dar validez a las medidas de irradiancia obtenidas en el paso anterior y a partir de ellas proceder al clculo del porcentaje de prdida de potencia por suciedad en condiciones STC, est relacionada directamente con el principio de funcionamiento de nuestro equipo. Como explicamos en detalle cuando describamos el diseo exterior de nuestro equipo de medida, el clculo de la

prdida de energa por suciedad en el mismo est basado en la determinacin de la prdida de irradiancia que se produce por dicho factor. Para llevar a cabo la medida de esta prdida de irradiancia, el diseo exterior del equipo fue desarrollado de forma que se dispusiera en todo momento de un cristal frontal con dos zonas diferenciadas: una parte cuyo nivel de suciedad fuera comparable al presente en los mdulos de los alrededores, y una pequea parte que se mantendra aproximadamente limpia gracias a la accin del disco de proteccin incorporado al equipo. De esta forma, la prdida de irradiancia por suciedad vendra dada por la diferencia entre la irradiancia que se detecta tras la zona limpia del cristal y la que se detecta tras la zona sucia. Por lo tanto, nuestro equipo de medida basa su funcionamiento en una premisa fundamental: en cualquier instante, la irradiancia incidente que se detecta tras la zona limpia del cristal debe ser mayor o igual a la que se detecta tras la zona sucia. Es por ello que la ltima comprobacin que lleva a cabo nuestro equipo previamente al clculo de la prdida de potencia por suciedad, consiste en verificar si los dos valores medios obtenidos en la etapa anterior se corresponden con este principio de funcionamiento, es decir, si el valor medio obtenido a partir de las lecturas de los fotodiodos limpios es mayor o igual al obtenido a partir de las lecturas de los fotodiodos sucios no sombreados. Sin embargo, en el caso de que todo el cristal frontal del equipo presente el mismo estado de limpieza, la tolerancia de los componentes de los circuitos de medicin (principalmente las resistencias de realimentacin de los mismos) pueden provocar que lo anterior no se verifique, sin que esto signifique un funcionamiento defectuoso del equipo. En este caso, esta diferencia entre ambos valores medios ocasionada por la tolerancia de las resistencias de realimentacin de los circuitos de medicin estar acotada por el valor que tome dicha tolerancia. Si consideramos el caso ms desfavorable, en el que la irradiancia incidente toma el valor mximo considerado (1200 W/m 2), las resistencias de realimentacin de los circuitos correspondientes a los fotodiodos sucios toman el valor hmico mximo que pueden tomar en funcin de su tolerancia (1,6x1.01 k), y las resistencias de realimentacin de los circuitos correspondientes a los fotodiodos limpios toman el valor hmico mnimo en funcin de esta tolerancia (1,6x0,99 k), la diferencia entre las tensiones de salida de los circuitos de medicin de irradiancia podra llegar a

alcanzar un valor mximo de 49,36 mV, lo cual se traducira, teniendo en cuenta las caractersticas de nuestro ADC y la resolucin utilizada, en una diferencia entre los valores medios de las lecturas de 5. ste valor ser el utilizado por nuestro equipo de medida para determinar si los valores medios de las lecturas obtenidos en la etapa anterior son lgicos teniendo en cuenta el principio de funcionamiento del equipo. Por esta razn, al principio de nuestro programa principal, este valor ha sido asociado al smbolo Referencia5, de forma que, si posteriormente deseamos ajustar este parmetro de funcionamiento, nicamente ser necesario modificar dicha lnea de cdigo. Por lo tanto, en esta ltima comprobacin previa al clculo de las prdidas energticas por suciedad, nuestro equipo verifica si el valor medio de las lecturas de los fotodiodos limpios es mayor o igual al valor medio de las lecturas de los fotodiodos sucios no sombreados. En caso afirmativo, el equipo considerar que los resultados obtenidos son lgicos teniendo en cuenta el principio de funcionamiento del equipo, y proceder a ejecutar la ltima etapa del proceso de medida. Por el contrario, si el valor medio de las lecturas de los fotodiodos sucios no sombreados es mayor que el valor medio de las lecturas de los fotodiodos limpios, el equipo pasar a comprobar si la diferencia entre ambos valores medios puede estar provocada por la tolerancia de las resistencias de realimentacin de los circuitos de medicin, aceptando la premisa de que todo el cristal frontal del equipo est limpio. Para ello, el microcontrolador calcular en primer lugar la diferencia entre ambos valores medios y posteriormente comprobar si dicha diferencia es menor que el valor de referencia que obtuvimos anteriormente. En caso afirmativo, el equipo considerar que todo su cristal frontal est limpio y que la diferencia entre los valores medios de las lecturas de irradiancia est causada por la tolerancia de las resistencias de realimentacin de los circuitos de medicin. En este caso, el equipo dar por vlidos los valores medios obtenidos y considerar nula la prdida energtica por suciedad. Sin embargo, en el caso de que el valor medio de las lecturas de los fotodiodos sucios no sombreados sea mayor que el valor medio de las lecturas de los fotodiodos limpios y la diferencia entre ambos valores no pueda ser justificada teniendo en cuenta la tolerancia de las resistencias de

realimentacin, el equipo considerar como no vlidos los valores medios obtenidos y dar por finalizado este primer intento de medida. Como consecuencia, el microcontrolador proceder a reprogramar la alarma del RTC para que se active a las 11:45:00, habilitar la interrupcin del puerto serie y colocar a su CPU en estado de pseudo-parada hasta que la saque de dicho estado una cualquiera de las interrupciones habilitadas. Una vez que el equipo ha llevado a cabo todas las comprobaciones anteriores, pasar a realizar el clculo de la prdida de potencia por suciedad normalizada a condiciones STC a partir de los valores medios de las lecturas de los fotodiodos correspondientes. Debemos recordar que dichos valores medios fueron calculados en una etapa anterior del proceso de medida y que fueron almacenados en dos posiciones de memoria dentro de la memoria de datos interna del microcontrolador. Para llevar a cabo dicho clculo, el microcontrolador determinar en primer lugar la diferencia entre ambos valores medios y almacenar el resultado obtenido en el lugar correspondiente dentro de su memoria de datos interna. Este valor obtenido nos estar determinando la prdida de irradiancia por suciedad que se est produciendo en la instalacin fotovoltaica en el momento de la medicin, la cual es la base a partir de la cual nuestro sistema calcula el porcentaje de prdida de potencia por suciedad en condiciones STC. Para determinar la prdida de potencia por suciedad en condiciones STC correspondiente al valor de prdida de irradiancia obtenido en el paso anterior (diferencia entre los valores medios de las lecturas), el microcontrolador utilizar direccionamiento indexado para acceder a una tabla de bsqueda almacenada al efecto en su memoria de cdigo. Dicha tabla constar de 200 valores y ha sido elaborada utilizando el algoritmo de clculo explicado en apartados anteriores. Cada elemento de esta tabla representa el byte del porcentaje de prdida de potencia por suciedad en condiciones STC que le corresponde a cada valor de prdida de irradiancia obtenido en el paso anterior. De esta forma, una vez determinado el byte que define la prdida de irradiancia por suciedad medida por nuestro equipo, el direccionamiento indexado nos permitir acceder a la tabla de bsqueda y extraer de ella el byte en formato BCD correspondiente al porcentaje de prdida de potencia por suciedad en condiciones STC asociado a este valor de prdida de irradiancia

obtenido. En nuestro caso, para llevar a cabo este acceso a la tabla de bsqueda mediante direccionamiento indexado, utilizaremos el registro DPTR como registro base y el registro acumulador como desplazamiento. De esta forma, almacenando la direccin de comienzo de la tabla de bsqueda en el registro DPTR y el byte correspondiente a la prdida de irradiancia medida por nuestro equipo (el cual es tambin el nmero del elemento de la tabla de bsqueda al que queremos acceder) en el registro acumulador, podemos acceder a dicha tabla para leer el byte del porcentaje de prdida de potencia por suciedad correspondiente. Una vez obtenido dicho byte, el microcontrolador lo almacenar en su lugar correspondiente dentro de su memoria de datos interna. El siguiente paso que llevar a cabo nuestro equipo ser el almacenamiento en la memoria EEPROM de nuestro microcontrolador de los 3 bytes en formato BCD que conforman el resultado de la medida realizada. Estos 3 bytes sern: El byte correspondiente al porcentaje de prdida de potencia por suciedad normalizado a condiciones STC obtenido de la tabla de bsqueda almacenada en la memoria de cdigo. Dicho byte se encuentra almacenado en la memoria de datos interna del microcontrolador. El byte correspondiente al mes en el que ha sido realizada la medida. Dicho byte es ledo por el microcontrolador accediendo al registro interno correspondiente del RTC a travs del bus SPI. El byte correspondiente al da del mes en el que ha sido realizada la medida. Al igual que en el caso anterior, dicho byte es obtenido por el microcontrolador accediendo al registro interno correspondiente del RTC a travs del interfaz serie SPI. Como se coment cuando hablbamos de la memoria EEPROM de nuestro microcontrolador, el almacenamiento en dicha memoria de los resultados de medida obtenidos por nuestro equipo a lo largo de su tiempo de funcionamiento, va a ser llevado a cabo utilizando un registro ndice

almacenado en memoria no voltil, que nos indique en todo momento la direccin de esta memoria en la que debemos almacenar el siguiente byte de resultado que obtenga el equipo. Este ndice estar constituido por las posiciones de memoria 00h y 01h de la memoria RAM incorporada en nuestro RTC. De esta forma, ambas posiciones de memoria contendrn en todo momento los bytes bajo (posicin 00h) y alto (posicin 01h) de la direccin de la memoria EEPROM en la que debe ser almacenado el siguiente byte de resultado que obtenga nuestro equipo. Por lo tanto, antes de llevar a cabo el almacenamiento en la EEPROM de los 3 bytes anteriores, el microcontrolador acceder a las posiciones 00h y 01h de la memoria RAM del RTC con objeto de leer la direccin de la EEPROM en la que debe almacenar el primero de estos bytes. El orden de almacenamiento de estos bytes es el siguiente: 1. En primer lugar ser almacenado el byte correspondiente al porcentaje de prdida de potencia por suciedad en condiciones STC. 2. En segundo lugar ser almacenado el byte correspondiente al mes en el que ha sido realizada la medida. 3. Finalmente ser almacenado el byte correspondiente al da del mes en el que ha sido realizada la medida. Una vez realizado este almacenamiento, el microcontrolador modificar de forma adecuada el contenido de los registros 00h y 01h de la RAM del RTC, de forma que almacenen nuevamente la direccin de EEPROM en la que el micro deber llevar a cabo el siguiente almacenamiento de un byte de resultado. Finalmente, la ltima etapa del proceso de medida consistir en encender el LED de salida correspondiente en funcin del valor del porcentaje de prdida de potencia obtenido. Para ello, el microcontrolador utilizar el valor obtenido de la prdida de irradiancia por suciedad (diferencia entre los valores medios de las lecturas de irradiancia) y, en funcin de ste, encender el LED correspondiente a la prdida de potencia asociada. Este proceso aparece explicado en detalle en el apartado en el que se desarrolla la subrutina correspondiente.

Una vez completado el proceso de medida diario, el microcontrolador proceder a habilitar nuevamente la interrupcin del puerto serie y colocar su CPU en estado de pseudo-parada hasta que la saque de dicho estado una de las interrupciones habilitadas (interrupcin del puerto serie o interrupcin externa 0 asociada a la alarma del RTC). De esta forma, la alarma del RTC volver a activarse a las 11:30:00 del da siguiente, volviendo a ejecutarse todo el proceso de medida explicado en los prrafos precedentes. Sin embargo, si en el intento de medida que tiene comienzo a las 11:30:00 hora solar aproximada no se cumplen todas las condiciones impuestas por nuestro programa de funcionamiento para dar por vlido un resultado de medida, como hemos comentado anteriormente nuestro microcontrolador proceder a reprogramar la alarma del RTC para que se active a las 11:45:00, realizando un nuevo intento de medida a dicha hora. Este mismo proceso se repetir nuevamente a las 12:00:00, 12:15:00 y 12:30:00, momento en el cual el equipo realiza el ltimo intento de medida del da. Tras este ltimo intento de medida, el microcontrolador reprogramar la alarma del RTC para que se active a las 11:30:00 del da siguiente, habilitar la interrupcin del puerto serie y colocar a su CPU en estado de pseudo-parada hasta que la saque de dicho estado una de las interrupciones habilitadas. En las siguientes pginas se desarrolla esquemticamente el funcionamiento de nuestro equipo de medida, desde el reseteo del sistema hasta la conclusin del ltimo intento de medida diario:

RESET
DEFINICIN DE LOS VECTORES DE INTERRUPCIN E INICIALIZACIN DE LOS REGISTROS INTERNOS DEL MICROCONTROLADOR Y DEL RELOJ EN TIEMPO REAL

1
CONFIGURACIN DE LA ALARMA 1 DEL RELOJ EN TIEMPO REAL PARA QUE SE ACTIVE A LAS 11:30:00 HORA SOLAR APROXIMADA, Y HABILITACIN DE LAS INTERRUPCIONES

2
LA CPU DEL MICROCONTROLADOR SE COLOCA EN ESTADO DE PSEUDO-PARADA HASTA QUE UNA DE LAS INTERRUPCIONES HABILITADAS (PUERTO SERIE O INTERRUPCIN EXTERNA 0) LO SAQUE DE DICHO ESTADO

LA CPU DEL MICROCONTROLADOR SALE DEL ESTADO DE PSEUDO-PARADA PORQUE SE HA PRODUCIDO UNA INTERRUPCIN HABILITADA

SE EJECUTA LA RUTINA DE SERVICIO DE INTERRUPCIN CORRESPONDIENTE A LA INTERRUPCIN QUE SE HA PRODUCIDO: 1. Si la interrupcin producida ha sido la interrupcin del puerto serie, la rutina de servicio correspondiente no modifica el bit F0 perteneciente al registro PSW y transmite por el puerto serie todos los resultados de medidas almacenados en la memoria EEPROM del microcontrolador. 2. Si la interrupcin producida ha sido la interrupcin externa 0 (asociada a la alarma del RTC), la rutina de servicio correspondiente activa el bit F0 perteneciente al registro PSW y borra la bandera de activacin de la alarma 1 (bit A1F) perteneciente al registro de control/estado del RTC.

QU INTERRUPCIN SE HA PRODUCIDO?

LA INTERRUPCIN EXTERNA 0 ASOCIADA A LA ALARMA 1 DEL RELOJ EN TIEMPO REAL

LA INTERRUPCIN DEL PUERTO SERIE

A
COMPROBACIN MEDIANTE LOS FOTODIODOS SUCIOS DE LA EXISTENCIA DE RIESGO DE LLUVIA EXISTE RIESGO DE LLUVIA?

NO EXISTE RIESGO DE LLUVIA

S EXISTE RIESGO DE LLUVIA

POSICIONAMIENTO DEL DISCO DE PROTECCIN EN LA POSICIN DE REALIZACIN DE MEDIDA HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN CORRECTA?

S HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN DE REALIZACIN DE MEDIDA

NO HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN DE REALIZACIN DE MEDIDA

D
REALIZACIN DE LAS SIGUIENTES MEDICIONES: 1. SE OBTIENEN LAS LECTURAS DE LOS 4 FOTODIODOS LIMPIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 2. SE OBTIENEN LAS LECTURAS DE LOS 4 FOTODIODOS SUCIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 3. TRAS UN INTERVALO DE ESPERA DE 2 SEGUNDOS, SE OBTIENEN NUEVAMENTE LAS LECTURAS DE LOS 4 FOTODIODOS LIMPIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

EL DISCO DE PROTECCIN REALIZA UN GIRO DE 180 GRADOS PARA CUBRIR LOS FOTODIODOS LIMPIOS
COMPROBACIN DE LAS LECTURAS OBTENIDAS DE LOS FOTODIODOS LIMPIOS TODOS LOS FOTODIODOS LIMPIOS HAN DETECTADO UNA IRRADIANCIA INCIDENTE 800W/m2 Y NINGUNO HA SUPERADO LA TENSIN DE REFERENCIA DEL CONVERTIDOR?

SI

NO

B
COMPARACIN DE LAS DOS LECTURAS EFECTUADAS CON CADA UNO DE LOS FOTODIODOS LIMPIOS PARA DETERMINAR LA PRESENCIA DE NUBES O BRUMA QUE PUEDA HABER AFECTADO LAS MEDIDAS REALIZADAS SE HA DETECTADO LA PRESENCIA DE NUBES DURANTE LA REALIZACIN DE LAS MEDIDAS?

NO SE HA DETECTADO LA PRESENCIA DE NUBES

S SE HA DETECTADO LA PRESENCIA DE NUBES

D
ANLISIS DE LAS LECTURAS OBTENIDAS DE LOS FOTODIODOS SUCIOS PARA DETERMINAR CUNTOS DE ELLOS PUEDEN ESTAR AFECTADOS POR SUCIEDAD LOCAL CONCENTRADA (FOTODIODOS SUCIOS SOMBREADOS) EXISTE UN NMERO MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS?

S HAY UN MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS

NO HAY UN MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS

REALIZAMOS LOS SIGUIENTES CLCULOS: 1. CALCULAMOS EL VALOR MEDIO DE LAS 4 PRIMERAS LECTURAS CORRESPONDIENTES A LOS 4 FOTODIODOS LIMPIOS Y LO ALMACENAMOS EN SU LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 2. CALCULAMOS EL VALOR MEDIO DE LAS LECTURAS CORRESPONDIENTES A AQUELLOS FOTODIODOS SUCIOS NO SOMBREADOS Y LO ALMACENAMOS EN SU LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

C
ANALIZAMOS LOS VALORES MEDIOS OBTENIDOS PARA COMPROBAR SI SON LGICOS TENIENDO EN CUENTA EL PRINCIPIO DE FUNCIONAMIENTO DE NUESTRO EQUIPO DE MEDIDA SON LGICOS LOS VALORES MEDIOS OBTENIDOS EN RELACIN CON EL PRINCIPIO DE FUNCIONAMIENTO DE NUESTRO EQUIPO?

LOS VALORES MEDIOS OBTENIDOS SON LGICOS

LOS VALORES MEDIOS OBTENIDOS NO SON LGICOS

D
CALCULAMOS LA DIFERENCIA ENTRE AMBOS VALORES MEDIOS: (VALOR MEDIO FOTODIODOS LIMPIOS) - (VALOR MEDIO FOTODIODOS SUCIOS NO SOMBREADOS) Y LA ALMACENAMOS EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

CALCULAMOS EL PORCENTAJE DE PRDIDA DE POTENCIA POR SUCIEDAD NORMALIZADO A UNA IRRADIANCIA INCIDENTE DE 1000 W/m2 A PARTIR DE LA DIFERENCIA ENTRE LOS VALORES MEDIOS CALCULADA EN EL PASO ANTERIOR Y LO ALMACENAMOS EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

ALMACENAMOS EN LA MEMORIA EEPROM DEL MICROCONTROLADOR LOS 3 BYTES EN FORMATO BCD CORRESPONDIENTES AL RESULTADO DE LA MEDIDA REALIZADA EN EL SIGUIENTE ORDEN: 1. En primer lugar, almacenamos el byte correspondiente al porcentaje de prdida de potencia por suciedad 2. En segundo lugar, almacenamos el byte correspondiente al mes de realizacin de la medida 3. En tercer lugar, almacenamos el byte correspondiente al da de realizacin de la medida

ENCENDEMOS EL LED DE SALIDA CORRESPONDIENTE EN FUNCIN DEL PORCENTAJE DE PRDIDA DE POTENCIA POR SUCIEDAD DETERMINADO EN LA MEDIDA REALIZADA

D
CONFIGURACIN DE LA ALARMA 1 DEL RELOJ EN TIEMPO REAL PARA QUE SE ACTIVE A LAS 11:45:00 HORA SOLAR APROXIMADA

3
LA CPU DEL MICROCONTROLADOR SE COLOCA EN ESTADO DE PSEUDO-PARADA HASTA QUE UNA DE LAS INTERRUPCIONES HABILITADAS LO SAQUE DE DICHO ESTADO

LA CPU DEL MICROCONTROLADOR SALE DEL ESTADO DE PSEUDO-PARADA PORQUE SE HA PRODUCIDO UNA INTERRUPCIN HABILITADA

SE EJECUTA LA RUTINA DE SERVICIO DE INTERRUPCIN CORRESPONDIENTE A LA INTERRUPCIN QUE SE HA PRODUCIDO: 1. Si la interrupcin producida ha sido la interrupcin del puerto serie, la rutina de servicio correspondiente no modifica el bit F0 perteneciente al registro PSW y transmite por el puerto serie todos los resultados de medidas almacenados en la memoria EEPROM del microcontrolador. 2. Si la interrupcin producida ha sido la interrupcin externa 0 (asociada a la alarma del RTC), la rutina de servicio correspondiente activa el bit F0 perteneciente al registro PSW y borra la bandera de activacin de la alarma 1 (bit A1F) perteneciente al registro de control/estado del RTC.

QU INTERRUPCIN SE HA PRODUCIDO?

LA INTERRUPCIN EXTERNA 0 ASOCIADA A LA ALARMA 1 DEL RELOJ EN TIEMPO REAL

LA INTERRUPCIN DEL PUERTO SERIE

E
COMPROBACIN MEDIANTE LOS FOTODIODOS SUCIOS DE LA EXISTENCIA DE RIESGO DE LLUVIA EXISTE RIESGO DE LLUVIA?

NO EXISTE RIESGO DE LLUVIA

S EXISTE RIESGO DE LLUVIA

POSICIONAMIENTO DEL DISCO DE PROTECCIN EN LA POSICIN DE REALIZACIN DE MEDIDA HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN CORRECTA?

S HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN DE REALIZACIN DE MEDIDA

NO HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN DE REALIZACIN DE MEDIDA

F
REALIZACIN DE LAS SIGUIENTES MEDICIONES: 1. SE OBTIENEN LAS LECTURAS DE LOS 4 FOTODIODOS LIMPIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 2. SE OBTIENEN LAS LECTURAS DE LOS 4 FOTODIODOS SUCIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 3. TRAS UN INTERVALO DE ESPERA DE 2 SEGUNDOS, SE OBTIENEN NUEVAMENTE LAS LECTURAS DE LOS 4 FOTODIODOS LIMPIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

EL DISCO DE PROTECCIN REALIZA UN GIRO DE 180 GRADOS PARA CUBRIR LOS FOTODIODOS LIMPIOS
COMPROBACIN DE LAS LECTURAS OBTENIDAS DE LOS FOTODIODOS LIMPIOS TODOS LOS FOTODIODOS LIMPIOS HAN DETECTADO UNA IRRADIANCIA INCIDENTE 800W/m2 Y NINGUNO HA SUPERADO LA TENSIN DE REFERENCIA DEL CONVERTIDOR?

SI

NO

G
COMPARACIN DE LAS DOS LECTURAS EFECTUADAS CON CADA UNO DE LOS FOTODIODOS LIMPIOS PARA DETERMINAR LA PRESENCIA DE NUBES O BRUMA QUE PUEDA HABER AFECTADO LAS MEDIDAS REALIZADAS SE HA DETECTADO LA PRESENCIA DE NUBES DURANTE LA REALIZACIN DE LAS MEDIDAS?

NO SE HA DETECTADO LA PRESENCIA DE NUBES

S SE HA DETECTADO LA PRESENCIA DE NUBES

F
ANLISIS DE LAS LECTURAS OBTENIDAS DE LOS FOTODIODOS SUCIOS PARA DETERMINAR CUNTOS DE ELLOS PUEDEN ESTAR AFECTADOS POR SUCIEDAD LOCAL CONCENTRADA (FOTODIODOS SUCIOS SOMBREADOS) EXISTE UN NMERO MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS?

S HAY UN MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS

NO HAY UN MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS

REALIZAMOS LOS SIGUIENTES CLCULOS: 1. CALCULAMOS EL VALOR MEDIO DE LAS 4 PRIMERAS LECTURAS CORRESPONDIENTES A LOS 4 FOTODIODOS LIMPIOS Y LO ALMACENAMOS EN SU LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 2. CALCULAMOS EL VALOR MEDIO DE LAS LECTURAS CORRESPONDIENTES A AQUELLOS FOTODIODOS SUCIOS NO SOMBREADOS Y LO ALMACENAMOS EN SU LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

H
ANALIZAMOS LOS VALORES MEDIOS OBTENIDOS PARA COMPROBAR SI SON LGICOS TENIENDO EN CUENTA EL PRINCIPIO DE FUNCIONAMIENTO DE NUESTRO EQUIPO DE MEDIDA SON LGICOS LOS VALORES MEDIOS OBTENIDOS EN RELACIN CON EL PRINCIPIO DE FUNCIONAMIENTO DE NUESTRO EQUIPO?

LOS VALORES MEDIOS OBTENIDOS SON LGICOS

LOS VALORES MEDIOS OBTENIDOS NO SON LGICOS

F
CALCULAMOS LA DIFERENCIA ENTRE AMBOS VALORES MEDIOS: (VALOR MEDIO FOTODIODOS LIMPIOS) - (VALOR MEDIO FOTODIODOS SUCIOS NO SOMBREADOS) Y LA ALMACENAMOS EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

CALCULAMOS EL PORCENTAJE DE PRDIDA DE POTENCIA POR SUCIEDAD NORMALIZADO A UNA IRRADIANCIA INCIDENTE DE 1000 W/m2 A PARTIR DE LA DIFERENCIA ENTRE LOS VALORES MEDIOS CALCULADA EN EL PASO ANTERIOR Y LO ALMACENAMOS EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

ALMACENAMOS EN LA MEMORIA EEPROM DEL MICROCONTROLADOR LOS 3 BYTES EN FORMATO BCD CORRESPONDIENTES AL RESULTADO DE LA MEDIDA REALIZADA EN EL SIGUIENTE ORDEN: 1. En primer lugar, almacenamos el byte correspondiente al porcentaje de prdida de potencia por suciedad 2. En segundo lugar, almacenamos el byte correspondiente al mes de realizacin de la medida 3. En tercer lugar, almacenamos el byte correspondiente al da de realizacin de la medida

ENCENDEMOS EL LED DE SALIDA CORRESPONDIENTE EN FUNCIN DEL PORCENTAJE DE PRDIDA DE POTENCIA POR SUCIEDAD DETERMINADO EN LA MEDIDA REALIZADA

F
CONFIGURACIN DE LA ALARMA 1 DEL RELOJ EN TIEMPO REAL PARA QUE SE ACTIVE A LAS 12:00:00 HORA SOLAR APROXIMADA

4
LA CPU DEL MICROCONTROLADOR SE COLOCA EN ESTADO DE PSEUDO-PARADA HASTA QUE UNA DE LAS INTERRUPCIONES HABILITADAS LO SAQUE DE DICHO ESTADO

LA CPU DEL MICROCONTROLADOR SALE DEL ESTADO DE PSEUDO-PARADA PORQUE SE HA PRODUCIDO UNA INTERRUPCIN HABILITADA

SE EJECUTA LA RUTINA DE SERVICIO DE INTERRUPCIN CORRESPONDIENTE A LA INTERRUPCIN QUE SE HA PRODUCIDO: 1. Si la interrupcin producida ha sido la interrupcin del puerto serie, la rutina de servicio correspondiente no modifica el bit F0 perteneciente al registro PSW y transmite por el puerto serie todos los resultados de medidas almacenados en la memoria EEPROM del microcontrolador. 2. Si la interrupcin producida ha sido la interrupcin externa 0 (asociada a la alarma del RTC), la rutina de servicio correspondiente activa el bit F0 perteneciente al registro PSW y borra la bandera de activacin de la alarma 1 (bit A1F) perteneciente al registro de control/estado del RTC.

QU INTERRUPCIN SE HA PRODUCIDO?

LA INTERRUPCIN EXTERNA 0 ASOCIADA A LA ALARMA 1 DEL RELOJ EN TIEMPO REAL

LA INTERRUPCIN DEL PUERTO SERIE

I
COMPROBACIN MEDIANTE LOS FOTODIODOS SUCIOS DE LA EXISTENCIA DE RIESGO DE LLUVIA EXISTE RIESGO DE LLUVIA?

NO EXISTE RIESGO DE LLUVIA

S EXISTE RIESGO DE LLUVIA

POSICIONAMIENTO DEL DISCO DE PROTECCIN EN LA POSICIN DE REALIZACIN DE MEDIDA HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN CORRECTA?

S HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN DE REALIZACIN DE MEDIDA

NO HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN DE REALIZACIN DE MEDIDA

J
REALIZACIN DE LAS SIGUIENTES MEDICIONES: 1. SE OBTIENEN LAS LECTURAS DE LOS 4 FOTODIODOS LIMPIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 2. SE OBTIENEN LAS LECTURAS DE LOS 4 FOTODIODOS SUCIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 3. TRAS UN INTERVALO DE ESPERA DE 2 SEGUNDOS, SE OBTIENEN NUEVAMENTE LAS LECTURAS DE LOS 4 FOTODIODOS LIMPIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

EL DISCO DE PROTECCIN REALIZA UN GIRO DE 180 GRADOS PARA CUBRIR LOS FOTODIODOS LIMPIOS
COMPROBACIN DE LAS LECTURAS OBTENIDAS DE LOS FOTODIODOS LIMPIOS TODOS LOS FOTODIODOS LIMPIOS HAN DETECTADO UNA IRRADIANCIA INCIDENTE 800W/m2 Y NINGUNO HA SUPERADO LA TENSIN DE REFERENCIA DEL CONVERTIDOR?

SI

NO

K
COMPARACIN DE LAS DOS LECTURAS EFECTUADAS CON CADA UNO DE LOS FOTODIODOS LIMPIOS PARA DETERMINAR LA PRESENCIA DE NUBES O BRUMA QUE PUEDA HABER AFECTADO LAS MEDIDAS REALIZADAS SE HA DETECTADO LA PRESENCIA DE NUBES DURANTE LA REALIZACIN DE LAS MEDIDAS?

NO SE HA DETECTADO LA PRESENCIA DE NUBES

S SE HA DETECTADO LA PRESENCIA DE NUBES

J
ANLISIS DE LAS LECTURAS OBTENIDAS DE LOS FOTODIODOS SUCIOS PARA DETERMINAR CUNTOS DE ELLOS PUEDEN ESTAR AFECTADOS POR SUCIEDAD LOCAL CONCENTRADA (FOTODIODOS SUCIOS SOMBREADOS) EXISTE UN NMERO MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS?

S HAY UN MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS

NO HAY UN MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS

REALIZAMOS LOS SIGUIENTES CLCULOS: 1. CALCULAMOS EL VALOR MEDIO DE LAS 4 PRIMERAS LECTURAS CORRESPONDIENTES A LOS 4 FOTODIODOS LIMPIOS Y LO ALMACENAMOS EN SU LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 2. CALCULAMOS EL VALOR MEDIO DE LAS LECTURAS CORRESPONDIENTES A AQUELLOS FOTODIODOS SUCIOS NO SOMBREADOS Y LO ALMACENAMOS EN SU LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

L
ANALIZAMOS LOS VALORES MEDIOS OBTENIDOS PARA COMPROBAR SI SON LGICOS TENIENDO EN CUENTA EL PRINCIPIO DE FUNCIONAMIENTO DE NUESTRO EQUIPO DE MEDIDA SON LGICOS LOS VALORES MEDIOS OBTENIDOS EN RELACIN CON EL PRINCIPIO DE FUNCIONAMIENTO DE NUESTRO EQUIPO?

LOS VALORES MEDIOS OBTENIDOS SON LGICOS

LOS VALORES MEDIOS OBTENIDOS NO SON LGICOS

J
CALCULAMOS LA DIFERENCIA ENTRE AMBOS VALORES MEDIOS: (VALOR MEDIO FOTODIODOS LIMPIOS) - (VALOR MEDIO FOTODIODOS SUCIOS NO SOMBREADOS) Y LA ALMACENAMOS EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

CALCULAMOS EL PORCENTAJE DE PRDIDA DE POTENCIA POR SUCIEDAD NORMALIZADO A UNA IRRADIANCIA INCIDENTE DE 1000 W/m2 A PARTIR DE LA DIFERENCIA ENTRE LOS VALORES MEDIOS CALCULADA EN EL PASO ANTERIOR Y LO ALMACENAMOS EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

ALMACENAMOS EN LA MEMORIA EEPROM DEL MICROCONTROLADOR LOS 3 BYTES EN FORMATO BCD CORRESPONDIENTES AL RESULTADO DE LA MEDIDA REALIZADA EN EL SIGUIENTE ORDEN: 1. En primer lugar, almacenamos el byte correspondiente al porcentaje de prdida de potencia por suciedad 2. En segundo lugar, almacenamos el byte correspondiente al mes de realizacin de la medida 3. En tercer lugar, almacenamos el byte correspondiente al da de realizacin de la medida

ENCENDEMOS EL LED DE SALIDA CORRESPONDIENTE EN FUNCIN DEL PORCENTAJE DE PRDIDA DE POTENCIA POR SUCIEDAD DETERMINADO EN LA MEDIDA REALIZADA

J
CONFIGURACIN DE LA ALARMA 1 DEL RELOJ EN TIEMPO REAL PARA QUE SE ACTIVE A LAS 12:15:00 HORA SOLAR APROXIMADA

5
LA CPU DEL MICROCONTROLADOR SE COLOCA EN ESTADO DE PSEUDO-PARADA HASTA QUE UNA DE LAS INTERRUPCIONES HABILITADAS LO SAQUE DE DICHO ESTADO

LA CPU DEL MICROCONTROLADOR SALE DEL ESTADO DE PSEUDO-PARADA PORQUE SE HA PRODUCIDO UNA INTERRUPCIN HABILITADA

SE EJECUTA LA RUTINA DE SERVICIO DE INTERRUPCIN CORRESPONDIENTE A LA INTERRUPCIN QUE SE HA PRODUCIDO: 1. Si la interrupcin producida ha sido la interrupcin del puerto serie, la rutina de servicio correspondiente no modifica el bit F0 perteneciente al registro PSW y transmite por el puerto serie todos los resultados de medidas almacenados en la memoria EEPROM del microcontrolador. 2. Si la interrupcin producida ha sido la interrupcin externa 0 (asociada a la alarma del RTC), la rutina de servicio correspondiente activa el bit F0 perteneciente al registro PSW y borra la bandera de activacin de la alarma 1 (bit A1F) perteneciente al registro de control/estado del RTC.

QU INTERRUPCIN SE HA PRODUCIDO?

LA INTERRUPCIN EXTERNA 0 ASOCIADA A LA ALARMA 1 DEL RELOJ EN TIEMPO REAL

LA INTERRUPCIN DEL PUERTO SERIE

M
COMPROBACIN MEDIANTE LOS FOTODIODOS SUCIOS DE LA EXISTENCIA DE RIESGO DE LLUVIA EXISTE RIESGO DE LLUVIA?

NO EXISTE RIESGO DE LLUVIA

S EXISTE RIESGO DE LLUVIA

POSICIONAMIENTO DEL DISCO DE PROTECCIN EN LA POSICIN DE REALIZACIN DE MEDIDA HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN CORRECTA?

S HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN DE REALIZACIN DE MEDIDA

NO HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN DE REALIZACIN DE MEDIDA

N
REALIZACIN DE LAS SIGUIENTES MEDICIONES: 1. SE OBTIENEN LAS LECTURAS DE LOS 4 FOTODIODOS LIMPIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 2. SE OBTIENEN LAS LECTURAS DE LOS 4 FOTODIODOS SUCIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 3. TRAS UN INTERVALO DE ESPERA DE 2 SEGUNDOS, SE OBTIENEN NUEVAMENTE LAS LECTURAS DE LOS 4 FOTODIODOS LIMPIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

EL DISCO DE PROTECCIN REALIZA UN GIRO DE 180 GRADOS PARA CUBRIR LOS FOTODIODOS LIMPIOS
COMPROBACIN DE LAS LECTURAS OBTENIDAS DE LOS FOTODIODOS LIMPIOS TODOS LOS FOTODIODOS LIMPIOS HAN DETECTADO UNA IRRADIANCIA INCIDENTE 800W/m2 Y NINGUNO HA SUPERADO LA TENSIN DE REFERENCIA DEL CONVERTIDOR?

SI

NO

O
COMPARACIN DE LAS DOS LECTURAS EFECTUADAS CON CADA UNO DE LOS FOTODIODOS LIMPIOS PARA DETERMINAR LA PRESENCIA DE NUBES O BRUMA QUE PUEDA HABER AFECTADO LAS MEDIDAS REALIZADAS SE HA DETECTADO LA PRESENCIA DE NUBES DURANTE LA REALIZACIN DE LAS MEDIDAS?

NO SE HA DETECTADO LA PRESENCIA DE NUBES

S SE HA DETECTADO LA PRESENCIA DE NUBES

N
ANLISIS DE LAS LECTURAS OBTENIDAS DE LOS FOTODIODOS SUCIOS PARA DETERMINAR CUNTOS DE ELLOS PUEDEN ESTAR AFECTADOS POR SUCIEDAD LOCAL CONCENTRADA (FOTODIODOS SUCIOS SOMBREADOS) EXISTE UN NMERO MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS?

S HAY UN MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS

NO HAY UN MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS

REALIZAMOS LOS SIGUIENTES CLCULOS: 1. CALCULAMOS EL VALOR MEDIO DE LAS 4 PRIMERAS LECTURAS CORRESPONDIENTES A LOS 4 FOTODIODOS LIMPIOS Y LO ALMACENAMOS EN SU LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 2. CALCULAMOS EL VALOR MEDIO DE LAS LECTURAS CORRESPONDIENTES A AQUELLOS FOTODIODOS SUCIOS NO SOMBREADOS Y LO ALMACENAMOS EN SU LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

P
ANALIZAMOS LOS VALORES MEDIOS OBTENIDOS PARA COMPROBAR SI SON LGICOS TENIENDO EN CUENTA EL PRINCIPIO DE FUNCIONAMIENTO DE NUESTRO EQUIPO DE MEDIDA SON LGICOS LOS VALORES MEDIOS OBTENIDOS EN RELACIN CON EL PRINCIPIO DE FUNCIONAMIENTO DE NUESTRO EQUIPO?

LOS VALORES MEDIOS OBTENIDOS SON LGICOS

LOS VALORES MEDIOS OBTENIDOS NO SON LGICOS

N
CALCULAMOS LA DIFERENCIA ENTRE AMBOS VALORES MEDIOS: (VALOR MEDIO FOTODIODOS LIMPIOS) - (VALOR MEDIO FOTODIODOS SUCIOS NO SOMBREADOS) Y LA ALMACENAMOS EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

CALCULAMOS EL PORCENTAJE DE PRDIDA DE POTENCIA POR SUCIEDAD NORMALIZADO A UNA IRRADIANCIA INCIDENTE DE 1000 W/m2 A PARTIR DE LA DIFERENCIA ENTRE LOS VALORES MEDIOS CALCULADA EN EL PASO ANTERIOR Y LO ALMACENAMOS EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

ALMACENAMOS EN LA MEMORIA EEPROM DEL MICROCONTROLADOR LOS 3 BYTES EN FORMATO BCD CORRESPONDIENTES AL RESULTADO DE LA MEDIDA REALIZADA EN EL SIGUIENTE ORDEN: 1. En primer lugar, almacenamos el byte correspondiente al porcentaje de prdida de potencia por suciedad 2. En segundo lugar, almacenamos el byte correspondiente al mes de realizacin de la medida 3. En tercer lugar, almacenamos el byte correspondiente al da de realizacin de la medida

ENCENDEMOS EL LED DE SALIDA CORRESPONDIENTE EN FUNCIN DEL PORCENTAJE DE PRDIDA DE POTENCIA POR SUCIEDAD DETERMINADO EN LA MEDIDA REALIZADA

N
CONFIGURACIN DE LA ALARMA 1 DEL RELOJ EN TIEMPO REAL PARA QUE SE ACTIVE A LAS 12:30:00 HORA SOLAR APROXIMADA

6
LA CPU DEL MICROCONTROLADOR SE COLOCA EN ESTADO DE PSEUDO-PARADA HASTA QUE UNA DE LAS INTERRUPCIONES HABILITADAS LO SAQUE DE DICHO ESTADO

LA CPU DEL MICROCONTROLADOR SALE DEL ESTADO DE PSEUDO-PARADA PORQUE SE HA PRODUCIDO UNA INTERRUPCIN HABILITADA

SE EJECUTA LA RUTINA DE SERVICIO DE INTERRUPCIN CORRESPONDIENTE A LA INTERRUPCIN QUE SE HA PRODUCIDO: 1. Si la interrupcin producida ha sido la interrupcin del puerto serie, la rutina de servicio correspondiente no modifica el bit F0 perteneciente al registro PSW y transmite por el puerto serie todos los resultados de medidas almacenados en la memoria EEPROM del microcontrolador. 2. Si la interrupcin producida ha sido la interrupcin externa 0 (asociada a la alarma del RTC), la rutina de servicio correspondiente activa el bit F0 perteneciente al registro PSW y borra la bandera de activacin de la alarma 1 (bit A1F) perteneciente al registro de control/estado del RTC.

QU INTERRUPCIN SE HA PRODUCIDO?

LA INTERRUPCIN EXTERNA 0 ASOCIADA A LA ALARMA 1 DEL RELOJ EN TIEMPO REAL

LA INTERRUPCIN DEL PUERTO SERIE

Q
COMPROBACIN MEDIANTE LOS FOTODIODOS SUCIOS DE LA EXISTENCIA DE RIESGO DE LLUVIA EXISTE RIESGO DE LLUVIA?

NO EXISTE RIESGO DE LLUVIA

S EXISTE RIESGO DE LLUVIA

POSICIONAMIENTO DEL DISCO DE PROTECCIN EN LA POSICIN DE REALIZACIN DE MEDIDA HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN CORRECTA?

S HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN DE REALIZACIN DE MEDIDA

NO HA SIDO POSIBLE POSICIONAR EL DISCO EN LA POSICIN DE REALIZACIN DE MEDIDA

R
REALIZACIN DE LAS SIGUIENTES MEDICIONES: 1. SE OBTIENEN LAS LECTURAS DE LOS 4 FOTODIODOS LIMPIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 2. SE OBTIENEN LAS LECTURAS DE LOS 4 FOTODIODOS SUCIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 3. TRAS UN INTERVALO DE ESPERA DE 2 SEGUNDOS, SE OBTIENEN NUEVAMENTE LAS LECTURAS DE LOS 4 FOTODIODOS LIMPIOS Y SE ALMACENAN EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

EL DISCO DE PROTECCIN REALIZA UN GIRO DE 180 GRADOS PARA CUBRIR LOS FOTODIODOS LIMPIOS
COMPROBACIN DE LAS LECTURAS OBTENIDAS DE LOS FOTODIODOS LIMPIOS TODOS LOS FOTODIODOS LIMPIOS HAN DETECTADO UNA IRRADIANCIA INCIDENTE 800W/m2 Y NINGUNO HA SUPERADO LA TENSIN DE REFERENCIA DEL CONVERTIDOR?

SI

NO 1

S
COMPARACIN DE LAS DOS LECTURAS EFECTUADAS CON CADA UNO DE LOS FOTODIODOS LIMPIOS PARA DETERMINAR LA PRESENCIA DE NUBES O BRUMA QUE PUEDA HABER AFECTADO LAS MEDIDAS REALIZADAS SE HA DETECTADO LA PRESENCIA DE NUBES DURANTE LA REALIZACIN DE LAS MEDIDAS?

NO SE HA DETECTADO LA PRESENCIA DE NUBES

S SE HA DETECTADO LA PRESENCIA DE NUBES

1
ANLISIS DE LAS LECTURAS OBTENIDAS DE LOS FOTODIODOS SUCIOS PARA DETERMINAR CUNTOS DE ELLOS PUEDEN ESTAR AFECTADOS POR SUCIEDAD LOCAL CONCENTRADA (FOTODIODOS SUCIOS SOMBREADOS) EXISTE UN NMERO MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS?

S HAY UN MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS

NO HAY UN MNIMO DE 2 FOTODIODOS SUCIOS NO SOMBREADOS

REALIZAMOS LOS SIGUIENTES CLCULOS: 1. CALCULAMOS EL VALOR MEDIO DE LAS 4 PRIMERAS LECTURAS CORRESPONDIENTES A LOS 4 FOTODIODOS LIMPIOS Y LO ALMACENAMOS EN SU LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA 2. CALCULAMOS EL VALOR MEDIO DE LAS LECTURAS CORRESPONDIENTES A AQUELLOS FOTODIODOS SUCIOS NO SOMBREADOS Y LO ALMACENAMOS EN SU LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

T
ANALIZAMOS LOS VALORES MEDIOS OBTENIDOS PARA COMPROBAR SI SON LGICOS TENIENDO EN CUENTA EL PRINCIPIO DE FUNCIONAMIENTO DE NUESTRO EQUIPO DE MEDIDA SON LGICOS LOS VALORES MEDIOS OBTENIDOS EN RELACIN CON EL PRINCIPIO DE FUNCIONAMIENTO DE NUESTRO EQUIPO?

LOS VALORES MEDIOS OBTENIDOS SON LGICOS

LOS VALORES MEDIOS OBTENIDOS NO SON LGICOS

R
CALCULAMOS LA DIFERENCIA ENTRE AMBOS VALORES MEDIOS: (VALOR MEDIO FOTODIODOS LIMPIOS) - (VALOR MEDIO FOTODIODOS SUCIOS NO SOMBREADOS) Y LA ALMACENAMOS EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

CALCULAMOS EL PORCENTAJE DE PRDIDA DE POTENCIA POR SUCIEDAD NORMALIZADO A UNA IRRADIANCIA INCIDENTE DE 1000 W/m2 A PARTIR DE LA DIFERENCIA ENTRE LOS VALORES MEDIOS CALCULADA EN EL PASO ANTERIOR Y LO ALMACENAMOS EN EL LUGAR CORRESPONDIENTE DENTRO DE LA MEMORIA DE DATOS INTERNA

ALMACENAMOS EN LA MEMORIA EEPROM DEL MICROCONTROLADOR LOS 3 BYTES EN FORMATO BCD CORRESPONDIENTES AL RESULTADO DE LA MEDIDA REALIZADA EN EL SIGUIENTE ORDEN: 1. En primer lugar, almacenamos el byte correspondiente al porcentaje de prdida de potencia por suciedad 2. En segundo lugar, almacenamos el byte correspondiente al mes de realizacin de la medida 3. En tercer lugar, almacenamos el byte correspondiente al da de realizacin de la medida

ENCENDEMOS EL LED DE SALIDA CORRESPONDIENTE EN FUNCIN DEL PORCENTAJE DE PRDIDA DE POTENCIA POR SUCIEDAD DETERMINADO EN LA MEDIDA REALIZADA

R
ENCENDEMOS EL LED DE SALIDA CORRESPONDIENTE A LA PRESENCIA DE UN PROBLEMA EN EL EQUIPO

Figura 126. Esquema del funcionamiento de nuestro equipo de medida.

1.1.3

EL PROGRAMA DE FUNCIONAMIENTO DEL EQUIPO

En las siguientes pginas vamos a ir desarrollando las partes fundamentales del programa que ejecutar el microcontrolador de nuestro equipo y que definir todos los aspectos del funcionamiento del mismo. Dichas partes aparecen explicadas lnea por lnea, de forma que cada instruccin aparece justificada en relacin con las diferentes caractersticas del funcionamiento del equipo. El presente apartado est estructurado de forma que en primer lugar se desarrolla el programa principal del equipo y, a continuacin, son explicadas las principales subrutinas que utiliza el programa principal para llevar a cabo las diferentes acciones requeridas por el funcionamiento del mismo. Antes de comenzar a desarrollar cada una de estas partes en que hemos dividido nuestro programa, se realiza una introduccin que nos describe el estado interno que presenta el equipo cuando la ejecucin llega hasta ese punto del programa. Esto nos servir para entender mejor las acciones realizadas en dicha parte del programa. Con el objetivo de poder distinguir claramente las lneas de cdigo del resto del texto, stas han sido escritas en estilo de fuente negrita cursiva. La totalidad del cdigo fuente de nuestro programa se encuentra en el CD adjunto al presente proyecto.

1.1.3.1

EL PROGRAMA PRINCIPAL

En las siguientes pginas vamos a desarrollar el programa fuente en lenguaje ensamblador que ejecutar nuestro microcontrolador y que ser el encargado del correcto funcionamiento de todo el equipo. Con el objetivo de distinguir claramente las lneas de cdigo de los comentarios explicativos, las primeras sern escritas en letra cursiva y negrita mientras que las explicaciones correspondientes sern escritas en letra normal inmediatamente antes o despus de la parte de cdigo a la que hacen referencia. Un aspecto importante a destacar antes de comenzar con el programa son las suposiciones de partida en las que dicho programa est basado, y que son las siguientes: Consideramos que inicialmente nuestro reloj en tiempo real ha sido sincronizado con la hora solar aproximada propia del lugar de instalacin del equipo. Consideramos que la memoria de datos EEPROM de nuestro microcontrolador ha sido borrada completamente antes de la puesta en funcionamiento por primera vez del equipo. Consideramos que en nuestro equipo, el pin EA del micro ha sido conectado a la alimentacin de +5V, lo que implica que todas las instrucciones sern ejecutadas desde la memoria Flash interna incluida en el chip del microcontrolador. Puesto que el cristal utilizado en nuestro micro tiene una frecuencia nominal de 24 MHz y vamos a operar en modo estndar (STD Mode), la duracin de cada ciclo de mquina en nuestro micro ser de 0.5 s. Consideramos que, previamente a la puesta en funcionamiento por primera vez del equipo, en las direcciones de memoria 00h y 01h de la memoria SRAM de nuestro reloj en tiempo real ha sido almacenado el valor 00h. Esta exigencia parte del hecho de que los resultados de nuestras medidas van a ser almacenados de forma progresiva en la memoria EEPROM del micro a partir de la direccin 0000h de dicha memoria, y el puntero que nos ir indicando la siguiente direccin en la que debemos almacenar un

dato ser guardado en las direcciones de memoria 00h (byte inferior) y 01h (byte superior) de la memoria SRAM de nuestro RTC. De esta forma, en ambas posiciones de memoria estar almacenada en todo momento la direccin de memoria de la EEPROM en la que debemos almacenar el siguiente byte correspondiente a la ltima medida que ha sido realizada. PROGRAMA PRINCIPAL EN LENGUAJE ENSAMBLADOR. $TITLE (Programa Equipo de medida) Control del ensamblador que coloca el ttulo del programa en los subsecuentes encabezados de pgina $NOMOD51 Control del ensamblador que tiene como funcin comunicarle al ensamblador que no debe reconocer los registros con funciones especiales (SFRs) predefinidos especficos para el microcontrolador 8051 $INCLUDE (t89c51ac2.inc) Control del ensamblador que tiene como objetivo incluir en nuestro programa el archivo que contiene la configuracin de los registros de funciones especiales de nuestro microcontrolador particular Referencia1 EQU 93 Directiva de definicin de smbolo del ensamblador. En esta lnea de cdigo asignamos el valor numrico 93 (en formato decimal) al smbolo Referencia1. Este valor numrico se corresponde con la lectura tamao byte que el ADC de nuestro micro medira para un valor de la irradiancia incidente de 600 W/m 2. El primer aspecto a comprobar por nuestro equipo previamente a la realizacin de una medida ser si el da est despejado (soleado) o, por el contrario, est nublado, con el consiguiente riesgo de aparicin de lluvia. De este modo, en nuestro programa hemos considerado que el da estar despejado cuando la irradiancia medida por cualquiera de nuestros fotodiodos sucios sea mayor o igual a esta cantidad. En funcin de la calibracin experimental que hemos realizado para nuestros fotodiodos, para una irradiancia incidente de 600 W/m 2 la fotocorriente generada por nuestros fotodiodos sera de 568,8 A, lo que producira una tensin de salida en nuestros circuitos de medicin de

irradiancia de 0,9101 V. Teniendo en cuenta que el margen de la tensin de referencia que hemos asignado al ADC de nuestro microcontrolador es: VAGND=0V, VAREF=2,5V, y que vamos a utilizar una precisin en nuestras conversiones de 8 bits, la lectura correspondiente a este valor de tensin de salida sera aproximadamente de 93. Por lo tanto, y a modo de conclusin para esta lnea de cdigo podemos decir que este valor obtenido por nuestro ADC garantiza que el da est soleado, lo que nos permitir posteriormente descubrir los fotodiodos limpios sin riesgo a que la aparicin de la lluvia nos pueda ensuciar la zona protegida de nuestro cristal frontal. Referencia2 EQU 146 Directiva de definicin de smbolo del ensamblador. En esta lnea de cdigo asignamos el valor constante 146 (en formato decimal) al smbolo Referencia2. Al igual que sucede con la lnea de cdigo anterior, este valor numrico se corresponde con la lectura tamao byte que el ADC de nuestro microcontrolador medira para un nivel de irradiancia incidente de 800 W/m 2. En nuestro programa, hemos establecido este valor de irradiancia como un nivel mnimo que debe existir para que las medidas obtenidas tengan validez. Debemos recordar en este punto que la curva de calibracin para nuestros fotodiodos fue calculada para valores de irradiancia superiores a 500 W/m 2, por lo que este nivel mnimo de irradiancia nos garantiza la validez de dicha recta de calibracin. Segn la curva de calibracin experimental obtenida para nuestros fotodiodos, para una irradiancia incidente de 800 W/m 2 se obtendra una fotocorriente de 893,4 A, lo que producira una tensin de salida en nuestros circuitos de medicin de irradiancia de 1,4294V. De esta forma, teniendo en cuenta las tensiones de referencia de nuestro ADC y la precisin de 8 bits utilizada en nuestras conversiones, se obtendra una lectura de aproximadamente 146. Por lo tanto, nuestro equipo de medida dar como vlida una medida siempre que el nivel de irradiancia incidente medido por nuestros fotodiodos limpios sea mayor o igual a este valor. Referencia3 EQU 13 Directiva de definicin de smbolo del ensamblador. Mediante esta lnea de cdigo asignamos el valor constante 13 (en formato decimal) al smbolo Referencia3. Este valor de referencia es usado por nuestro programa para determinar la presencia de nubes durante la medicin que puedan haber

afectado los resultados obtenidos. A este respecto, nuestro programa va a considerar que hay nubes cuando cualquiera de las 2 medidas realizadas con cada uno de los fotodiodos limpios dan como resultado niveles de irradiancia que difieren en ms de 50 W/m 2. Como se ver posteriormente, nuestro programa realiza dos barridos de medida por los fotodiodos limpios, de forma que, para cada fotodiodo limpio, obtenemos dos medidas de irradiancia separadas por un determinado periodo de tiempo. De esta forma, comparando el par de medidas de irradiancia obtenidas para cada uno de los fotodiodos limpios, consideraremos que hay nubes cuando la diferencia entre este par de medidas en cualquiera de los fotodiodos limpios sea mayor o igual a 50 W/m 2. Teniendo en cuenta la curva de calibracin de los fotodiodos y las caractersticas de nuestro ADC, una diferencia de 50 W/m 2 en la irradiancia medida se corresponde con una diferencia entre las correspondientes lecturas de aproximadamente 13. Por lo tanto, nuestro equipo de medida realizar dos medidas de irradiancia con cada fotodiodo limpio y comparar las lecturas de ambas medidas; en el caso de que la diferencia entre ambas lecturas sea mayor o igual a 13 (lo que se corresponde con una diferencia en la irradiancia medida mayor o igual a 50 W/m 2), el sistema considerar que las medidas obtenidas pueden haber sido afectadas por la presencia de nubes, por lo que las considerar no vlidas. Referencia4 EQU 67 Directiva de definicin de smbolo del ensamblador. Con esta lnea de cdigo asignamos el valor constante 67 (en formato decimal) al smbolo Referencia4. Nuestro equipo de medida determina el nivel de irradiancia que se recibe tras el cristal sucio calculando el valor medio de las irradiancias medidas por los 4 fotodiodos sucios. Sin embargo, como se coment cuando hablbamos de los tipos de suciedad que pueden afectar a los mdulos fotovoltaicos, decamos que no consideraramos las suciedades concentradas (como las procedentes de las aves) que produciran un sombreamiento muy local en nuestros sensores. Por lo tanto, a la hora de calcular el nivel de irradiancia tras el cristal sucio debemos descartar aquellas medidas que puedan estar afectadas por un sombreamiento local motivado por este tipo de residuos. De esta forma, el nivel de irradiancia obtenido slo estar afectado por la capa se suciedad aproximadamente uniforme que recubre el cristal frontal del equipo. Por todo

ello, nuestro programa considerar que un fotodiodo sucio no estar sombreado (y, por lo tanto, ser vlido para determinar el nivel de irradiancia tras el cristal sucio) cuando, una vez comprobado que el nivel de irradiancia real que existe en el momento de la medicin es mayor o igual a 800 W/m 2, la irradiancia medida por dicho fotodiodo sea mayor o igual a 500 W/m 2. Al igual que en los casos anteriores, teniendo en cuenta la curva de calibracin de nuestros fotodiodos y las caractersticas de nuestros circuitos de medicin, para dicho valor de irradiancia se obtendra una fotocorriente generada de 406,5 A, lo que producira una tensin de salida del circuito de medicin de irradiancia de 0,6504V. De esta forma, teniendo en cuenta las caractersticas de nuestro ADC y la resolucin de 8 bits utilizada en nuestras conversiones, a dicho valor de tensin de entrada le correspondera una lectura tamao byte de aproximadamente 67. Por lo tanto, nuestro equipo de medida, a la hora de determinar el nivel de irradiancia que se recibe tras el cristal sucio, en primer lugar se asegurar de que el nivel de irradiancia existente en el momento de las medidas sea mayor o igual a 800 W/m 2 y, una vez hecho esto, tomar las medidas obtenidas con los 4 fotodiodos sucios y descartar aquellas que sean inferiores a 500 W/m2. De esta forma evitaremos que la medida de la irradiancia incidente tras el cristal sucio est influenciada por un sombreamiento local sobre cualquiera de los fotodiodos sucios. Por otro lado, el programa slo aceptar como vlido dicho valor cuando haya sido obtenido a partir de como mnimo las medidas de 2 de los fotodiodos sucios. Referencia5 EQU 5 Directiva de definicin de smbolo del ensamblador. Mediante esta lnea de cdigo asignamos el valor constante 5 (en formato decimal) al smbolo Referencia5. Este valor ser utilizado por nuestro programa para comprobar que los valores de irradiancia incidente obtenidos tras el cristal limpio y tras el cristal sucio guardan cierta lgica. A este respecto imaginemos que todo el cristal frontal del equipo de medida est completamente limpio; en este caso, los niveles de irradiancia incidente tras ambas zonas del cristal seran iguales. Sin embargo, las tensiones de salida de nuestros circuitos de medicin de irradiancia estarn afectadas por las tolerancias de los componentes usados en su implementacin, pudindose dar el caso de que la irradiancia medida tras el cristal sucio sea ligeramente superior a la medida tras el cristal limpio por esta

causa. De esta forma, teniendo en cuenta las tolerancias de dichos componentes (fundamentalmente la correspondiente a la resistencia de realimentacin) nuestro programa considerar que los resultados obtenidos sern aceptables siempre que la lectura correspondiente a la irradiancia incidente medida tras el cristal sucio no supere en ms de 5 a la correspondiente tras el cristal limpio. Este valor numrico se corresponde con una diferencia en los valores medios de las tensiones de salida de aproximadamente 49 mV. Por todo ello nuestro programa, una vez calculados los niveles de irradiancia tras ambas zonas del cristal, comprobar que ambos resultados cumplen la condicin anterior. En caso contrario, no dar como vlidos los resultados obtenidos. Perdida_0_a_2 EQU 6 Directiva de definicin de smbolo del ensamblador. Mediante esta lnea de cdigo asignamos el valor constante 6 (en formato decimal) al smbolo Perdida_0_a_2. Nuestro algoritmo de clculo de prdidas energticas por suciedad establece que cuando la diferencia entre las lecturas correspondientes a la irradiancia incidente tras ambas zonas del cristal es menor a 6, el porcentaje de prdida de potencia por suciedad normalizado a una irradiancia incidente de 1000 W/m 2 se encuentra entre el 0 y el 2 por ciento. Este valor nos permitir encender el LED correspondiente cuando las prdidas energticas tomen estos valores. Perdida_2_a_4 EQU 11 Directiva de definicin de smbolo del ensamblador. Mediante esta lnea de cdigo asignamos el valor constante 11 (en formato decimal) al smbolo Perdida_2_a_4. Nuestro algoritmo de clculo de prdidas energticas por suciedad establece que cuando la diferencia entre las lecturas correspondientes a la irradiancia incidente tras ambas zonas del cristal es mayor o igual a 6 y menor que 11, el porcentaje de prdida de potencia por suciedad normalizado a una irradiancia incidente de 1000 W/m 2 se encuentra entre un 2 y un 4 por ciento. Este valor nos permitir encender el LED correspondiente cuando las prdidas energticas tomen estos valores. Perdida_4_a_6 EQU 16 Directiva de definicin de smbolo del ensamblador. Mediante esta lnea de cdigo asignamos el valor constante 16 (en formato decimal) al smbolo

Perdida_4_a_6. Nuestro algoritmo de clculo de prdidas energticas por suciedad establece que cuando la diferencia entre las lecturas correspondientes a la irradiancia incidente tras ambas zonas del cristal es mayor o igual a 11 y menor de 16, el porcentaje de prdida de potencia por suciedad normalizado a un valor de irradiancia incidente de 1000 W/m 2 se encuentra entre un 4 y un 6 por ciento. Este valor nos permitir encender el LED correspondiente cuando las prdidas energticas tomen estos valores. Perdida_6_a_8 EQU 21 Directiva de definicin de smbolo del ensamblador. Mediante esta lnea de cdigo asignamos el valor constante 21 (en formato decimal) al smbolo Perdida_6_a_8. Nuestro algoritmo de clculo de prdidas energticas por suciedad establece que cuando la diferencia entre las lecturas correspondientes a la irradiancia incidente tras ambas zonas del cristal es mayor o igual a 16 y menor de 21, el porcentaje de prdida de potencia por suciedad normalizado a un nivel de irradiancia incidente de 1000 W/m 2 se encuentra entre un 6 y un 8 por ciento. Este valor nos permitir encender el LED correspondiente cuando las prdidas energticas tomen estos valores. Perdida_8_a_10 EQU 26 Directiva de definicin de smbolo del ensamblador. Mediante esta lnea de cdigo asignamos el valor constante 26 (en formato decimal) al smbolo Perdida_8_a_10. Nuestro algoritmo de clculo de prdidas energticas por suciedad establece que cuando la diferencia entre las lecturas correspondientes a la irradiancia incidente tras ambas zonas del cristal es mayor o igual a 21 y menor de 26, el porcentaje de prdida de potencia por suciedad normalizado a una irradiancia incidente de 1000 W/m 2 se encuentra entre un 8 y un 10 por ciento. Este valor nos permitir encender el LED correspondiente cuando las prdidas energticas tomen estos valores. USING 0 Directiva de control del estado del ensamblador. Con esta lnea de cdigo informamos al ensamblador que el banco de registros activo en nuestro programa ser el banco 0. DSEG AT 30h Directiva de seleccin de segmento absoluto localizado en la direccin 30h de la memoria interna de datos de acceso directo. En este segmento de memoria

vamos a almacenar las lecturas obtenidas en las diferentes medidas del nivel de irradiancia que vamos a ir realizando a lo largo del programa. Lectura_Limpios1: DS 4 Directiva de reserva de espacio de almacenamiento dentro del segmento de memoria activo. Mediante esta lnea de cdigo reservamos 4 bytes dentro del segmento absoluto de acceso directo activo para almacenar en ellos las 4 primeras medidas del nivel de irradiancia que miden los fotodiodos limpios. De esta forma, al smbolo Lectura_Limpios1 se le asigna la direccin de memoria de acceso directo 30h. Lectura_Limpios2: DS 4 Directiva de reserva de espacio de almacenamiento dentro del segmento de memoria activo. Mediante esta lnea de cdigo reservamos 4 bytes dentro del segmento absoluto de acceso directo activo para almacenar en ellos las 4 segundas medidas del nivel de irradiancia que miden los fotodiodos limpios. De esta forma, al smbolo Lectura_Limpios2 se le asigna la direccin de memoria de acceso directo 34h. Estas segundas medidas realizadas con los fotodiodos limpios nos servirn para determinar la posible presencia de nubes durante la realizacin de las medidas. Comparando las parejas de lecturas obtenidas con cada fotodiodo limpio podremos determinar si nuestras medidas pueden haberse visto influenciadas por la presencia de nubes. Lectura_Sucios: DS 4 Directiva de reserva de espacio de almacenamiento dentro del segmento de memoria activo. Mediante esta lnea de cdigo reservamos 4 bytes dentro del segmento absoluto de acceso directo activo para almacenar en ellos las 4 medidas del nivel de irradiancia que miden los fotodiodos sucios. De esta forma, al smbolo Lectura_Sucios se le asigna la direccin de memoria de acceso directo 38h. Media_Limpios: DS 1 Directiva de reserva de espacio de almacenamiento dentro del segmento de memoria activo. Mediante esta lnea de cdigo reservamos 1 byte dentro del segmento absoluto de acceso directo activo para almacenar en l el valor medio de las 4 primeras medidas del nivel de irradiancia que han medido los fotodiodos limpios. De esta forma, al smbolo Media_Limpios se le asigna la direccin de memoria de acceso directo 3Ch.

Media_Sucios:

DS

Directiva de reserva de espacio de almacenamiento dentro del segmento de memoria activo. Mediante esta lnea de cdigo reservamos 1 byte dentro del segmento absoluto de acceso directo activo para almacenar en l el valor medio de las medidas del nivel de irradiancia que han medido los fotodiodos sucios que no estn sombreados. De esta forma, al smbolo Media_Sucios se le asigna la direccin de memoria de acceso directo 3Dh. Diferencia_Valores_Medios: DS 1 Directiva de reserva de espacio de almacenamiento dentro del segmento de memoria activo. Mediante esta lnea de cdigo reservamos 1 byte dentro del segmento absoluto de acceso directo activo para almacenar en l la diferencia entre los valores medios de las lecturas de los fotodiodos limpios y de los fotodiodos directo 3Eh. Perdida_Potencia: DS 1 Directiva de reserva de espacio de almacenamiento dentro del segmento de memoria activo. Mediante esta lnea de cdigo reservamos 1 byte dentro del segmento absoluto de acceso directo activo para almacenar en l el valor de la prdida de potencia que ha sido estimada por nuestro equipo de medida. De esta forma, al smbolo Perdida_Potencia se le asigna la direccin de memoria de acceso directo 3Fh. ISEG AT 80h Directiva de seleccin de segmento absoluto localizado en la direccin de memoria 80h de la memoria de datos interna de acceso indirecto. En este segmento de memoria estar ubicada la pila de nuestro programa. Pila: DS 30 Directiva de reserva de espacio de almacenamiento dentro del segmento de memoria activo. Mediante esta lnea de cdigo reservamos un espacio de 30 bytes para que sean utilizados por la pila de nuestro programa. De esta forma, al smbolo Pila se le asigna la direccin de memoria de acceso indirecto 80h. CSEG AT 0 Directiva de seleccin de segmento absoluto localizado en la direccin de memoria 0 dentro de la memoria de cdigo. Mediante esta lnea de cdigo sucios no sombreados. De esta forma, al smbolo Diferencia_Valores_Medios se le asigna la direccin de memoria de acceso

establecemos que nuestro programa ser almacenado a partir de la direccin 0 de la memoria de cdigo del microcontrolador. LJMP Programa_Principal Instruccin de salto largo incondicional hasta la direccin de memoria de cdigo asociada a la etiqueta Programa_Principal. Esta instruccin es la primera en ser ejecutada tras un reseteo del microcontrolador. Consiste en un salto incondicional para evitar la zona de memoria de cdigo reservada para los vectores de direccin de las interrupciones del micro. ORG 0003h Directiva de control del estado del ensamblador que tiene como funcin alterar el contador de ubicacin para establecer un nuevo origen del programa para las instrucciones que le siguen. Mediante esta lnea de cdigo informamos al ensamblador de que las siguientes lneas de cdigo deben ser ensambladas a partir de la direccin 0003h de la memoria de cdigo. Dicha direccin de memoria es la correspondiente al vector de direccin de la interrupcin externa 0 (INT0) en nuestro microcontrolador. LJMP asociada a Subrutina_RTC la etiqueta Subrutina_RTC. Mediante esta instruccin Instruccin de salto incondicional hasta la direccin de memoria de cdigo establecemos que cuando se produzca una peticin de interrupcin de la interrupcin externa 0, el programa saltar hasta la etiqueta Subrutina_RTC donde se encuentra almacenada la rutina de servicio de interrupcin de la interrupcin externa 0. Dicha interrupcin est asociada a la seal de alarma de nuestro reloj en tiempo real. ORG 0023h Directiva de control del estado del ensamblador que tiene como funcin alterar el contador de ubicacin para establecer un nuevo origen del programa para las instrucciones que le siguen. Mediante esta lnea de cdigo informamos al ensamblador de que las siguientes lneas de cdigo deben ser ensambladas a partir de la direccin 0023h de la memoria de cdigo. Dicha direccin de memoria es la correspondiente al vector de direccin de la interrupcin del puerto serie (UART) en nuestro microcontrolador.

LJMP asociada del a

Subrutina_UART la serie etiqueta del Subrutina_UART. el programa Mediante saltar esta instruccin la etiqueta

Instruccin de salto incondicional hasta la direccin de memoria de cdigo establecemos que cuando se produzca una peticin de interrupcin por parte puerto micro, hasta Subrutina_UART donde se encuentra almacenada la rutina de servicio de interrupcin del puerto serie. ORG 0043h Directiva de control del estado del ensamblador que tiene como funcin alterar el contador de ubicacin para establecer un nuevo origen del programa para las instrucciones que le siguen. Mediante esta lnea de cdigo informamos al ensamblador de que las siguientes lneas de cdigo deben ser ensambladas a partir de la direccin 0043h de la memoria de cdigo. Dicha direccin de memoria es la correspondiente al vector de direccin de la interrupcin del convertidor analgico-digital (ADC) de nuestro microcontrolador. LJMP asociada a Subrutina_ADC la etiqueta Subrutina_ADC. Mediante esta instruccin Instruccin de salto incondicional hasta la direccin de memoria de cdigo establecemos que cuando se produzca una peticin de interrupcin por parte del ADC del micro, el programa saltar hasta la etiqueta Subrutina_ADC donde se encuentra almacenada la rutina de servicio de interrupcin del convertidor analgico-digital. Debemos configurar esta interrupcin debido a que las medidas que vamos a realizar con el ADC del micro van a ser llevadas a cabo en modo de alta precisin (10 bits), de modo que, previamente a la realizacin de la medida, el micro pasar a modo de pseudo-parada para de esta forma reducir al mximo el ruido digital. Una vez finalizada la conversin, el micro debe ser despertado por la interrupcin del ADC, ejecutndose la rutina de servicio de interrupcin correspondiente. Programa_Principal: MOV SP , #Pila-1 Una vez que hemos configurado los vectores de direccin de las interrupciones que van a ser usadas por nuestro programa, pasamos a construir el programa principal de nuestro sistema. La primera instruccin de dicho programa inicializa el puntero de pila (SP) almacenando en l la direccin de memoria 7Fh (7Fh=80h-1, siendo 80h la direccin asociada a la etiqueta Pila).

Debemos decrementar en una unidad la direccin inicial almacenada en el registro SP debido a que al meter datos en la pila se incrementa en uno dicho registro antes de escribir los datos, de forma que el primer dato almacenado sera colocado en la direccin 80h, que es la direccin de comienzo de nuestra pila. CLR ANL P4.1 P3 , #00000111b

Mediante estas dos instrucciones ponemos a cero todos los bits de puerto que controlan las entradas del driver de alimentacin del motor por pasos. Estos bits junto con la entrada del driver asociada a cada uno de ellos son los siguientes: Bit P3.7: Entrada de habilitacin 1,2EN del driver Bit P4.1: Entrada de habilitacin 3,4EN del driver Bit P3.3: Entrada de control 1A del driver Bit P3.4: Entrada de control 2A del driver Bit P3.5: Entrada de control 3A del driver Bit P3.6: Entrada de control 4A del driver

Aunque hasta que estas dos instrucciones son ejecutadas estos pines permanecen a nivel alto (debemos recordar que el valor de cada pin de puerto tras un reseteo es un nivel alto), las bobinas del motor por pasos no son excitadas debido a que la entrada de suministro del driver (Vcc2) est controlada por un rel de estado slido que a su vez es controlado por el pin P2.0 del micro. CLR P2.1 Mediante esta instruccin encendemos el diodo LED correspondiente a Problema para indicar que se ha producido un reseteo del microcontrolador. Esta indicacin luminosa tambin nos sirve para saber que el dispositivo est en funcionamiento. MOV ADCF , #0FFh Mediante esta lnea de cdigo inicializamos el registro de configuracin del ADC del micro (registro ADCF). Mediante esta instruccin establecemos que los 8 pines del puerto 1 sern usados como entradas analgicas hacia el convertidor analgico-digital del micro. Debemos recordar que a estos pines

estn conectados las salidas de los 8 circuitos de medicin de irradiancia de nuestro equipo de medida. Por otro lado, el registro de control del ADC (registro ADCON) lo dejamos con su valor de reset (X000 0000b) ya que ser configurado posteriormente cuando tengamos que realizar medidas del nivel de irradiancia. Finalmente, el registro de preescala de reloj del ADC (registro ADCLK) tambin ser dejado con su valor tras reset (XXX0 0000b), de forma que la frecuencia del reloj de este perifrico queda establecida del siguiente modo: FCLK _ ADC = MOV FXTAL 24 MHz = 128 128 SPCON , #10110100b

Mediante esta instruccin inicializamos el registro de control del mdulo interfaz de puerto serie SPI (registro SPCON). Este interfaz serie ser utilizado para llevar a cabo la comunicacin entre nuestro microcontrolador y el reloj en tiempo real. La descripcin detallada de esta configuracin inicial es la siguiente: Bits SPR2, SPR1, SPR0 (SPCON.7, SPCON.1, SPCON.0) = 100b; estos tres bits controlan la velocidad de transmisin en baudios por el bus serie SPI cuando el micro funciona en modo maestro, es decir, permiten establecer la frecuencia de la seal de reloj serie SCK de dicho interfaz. A la hora de configurar el valor de estos tres bits hemos tenido en cuenta que nuestro reloj en tiempo real soporta una frecuencia mxima de funcionamiento de 4 MHz. Por ello, con el valor que hemos asignado a estos bits la velocidad en baudios del bus SPI de nuestro micro queda del siguiente modo FSCK = FCLK _ SPI 32 FXTAL F 24 MHz = 2 = XTAL = 32 64 64

Con este valor introducimos un margen de seguridad ms que suficiente para asegurarnos de que la comunicacin entre nuestro microcontrolador y el reloj en tiempo real no va a presentar problemas por exceso de velocidad en la transmisin. Bit SPEN (SPCON.6) = 0b; este bit controla la habilitacin/deshabilitacin del interfaz serie SPI. Con este valor

inicial dejamos deshabilitado el interfaz serie SPI debido a que algunos de los bits de este registro deben ser configurados previamente a la habilitacin del interfaz. Bit SSDIS (SPCON.5) = 1b; este bit controla la habilitacin/deshabilitacin de la seal SS (pin 20 del micro) para la seleccin del SPI esclavo. Con este valor inicial deshabilitamos la seal SS tanto en modo maestro como en modo esclavo y no se genera peticin de interrupcin cuando se produce un error por fallo de modo (este fallo ocurre cuando el pin SS est en un nivel lgico inapropiado tanto en modo maestro como en modo esclavo). Bit MSTR (SPCON.4) = 1b; este bit es utilizado para configurar al interfaz SPI como un maestro o como un esclavo. Con este valor inicial configuramos al microcontrolador como un maestro. Bit CPOL (SPCON.3) = 0b; este bit establece la polaridad por defecto del reloj del interfaz serie SPI cuando ste se encuentra en modo de parada, es decir, permite configurar si la seal de reloj SCK del bus SPI permanecer en nivel bajo o alto cuando este perifrico se coloque en estado de parada. Con esta configuracin inicial establecemos que la seal SCK permanecer en nivel bajo cuando el interfaz SPI se encuentre en modo de parada. En nuestro sistema, podemos usar cualquier polaridad para la seal SCK ya que el reloj en tiempo real la determina automticamente observando el nivel de la seal SCK cuando la seal de seleccin CS pasa a nivel bajo. Bit CPHA (SPCON.2) = 1b; este bit establece la fase del reloj del interfaz serie SPI, es decir, permite configurar si el bit de transmisin es muestreado cuando la seal SCK deja el estado de parada o bien cuando dicha seal retorna al estado de parada. Con este valor inicial, junto con el valor asignado al bit CPOL, establecemos que el muestreo del bit se produzca cuando el pulso de la seal de reloj SCK retorna al estado 0. Por otra parte, el registro de control y estado del interfaz serie SPI (registro SPSCR) lo dejamos con su valor de reset (0000 0000b).

ORL

SPCON , # 01000000b

Mediante esta instruccin habilitamos el interfaz serie SPI de nuestro microcontrolador. Esta instruccin activa el bit SPEN (SPCON.6) el cual es el encargado de la habilitacin/deshabilitacin de dicho interfaz. De esta forma, a partir de este momento para llevar a cabo una comunicacin entre nuestro microcontrolador y el reloj en tiempo real slo tendr que ser activada la seal de seleccin CS de este ltimo dispositivo, la cual estar conectada al terminal P4.0 de nuestro micro. MOV SCON , #01010000b Mediante esta instruccin inicializamos el registro de control del puerto serie (registro SCON). En nuestro sistema el puerto serie ser utilizado para transmitir hacia un PC conectado a dicho puerto todas las medidas que hayan sido almacenadas en la memoria EEPROM del microcontrolador a lo largo del tiempo de funcionamiento del equipo. La descripcin detallada de esta configuracin es la siguiente: Bits SM0, SM1 (SCON.7, SCON.6) = 01b; estos dos bits nos permiten definir el modo de funcionamiento del puerto serie. Con esta configuracin inicial nuestro puerto serie operar en modo 1: Puerto serie en modo UART (comunicacin asncrona) de 8 bits con velocidad en baudios variable establecida por un temporizador del microcontrolador (en nuestro caso, la velocidad en baudios del puerto serie ser fijada por la frecuencia de desbordamiento del temporizador 1). Bit SM2 (SCON.5) = 0b; este bit se encarga de la habilitacin/deshabilitacin de la caracterstica de comunicacin entre mltiples procesadores que incorpora nuestro micro. Con este valor inicial deshabilitamos dicha caracterstica. Bit REN (SCON.4) = 1b; este bit tiene asignado la habilitacin/deshabilitacin de datos por el puerto serie. Con este valor inicial habilitamos la recepcin de datos por dicho puerto. Bit TB8 (SCON.3) = 0b; este bit es el noveno bit de transmisin en los modos 2 y 3 de funcionamiento del puerto serie. Puesto que nuestro puerto serie va a operar en modo 1, ponemos dicho bit a cero.

Bit RB8 (SCON.2) = 0b; este bit es el noveno bit recibido en los modos 2 y 3 de funcionamiento del puerto serie. Puesto que en nuestro caso el puerto serie va a operar en modo 1, ponemos este bit a cero.

Bit TI (SCON.1) = 0b; este bit es la bandera de solicitud de interrupcin por transmisin finalizada del puerto serie. Este bit es activado por el hardware del micro cuando la transmisin por el puerto serie ha finalizado. Inicialmente ponemos este bit a cero.

Bit RI (SCON.0) = 0b; este bit es la bandera de solicitud de interrupcin por recepcin finalizada del puerto serie. Este bit es activado por el hardware del micro cuando la recepcin de un dato por el puerto serie ha finalizado. Inicialmente ponemos este bit a cero.

Por otra lado, los registros SADEN (registro de mscara para direccin del esclavo) y SADDR (registro de direccin del esclavo) pertenecientes ambos al puerto serie, no sern utilizados en nuestro programa y sern dejados con sus valores por defecto. MOV PCON , #00010000b Mediante esta lnea de cdigo inicializamos el registro de control de energa de nuestro microcontrolador (registro PCON). La descripcin detallada de esta configuracin inicial es la siguiente; Bit SMOD1 (PCON.7) = 0b; este bit permite, al ser activado, duplicar la tasa de transmisin en baudios establecida para el puerto serie en los modos de funcionamiento 1, 2 y 3. El valor inicial asignado establece que la velocidad en baudios del puerto serie vendr determinada por la velocidad de desbordamiento del temporizador cdigo. Bit SMOD0 (PCON.6) = 0b; este bit permite habilitar/deshabilitar la caracterstica de deteccin de error de enmarcado en el puerto serie que incorpora nuestro microcontrolador. El valor inicial asignado a este bit deshabilita esta caracterstica y establece que el bit SCON.7 pasa a ser el bit SM0, configurado anteriormente. 1 dividida entre 32. Dicha velocidad de desbordamiento ser configurada en las siguientes lneas de

Bit POF (PCON.4) = 1b; este bit permite reconocer qu tipo de reseteo se ha producido ya que es activado por hardware cuando la tensin de alimentacin del micro pasa de 0 a su voltaje nominal. Nosotros activamos inicialmente este bit y no lo usaremos en el resto del programa.

Bits GF1, GF0 (PCON.3, PCON.2) = 00b; estos dos bits son banderas de propsito general disponibles para el usuario. Inicialmente ponemos ambos bits a cero.

Bit PD (PCON.1) = 0b; este bit permite activar/desactivar el modo de funcionamiento en baja energa de nuestro micro. Inicialmente ponemos a cero dicho bit.

Bit IDL (PCON.0) = 0b; este bit permite activar/desactivar el modo de funcionamiento en modo de parada de nuestro micro. Inicialmente ponemos a cero dicho bit.

MOV

AUXR1 , #00000000b

Mediante esta lnea de cdigo inicializamos el registro de control auxiliar de nuestro micro (registro AUXR1). La descripcin detallada de esta configuracin es la siguiente: Bit ENBOOT (AUXR1.5) = 0b; este bit permite configurar/desconfigurar la memoria Flash de arranque entre las direcciones F800h y FFFFh de la memoria de cdigo. Con este valor inicial desconfiguramos esta memoria de arranque. Bit GF3 (AUXR1.3) = 0b; este bit es una bandera de propsito general disponible para el usuario. Inicialmente ponemos a cero esta bandera. Bit DPS (AUXR1.0) = 0b; este bit permite seleccionar entre los dos punteros de datos (DPTR) que incorpora nuestro microcontrolador. Inicialmente ponemos a 0 este bit para seleccionar el primero de los dos punteros de datos disponibles en nuestro micro. MOV TMOD , #00100001b Mediante esta lnea de cdigo inicializamos el registro de control del modo de operacin para los temporizadores/contadores 0 y 1. A la hora de configurar este registro debemos tener en cuenta que en nuestro programa el temporizador 1 ser usado para generar la tasa de transmisin en baudios del

puerto serie UART. La descripcin detallada de esta configuracin inicial es la siguiente: Bit GATE1 (TMOD.7) = 0b; este bit es el bit de control de puerta del temporizador/contador 0. Con esta configuracin el funcionamiento del temporizador/contador 1 ser controlado mediante su bit de arranque parada TR1 perteneciente al registro TCON. Bit C7T1# (TMOD.6) = 0b; bit que permite seleccionar entre modo temporizador y modo contador para el temporizador/contador 1. Con esta configuracin inicial establecemos el temporizador/contador 1 en modo temporizador. Adems de ello, puesto que nuestro micro va a funcionar en modo estndar (modo STD), esta configuracin establece que: Ftemporizador1 = Freloj _ entrada _ temp1 6 FXTAL F 24 MHz = 2 = XTAL = = 2 MHz 6 12 12 1 Ftemporizador1 = 1 = 0,5s 2MHz

Periodo _ conteo _ Temp1 = -

Bits M11, M01 (TMOD.5, TMOD.4) = 10b; bits de seleccin del modo de operacin del temporizador/contador 1. Con esta configuracin inicial nuestro temporizador 1 funcionar en modo 2 (modo de autorrecarga de 8 bits). El valor de autorrecarga almacenado en el registro TH1 ser el adecuado para generar una tasa de 2400 baudios en el puerto serie.

Bit GATE0 (TMOD.3) = 0b; este bit es el bit de control de puerta del temporizador/contador 0. Al igual que en el caso anterior, con esta configuracin el funcionamiento del temporizador/contador 0 ser controlado mediante su bit de arranque/parada TR0 perteneciente al registro TCON.

Bit C/T0# (TMOD.2) = 0b; bit de seleccin entre modo temporizador y modo contador para el temporizador/contador 0. Con esta configuracin inicial establecemos el temporizador/contador 0 en modo temporizador. Adems de ello, puesto que nuestro micro va a funcionar en modo estndar (modo STD), esta configuracin establece que:

Ftemporizador 0 =

Freloj _ entrada _ temp 0 6

FXTAL F 24MHz = 2 = XTAL = = 2 MHz 6 12 12 1 Ftemporizador 0 = 1 = 0,5s 2 MHz

Periodo _ conteo _ Temp 0 = -

Bits M10, M00 (TMOD.1, TMOD.0) = 01b; bits de seleccin del modo de operacin del temporizador/contador 0. Con esta configuracin inicial nuestro temporizador 0 funcionar en modo 1 (modo temporizador de 16 bits).

MOV

TCON , #00000101b

Mediante esta lnea de cdigo inicializamos el registro de control de los temporizadores/contadores 0 y 1. Adems de ello, los cuatro bits menos significativos de este registro son usados para configurar las interrupciones externas INT0 e INT1 del micro. La descripcin detallada de esta configuracin inicial es la siguiente: Bit TF1 (TCON.7) = 0b; este bit es la bandera de desbordamiento del temporizador 1. Puesto que en nuestro programa la velocidad en baudios del puerto serie va a venir determinada por el temporizador 1, la frecuencia de activacin de este bit determinar la velocidad de transmisin de datos por dicho puerto. Inicialmente ponemos este bit a cero. Bit TR1 (TCON.6) = 0b; bit de arranque/parada del temporizador 1. Con la configuracin inicial que hemos asignado al bit GATE1 en el registro TMOD, este bit controla el encendido y el apagado del temporizador 1. Inicialmente ponemos este bit a cero hasta que terminemos de configurar dicho temporizador. Bit TF0 (TMOD.5) = 0b; este bit es la bandera de desbordamiento del temporizador/contador 0. Ponemos inicialmente este bit a cero. Bit TR0 (TMOD.4) = 0b; bit de arranque/parada del temporizador 0. Con la configuracin inicial que hemos asignado al bit GATE0 en el registro TMOD, este bit controlar el encendido y el apagado del temporizador 0. Inicialmente ponemos este bit a cero.

Bit IE1 (TMOD.3) = 0b; este bit es la bandera de interrupcin de la interrupcin externa 1 (INT1). Puesto que nuestro programa no va a hacer uso de esta interrupcin, ponemos este bit a cero.

Bit IT1 (TMOD.2) = 1b; bit de control del tipo de actividad de la interrupcin externa 1 (INT1). Con esta configuracin inicial dicha interrupcin descendente. queda configurada como activa por flanco

Bit IE0 (TMOD.1) = 0b; este bit es la bandera de interrupcin de la interrupcin externa 0 (INT0). En nuestro programa vamos a utilizar la interrupcin externa 0 (P3.2/INT0) para conectar la alarma del reloj en tiempo real. Inicialmente ponemos a cero este bit de bandera.

Bit IT0 (TMOD.0) = 1b; bit de control del tipo de actividad de la interrupcin externa 0 (INT0). Como hemos comentado, la interrupcin externa 0 ser usada en nuestro programa para recibir la seal de alarma del reloj en tiempo real. Puesto que este dispositivo pone a nivel bajo la seal en su terminal INT/SQW cuando la alarma es activada, hemos configurado la interrupcin externa 0 como activa por flanco descendente. Esta configuracin presenta la ventaja adicional de que la bandera de interrupcin asociada, IE0, es borrada automticamente por el hardware del micro cuando esta interrupcin es precesada.

MOV

TH1 , # -26

Mediante esta lnea de cdigo establecemos el valor de recarga adecuado en el temporizador 1 para generar la tasa de transmisin en baudios deseada en el puerto serie del micro. Teniendo en cuenta, por un lado, la frecuencia del oscilador que hemos utilizado en nuestro equipo (24 MHz) y, por otro, la configuracin de los bits SMOD1 (PCON.7), SM0 (SCON.7), SM1 (SCON.6), M11 (TMOD.5) y M01 (TMOD.4), para generar una tasa de transmisin por el puerto serie de 2400 baudios el valor de recarga adecuado es el indicado en la instruccin anterior. Con dicho valor, la velocidad en baudios realmente obtenida es de 2404 baudios, lo que supone un error del 0,16%.

MOV MOV

IPL0 , #00000000b IPH0, #00010000b

Mediante estas dos lneas de cdigo, y dejando los registros IPL1 (byte bajo del registro 1 de asignacin de prioridad de interrupciones) e IPH1 (byte alto del registro 1 de asignacin de prioridad de interrupciones) con sus valores por defecto tras reset (XXXX X0X0b para ambos registros), la asignacin de prioridades en nuestro programa para las interrupciones que vamos a usar queda de la siguiente forma: la interrupcin externa 0 (ITN0) queda con nivel de prioridad 0, ya que sus bits de asignacin de prioridad PX0 (IPL0.0) y PX0H (IPH0.0) quedan configurados ambos con el valor 0. la interrupcin del puerto serie UART queda con nivel de prioridad 2, ya que sus bits de asignacin de prioridad PS (IPL0.4) y PSH (IPH0.4) quedan configurados con los valores 0 y 1 respectivamente. la interrupcin del convertidor analgico digital queda tambin con nivel de prioridad 0, ya que sus bits de asignacin de prioridad PADCL (IPL1.1) y PADCH (IPH1.1) quedan configurados ambos con el valor 0. Debemos sealar en este punto que a pesar de que la interrupcin del ADC ha quedado configurada con nivel de prioridad cero, en la prctica dicha interrupcin goza de la ms alta prioridad, de forma que si se produce otra interrupcin mientras se est realizando una conversin de precisin, sta ser tratada slo despus de que dicha conversin haya finalizado. La razn por la que debemos usar la interrupcin del ADC en nuestro programa es que para poder realizar una conversin de precisin nuestro microcontrolador se coloca en un estado de pseudo-parada en el que la CPU deja de funcionar pero no as los perifricos. Con ello se pretende minimizar el ruido digital que puede afectar a la seal a medir para as asegurar una conversin de alta precisin. Sin embargo, para este modo de operacin del ADC es necesario trabajar con una interrupcin de fin de conversin, la cual es la nica manera de reactivar el micro y sacarlo de este modo de parada.

MOV MOV

IEN1 , #00000010b IEN0 , #00000001b

Mediante estas dos lneas de cdigo habilitamos dos de las tres interrupciones que vamos a usar en nuestro programa. Para ello configuramos los registros de habilitacin de interrupciones IEN0 e IEN1 del siguiente modo: Bit EADC (IEN1.1) = 1b; este bit es el bit de habilitacin particular del convertidor analgico-digital de nuestro microcontrolador. Debe ser activado para permitir que nuestro ADC funcione en modo de alta precisin. Bit EX0 (IEN0.0) = 1b; este bit es el bit de habilitacin particular de la interrupcin externa 0 (INT0). Debe ser activado para que la seal de alarma procedente de nuestro reloj en tiempo real sea detectada por el microcontrolador. Como podemos ver, todava no hemos activado el bit de habilitacin general de interrupciones EA (IEN0.7), ya que debemos configurar todava los registros de control del reloj en tiempo real. Tambin prximamente ser habilitada la interrupcin correspondiente al puerto serie. LCALL Conf_Reg_RTC Instruccin de llamada a subrutina en la que se configuran los registros de control del reloj en tiempo real. Como ya hemos comentado, la comunicacin entre el microcontrolador y el reloj en tiempo real ser llevada a cabo mediante el interfaz serie SPI incorporado en el micro. Los registros de control de dicho interfaz ya han sido configurados adecuadamente en las lneas anteriores para que la comunicacin entre ambos dispositivos no presente ningn problema. Los detalles de las acciones que lleva a cabo esta subrutina estn recogidos en la parte de cdigo que la desarrolla. Esta subrutina deja desactivadas las dos alarmas del reloj y borra las banderas de activacin de ambas alarmas. SETB TR1 Encendemos el temporizador 1 para generar la tasa de transmisin en baudios que hemos configurado para el puerto serie (2400 baudios). Para ello ponemos a 1 el bit de encendido del temporizador 1, TR1 (TCON.6).

SETB

EA

Activamos el bit de habilitacin general de interrupciones, EA (IEN0.7). De esta forma, a partir de este momento quedan habilitadas dos de las tres interrupciones que vamos a utilizar en nuestro programa: interrupcin externa 0 (INT0) e interrupcin del convertidor analgico-digital. Etiqueta77: LCALL Alarma_11_30_00 Instruccin de llamada a subrutina en la que la alarma 1 del reloj queda configurada para que se active a las 11 horas 30 minutos 0 segundos de la hora configurada en nuestro reloj. Como ya hemos comentado, nuestro reloj en tiempo real ha sido puesto en hora tomando como referencia la hora solar aproximada propia del lugar de instalacin del equipo. Por lo tanto, a las 11:30 de esta hora solar aproximada, nuestro reloj pondr a nivel bajo su pin INT/SQW lo que activar la interrupcin externa 0 de nuestro microcontrolador. La descripcin detallada de las acciones ejecutadas en esta subrutina se encuentra en la parte de cdigo que la desarrolla. Etiqueta 80: SETB ES Mediante esta lnea de cdigo habilitamos la interrupcin del puerto serie. Para ello activamos su bit de habilitacin particular (bit ES) en el registro de habilitacin de interrupciones IEN0. Etiqueta1: ORL PCON , #00000001b Mediante esta instruccin ponemos a la CPU del microcontrolador en modo de pseudo-parada mientras espera a que la saque de dicho estado una de las interrupciones que han sido habilitadas anteriormente. Para ello activamos el bit IDL (PCON.0) perteneciente al registro de control de energa. El objetivo de esta instruccin es reducir al mximo posible el consumo de energa del equipo mientras no realiza ninguna medida. En este sentido debemos tener en cuenta que la mayor parte del tiempo, la CPU de nuestro microcontrolador permanecer en estado de parada a la espera de que se produzca una de estas dos interrupciones: la interrupcin del puerto serie, la cual se producir cuando conectemos un PC a dicho puerto para que el equipo descargue todas las medidas almacenadas en su memoria EEPROM

la interrupcin externa 0, asociada a la seal de alarma del reloj en tiempo real.

Cuando se produzca una peticin de interrupcin por parte de cualquiera de estas dos interrupciones, la CPU saldr de su estado de parada para atender dicha peticin; por tanto, la ejecucin del programa saltar hasta la rutina de servicio de la interrupcin que se haya producido. Una vez atendida dicha interrupcin, la ejecucin pasar a la instruccin inmediatamente siguiente a la que puso a la CPU en modo de parada. Para poder distinguir cul de estas dos interrupciones ha sacado a la CPU de su estado de parada, hemos utilizado el bit F0 del registro Palabra de Estado del Programa (PSW). Dicho bit es un bit de bandera de propsito general disponible para aplicaciones de usuario. De esta forma, si la interrupcin que saca a la CPU del estado de parada es la interrupcin del puerto serie, la rutina de servicio asociada a dicha interrupcin no modificar la bandera de propsito general F0, dejndola con su valor inicial de 0. Sin embargo, si la interrupcin que saca a la CPU del estado de parada es la interrupcin externa 0 (INT0), la cual est asociada a la alarma del reloj en tiempo real, la rutina de servicio de dicha interrupcin contendr una instruccin que active el bit de bandera F0 en el registro PSW. JNB F0 , Etiqueta1 Esta instruccin comprueba el estado del bit de bandera de propsito general F0 perteneciente al registro PSW. Si dicho bit permanece a 0, entonces esto significa que la interrupcin que ha sacado a la CPU del estado de parada es la interrupcin del puerto serie. Por lo tanto, esta instruccin es la primera que se ejecuta una vez que se ha completado la ejecucin de la rutina de servicio de dicha interrupcin. Dicha rutina de servicio est explicada con detalle en la parte de cdigo que la desarrolla y tiene como funcin enviar por el puerto serie todas las medidas que han sido almacenadas en la memoria EEPROM de nuestro micro a lo largo del tiempo de funcionamiento del equipo. En este caso, la ejecucin saltara a la direccin de memoria asociada a la etiqueta Etiqueta1, con lo cual volveramos a colocar nuevamente a la CPU en modo de parada a la espera de que la saque de dicho estado una de las interrupciones habilitadas. CLR F0

Si por el contrario el bit de propsito general F0 en el registro PSW se encuentra a 1, esto significa que la interrupcin que ha sacado a la CPU del estado de parada ha sido la interrupcin externa 0 asociada a la seal de alarma del reloj en tiempo real. Esto significa que son las 11:30:00 hora solar aproximada. Una vez completada la ejecucin de la rutina de servicio de interrupcin correspondiente (en la cual se procede a borrar la bandera de la alarma 1 del reloj y activar el bit de propsito general F0), borramos el bit de propsito general F0 para poder utilizarlo nuevamente en prximas partes del programa. CLR ES Mediante esta instruccin deshabilitamos la interrupcin del puerto serie mientras el sistema procede a realizar la medida de la prdida de energa por suciedad. Para ello ponemos a cero el bit de habilitacin particular de dicha interrupcin (bit ES perteneciente al registro IEN0). Esta operacin tiene como objetivo impedir que las acciones que lleva a cabo la rutina de servicio de interrupcin del puerto serie afecten los registros que son utilizados en el proceso de obtencin de medida que lleva a cabo nuestro equipo. La interrupcin del puerto serie ser habilitada nuevamente una vez concluido el intento de medida. LCALL Sub_Dia_Despejado Instruccin de llamada a la subrutina en la que se comprueba, mediante las lecturas que dan los fotodiodos sucios, si el da est despejado. Como hemos comentado, en estos momentos son las 11:30:00 hora solar aproximada, por lo que el sistema pasa a realizar el primer intento de medida del porcentaje de prdidas por suciedad. Lo primero que lleva a cabo el sistema es la comprobacin de si el da est o no despejado. El objetivo de dicha comprobacin es evitar que el sistema accione el disco de proteccin para descubrir la zona de cristal limpia en presencia de lluvia, lo cual afectara el estado de limpieza de dicha zona. Esta subrutina dejar almacenado en el acumulador los siguientes valores: 00h: cuando al menos uno de los fotodiodos sucios ha detectado un nivel de irradiancia mayor o igual a 600 W/m 2, lo que implica que el da est despejado

FFh: cuando ninguno de los fotodiodos sucios ha detectado un nivel de irradiancia mayor o igual a 600 W/m 2, lo que significa que el da est nublado o, al menos, no lo suficientemente despejado.

La explicacin detallada de esta subrutina se encuentra en la parte de cdigo que la desarrolla. JNZ Nuevo_Intento1 Instruccin de salto condicional que comprueba si el contenido del acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior encargada de comprobar la existencia de riesgo de lluvia ha detectado que el nivel de irradiancia no es el suficiente para descartar dicho riesgo. Por lo tanto, la ejecucin del programa salta hasta la direccin de memoria asociada a la etiqueta Nuevo_Intento1 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 11:45:00 horas. LCALL Sub_Apertura_Disco Si la ejecucin del programa alcanza esta instruccin significa que la subrutina anterior ha comprobado que existe un nivel de irradiancia tal que podemos descartar la aparicin de la lluvia mientras realizamos nuestra medida. Por lo tanto, procedemos a llamar a la subrutina que se encarga de posicionar el disco de proteccin de nuestro equipo de forma que los cuatro fotodiodos limpios queden al descubierto. Dicha subrutina tiene como parmetro de salida el registro acumulador, dejando almacenado en l a su salida el valor: 00h: cuando ha sido posible posicionar el disco de proteccin de forma que los cuatro fotodiodos limpios queden al descubierto FFh: cuando el sistema no ha sido capaz de posicionar correctamente el disco de proteccin. La explicacin detallada de dicha subrutina se encuentra en la parte de cdigo que la desarrolla. JNZ Nuevo_Intento1 Esta instruccin establece un salto condicional en la ejecucin del programa si el contenido del acumulador es distinto de cero. En este caso, significa que la subrutina anterior ha dejado almacenado en el acumulador el valor FFh para indicar con ello que el sistema no ha podido llevar a cabo el posicionamiento del disco en la posicin correcta para la realizacin de medidas. Por lo tanto, la

ejecucin del programa salta hasta la direccin de memoria asociada a la etiqueta Nuevo_Intento1 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 11:45:00 horas. LCALL Sub_Medida

Instruccin de llamada a la subrutina en la que se llevan a cabo las medidas de irradiancia que necesita el equipo para determinar el porcentaje de prdidas energticas por suciedad. Si la ejecucin del programa alcanza esta lnea de cdigo significa que el sistema ha sido capaz de posicionar el disco de proteccin en la posicin de realizacin de medida con lo que en estos momentos dicho disco se encuentra retenido con su abertura colocada de forma centrada con el grupo de fotodiodos limpios. En esta subrutina se llevan a cabo las siguientes medidas: 1. En primer lugar se obtienen las lecturas de los 4 fotodiodos limpios, las cuales son almacenadas en su lugar correspondiente dentro de la memoria de datos interna de acceso directo/indirecto. Estas 4 posiciones de memoria comienzan en la direccin de memoria asociada a la etiqueta Lectura_Limpios1. 2. Una vez realizadas estas 4 medidas, se obtienen las lecturas de los 4 fotodiodos sucios, las cuales son almacenadas en su lugar correspondiente dentro de la memoria de datos interna de acceso directo/indirecto. Estas 4 posiciones de memoria comienzan en la direccin de memoria asociada a la etiqueta Lectura_Sucios. 3. Una vez realizadas estas 8 lecturas y tras un intervalo de espera de 2 segundos, se obtienen nuevamente las lecturas de los 4 fotodiodos limpios, las cuales son almacenadas en su lugar correspondiente dentro de la memoria de datos interna de acceso directo/indirecto. Estas 4 posiciones de memoria comienzan en la direccin de memoria asociada a la etiqueta Lectura_Limpios2. La funcin de estas segundas lecturas en los fotodiodos limpios es la de poder comprobar posteriormente la posible presencia de nubes en el momento de la medicin que haya podido alterar los resultados de las mediciones. La explicacin detallada de esta subrutina se encuentra en la parte de cdigo que la desarrolla.

LCALL

Sub_Giro_180

Instruccin de llamada a la subrutina que aplica al disco de proteccin un giro de 180 grados en el sentido de las manecillas del reloj. Una vez realizadas y almacenadas en sus lugares correspondientes las medidas que necesita nuestro equipo para determinar el porcentaje de prdidas energticas por suciedad, el sistema procede a aplicarle al disco de proteccin un giro de 180 grados para poner a cubierto los 4 fotodiodos limpios, ya que dicho disco, antes de ejecutarse esta subrutina, est fijado en su posicin de realizacin de medida. Partiendo de esta posicin inicial, este giro de 180 grados colocar a cubierto los 4 fotodiodos limpios. SETB P2.0 Mediante esta instruccin desactivamos el rel de estado slido encargado de la alimentacin del motor y de los amplificadores operacionales de los circuitos de medicin de irradiancia. CLR ANL P4.1 P3 , #00000111b

Mediante estas dos instrucciones, desactivamos todas las entradas del driver de alimentacin del motor paso a paso (terminales 1,2EN, 3,4EN, 1A, 2A, 3A y 4A). LCALL Sub_Irradiancia_Minima Instruccin de llamada a la subrutina que comprueba que todos los fotodiodos limpios han detectado un nivel de irradiancia mayor o igual a 800 W/m 2 y ninguno de ellos ha saturado el ADC. Cuando la ejecucin del programa principal llega a esta instruccin, las lecturas correspondientes a los 4 fotodiodos limpios ya han sido almacenadas en las posiciones correspondientes en la memoria de datos interna. Puesto que el algoritmo de clculo de las prdidas energticas por suciedad utilizado en nuestro equipo de medida est basado en mediciones experimentales realizadas con mdulos reales para un nivel de irradiancia incidente mayor o igual a 800 W/m 2, esta subrutina tiene como funciones las siguientes: 1. En primer lugar, comprobar que ninguna de las primeras lecturas obtenidas de los fotodiodos limpios es igual al valor FFh, ya que esto significara que el voltaje de salida del circuito de medicin de irradiancia

ha alcanzado un valor mayor que el voltaje de referencia positivo VAREF del ADC. 2. En segundo lugar, comprobar que todos los fotodiodos limpios han detectado en dichas lecturas un nivel de irradiancia mayor o igual a 800 W/m2, ya que esto valida el algoritmo de clculo utilizado en la estimacin de las prdidas energticas por suciedad. El parmetro de salida de esta subrutina ser el registro acumulador, de forma que a su salida dejar almacenado en este registro el valor constante: 00h: cuando se cumplen las dos condiciones anteriores FFh: cuando no se cumple alguna de las condiciones anteriores.

La explicacin detallada de esta subrutina se encuentra en la parte de cdigo que la desarrolla. JNZ Nuevo_Intento1 Instruccin de salto condicional que comprueba si el contenido del acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior ha comprobado que las cuatro primeras lecturas obtenidas de los fotodiodos limpios no cumplen las dos condiciones impuestas para que nuestro algoritmo de clculo de las prdidas energticas por suciedad sea aplicable. Por lo tanto, la ejecucin salta a la direccin de memoria asociada a la etiqueta Nuevo_Intento1 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 11:45:00 horas. LCALL Sub_Presencia_Nubes Llegados a este punto, tenemos almacenadas en la memoria de datos interna las 8 medidas que hemos obtenido de los fotodiodos limpios (debemos recordar que en primer lugar se obtuvieron las lecturas de los 4 fotodiodos limpios, en segundo lugar las de los 4 fotodiodos sucios, y por ltimo y tras un intervalo de espera de 2 segundos, se obtuvieron de nuevo las lecturas de los 4 fotodiodos limpios), y hemos comprobado que el primer grupo de 4 medidas verifican todas que son distintas del valor FFh y que son mayores o iguales al valor de referencia correspondiente a una irradiancia incidente de 800 W/m 2. Por lo tanto, en esta instruccin se realiza una llamada a la subrutina que comprueba si estas mediciones realizadas se han podido ver afectadas por la presencia de nubes o bruma, ya que se ha comprobado experimentalmente

que ambos fenmenos alteran el nivel de irradiancia incidente de forma significativa. Nuestro sistema basa el clculo del porcentaje de prdidas energticas por suciedad en la prdida de irradiancia que se produce por este motivo, por lo que para dar validez a nuestra medida tenemos que estar seguros de que las diferencias en los niveles de irradiancia detectados por los diferentes sensores estn causadas por la presencia de suciedad en el cristal y no por la aparicin de nubes que modifiquen el nivel de irradiancia existente entre dos medidas realizadas. Esta comprobacin est basada en la comparacin de las dos lecturas que hemos obtenido de cada uno de los fotodiodos limpios, de forma que se ha considerado que no ha habido influencia de nubes o bruma en nuestras medidas cuando se verifica que la diferencia en el nivel de irradiancia medido en ambas lecturas es menor de 50 W/m 2. Es decir, en nuestro equipo de medida se considerar que las medidas obtenidas no se han visto influenciadas por la presencia de nubes o bruma cuando la diferencia entre la irradiancia medida en cada pareja de lecturas obtenidas para cada fotodiodo limpio es menor de 50 W/m 2. Nuevamente, el parmetro de salida de esta subrutina ser el registro acumulador, de forma que a su salida dejar almacenado en dicho registro el valor constante: 00h: cuando las dos medidas de irradiancia de cada pareja de lecturas obtenidas de los fotodiodos limpios difieren en menos de 50 W/m 2, lo que significa que las medidas no se han visto afectadas por la presencia de nubes o bruma FFh: cuando no se verifica lo anterior, lo que significa que nuestras medidas han podido verse afectadas por la presencia de nubes o bruma. La explicacin detallada de esta subrutina se encuentra en la parte de cdigo que la desarrolla. JNZ Nuevo_Intento1 Instruccin de salto condicional que comprueba si el contenido del registro acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior ha comprobado que las lecturas realizadas y almacenadas en la memoria de datos interna han podido verse afectadas por la presencia de nubes o bruma durante la medicin. Por lo tanto, el sistema pasa a desechar estas lecturas y la ejecucin salta a la direccin de memoria asociada a la

etiqueta Nuevo_Intento1 a partir de la cual se configura el sistema para intentar llevar a cabo un nuevo intento de medida a las 11:45:00 horas. LCALL Sub_Sombreamientos Instruccin de llamada a la subrutina que se encarga de comprobar si existe un nmero mnimo de 2 fotodiodos sucios no sombreados. Cuando la ejecucin del programa llega a esta subrutina, las cuatro lecturas correspondientes a los fotodiodos sucios se encuentran almacenadas en su lugar correspondiente dentro de la memoria de datos interna, a partir de la direccin de memoria asociada a la etiqueta Lectura_Sucios. Como ya se ha comentado en varias ocasiones, nuestro equipo de medida determina el porcentaje de prdidas energticas por suciedad en base a las prdidas de irradiancia que se producen debido a este factor. Esta prdida en la irradiancia incidente debido a la suciedad es calculada a partir de las medidas de irradiancia obtenidas de los sensores situados tras las 2 zonas del cristal frontal de nuestro equipo. Sin embargo, a la hora de determinar la irradiancia incidente que se recibe tras la parte de cristal sucio, las medidas utilizadas slo deben estar afectadas por la capa de suciedad aproximadamente uniforme depositada sobre la superficie del cristal, y no por residuos slidos locales como pueden ser los procedentes de las aves. Por esta razn, esta subrutina trata de descartar aquellas medidas procedentes de los fotodiodos sucios que hayan podido verse afectadas por este ltimo tipo de residuos (fotodiodos sucios sombreados), ya que de otro modo, la inclusin de estas medidas en el clculo de la irradiancia incidente tras la porcin de cristal sucio reducira de forma errnea el valor obtenido para dicha variable. Adems de todo ello, en nuestro sistema de medida se ha considerado que la medida de la irradiancia incidente tras la zona de cristal sucio tendr validez nicamente cuando haya sido calculada como mnimo a partir de las medidas obtenidas de 2 de los 4 fotodiodos sucios. Por lo tanto y a modo de resumen, esta subrutina tendr como objetivo comprobar si existe un mnimo de 2 fotodiodos sucios no sombreados (es decir, no afectados por residuos slidos locales). Esta subrutina tiene como parmetros de salida los registros A y B, de forma que a su salida dejar almacenado en ellos los valores:

A=FFh, B=indiferente: cuando el sistema detecta que no hay un mnimo de 2 fotodiodos sucios no sombreados A=00h, B=n de fotodiodos no sombreados: cuando el sistema detecta que al menos existen 2 fotodiodos sucios no sombreados.

La explicacin detallada de esta subrutina se encuentra en la parte de cdigo que la desarrolla. JNZ Nuevo_Intento1

Instruccin de salto condicional que comprueba si el contenido del registro acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior ha comprobado que no existe un nmero mnimo de dos fotodiodos sucios no sombreados a partir de cuyas lecturas determinar el nivel de irradiancia incidente tras la zona de cristal sucio. Por lo tanto, el sistema pasa a desviar la ejecucin hasta la direccin de memoria asociada a la etiqueta Nuevo_Intento1 a partir de la cual se configura el sistema para intentar llevar a cabo un nuevo intento de medida a las 11:45:00 horas. LCALL Calculo_Valores_Medios Instruccin de llamada a la subrutina que lleva a cabo las siguientes acciones: 1. Calcula el valor medio de las 4 primeras lecturas que fueron obtenidas de los fotodiodos limpios y almacena el resultado obtenido en la direccin de memoria de la memoria de datos interna asociada a la etiqueta Media_Limpios 2. Calcula el valor medio de las lecturas correspondientes a aquellos fotodiodos sucios no sombreados, y almacena el resultado obtenido en la direccin de memoria de la memoria de datos interna asociada a la etiqueta Media_Sucios. La explicacin detallada de esta subrutina se encuentra en la parte de cdigo que la desarrolla. LCALL Valores_Medios_Logicos Instruccin de llamada a la subrutina que se encarga de comprobar que los valores medios obtenidos guardan cierta lgica. Cuando la ejecucin del programa principal llega hasta esta subrutina, ya han sido calculados los valores de irradiancia incidente tras las dos zonas del cristal frontal del equipo.

Por un lado, la irradiancia incidente tras la zona de cristal limpio ha sido calculada como el valor medio de las 4 primeras lecturas de irradiancia obtenidas de los 4 fotodiodos limpios, y ha sido almacenada en la direccin de la memoria de datos interna asociada a la etiqueta Media_Limpios. Por otro lado, la irradiancia incidente tras la zona de cristal sucio ha sido calculada como el valor medio de las lecturas correspondientes a aquellos fotodiodos sucios no sombreados, y ha sido almacenada en la direccin de la memoria de datos interna asociada a la etiqueta Media_Sucios. En esta subrutina comprobamos la validez de dichos resultados partiendo del hecho de que en todo momento debera verificarse que el nivel de irradiancia incidente tras la zona de cristal limpio debera ser mayor o igual que el nivel de irradiancia incidente tras la zona de cristal sucio. Por lo tanto, una primera comprobacin que realiza esta subrutina es precisamente verificar si el valor medio de las lecturas de los fotodiodos limpios es mayor o igual que el valor medio de las lecturas de los fotodiodos sucios no sombreados. Sin embargo, si el cristal frontal de nuestro equipo de medicin est completamente limpio en su totalidad, teniendo en cuenta las tolerancias de fabricacin asociadas a los diferentes componentes que forman nuestros circuitos de medicin de irradiancia, podra darse el caso de que el valor medio de las lecturas de los fotodiodos sucios (irradiancia incidente tras el cristal sucio) pudiera ser ligeramente superior al valor medio de las lecturas de los fotodiodos limpios (irradiancia incidente tras el cristal limpio). En este caso, el valor admisible para esta diferencia vendr acotado por las tolerancias de nuestros componentes, y muy especialmente de las resistencias de realimentacin de nuestros circuitos de medicin. Por lo tanto, en el caso de que el valor medio de las lecturas de los fotodiodos sucios no sombreados sea mayor que el valor medio de las lecturas de los fotodiodos limpios, el sistema dar dichas medidas como vlidas nicamente cuando la diferencia entre ambos valores se encuentre dentro del margen definido por la tolerancia de las resistencias de realimentacin de nuestros circuitos. En caso contrario, el sistema considerar que las medidas obtenidas no son lgicas por lo que proceder a desecharlas. El parmetro de salida de esta subrutina es el registro acumulador, de forma que a su salida dejar almacenado en dicho registro el valor:

00h: cuando se verifica que el valor medio de las lecturas de los fotodiodos limpios es mayor o igual que el valor medio de las lecturas de los fotodiodos sucios no sombreados

01h: cuando se verifica que el valor medio de las lecturas de los fotodiodos sucios no sombreados es mayor que el valor medio de las lecturas de los fotodiodos limpios, pero la diferencia entre ambos valores es menor que un cierto valor de referencia asociado a la tolerancia de la nuestras resistencias de realimentacin

02h: cuando se verifica que el valor medio de las lecturas de los fotodiodos sucios no sombreados es mayor que el valor medio de las lecturas de los fotodiodos limpios, y la diferencia entre estos dos valores es mayor o igual que el valor de referencia asociado a la tolerancia de las resistencias de realimentacin.

La explicacin detallada de esta subrutina se encuentra en la parte de cdigo que la desarrolla. CJNE A , #02h , Resultados_Aceptables1 Mediante esta instruccin comparamos el contenido del registro de salida de la subrutina anterior con el valor constante 02h. En el caso de que dicho contenido sea diferente a este valor, la ejecucin saltar a la direccin de memoria asociada a la etiqueta Resultados_Aceptables1. LJMP Nuevo_Intento1 Si la ejecucin llega hasta esta instruccin significa que el contenido del registro de salida de la subrutina anterior es igual a 02h, lo que implica que los valores medios obtenidos por nuestro sistema no son lgicos. En este caso, el sistema desecha las medidas realizadas y la ejecucin salta a la direccin de memoria asociada a la etiqueta Nuevo_Intento1 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 11:45:00 horas. Resultados_Aceptables1: CJNE A , #01h , Continuamos_Medida1 Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior ha verificado que los valores medios obtenidos a partir de las lecturas de los fotodiodos limpios y de los fotodiodos sucios no sombreados son lgicos teniendo en cuenta las caractersticas de nuestro equipo de medida. En esta

instruccin se compara el contenido del registro de salida de la subrutina anterior con el valor constante 01h. En el caso de que el contenido de dicho registro de salida sea diferente a este valor, la ejecucin saltar a la direccin de memoria asociada a la etiqueta Continuamos_Medida1. MOV Diferencia_Valores_Medios , #00h Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior dej almacenado en su registro de salida el valor 01h, lo que implica que el valor medio de las lecturas correspondientes a los fotodiodos limpios es menor que el valor medio de las lecturas correspondientes a los fotodiodos sucios no sombreados, pero la diferencia entre ambos valores medios puede ser achacada a la tolerancia de las resistencias de realimentacin de nuestros circuitos de medicin de irradiancia. Como se ha comentado anteriormente, en este caso el sistema considera que la totalidad del cristal frontal del equipo est limpio, por lo que las prdidas energticas por suciedad seran nulas. Consecuentemente, esta instruccin almacena en el lugar correspondiente dentro de la memoria de datos interna el valor adecuado para reflejar este resultado. LJMP Etiqueta38 Instruccin de salto incondicional hasta la direccin de memoria asociada a la etiqueta Etiqueta38. Continuamos_Medida1: MOV A , Media_Limpios Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior dej almacenado en su registro de salida el valor 00h, lo que implica que el valor medio de las lecturas correspondientes a los fotodiodos limpios es mayor o igual que el valor medio de las lecturas correspondientes a los fotodiodos sucios no sombreados. Este resultado es coherente con el principio de funcionamiento de nuestro equipo, por lo que el sistema pasar a calcular el porcentaje de prdidas energticas por suciedad basndose en estos dos valores medios. Para ello, esta primera instruccin almacena en el acumulador la medida de irradiancia incidente tras el cristal limpio (valor medio de las lecturas correspondientes a los fotodiodos limpios). CLR SUBB C A , Media_Sucios

Estas dos instrucciones llevan a cabo la resta sin acarreo de los dos valores de irradiancia tras las dos zonas del cristal frontal del equipo. Como ya se ha comentado, la medida de irradiancia tras la zona limpia del cristal ha sido calculada como el valor medio de las medidas realizadas con los fotodiodos limpios, mientras que la correspondiente a la zona sucia del cristal ha sido calculada como el valor medio de las medidas realizadas con los fotodiodos sucios no sombreados. Esta instruccin de resta deja almacenada la diferencia entre ambos valores en el registro acumulador.

MOV

Diferencia_Valores_Medios , A

Mediante esta instruccin almacenamos en la direccin de memoria asociada a la etiqueta Diferencia_Valores_Medios la diferencia entre los valores medios obtenidos anteriormente, es decir, la diferencia entre las medidas de irradiancia incidente tras las dos zonas del cristal frontal de nuestro equipo de medida. El valor almacenado en esta direccin de memoria ser el utilizado por prximas subrutinas para determinar el porcentaje de prdidas energticas por suciedad en los mdulos fotovoltaicos de nuestra instalacin. Etiqueta38: LCALL Calculo_Perdidas_Potencia Cuando la ejecucin ha llegado a esta lnea de cdigo, ya ha sido almacenado en la direccin de la memoria de datos interna asociada a la etiqueta Diferencia_Valores_Medios el valor correspondiente a la diferencia entre los niveles de irradiancia incidente tras las dos zonas del cristal frontal del equipo. Este valor ser el utilizado por la subrutina Calculo_Perdidas_Potencia para calcular el porcentaje de prdidas energticas por suciedad en nuestros mdulos fotovoltaicos. Esta subrutina dejar almacenado en la direccin de la memoria de datos interna asociada a la etiqueta Perdida_Potencia el byte que representa el porcentaje de prdida de potencia por suciedad normalizado a una irradiancia incidente de 1000 W/m 2. Dicho byte est estructurado de la siguiente forma:

La explicacin detallada de esta subrutina se encuentra en la parte de cdigo que la desarrolla. LCALL Almacenar_Medida Instruccin de llamada a la subrutina que se encarga de almacenar en la memoria EEPROM de nuestro microcontrolador los 3 bytes correspondientes a la medida realizada. El resultado de cada medida realizada por nuestro equipo estar formado por los siguientes 3 bytes, los cuales sern almacenados en la memoria EEPROM de nuestro microcontrolador en el orden siguiente: 1. En primer lugar ser almacenado el byte correspondiente al porcentaje de prdida de potencia por suciedad normalizado a una irradiancia incidente de 1000 W/m2. Debemos recordar que dicho byte fue almacenado por la subrutina anterior en la direccin de la memoria de datos interna asociada a la etiqueta Perdida_Potencia. 2. En segundo lugar ser almacenado el byte correspondiente el mes en el que se ha llevado a cabo la medida. Dicho byte se encuentra almacenado en el registro interno correspondiente del RTC. 3. En tercer lugar ser almacenado el byte correspondiente al da del mes en el que se ha realizado la medida. Como en el caso anterior, dicho byte se encuentra almacenado en el registro interno correspondiente del RTC. Con el objetivo de realizar este almacenamiento de forma progresiva en las posiciones de memoria de la EEPROM y conocer en todo momento (incluso tras un reseteo del sistema o un corte en el suministro de energa) la direccin de dicha memoria (tamao 2 bytes) en la que debe ser almacenado el siguiente resultado, sern almacenados en las direcciones 00h y 01h de la memoria SRAM del reloj en tiempo real los bytes bajo y alto respectivamente de la

direccin de la memoria EEPROM en la que debe ser almacenado el primero de los 3 bytes que forman el resultado de la ltima medida realizada. De esta forma, los resultados de las medidas realizadas se almacenarn de forma consecutiva a partir de la direccin 0000h de la memoria EEPROM de nuestro microcontrolador. Cuando un byte de resultado sea almacenado en la direccin de memoria 07FFh, el siguiente byte de resultado lo ser en la direccin 0000h (debemos recordar que la memoria EEPROM de nuestro microcontrolador tiene un tamao de 2048 bytes, con lo que sus direcciones de memoria estn contenidas entre los valores 0000h y 07FFh). La descripcin detallada de esta subrutina se encuentra en la parte de cdigo que la desarrolla. LCALL LEDs_Salida Instruccin de llamada a la subrutina que se encarga de encender el diodo LED de salida correspondiente en funcin del porcentaje de prdida de potencia por suciedad obtenido en la medida que ha realizado el sistema. Como se coment cuando describamos nuestro equipo de medida, el sistema dispone de 7 diodos LEDs visibles desde el exterior del equipo, cada uno de los cuales representa un estado diferente del sistema. Los estados del sistema asociados a cada uno de estos diodos son los siguientes: 1. LED de problema: cuando este LED se encuentra encendido significa que durante el ltimo intento de realizacin de medida llevado a cabo por el equipo, se ha presentado alguna de las circunstancias siguientes: No ha sido posible posicionar el disco de proteccin en su posicin correcta para la realizacin de la medida. Esto puede estar debido a problemas en el sistema de accionamiento del disco, motor por pasos estropeado, disco atascado, etc. No existe un mnimo de 2 fotodiodos sucios no sombreados. Esto implica que, de los 4 fotodiodos sucios de los que dispone nuestro equipo, al menos 3 de ellos estn afectados por suciedad local concentrada, como puede ser la procedente de las aves. Las medidas de irradiancia obtenidas tras las dos zonas del cristal frontal del equipo son ilgicas. Esta circunstancia se producira cuando la lectura de irradiancia correspondiente a la porcin sucia

del cristal fuese mayor que la correspondiente a la porcin limpia, y la diferencia entre ambas lecturas no pudiera ser debida a la tolerancia de los componentes que forman los circuitos de medicin de irradiancia. Esto implicara que la porcin limpia del cristal presenta mayor nivel de suciedad que la sucia. 2. LED de perdida de potencia por suciedad entre 0 y 2% : cuando este LED se encuentra encendido significa que en la ltima medida realizada por el equipo, el porcentaje de prdida de potencia por suciedad normalizado a una irradiancia incidente de 1000 W/m 2 obtenido en dicha medida se encuentra entre un 0 y un 2 por ciento. 3. LED de prdida de potencia por suciedad entre un 2 y un 4% : cuando este LED se encuentra encendido significa que en la ltima medida realizada por el equipo, el porcentaje de prdida de potencia por suciedad normalizado a una irradiancia incidente de 1000 W/m 2 obtenido en dicha medida se encuentra entre un 2 y un 4 por ciento. 4. LED de prdida de potencia por suciedad entre un 4 y un 6% : cuando este LED se encuentra encendido significa que en la ltima medida realizada por el equipo, el porcentaje de prdida de potencia por suciedad normalizado a una irradiancia incidente de 1000 W/m 2 obtenido en dicha medida se encuentra entre un 4 y un 6 por ciento. 5. LED de prdida de potencia por suciedad entre un 6 y un 8% : cuando este LED se encuentra encendido significa que en la ltima medida realizada por el equipo, el porcentaje de prdida de potencia por suciedad normalizado a una irradiancia incidente de 1000 W/m 2 obtenido en dicha medida se encuentra entre un 6 y un 8 por ciento. 6. LED de prdida de potencia por suciedad entre un 8 y un 10% : cuando este LED se encuentra encendido significa que en la ltima medida realizada por el equipo, el porcentaje de prdida de potencia por suciedad normalizado a una irradiancia incidente de 1000 W/m 2 obtenido en dicha medida se encuentra entre un 8 y un 10 por ciento. 7. LED de prdida de potencia por suciedad mayor del 10% : cuando este LED se encuentra encendido significa que en la ltima medida realizada por el equipo, el porcentaje de prdida de potencia por

suciedad normalizado a una irradiancia incidente de 1000 W/m 2 obtenido en dicha medida se encuentra por encima del 10 por ciento. Por lo tanto, a la salida de esta subrutina se encontrar encendido el diodo LED correspondiente al valor del porcentaje de prdida de potencia por suciedad normalizado a una irradiancia incidente de 1000 W/m 2 obtenido en la medida realizada por el sistema. LJMP Etiqueta80 Instruccin de salto incondicional hasta la direccin de memoria de programa asociada a la etiqueta Etiqueta80. Si la ejecucin de nuestro programa llega hasta esta instruccin significa que se han dado las circunstancias adecuadas, tanto meteorolgicas como del estado del equipo, para que el mismo lleve a cabo la medida de la prdida de energa por suciedad en su primer intento, el cual se produce a las 11:30:00 horas del RTC. Por lo tanto, esta instruccin de salto vuelve a poner al microcontrolador en estado de pseudo-parada hasta que una de las interrupciones habilitadas en nuestro programa lo saque de dicho estado. Nuevo_Intento1: LCALL Alarma_11_45_00 Si la ejecucin de nuestro programa llega hasta esta instruccin significa que nuestro equipo no ha podido llevar a cabo la medida del porcentaje de prdida de potencia por suciedad en el intento llevado a cabo a las 11:30:00 horas de nuestro reloj en tiempo real. Esto puede haber sido debido bien a que no se han dado las condiciones meteorolgicas necesarias para ello o bien por que las condiciones del equipo no lo han permitido. En cualquier caso, el sistema procede a reprogramar la alarma 1 del RTC para que se active a las 11:45:00 horas del RTC. Esta lnea de cdigo consiste en una instruccin de llamada a la subrutina que lleva a cabo dicha programacin en nuestro reloj. La explicacin detallada de esta subrutina se encuentra en la parte de cdigo que la desarrolla. SETB ES Mediante esta instruccin habilitamos nuevamente la interrupcin del puerto serie una vez que el sistema ha reconfigurado la hora de activacin de la alarma 1 del RTC. Para ello, activamos el bit de habilitacin particular de dicha interrupcin (bit ES) en el registro IEN0.

Etiqueta75:

ORL

PCON , #00000001b

Mediante esta instruccin ponemos nuevamente a la CPU del microcontrolador en modo de parada mientras espera a que la saque de dicho estado una de las interrupciones habilitadas. Para ello activamos el bit IDL (PCON.0) perteneciente al registro de control de energa. El objetivo de esta instruccin es reducir al mximo posible el consumo de energa del equipo mientras no realiza ninguna medida, ya que la mayor parte del tiempo, la CPU de nuestro microcontrolador permanecer en estado de parada a la espera de que se produzca una de estas dos interrupciones: la interrupcin del puerto serie, la cual se producir cuando conectemos un PC a dicho puerto para que el equipo descargue todas las medidas almacenadas en su memoria EEPROM la interrupcin externa 0, asociada a la seal de alarma del reloj en tiempo real. Cuando se produzca una peticin de interrupcin por parte de cualquiera de estas dos interrupciones, la CPU saldr de su estado de parada para atender dicha peticin; por tanto, la ejecucin del programa saltar hasta la rutina de servicio de la interrupcin que se haya producido. Una vez atendida dicha interrupcin, la ejecucin pasar a la instruccin inmediatamente siguiente a la que puso a la CPU en modo de parada. Como ya se ha comentado, para poder distinguir cul de estas dos interrupciones ha sacado a la CPU de su estado de parada, hemos utilizado el bit F0 del registro PSW. De esta forma, si la interrupcin que saca a la CPU del estado de parada es la interrupcin del puerto serie, la rutina de servicio asociada a dicha interrupcin no modifica la bandera de propsito general F0, dejndola con su valor inicial de 0. Sin embargo, si la interrupcin que saca a la CPU del estado de parada es la interrupcin externa 0 (INT0), la cual est asociada a la alarma del reloj en tiempo real, la rutina de servicio de dicha interrupcin contiene una instruccin que active el bit de bandera F0 en el registro PSW. JNB F0 , Etiqueta75 Esta instruccin comprueba el estado del bit de bandera de propsito general F0 perteneciente al registro PSW. Si dicho bit permanece a 0, entonces esto

significa que la interrupcin que ha sacado a la CPU del estado de parada es la interrupcin del puerto serie. Por lo tanto, esta instruccin es la primera que se ejecuta una vez que se ha completado la ejecucin de la rutina de servicio de dicha interrupcin. Dicha rutina de servicio est explicada con detalle en la parte de cdigo que la desarrolla y tiene como funcin enviar por el puerto serie todos los resultados de medidas que han sido almacenadas en la memoria EEPROM de nuestro micro a lo largo del tiempo de funcionamiento del equipo. En este caso, la ejecucin saltara a la direccin de memoria asociada a la etiqueta Etiqueta75, con lo cual volveramos a colocar nuevamente a la CPU en modo de parada a la espera de que la saque de dicho estado una de las interrupciones habilitadas. CLR F0 Si por el contrario el bit de propsito general F0 en el registro PSW se encuentra a 1, esto significa que la interrupcin que ha sacado a la CPU del estado de parada ha sido la interrupcin externa 0 asociada a la seal de alarma del reloj en tiempo real. Esto significa que son aproximadamente las 11:45 hora solar. Una vez completada la ejecucin de la rutina de servicio de interrupcin correspondiente (en la cual se procede a borrar la bandera de la alarma 1 del reloj y activar el bit de propsito general F0), borramos el bit de propsito general F0 para poder utilizarlo nuevamente en prximas partes del programa. CLR ES Al igual que ocurri en el primer intento de medida, mediante esta instruccin deshabilitamos la interrupcin del puerto serie mientras el sistema procede a realizar la medida de la prdida de energa por suciedad. LCALL Sub_Dia_Despejado Instruccin de llamada a la subrutina en la que se comprueba, mediante las lecturas que dan los fotodiodos sucios, si el da est despejado. Como hemos comentado, en estos momentos son aproximadamente las 11:45 hora solar, por lo que el sistema pasa a realizar el segundo intento de medida del porcentaje de prdidas por suciedad. Nuevamente, lo primero que lleva a cabo el sistema es la comprobacin de si el da est o no despejado. El funcionamiento de dicha subrutina ya ha sido explicado anteriormente en la primera instruccin de llamada a la misma.

JNZ

Nuevo_Intento2

Instruccin de salto condicional que comprueba si el contenido del acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior encargada de comprobar la existencia de riesgo de lluvia ha detectado que el nivel de irradiancia no es el suficiente para descartar dicho riesgo. Por lo tanto, la ejecucin del programa salta hasta la direccin de memoria asociada a la etiqueta Nuevo_Intento2 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 12:00:00 horas. LCALL Sub_Apertura_Disco Si la ejecucin del programa alcanza esta instruccin significa que la subrutina anterior ha comprobado que existe un nivel de irradiancia tal que podemos descartar la aparicin de la lluvia mientras realizamos nuestra medida. Por lo tanto, procedemos a llamar a la subrutina que se encarga de posicionar el disco de proteccin de nuestro equipo de forma que los cuatro fotodiodos limpios queden al descubierto. Al igual que en el caso anterior, el funcionamiento de esta subrutina ya ha sido descrito en la primera instruccin de llamada a la misma. JNZ Nuevo_Intento2 Esta instruccin establece un salto condicional en la ejecucin del programa si el contenido del acumulador es distinto de cero. En este caso, significa que la subrutina anterior ha dejado almacenado en el acumulador el valor FFh para indicar con ello que el sistema no ha podido llevar a cabo el posicionamiento del disco en la posicin correcta para la realizacin de medidas. Por lo tanto, la ejecucin del programa salta hasta la direccin de memoria asociada a la etiqueta Nuevo_Intento2 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 12:00:00 horas. LCALL Sub_Medida Instruccin de llamada a la subrutina en la que se llevan a cabo las medidas de irradiancia que necesita el equipo para determinar el porcentaje de prdidas energticas por suciedad. Si la ejecucin del programa alcanza esta lnea de cdigo significa que el sistema ha sido capaz de posicionar el disco de proteccin en la posicin de realizacin de medida con lo que en estos momentos dicho disco se encuentra retenido con su abertura colocada de

forma centrada con el grupo de fotodiodos limpios. El funcionamiento de esta subrutina ya ha sido descrito en la primera instruccin de llamada a la misma. LCALL Sub_Giro_180 Instruccin de llamada a la subrutina que aplica al disco de proteccin un giro de 180 grados en el sentido de las manecillas del reloj. Una vez realizadas y almacenadas en sus lugares correspondientes las medidas que necesita nuestro equipo para determinar el porcentaje de prdidas energticas por suciedad, el sistema procede a aplicarle al disco de proteccin un giro de 180 grados para poner a cubierto los 4 fotodiodos limpios, ya que dicho disco, antes de ejecutarse esta subrutina, est fijado en su posicin de realizacin de medida. Partiendo de esta posicin inicial, este giro de 180 grados colocar a cubierto los 4 fotodiodos limpios. SETB P2.0 Mediante esta instruccin desactivamos el rel de estado slido encargado de la alimentacin del motor y de los amplificadores operacionales de los circuitos de medicin de irradiancia. CLR ANL P4.1 P3 , #00000111b

Mediante estas dos instrucciones, desactivamos todas las entradas del driver de alimentacin del motor paso a paso (terminales 1,2EN, 3,4EN, 1A, 2A, 3A y 4A). LCALL Sub_Irradiancia_Minima Instruccin de llamada a la subrutina que comprueba que todos los fotodiodos limpios han detectado un nivel de irradiancia mayor o igual a 800 W/m 2 y ninguno de ellos ha saturado el ADC. El funcionamiento de esta subrutina fue descrito anteriormente en la primera instruccin de llamada a la misma. JNZ Nuevo_Intento2 Instruccin de salto condicional que comprueba si el contenido del acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior ha comprobado que las cuatro primeras lecturas obtenidas de los fotodiodos limpios no cumplen las dos condiciones impuestas para que nuestro algoritmo de clculo de las prdidas energticas por suciedad sea aplicable. Por lo tanto, la ejecucin salta a la direccin de memoria asociada a la etiqueta

Nuevo_Intento2 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 12:00:00 horas. LCALL Sub_Presencia_Nubes Instruccin de llamada a la subrutina que comprueba si las mediciones realizadas se han podido ver afectadas por la presencia de nubes o bruma. El funcionamiento de esta subrutina fue descrito en la primera instruccin de llamada a la misma. JNZ Nuevo_Intento2 Instruccin de salto condicional que comprueba si el contenido del registro acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior ha comprobado que las lecturas realizadas y almacenadas en la memoria de datos interna han podido verse afectadas por la presencia de nubes o bruma durante la medicin. Por lo tanto, el sistema pasa a desechar estas lecturas y la ejecucin salta a la direccin de memoria asociada a la etiqueta Nuevo_Intento2 a partir de la cual se configura el sistema para intentar llevar a cabo un nuevo intento de medida a las 12:00:00 horas. LCALL Sub_Sombreamientos

Instruccin de llamada a la subrutina que se encarga de comprobar si existe un nmero mnimo de 2 fotodiodos sucios no sombreados. Al igual que en los casos anteriores, el funcionamiento de esta subrutina fue descrito en la primera instruccin de llamada a la misma. JNZ Nuevo_Intento2 Instruccin de salto condicional que comprueba si el contenido del registro acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior ha comprobado que no existe un nmero mnimo de dos fotodiodos sucios no sombreados a partir de cuyas lecturas determinar el nivel de irradiancia incidente tras la zona de cristal sucio. Por lo tanto, el sistema pasa a desviar la ejecucin hasta la direccin de memoria asociada a la etiqueta Nuevo_Intento2 a partir de la cual se configura el sistema para intentar llevar a cabo un nuevo intento de medida a las 12:00:00 horas. LCALL Calculo_Valores_Medios Instruccin de llamada a la subrutina que lleva a cabo el clculo del valor medio de las lecturas de irradiancia procedentes de los dos grupos de sensores.

Nuevamente, su funcionamiento ya ha sido descrito en la primera instruccin de llamada a la misma. LCALL Valores_Medios_Logicos Instruccin de llamada a la subrutina que se encarga de comprobar que los valores medios obtenidos con coherentes con el principio de funcionamiento del equipo. El funcionamiento de esta subrutina fue descrito en la primera instruccin de llamada a la misma. CJNE A , #02h , Resultados_Aceptables2 Mediante esta instruccin comparamos el contenido del registro de salida de la subrutina anterior con el valor constante 02h. En el caso de que dicho contenido sea diferente a este valor, la ejecucin saltar a la direccin de memoria asociada a la etiqueta Resultados_Aceptables2. LJMP Nuevo_Intento2 Si la ejecucin llega hasta esta instruccin significa que el contenido del registro de salida de la subrutina anterior es igual a 02h, lo que implica que los valores medios obtenidos por nuestro sistema no son lgicos. En este caso, el sistema desecha las medidas realizadas y la ejecucin salta a la direccin de memoria asociada a la etiqueta Nuevo_Intento2 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 12:00:00 horas. Resultados_Aceptables2: CJNE A , #01h , Continuamos_Medida2 Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior ha verificado que los valores medios obtenidos a partir de las lecturas de los fotodiodos limpios y de los fotodiodos sucios no sombreados son lgicos teniendo en cuenta las caractersticas de nuestro equipo de medida. En esta instruccin se compara el contenido del registro de salida de la subrutina anterior con el valor constante 01h. En el caso de que el contenido de dicho registro de salida sea diferente a este valor, la ejecucin saltar a la direccin de memoria asociada a la etiqueta Continuamos_Medida2. MOV Diferencia_Valores_Medios , #00h Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior dej almacenado en su registro de salida el valor 01h, lo que implica que el valor medio de las lecturas correspondientes a los fotodiodos limpios es menor que el valor medio de las lecturas correspondientes a los fotodiodos sucios no

sombreados, pero la diferencia entre ambos valores medios puede ser achacada a la tolerancia de las resistencias de realimentacin de nuestros circuitos de medicin de irradiancia. Como se ha comentado anteriormente, en este caso el sistema considera que la totalidad del cristal frontal del equipo est limpio, por lo que las prdidas energticas por suciedad seran nulas. Consecuentemente, esta instruccin almacena en el lugar correspondiente dentro de la memoria de datos interna el valor adecuado para reflejar este resultado. LJMP Etiqueta76 Instruccin de salto incondicional hasta la direccin de memoria asociada a la etiqueta Etiqueta76. Continuamos_Medida2: MOV A , Media_Limpios Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior dej almacenado en su registro de salida el valor 00h, lo que implica que el valor medio de las lecturas correspondientes a los fotodiodos limpios es mayor o igual que el valor medio de las lecturas correspondientes a los fotodiodos sucios no sombreados. Este resultado es coherente con el principio de funcionamiento de nuestro equipo, por lo que el sistema pasar a calcular el porcentaje de prdidas energticas por suciedad basndose en estos dos valores medios. Para ello, esta primera instruccin almacena en el acumulador la medida de irradiancia incidente tras el cristal limpio (valor medio de las lecturas correspondientes a los fotodiodos limpios). CLR SUBB C A , Media_Sucios

Estas dos instrucciones llevan a cabo la resta sin acarreo de los dos valores de irradiancia tras las dos zonas del cristal frontal del equipo. Como ya se ha comentado, la medida de irradiancia tras la zona limpia del cristal ha sido calculada como el valor medio de las medidas realizadas con los fotodiodos limpios, mientras que la correspondiente a la zona sucia del cristal ha sido calculada como el valor medio de las medidas realizadas con los fotodiodos sucios no sombreados. Esta instruccin de resta deja almacenada la diferencia entre ambos valores en el registro acumulador. MOV Diferencia_Valores_Medios , A

Mediante esta instruccin almacenamos en la direccin de memoria asociada a la etiqueta Diferencia_Valores_Medios la diferencia entre los valores medios obtenidos anteriormente, es decir, la diferencia entre las medidas de irradiancia incidente tras las dos zonas del cristal frontal de nuestro equipo de medida. El valor almacenado en esta direccin de memoria ser el utilizado por prximas subrutinas para determinar el porcentaje de prdidas energticas por suciedad en los mdulos fotovoltaicos de nuestra instalacin. Etiqueta76: LCALL Calculo_Perdidas_Potencia Instruccin de llamada a la subrutina encargada de calcular el porcentaje de prdida de potencia por suciedad normalizado a condiciones STC a partir de la diferencia de irradiancia detectada por el equipo en sus medidas. El funcionamiento de esta subrutina fue descrito en la primera instruccin de llamada a la misma. LCALL Almacenar_Medida Instruccin de llamada a la subrutina que se encarga de almacenar en la memoria EEPROM de nuestro microcontrolador los 3 bytes correspondientes a la medida realizada. El funcionamiento de esta subrutina ya ha sido descrito anteriormente. LCALL LEDs_Salida Instruccin de llamada a la subrutina que se encarga de encender el diodo LED de salida correspondiente en funcin del porcentaje de prdida de potencia por suciedad obtenido en la medida que ha realizado el sistema. El funcionamiento de esta subrutina fue descrito en la primera instruccin de llamada a la misma. LJMP Etiqueta77 Instruccin de salto incondicional hasta la direccin de memoria de programa asociada a la etiqueta Etiqueta77. Si la ejecucin de nuestro programa llega hasta esta instruccin significa que se han dado las circunstancias adecuadas, tanto meteorolgicas como del estado del equipo, para que el mismo lleve a cabo la medida de la prdida de energa por suciedad en su segundo intento, el cual se produce a las 11:45:00 horas del RTC. Por lo tanto, esta instruccin de salto reprograma la hora de la alarma 1 a las 11:30:00 horas, habilita la interrupcin del puerto serie y vuelve a poner al microcontrolador en estado de pseudo-parada hasta que una de las interrupciones habilitadas en nuestro programa lo saque de dicho estado.

Nuevo_Intento2:

LCALL

Alarma_12_00_00

Si la ejecucin de nuestro programa llega hasta esta instruccin significa que nuestro equipo no ha podido llevar a cabo la medida del porcentaje de prdida de potencia por suciedad en el intento llevado a cabo a las 11:45:00 horas de nuestro reloj en tiempo real. Esto puede haber sido debido bien a que no se han dado las condiciones meteorolgicas necesarias para ello o bien por que las condiciones del equipo no lo han permitido. En cualquier caso, el sistema procede a reprogramar la alarma 1 del RTC para que se active a las 12:00:00 horas del RTC. Esta lnea de cdigo consiste en una instruccin de llamada a la subrutina que lleva a cabo dicha programacin en nuestro reloj. La explicacin detallada de esta subrutina se encuentra en la parte de cdigo que la desarrolla. SETB ES Mediante esta instruccin habilitamos nuevamente la interrupcin del puerto serie una vez que el sistema ha reconfigurado la hora de activacin de la alarma 1 del RTC. Para ello, activamos el bit de habilitacin particular de dicha interrupcin (bit ES) en el registro IEN0. Etiqueta78: ORL PCON , #00000001b

Mediante esta instruccin ponemos nuevamente a la CPU del microcontrolador en modo de parada mientras espera a que la saque de dicho estado una de las interrupciones habilitadas. Para ello activamos el bit IDL (PCON.0) perteneciente al registro de control de energa. El objetivo de esta instruccin es reducir al mximo posible el consumo de energa del equipo mientras no realiza ninguna medida, ya que la mayor parte del tiempo, la CPU de nuestro microcontrolador permanecer en estado de parada a la espera de que se produzca una de estas dos interrupciones: la interrupcin del puerto serie, la cual se producir cuando conectemos un PC a dicho puerto para que el equipo descargue todas las medidas almacenadas en su memoria EEPROM la interrupcin externa 0, asociada a la seal de alarma del reloj en tiempo real.

Cuando se produzca una peticin de interrupcin por parte de cualquiera de estas dos interrupciones, la CPU saldr de su estado de parada para atender dicha peticin; por tanto, la ejecucin del programa saltar hasta la rutina de servicio de la interrupcin que se haya producido. Una vez atendida dicha interrupcin, la ejecucin pasar a la instruccin inmediatamente siguiente a la que puso a la CPU en modo de parada. Como ya se ha comentado, para poder distinguir cul de estas dos interrupciones ha sacado a la CPU de su estado de parada, hemos utilizado el bit F0 del registro PSW. De esta forma, si la interrupcin que saca a la CPU del estado de parada es la interrupcin del puerto serie, la rutina de servicio asociada a dicha interrupcin no modifica la bandera de propsito general F0, dejndola con su valor inicial de 0. Sin embargo, si la interrupcin que saca a la CPU del estado de parada es la interrupcin externa 0 (INT0), la cual est asociada a la alarma del reloj en tiempo real, la rutina de servicio de dicha interrupcin contiene una instruccin que active el bit de bandera F0 en el registro PSW. JNB F0 , Etiqueta78 Esta instruccin comprueba el estado del bit de bandera de propsito general F0 perteneciente al registro PSW. Si dicho bit permanece a 0, entonces esto significa que la interrupcin que ha sacado a la CPU del estado de parada es la interrupcin del puerto serie. Por lo tanto, esta instruccin es la primera que se ejecuta una vez que se ha completado la ejecucin de la rutina de servicio de dicha interrupcin. Dicha rutina de servicio est explicada con detalle en la parte de cdigo que la desarrolla y tiene como funcin enviar por el puerto serie todos los resultados de medidas que han sido almacenadas en la memoria EEPROM de nuestro micro a lo largo del tiempo de funcionamiento del equipo. En este caso, la ejecucin saltara a la direccin de memoria asociada a la etiqueta Etiqueta78, con lo cual volveramos a colocar nuevamente a la CPU en modo de parada a la espera de que la saque de dicho estado una de las interrupciones habilitadas. CLR F0 Si por el contrario el bit de propsito general F0 en el registro PSW se encuentra a 1, esto significa que la interrupcin que ha sacado a la CPU del estado de parada ha sido la interrupcin externa 0 asociada a la seal de

alarma del reloj en tiempo real. Esto significa que son aproximadamente las 12:00 hora solar. Una vez completada la ejecucin de la rutina de servicio de interrupcin correspondiente (en la cual se procede a borrar la bandera de la alarma 1 del reloj y activar el bit de propsito general F0), borramos el bit de propsito general F0 para poder utilizarlo nuevamente en prximas partes del programa. CLR ES Mediante esta instruccin deshabilitamos la interrupcin del puerto serie mientras el sistema procede a realizar la medida de la prdida de energa por suciedad. LCALL Sub_Dia_Despejado Instruccin de llamada a la subrutina en la que se comprueba, mediante las lecturas que dan los fotodiodos sucios, si el da est despejado. JNZ Nuevo_Intento3 Instruccin de salto condicional que comprueba si el contenido del acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior encargada de comprobar la existencia de riesgo de lluvia ha detectado que el nivel de irradiancia no es el suficiente para descartar dicho riesgo. Por lo tanto, la ejecucin del programa salta hasta la direccin de memoria asociada a la etiqueta Nuevo_Intento3 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 12:15:00 horas. LCALL Sub_Apertura_Disco Instruccin de llamada a la subrutina que se encarga de posicionar el disco de proteccin de nuestro equipo de forma que los cuatro fotodiodos limpios queden al descubierto. JNZ Nuevo_Intento3 Esta instruccin establece un salto condicional en la ejecucin del programa si el contenido del acumulador es distinto de cero. En este caso, significa que la subrutina anterior ha dejado almacenado en el acumulador el valor FFh para indicar con ello que el sistema no ha podido llevar a cabo el posicionamiento del disco en la posicin correcta para la realizacin de medidas. Por lo tanto, la ejecucin del programa salta hasta la direccin de memoria asociada a la etiqueta Nuevo_Intento3 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 12:15:00 horas.

LCALL

Sub_Medida

Instruccin de llamada a la subrutina en la que se llevan a cabo las medidas de irradiancia que necesita el equipo para determinar el porcentaje de prdidas energticas por suciedad. LCALL Sub_Giro_180 Instruccin de llamada a la subrutina que aplica al disco de proteccin un giro de 180 grados en el sentido de las manecillas del reloj. SETB P2.0 Mediante esta instruccin desactivamos el rel de estado slido encargado de la alimentacin del motor y de los amplificadores operacionales de los circuitos de medicin de irradiancia. CLR ANL P4.1 P3 , #00000111b

Mediante estas dos instrucciones, desactivamos todas las entradas del driver de alimentacin del motor paso a paso (terminales 1,2EN, 3,4EN, 1A, 2A, 3A y 4A).

LCALL

Sub_Irradiancia_Minima

Instruccin de llamada a la subrutina que comprueba que todos los fotodiodos limpios han detectado un nivel de irradiancia mayor o igual a 800 W/m 2 y ninguno de ellos ha saturado el ADC. JNZ Nuevo_Intento3 Instruccin de salto condicional que comprueba si el contenido del acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior ha comprobado que las cuatro primeras lecturas obtenidas de los fotodiodos limpios no cumplen las dos condiciones impuestas para que nuestro algoritmo de clculo de las prdidas energticas por suciedad sea aplicable. Por lo tanto, la ejecucin salta a la direccin de memoria asociada a la etiqueta Nuevo_Intento3 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 12:15:00 horas. LCALL Sub_Presencia_Nubes

Instruccin de llamada a la subrutina que comprueba si las mediciones realizadas se han podido ver afectadas por la presencia de nubes o bruma. JNZ Nuevo_Intento3 Instruccin de salto condicional que comprueba si el contenido del registro acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior ha comprobado que las lecturas realizadas y almacenadas en la memoria de datos interna han podido verse afectadas por la presencia de nubes o bruma durante la medicin. Por lo tanto, el sistema pasa a desechar estas lecturas y la ejecucin salta a la direccin de memoria asociada a la etiqueta Nuevo_Intento3 a partir de la cual se configura el sistema para intentar llevar a cabo un nuevo intento de medida a las 12:15:00 horas. LCALL Sub_Sombreamientos Instruccin de llamada a la subrutina que se encarga de comprobar si existe un nmero mnimo de 2 fotodiodos sucios no sombreados. JNZ Nuevo_Intento3 Instruccin de salto condicional que comprueba si el contenido del registro acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior ha comprobado que no existe un nmero mnimo de dos fotodiodos sucios no sombreados a partir de cuyas lecturas determinar el nivel de irradiancia incidente tras la zona de cristal sucio. Por lo tanto, el sistema pasa a desviar la ejecucin hasta la direccin de memoria asociada a la etiqueta Nuevo_Intento3 a partir de la cual se configura el sistema para intentar llevar a cabo un nuevo intento de medida a las 12:15:00 horas. LCALL Calculo_Valores_Medios Instruccin de llamada a la subrutina que lleva a cabo el clculo de los valores medios de las lecturas de irradiancia de los dos grupos de sensores del equipo. LCALL Valores_Medios_Logicos Instruccin de llamada a la subrutina que se encarga de comprobar que los valores medios obtenidos son coherentes con el principio de funcionamiento del equipo. CJNE A , #02h , Resultados_Aceptables3 Mediante esta instruccin comparamos el contenido del registro de salida de la subrutina anterior con el valor constante 02h. En el caso de que dicho

contenido sea diferente a este valor, la ejecucin saltar a la direccin de memoria asociada a la etiqueta Resultados_Aceptables3. LJMP Nuevo_Intento3 Si la ejecucin llega hasta esta instruccin significa que el contenido del registro de salida de la subrutina anterior es igual a 02h, lo que implica que los valores medios obtenidos por nuestro sistema no son lgicos. En este caso, el sistema desecha las medidas realizadas y la ejecucin salta a la direccin de memoria asociada a la etiqueta Nuevo_Intento3 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 12:15:00 horas. Resultados_Aceptables3: CJNE A , #01h , Continuamos_Medida3 Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior ha verificado que los valores medios obtenidos a partir de las lecturas de los fotodiodos limpios y de los fotodiodos sucios no sombreados son lgicos teniendo en cuenta las caractersticas de nuestro equipo de medida. En esta instruccin se compara el contenido del registro de salida de la subrutina anterior con el valor constante 01h. En el caso de que el contenido de dicho registro de salida sea diferente a este valor, la ejecucin saltar a la direccin de memoria asociada a la etiqueta Continuamos_Medida3.

MOV

Diferencia_Valores_Medios , #00h

Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior dej almacenado en su registro de salida el valor 01h, lo que implica que el valor medio de las lecturas correspondientes a los fotodiodos limpios es menor que el valor medio de las lecturas correspondientes a los fotodiodos sucios no sombreados, pero la diferencia entre ambos valores medios puede ser achacada a la tolerancia de las resistencias de realimentacin de nuestros circuitos de medicin de irradiancia. Como se ha comentado anteriormente, en este caso el sistema considera que la totalidad del cristal frontal del equipo est limpio, por lo que las prdidas energticas por suciedad seran nulas. Consecuentemente, esta instruccin almacena en el lugar correspondiente dentro de la memoria de datos interna el valor adecuado para reflejar este resultado.

LJMP

Etiqueta79

Instruccin de salto incondicional hasta la direccin de memoria asociada a la etiqueta Etiqueta79. Continuamos_Medida3: MOV A , Media_Limpios Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior dej almacenado en su registro de salida el valor 00h, lo que implica que el valor medio de las lecturas correspondientes a los fotodiodos limpios es mayor o igual que el valor medio de las lecturas correspondientes a los fotodiodos sucios no sombreados. Este resultado es coherente con el principio de funcionamiento de nuestro equipo, por lo que el sistema pasar a calcular el porcentaje de prdidas energticas por suciedad basndose en estos dos valores medios. Para ello, esta primera instruccin almacena en el acumulador la medida de irradiancia incidente tras el cristal limpio (valor medio de las lecturas correspondientes a los fotodiodos limpios). CLR SUBB C A , Media_Sucios

Estas dos instrucciones llevan a cabo la resta sin acarreo de los dos valores de irradiancia tras las dos zonas del cristal frontal del equipo. Como ya se ha comentado, la medida de irradiancia tras la zona limpia del cristal ha sido calculada como el valor medio de las medidas realizadas con los fotodiodos limpios, mientras que la correspondiente a la zona sucia del cristal ha sido calculada como el valor medio de las medidas realizadas con los fotodiodos sucios no sombreados. Esta instruccin de resta deja almacenada la diferencia entre ambos valores en el registro acumulador. MOV Diferencia_Valores_Medios , A Mediante esta instruccin almacenamos en la direccin de memoria asociada a la etiqueta Diferencia_Valores_Medios la diferencia entre los valores medios obtenidos anteriormente, es decir, la diferencia entre las medidas de irradiancia incidente tras las dos zonas del cristal frontal de nuestro equipo de medida. El valor almacenado en esta direccin de memoria ser el utilizado por prximas subrutinas para determinar el porcentaje de prdidas energticas por suciedad en los mdulos fotovoltaicos de nuestra instalacin. Etiqueta79: LCALL Calculo_Perdidas_Potencia

Instruccin de llamada a la subrutina encargada de calcular la prdida de potencia por suciedad normalizada a condiciones STC a partir de la prdida de irradiancia medida por el equipo. LCALL Almacenar_Medida Instruccin de llamada a la subrutina que se encarga de almacenar en la memoria EEPROM de nuestro microcontrolador los 3 bytes correspondientes a la medida realizada. LCALL LEDs_Salida Instruccin de llamada a la subrutina que se encarga de encender el diodo LED de salida correspondiente en funcin del porcentaje de prdida de potencia por suciedad obtenido en la medida que ha realizado el sistema. LJMP Etiqueta77 Instruccin de salto incondicional hasta la direccin de memoria de programa asociada a la etiqueta Etiqueta77. Si la ejecucin de nuestro programa llega hasta esta instruccin significa que se han dado las circunstancias adecuadas, tanto meteorolgicas como del estado del equipo, para que el mismo lleve a cabo la medida de la prdida de energa por suciedad en su tercer intento, el cual se produce a las 12:00:00 horas del RTC. Por lo tanto, esta instruccin de salto reprograma la hora de la alarma 1 a las 11:30:00 horas, habilita la interrupcin del puerto serie y vuelve a poner al microcontrolador en estado de pseudo-parada hasta que una de las interrupciones habilitadas en nuestro programa lo saque de dicho estado. Nuevo_Intento3: LCALL Alarma_12_15_00 Si la ejecucin de nuestro programa llega hasta esta instruccin significa que nuestro equipo no ha podido llevar a cabo la medida del porcentaje de prdida de potencia por suciedad en el intento llevado a cabo a las 12:00:00 horas de nuestro reloj en tiempo real. Esto puede haber sido debido bien a que no se han dado las condiciones meteorolgicas necesarias para ello o bien por que las condiciones del equipo no lo han permitido. En cualquier caso, el sistema procede a reprogramar la alarma 1 del RTC para que se active a las 12:15:00 horas del RTC. Esta lnea de cdigo consiste en una instruccin de llamada a la subrutina que lleva a cabo dicha programacin en nuestro reloj. La explicacin detallada de esta subrutina se encuentra en la parte de cdigo que la desarrolla.

SETB

ES

Mediante esta instruccin habilitamos nuevamente la interrupcin del puerto serie una vez que el sistema ha reconfigurado la hora de activacin de la alarma 1 del RTC. Para ello, activamos el bit de habilitacin particular de dicha interrupcin (bit ES) en el registro IEN0. Etiqueta81: ORL PCON , #00000001b Mediante esta instruccin ponemos nuevamente a la CPU del microcontrolador en modo de parada mientras espera a que la saque de dicho estado una de las interrupciones habilitadas. Para ello activamos el bit IDL (PCON.0) perteneciente al registro de control de energa. El objetivo de esta instruccin es reducir al mximo posible el consumo de energa del equipo mientras no realiza ninguna medida, ya que la mayor parte del tiempo, la CPU de nuestro microcontrolador permanecer en estado de parada a la espera de que se produzca una de estas dos interrupciones: la interrupcin del puerto serie, la cual se producir cuando conectemos un PC a dicho puerto para que el equipo descargue todas las medidas almacenadas en su memoria EEPROM la interrupcin externa 0, asociada a la seal de alarma del reloj en tiempo real. Cuando se produzca una peticin de interrupcin por parte de cualquiera de estas dos interrupciones, la CPU saldr de su estado de parada para atender dicha peticin; por tanto, la ejecucin del programa saltar hasta la rutina de servicio de la interrupcin que se haya producido. Una vez atendida dicha interrupcin, la ejecucin pasar a la instruccin inmediatamente siguiente a la que puso a la CPU en modo de parada. Como ya se ha comentado, para poder distinguir cul de estas dos interrupciones ha sacado a la CPU de su estado de parada, hemos utilizado el bit F0 del registro PSW. De esta forma, si la interrupcin que saca a la CPU del estado de parada es la interrupcin del puerto serie, la rutina de servicio asociada a dicha interrupcin no modifica la bandera de propsito general F0, dejndola con su valor inicial de 0. Sin embargo, si la interrupcin que saca a la CPU del estado de parada es la interrupcin externa 0 (INT0), la cual est asociada a la alarma del reloj en tiempo real, la rutina de servicio de dicha

interrupcin contiene una instruccin que active el bit de bandera F0 en el registro PSW. JNB F0 , Etiqueta81 Esta instruccin comprueba el estado del bit de bandera de propsito general F0 perteneciente al registro PSW. Si dicho bit permanece a 0, entonces esto significa que la interrupcin que ha sacado a la CPU del estado de parada es la interrupcin del puerto serie. Por lo tanto, esta instruccin es la primera que se ejecuta una vez que se ha completado la ejecucin de la rutina de servicio de dicha interrupcin. Dicha rutina de servicio est explicada con detalle en la parte de cdigo que la desarrolla y tiene como funcin enviar por el puerto serie todos los resultados de medidas que han sido almacenadas en la memoria EEPROM de nuestro micro a lo largo del tiempo de funcionamiento del equipo. En este caso, la ejecucin saltara a la direccin de memoria asociada a la etiqueta Etiqueta81, con lo cual volveramos a colocar nuevamente a la CPU en modo de parada a la espera de que la saque de dicho estado una de las interrupciones habilitadas. CLR F0 Si por el contrario el bit de propsito general F0 en el registro PSW se encuentra a 1, esto significa que la interrupcin que ha sacado a la CPU del estado de parada ha sido la interrupcin externa 0 asociada a la seal de alarma del reloj en tiempo real. Esto significa que son aproximadamente las 12:15 hora solar. Una vez completada la ejecucin de la rutina de servicio de interrupcin correspondiente (en la cual se procede a borrar la bandera de la alarma 1 del reloj y activar el bit de propsito general F0), borramos el bit de propsito general F0 para poder utilizarlo nuevamente en prximas partes del programa. CLR ES Mediante esta instruccin deshabilitamos la interrupcin del puerto serie mientras el sistema procede a realizar la medida de la prdida de energa por suciedad. Para ello ponemos a cero el bit de habilitacin particular de dicha interrupcin (bit ES perteneciente al registro IEN0). Esta operacin tiene como objetivo impedir que las acciones que lleva a cabo la rutina de servicio de interrupcin del puerto serie afecten los registros que son utilizados en el proceso de obtencin de medida que lleva a cabo nuestro equipo. La

interrupcin del puerto serie ser habilitada nuevamente una vez concluido el intento de medida. LCALL Sub_Dia_Despejado Instruccin de llamada a la subrutina en la que se comprueba, mediante las lecturas que dan los fotodiodos sucios, si el da est despejado. JNZ Nuevo_Intento4 Instruccin de salto condicional que comprueba si el contenido del acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior encargada de comprobar la existencia de riesgo de lluvia ha detectado que el nivel de irradiancia no es el suficiente para descartar dicho riesgo. Por lo tanto, la ejecucin del programa salta hasta la direccin de memoria asociada a la etiqueta Nuevo_Intento4 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 12:30:00 horas. LCALL Sub_Apertura_Disco Instruccin de llamada a la subrutina que se encarga de posicionar el disco de proteccin de nuestro equipo de forma que los cuatro fotodiodos limpios queden al descubierto. JNZ Nuevo_Intento4 Esta instruccin establece un salto condicional en la ejecucin del programa si el contenido del acumulador es distinto de cero. En este caso, significa que la subrutina anterior ha dejado almacenado en el acumulador el valor FFh para indicar con ello que el sistema no ha podido llevar a cabo el posicionamiento del disco en la posicin correcta para la realizacin de medidas. Por lo tanto, la ejecucin del programa salta hasta la direccin de memoria asociada a la etiqueta Nuevo_Intento4 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 12:30:00 horas. LCALL Sub_Medida Instruccin de llamada a la subrutina en la que se llevan a cabo las medidas de irradiancia que necesita el equipo para determinar el porcentaje de prdidas energticas por suciedad. LCALL Sub_Giro_180 Instruccin de llamada a la subrutina que aplica al disco de proteccin un giro de 180 grados en el sentido de las manecillas del reloj. SETB P2.0

Mediante esta instruccin desactivamos el rel de estado slido encargado de la alimentacin del motor y de los amplificadores operacionales de los circuitos de medicin de irradiancia. CLR ANL P4.1 P3 , #00000111b

Mediante estas dos instrucciones, desactivamos todas las entradas del driver de alimentacin del motor paso a paso (terminales 1,2EN, 3,4EN, 1A, 2A, 3A y 4A). LCALL Sub_Irradiancia_Minima Instruccin de llamada a la subrutina que comprueba que todos los fotodiodos limpios han detectado un nivel de irradiancia mayor o igual a 800 W/m 2 y ninguno de ellos ha saturado el ADC. JNZ Nuevo_Intento4 Instruccin de salto condicional que comprueba si el contenido del acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior ha comprobado que las cuatro primeras lecturas obtenidas de los fotodiodos limpios no cumplen las dos condiciones impuestas para que nuestro algoritmo de clculo de las prdidas energticas por suciedad sea aplicable. Por lo tanto, la ejecucin salta a la direccin de memoria asociada a la etiqueta Nuevo_Intento4 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 12:30:00 horas.

LCALL

Sub_Presencia_Nubes

Instruccin de llamada a la subrutina que comprueba si las mediciones realizadas se han podido ver afectadas por la presencia de nubes o bruma. JNZ Nuevo_Intento4 Instruccin de salto condicional que comprueba si el contenido del registro acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior ha comprobado que las lecturas realizadas y almacenadas en la memoria de datos interna han podido verse afectadas por la presencia de nubes o bruma durante la medicin. Por lo tanto, el sistema pasa a desechar estas lecturas y la ejecucin salta a la direccin de memoria asociada a la

etiqueta Nuevo_Intento4 a partir de la cual se configura el sistema para intentar llevar a cabo un nuevo intento de medida a las 12:30:00 horas. LCALL Sub_Sombreamientos Instruccin de llamada a la subrutina que se encarga de comprobar si existe un nmero mnimo de 2 fotodiodos sucios no sombreados. JNZ Nuevo_Intento4 Instruccin de salto condicional que comprueba si el contenido del registro acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior ha comprobado que no existe un nmero mnimo de dos fotodiodos sucios no sombreados a partir de cuyas lecturas determinar el nivel de irradiancia incidente tras la zona de cristal sucio. Por lo tanto, el sistema pasa a desviar la ejecucin hasta la direccin de memoria asociada a la etiqueta Nuevo_Intento4 a partir de la cual se configura el sistema para intentar llevar a cabo un nuevo intento de medida a las 12:30:00 horas. LCALL Calculo_Valores_Medios Instruccin de llamada a la subrutina que lleva a cabo el clculo de los valores medios de las lecturas de irradiancia de los dos grupos de sensores del equipo. LCALL Valores_Medios_Logicos Instruccin de llamada a la subrutina que se encarga de comprobar que los valores medios obtenidos son coherentes con el principio de funcionamiento del equipo. CJNE A , #02h , Resultados_Aceptables4 Mediante esta instruccin comparamos el contenido del registro de salida de la subrutina anterior con el valor constante 02h. En el caso de que dicho contenido sea diferente a este valor, la ejecucin saltar a la direccin de memoria asociada a la etiqueta Resultados_Aceptables4. LJMP Nuevo_Intento4 Si la ejecucin llega hasta esta instruccin significa que el contenido del registro de salida de la subrutina anterior es igual a 02h, lo que implica que los valores medios obtenidos por nuestro sistema no son lgicos. En este caso, el sistema desecha las medidas realizadas y la ejecucin salta a la direccin de memoria asociada a la etiqueta Nuevo_Intento4 a partir de la cual se configura el sistema para llevar a cabo otro intento de medida a las 12:30:00 horas.

Resultados_Aceptables4:

CJNE

A , #01h , Continuamos_Medida4

Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior ha verificado que los valores medios obtenidos a partir de las lecturas de los fotodiodos limpios y de los fotodiodos sucios no sombreados son lgicos teniendo en cuenta las caractersticas de nuestro equipo de medida. En esta instruccin se compara el contenido del registro de salida de la subrutina anterior con el valor constante 01h. En el caso de que el contenido de dicho registro de salida sea diferente a este valor, la ejecucin saltar a la direccin de memoria asociada a la etiqueta Continuamos_Medida4. MOV Diferencia_Valores_Medios , #00h Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior dej almacenado en su registro de salida el valor 01h, lo que implica que el valor medio de las lecturas correspondientes a los fotodiodos limpios es menor que el valor medio de las lecturas correspondientes a los fotodiodos sucios no sombreados, pero la diferencia entre ambos valores medios puede ser achacada a la tolerancia de las resistencias de realimentacin de nuestros circuitos de medicin de irradiancia. Como se ha comentado anteriormente, en este caso el sistema considera que la totalidad del cristal frontal del equipo est limpio, por lo que las prdidas energticas por suciedad seran nulas. Consecuentemente, esta instruccin almacena en el lugar correspondiente dentro de la memoria de datos interna el valor adecuado para reflejar este resultado.

LJMP

Etiqueta82

Instruccin de salto incondicional hasta la direccin de memoria asociada a la etiqueta Etiqueta82. Continuamos_Medida4: MOV A , Media_Limpios Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior dej almacenado en su registro de salida el valor 00h, lo que implica que el valor medio de las lecturas correspondientes a los fotodiodos limpios es mayor o igual que el valor medio de las lecturas correspondientes a los fotodiodos sucios no sombreados. Este resultado es coherente con el principio de funcionamiento de nuestro equipo, por lo que el sistema pasar a calcular el

porcentaje de prdidas energticas por suciedad basndose en estos dos valores medios. Para ello, esta primera instruccin almacena en el acumulador la medida de irradiancia incidente tras el cristal limpio (valor medio de las lecturas correspondientes a los fotodiodos limpios). CLR SUBB C A , Media_Sucios

Estas dos instrucciones llevan a cabo la resta sin acarreo de los dos valores de irradiancia tras las dos zonas del cristal frontal del equipo. Como ya se ha comentado, la medida de irradiancia tras la zona limpia del cristal ha sido calculada como el valor medio de las medidas realizadas con los fotodiodos limpios, mientras que la correspondiente a la zona sucia del cristal ha sido calculada como el valor medio de las medidas realizadas con los fotodiodos sucios no sombreados. Esta instruccin de resta deja almacenada la diferencia entre ambos valores en el registro acumulador. MOV Diferencia_Valores_Medios , A Mediante esta instruccin almacenamos en la direccin de memoria asociada a la etiqueta Diferencia_Valores_Medios la diferencia entre los valores medios obtenidos anteriormente, es decir, la diferencia entre las medidas de irradiancia incidente tras las dos zonas del cristal frontal de nuestro equipo de medida. El valor almacenado en esta direccin de memoria ser el utilizado por prximas subrutinas para determinar el porcentaje de prdidas energticas por suciedad en los mdulos fotovoltaicos de nuestra instalacin. Etiqueta82: LCALL Calculo_Perdidas_Potencia Instruccin de llamada a la subrutina encargada de calcular el porcentaje de prdida de potencia por suciedad normalizado a condiciones STC en funcin de la prdida de irradiancia medida por el equipo. LCALL Almacenar_Medida Instruccin de llamada a la subrutina que se encarga de almacenar en la memoria EEPROM de nuestro microcontrolador los 3 bytes correspondientes a la medida realizada. LCALL LEDs_Salida Instruccin de llamada a la subrutina que se encarga de encender el diodo LED de salida correspondiente en funcin del porcentaje de prdida de potencia por suciedad obtenido en la medida que ha realizado el sistema.

LJMP

Etiqueta77

Instruccin de salto incondicional hasta la direccin de memoria de programa asociada a la etiqueta Etiqueta77. Si la ejecucin de nuestro programa llega hasta esta instruccin significa que se han dado las circunstancias adecuadas, tanto meteorolgicas como del estado del equipo, para que el mismo lleve a cabo la medida de la prdida de energa por suciedad en su cuarto intento, el cual se produce a las 12:15:00 horas del RTC. Por lo tanto, esta instruccin de salto reprograma la hora de la alarma 1 a las 11:30:00 horas, habilita la interrupcin del puerto serie y vuelve a poner al microcontrolador en estado de pseudo-parada hasta que una de las interrupciones habilitadas en nuestro programa lo saque de dicho estado. Nuevo_Intento4: LCALL Alarma_12_30_00 Si la ejecucin de nuestro programa llega hasta esta instruccin significa que nuestro equipo no ha podido llevar a cabo la medida del porcentaje de prdida de potencia por suciedad en el intento llevado a cabo a las 12:15:00 horas de nuestro reloj en tiempo real. Esto puede haber sido debido bien a que no se han dado las condiciones meteorolgicas necesarias para ello o bien por que las condiciones del equipo no lo han permitido. En cualquier caso, el sistema procede a reprogramar la alarma 1 del RTC para que se active a las 12:30:00 horas del RTC. Esta lnea de cdigo consiste en una instruccin de llamada a la subrutina que lleva a cabo dicha programacin en nuestro reloj. La explicacin detallada de esta subrutina se encuentra en la parte de cdigo que la desarrolla. SETB ES Mediante esta instruccin habilitamos nuevamente la interrupcin del puerto serie una vez que el sistema ha reconfigurado la hora de activacin de la alarma 1 del RTC. Para ello, activamos el bit de habilitacin particular de dicha interrupcin (bit ES) en el registro IEN0. Etiqueta83: ORL PCON , #00000001b Mediante esta instruccin ponemos nuevamente a la CPU del microcontrolador en modo de parada mientras espera a que la saque de dicho estado una de las interrupciones habilitadas. Para ello activamos el bit IDL (PCON.0) perteneciente al registro de control de energa. El objetivo de esta instruccin es reducir al mximo posible el consumo de energa del equipo mientras no

realiza ninguna medida, ya que la mayor parte del tiempo, la CPU de nuestro microcontrolador permanecer en estado de parada a la espera de que se produzca una de estas dos interrupciones: la interrupcin del puerto serie, la cual se producir cuando conectemos un PC a dicho puerto para que el equipo descargue todas las medidas almacenadas en su memoria EEPROM la interrupcin externa 0, asociada a la seal de alarma del reloj en tiempo real. Cuando se produzca una peticin de interrupcin por parte de cualquiera de estas dos interrupciones, la CPU saldr de su estado de parada para atender dicha peticin; por tanto, la ejecucin del programa saltar hasta la rutina de servicio de la interrupcin que se haya producido. Una vez atendida dicha interrupcin, la ejecucin pasar a la instruccin inmediatamente siguiente a la que puso a la CPU en modo de parada. Como ya se ha comentado, para poder distinguir cul de estas dos interrupciones ha sacado a la CPU de su estado de parada, hemos utilizado el bit F0 del registro PSW. De esta forma, si la interrupcin que saca a la CPU del estado de parada es la interrupcin del puerto serie, la rutina de servicio asociada a dicha interrupcin no modifica la bandera de propsito general F0, dejndola con su valor inicial de 0. Sin embargo, si la interrupcin que saca a la CPU del estado de parada es la interrupcin externa 0 (INT0), la cual est asociada a la alarma del reloj en tiempo real, la rutina de servicio de dicha interrupcin contiene una instruccin que active el bit de bandera F0 en el registro PSW. JNB F0 , Etiqueta83 Esta instruccin comprueba el estado del bit de bandera de propsito general F0 perteneciente al registro PSW. Si dicho bit permanece a 0, entonces esto significa que la interrupcin que ha sacado a la CPU del estado de parada es la interrupcin del puerto serie. Por lo tanto, esta instruccin es la primera que se ejecuta una vez que se ha completado la ejecucin de la rutina de servicio de dicha interrupcin. Dicha rutina de servicio est explicada con detalle en la parte de cdigo que la desarrolla y tiene como funcin enviar por el puerto serie todos los resultados de medidas que han sido almacenadas en la memoria

EEPROM de nuestro micro a lo largo del tiempo de funcionamiento del equipo. En este caso, la ejecucin saltara a la direccin de memoria asociada a la etiqueta Etiqueta83, con lo cual volveramos a colocar nuevamente a la CPU en modo de parada a la espera de que la saque de dicho estado una de las interrupciones habilitadas. CLR F0 Si por el contrario el bit de propsito general F0 en el registro PSW se encuentra a 1, esto significa que la interrupcin que ha sacado a la CPU del estado de parada ha sido la interrupcin externa 0 asociada a la seal de alarma del reloj en tiempo real. Esto significa que son aproximadamente las 12:30 hora solar. Una vez completada la ejecucin de la rutina de servicio de interrupcin correspondiente (en la cual se procede a borrar la bandera de la alarma 1 del reloj y activar el bit de propsito general F0), borramos el bit de propsito general F0 para poder utilizarlo nuevamente en prximas partes del programa. CLR ES Mediante esta instruccin deshabilitamos la interrupcin del puerto serie mientras el sistema procede a realizar la medida de la prdida de energa por suciedad. Para ello ponemos a cero el bit de habilitacin particular de dicha interrupcin (bit ES perteneciente al registro IEN0). Esta operacin tiene como objetivo impedir que las acciones que lleva a cabo la rutina de servicio de interrupcin del puerto serie afecten los registros que son utilizados en el proceso de obtencin de medida que lleva a cabo nuestro equipo. La interrupcin del puerto serie ser habilitada nuevamente una vez concluido el intento de medida. LCALL Sub_Dia_Despejado Instruccin de llamada a la subrutina en la que se comprueba, mediante las lecturas que dan los fotodiodos sucios, si el da est despejado. JZ LJMP Salto1 Etiqueta77

Instruccin de salto condicional que comprueba si el contenido del acumulador es igual cero. Si esto no se verifica significa que la subrutina anterior encargada de comprobar la existencia de riesgo de lluvia ha detectado que el nivel de irradiancia no es el suficiente para descartar dicho riesgo. Por lo tanto, la

ejecucin del programa salta hasta la direccin de memoria asociada a la etiqueta Etiqueta77 a partir de la cual se configura el sistema para llevar a cabo el prximo intento de medida a las 11:30:00 horas del da siguiente. Salto1: LCALL Sub_Apertura_Disco Instruccin de llamada a la subrutina que se encarga de posicionar el disco de proteccin de nuestro equipo de forma que los cuatro fotodiodos limpios queden al descubierto. JNZ Problema Esta instruccin establece un salto condicional en la ejecucin del programa si el contenido del acumulador es distinto de cero. En este caso, significa que la subrutina anterior ha dejado almacenado en el acumulador el valor FFh para indicar con ello que el sistema no ha podido llevar a cabo el posicionamiento del disco en la posicin correcta para la realizacin de medidas. Por lo tanto, la ejecucin del programa salta hasta la direccin de memoria asociada a la etiqueta Problema. LCALL Sub_Medida Instruccin de llamada a la subrutina en la que se llevan a cabo las medidas de irradiancia que necesita el equipo para determinar el porcentaje de prdidas energticas por suciedad. LCALL Sub_Giro_180 Instruccin de llamada a la subrutina que aplica al disco de proteccin un giro de 180 grados en el sentido de las manecillas del reloj. SETB P2.0

Mediante esta instruccin desactivamos el rel de estado slido encargado de la alimentacin del motor y de los amplificadores operacionales de los circuitos de medicin de irradiancia. CLR ANL P4.1 P3 , #00000111b

Mediante estas dos instrucciones, desactivamos todas las entradas del driver de alimentacin del motor paso a paso (terminales 1,2EN, 3,4EN, 1A, 2A, 3A y 4A). LCALL Sub_Irradiancia_Minima

Instruccin de llamada a la subrutina que comprueba que todos los fotodiodos limpios han detectado un nivel de irradiancia mayor o igual a 800 W/m 2 y ninguno de ellos ha saturado el ADC. JZ LJMP Salto2 Etiqueta77

Instruccin de salto condicional que comprueba si el contenido del acumulador es igual a cero. Si esto no se cumple significa que la subrutina anterior ha comprobado que las cuatro primeras lecturas obtenidas de los fotodiodos limpios no cumplen las dos condiciones impuestas para que nuestro algoritmo de clculo de las prdidas energticas por suciedad sea aplicable. Por lo tanto, la ejecucin salta a la direccin de memoria asociada a la etiqueta Etiqueta77 a partir de la cual se configura el sistema para llevar a cabo el siguiente intento de medida a las 11:30:00 horas del da siguiente. Salto2: LCALL Sub_Presencia_Nubes Instruccin de llamada a la subrutina que comprueba si las mediciones realizadas se han podido ver afectadas por la presencia de nubes o bruma. JZ LJMP Salto3 Etiqueta77

Instruccin de salto condicional que comprueba si el contenido del registro acumulador es igual a cero. Si esto no se cumple significa que la subrutina anterior ha comprobado que las lecturas realizadas y almacenadas en la memoria de datos interna han podido verse afectadas por la presencia de nubes o bruma durante la medicin. Por lo tanto, el sistema pasa a desechar estas lecturas y la ejecucin salta a la direccin de memoria asociada a la etiqueta Etiqueta77 a partir de la cual se configura el sistema para llevar a cabo el siguiente intento de medida a las 11:30:00 horas del da siguiente. Salto3: LCALL Sub_Sombreamientos Instruccin de llamada a la subrutina que se encarga de comprobar si existe un nmero mnimo de 2 fotodiodos sucios no sombreados. JNZ Problema Instruccin de salto condicional que comprueba si el contenido del registro acumulador es distinto de cero. En este caso, esto significa que la subrutina anterior ha comprobado que no existe un nmero mnimo de dos fotodiodos sucios no sombreados a partir de cuyas lecturas determinar el nivel de

irradiancia incidente tras la zona de cristal sucio. Por lo tanto, el sistema pasa a desviar la ejecucin hasta la direccin de memoria asociada a la etiqueta Problema. LCALL Calculo_Valores_Medios Instruccin de llamada a la subrutina que lleva a cabo el clculo de los valores medios de las lecturas de irradiancia de los dos grupos de sensores del equipo. LCALL Valores_Medios_Logicos Instruccin de llamada a la subrutina que se encarga de comprobar que los valores medios obtenidos son coherentes con el principio de funcionamiento de nuestro equipo. CJNE A , #02h , Resultados_Aceptables5 Mediante esta instruccin comparamos el contenido del registro de salida de la subrutina anterior con el valor constante 02h. En el caso de que dicho contenido sea diferente a este valor, la ejecucin saltar a la direccin de memoria asociada a la etiqueta Resultados_Aceptables5. LJMP Problema Si la ejecucin llega hasta esta instruccin significa que el contenido del registro de salida de la subrutina anterior es igual a 02h, lo que implica que los valores medios obtenidos por nuestro sistema no son lgicos. En este caso, el sistema desecha las medidas realizadas y la ejecucin salta a la direccin de memoria asociada a la etiqueta Problema. Resultados_Aceptables5: CJNE A , #01h , Continuamos_Medida5 Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior ha verificado que los valores medios obtenidos a partir de las lecturas de los fotodiodos limpios y de los fotodiodos sucios no sombreados son lgicos teniendo en cuenta las caractersticas de nuestro equipo de medida. En esta instruccin se compara el contenido del registro de salida de la subrutina anterior con el valor constante 01h. En el caso de que el contenido de dicho registro de salida sea diferente a este valor, la ejecucin saltar a la direccin de memoria asociada a la etiqueta Continuamos_Medida5. MOV Diferencia_Valores_Medios , #00h Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior dej almacenado en su registro de salida el valor 01h, lo que implica que el valor medio de las lecturas correspondientes a los fotodiodos limpios es menor

que el valor medio de las lecturas correspondientes a los fotodiodos sucios no sombreados, pero la diferencia entre ambos valores medios puede ser achacada a la tolerancia de las resistencias de realimentacin de nuestros circuitos de medicin de irradiancia. Como se ha comentado anteriormente, en este caso el sistema considera que la totalidad del cristal frontal del equipo est limpio, por lo que las prdidas energticas por suciedad seran nulas. Consecuentemente, esta instruccin almacena en el lugar correspondiente dentro de la memoria de datos interna el valor adecuado para reflejar este resultado. LJMP Etiqueta84 Instruccin de salto incondicional hasta la direccin de memoria asociada a la etiqueta Etiqueta82. Continuamos_Medida5: MOV A , Media_Limpios Si la ejecucin llega hasta esta instruccin significa que la subrutina anterior dej almacenado en su registro de salida el valor 00h, lo que implica que el valor medio de las lecturas correspondientes a los fotodiodos limpios es mayor o igual que el valor medio de las lecturas correspondientes a los fotodiodos sucios no sombreados. Este resultado es coherente con el principio de funcionamiento de nuestro equipo, por lo que el sistema pasar a calcular el porcentaje de prdidas energticas por suciedad basndose en estos dos valores medios. Para ello, esta primera instruccin almacena en el acumulador la medida de irradiancia incidente tras el cristal limpio (valor medio de las lecturas correspondientes a los fotodiodos limpios). CLR SUBB C A , Media_Sucios

Estas dos instrucciones llevan a cabo la resta sin acarreo de los dos valores de irradiancia tras las dos zonas del cristal frontal del equipo. Como ya se ha comentado, la medida de irradiancia tras la zona limpia del cristal ha sido calculada como el valor medio de las medidas realizadas con los fotodiodos limpios, mientras que la correspondiente a la zona sucia del cristal ha sido calculada como el valor medio de las medidas realizadas con los fotodiodos sucios no sombreados. Esta instruccin de resta deja almacenada la diferencia entre ambos valores en el registro acumulador.

MOV

Diferencia_Valores_Medios , A

Mediante esta instruccin almacenamos en la direccin de memoria asociada a la etiqueta Diferencia_Valores_Medios la diferencia entre los valores medios obtenidos anteriormente, es decir, la diferencia entre las medidas de irradiancia incidente tras las dos zonas del cristal frontal de nuestro equipo de medida. El valor almacenado en esta direccin de memoria ser el utilizado por prximas subrutinas para determinar el porcentaje de prdidas energticas por suciedad en los mdulos fotovoltaicos de nuestra instalacin. Etiqueta84: LCALL Calculo_Perdidas_Potencia Instruccin de llamada a la subrutina encargada de determinar el porcentaje de prdida de potencia por suciedad normalizado a condiciones STC a partir de la prdida de irradiancia determinada por nuestro equipo. LCALL Almacenar_Medida Instruccin de llamada a la subrutina que se encarga de almacenar en la memoria EEPROM de nuestro microcontrolador los 3 bytes correspondientes a la medida realizada. LCALL LEDs_Salida Instruccin de llamada a la subrutina que se encarga de encender el diodo LED de salida correspondiente en funcin del porcentaje de prdida de potencia por suciedad obtenido en la medida que ha realizado el sistema. LJMP Etiqueta77 Instruccin de salto incondicional hasta la direccin de memoria de programa asociada a la etiqueta Etiqueta77. Si la ejecucin de nuestro programa llega hasta esta instruccin significa que se han dado las circunstancias adecuadas, tanto meteorolgicas como del estado del equipo, para que el mismo lleve a cabo la medida de la prdida de energa por suciedad en su quinto intento, el cual se produce a las 12:30:00 horas del RTC. Por lo tanto, esta instruccin de salto reprograma la hora de la alarma 1 a las 11:30:00 horas, habilita la interrupcin del puerto serie y vuelve a poner al microcontrolador en estado de pseudo-parada hasta que una de las interrupciones habilitadas en nuestro programa lo saque de dicho estado. Problema: ORL P2 , #11111110b Si la ejecucin de nuestro programa llega hasta esta instruccin significa que en el ltimo intento de realizacin de medida llevado a cabo a las 12:30:00

horas, no ha sido posible llevarla a cabo por problemas en el equipo de medida (imposibilidad de posicionar el disco de proteccin correctamente, demasiados fotodiodos sucios sombreados, valores de irradiancia ilgicos, etc.). Por lo tanto, el sistema procede a encender el LED de Problema para indicar dicho resultado. En esta primera instruccin se lleva a cabo el apagado de todos los LEDs de salida previamente al encendido del LED de problema. CLR Problema. LJMP Etiqueta77 Instruccin de salto incondicional hasta la direccin de memoria de programa asociada a la etiqueta Etiqueta77. Esta instruccin de salto reprograma la hora de la alarma 1 a las 11:30:00 horas, habilita la interrupcin del puerto serie y vuelve a poner al microcontrolador en estado de pseudo-parada hasta que una de las interrupciones habilitadas en nuestro programa lo saque de dicho estado. P2.1 Mediante esta instruccin encendemos el LED de salida correspondiente a

También podría gustarte