Está en la página 1de 8

Problema 6.1.

Sistema de control de riego automtico


En este ejercicio se desea realizar un sistema de control de riego automtico. El sistema no se va a limitar a activar el riego en unos instantes concretos y predeterminados, sino que en funcin de la humedad de la tierra y la temperatura ambiente se determinar la cantidad de agua necesaria para el riego. El sistema est pensado para ser totalmente autnomo y funcionar sin intervencin humana salvo en el caso de emergencias. Para cubrir dichas emergencias se dispone de una lnea de aviso a una central para que se enve a un operador en el caso de un problema irresoluble. El sistema dispone de un depsito de agua principal y uno de reserva. El depsito de reserva slo entra en funcionamiento cuando hay un problema con el principal, abrindose una vlvula que deja pasar el agua desde el depsito de reserva al principal. El depsito principal dispone de una vlvula con 16 niveles de apertura (el nivel depender de la humedad de la tierra y la temperatura ambiente). Para recoger la medida de la humedad de la tierra y de la temperatura ambiente provenientes de los sensores correspondientes se dispone de un nico conversor A/D de 8 bits (ADC0804), del que se van a utilizar los 4 bits ms significativos, y de un multiplexor analgico de 8 entradas (74HC4051) con el que se va a seleccionar alternativamente el valor de temperatura o el de humedad. Vase en la Figura 1 su conexionado. As mismo, se dispone de un circuito de deteccin de sequedad que generar una alarma cuando el sistema est totalmente seco. La existencia de este circuito se debe a la urgencia de detectar la sequedad (no se puede esperar mucho a que se detecte el hecho en la siguiente lectura del dispositivo de medicin de humedad). En resumen, el sistema se basa en un ColdFire MCF5272 a 66 MHz con los elementos de la Figura 1.

EPROM 32 bits 128 KB

PA0 PA1 PA2 PA3 PB4 PA4 PA5

CONVERSOR A/D ADC0804

MUX ANALGICO Vout 74HC4051 A B C

V0

SENSOR TEMPERATURA SENSOR HUMEDAD

V1

CSROM#

SELECCIN TEMPERATURA/HUMEDAD SELECCIN VELOCIDAD REINICIO DEL OPERADOR VLVULA PRINCIPAL

RAM 32 bits 256 KB

MCF5272 66 MHz

PA6 PB0 PB1 PB2 PB3 PB5 PB6 TIN0

CSRAM#

DEPSITO PRINCIPAL

VLVULA EMERGENCIA ACTIVACIN ALARMA DETECTOR SEQUEDAD DEPSITO DE RESERVA

Figura 1. Diagrama de bloques del sistema


171
1

Funcionamiento detallado del sistema


Cada 30 minutos se obtienen los valores de humedad y temperatura. En funcin de dichos valores se calcula el grado de apertura de la vlvula de salida de agua y el tiempo que debe permanecer abierta. Para decidir el grado de apertura se utilizan 4 posibles programas de rapidez, determinndose dicho programa consultando los terminales de entrada Velocidad que configura el operador en cada caso. Para el control de la activacin cada 30 minutos se va a utilizar el temporizador 2 del ColdFire con un nivel de interrupcin 4. Para el control del tiempo que debe permanecer abierta la vlvula se va a utilizar la funcin de comparacin de salida en el temporizador 1. Se va a programar de modo que interrumpa al sistema cuando haya transcurrido el tiempo programado con un nivel de interrupcin 2. As mismo, el circuito de deteccin de sequedad estar conectado a la entrada de captura de entrada TIN0 del temporizador 0 del ColdFire de forma que se detecta mediante una interrupcin que el sistema se ha quedado totalmente seco, momento en el que se activa la vlvula de emergencia que permite el trasvase de agua desde el depsito de reserva al principal. Su nivel de interrupcin es 5. Importante: si cierto tiempo despus de activarse la vlvula de emergencia el sistema sigue estando seco, se generar una alarma que consistir en activar la salida Activa_alarma para avisar a la central de que se debe enviar un operador para reparar el sistema. Nota: todos los temporizadores utilizan como fuente de reloj el reloj del sistema dividido por 16.

Terminales de entrada/salida
De forma simplificada se considera que el sistema utiliza los siguientes terminales de entrada/salida, todos ellos activos a nivel alto (la Figura 1 muestra la conexin de estos terminales): ENTRADAS: Conversor A/D: 4 terminales en los que se le presenta al sistema el nivel de temperatura o humedad actuales. Los valores estn codificados entre 0 (mnima temperatura o humedad) y 15 (mxima temperatura o humedad). Velocidad: 2 terminales que indican la rapidez con la que debe producirse la salida del agua. Estos dos terminales codifican el ndice del programa de rapidez (hay 4 posibles programas). Reinicio del operador: un terminal utilizado por el operador para reinicializar el sistema. Detec_seco: un terminal a travs del cual el circuito de deteccin de sequedad seala a la CPU que el depsito principal est totalmente seco. Este terminal est preparado para funcionar como captura de entrada. El circuito genera una seal que se mantiene a cero mientras el sistema se mantenga hmedo, y a uno mientras est seco. SALIDAS: Apertura_vlvula: 4 terminales que indican el grado de apertura que debe tener la vlvula que deja pasar el agua al exterior para el riego (de 0 a 15). Selec_conversor: para seleccionar la entrada que debe utilizar el conversor A/D. Vlvula_emergencia: para activar la vlvula de emergencia que deja pasar el agua del depsito de reserva al principal. Activa_alarma: para activar la alarma de aviso en la central para que se mande un operador.

172
2

Listado parcial del programa


********************************************************************************* * Definicin de constantes ********************************************************************************* MBAR_MEM EQU $01000000 PACNT PADDR PADAT PADAT_L PBCNT PBDDR PBDAT PBDAT_L PIVR PITR ISR ICR1 ICR2 CSBR0 CSOR0 CSBR1 CSOR1 TMR0 TRR0 TCAP0 TCN0 TER0_L TMR1 TMR1_L TRR1 TCAP1 TCN1 TER1_L TMR2 TMR2_L TRR2 TCAP2 TCN2 TER2_L CONSULTA SIGUE_SECO EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU ORG DC.L DC.L ORG DC.L ORG DC.L ORG DC.L $80 $84 $86 $87 $88 $8C $8E $8F $3F $34 $30 $20 $24 $40 $44 $48 $4C $200 $204 $208 $20C $211 $220 $221 $224 $228 $22C $231 $240 $241 $244 $248 $24C $251 18000 6000 $0 FIN_PILA MAIN $XXXXXXXX CAP_ENTRADA $YYYYYYYY TIMER $ZZZZZZZZ TIMEOUT ; Puerto A: control ; Puerto A: direccin ; Puerto A: datos ; Puerto B: control ; Puerto B: direccin ; Puerto B: datos

********************************************************************************* * Definicin de variables ********************************************************************************* ORG $00280000 PILA DS.B Tam_pila FIN_PILA Retardo Temperat Humedad Plazo Apertura Seco Alarma_grave Datos_nuevos DS.L DS.L DS.L DS.L DS.L DS.B DS.B DS.B 1 1 1 1 1 1 1 1 ; ; ; ; ; ; Nivel de temperatura actual Nivel de humedad actual Tiempo de apertura de la vlvula Grado de apertura de la vlvula El sistema se ha secado Hay una alarma grave en el sistema

173
3

********************************************************************************* * Programa principal ********************************************************************************* ORG $400 Rapidez DC.L $3,$7,$B,$F ; Programas de rapidez MAIN MOVE.L MOVEC LEA.L MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L MOVE.L BSR BSR * Clculo de la apertura de * abierta en funcin de los PROGRAMA TST.B BNE TST.B BEQ CLR.B MBAR_MEM+$15,D0 D0,MBAR MBAR_MEM,A0 #$00000001,D0 D0,CSBR0(A0) #$FFFE0001,D0 D0,CSOR0(A0) #$________,D0 D0,CSBR1(A0) #$________,D0 D0,CSOR1(A0) SW_INI HW_INI la vlvula y del tiempo que debe permanecer valores de Humedad y Temperat. Alarma_grave OPERADOR Datos_nuevos PROGRAMA Datos_nuevos ; Inicializa CS de la RAM

* Preparacin de los datos de entrada MOVE.L Humedad,-(A7) MOVE.L Temperat,-(A7) * Lectura del programa de rapidez MOVE.B PADAT_L(A0),D2 AND.L #$30,D2 LSR.L #4,D2 MOVE.L D2,-(A7) * Llamada a la rutina que realiza los clculos PEA Plazo PEA Apertura BSR CALCULOS ADDA.L #$MM,A7 * Programacin de la comparacin de salida CLR.L D3 MOVE.W TCN1(A0),D3 ADD.L Plazo,D3 MOVE.W D3,TRR1(A0) BSET.B #4,TMR1_L(A0) * Programacin del grado de apertura MOVE.L Apertura,D0 MOVE.B D0,PBDAT_L(A0) BRA PROGRAMA ********************************************************************************* * Rutina de control de operador ********************************************************************************* OPERADOR BTST.B #6,PADAT_L(A0) BEQ OPERADOR CLR.B Alarma_grave CLR.B Seco CLR.B Datos_nuevos BSET.B #4,TMR2_L(A0) BSET.B #4,TMR1_L(A0) MOVE.L #CONSULTA,D0 MOVE.L D0,Retardo BRA PROGRAMA

; Temporizador 1

174
4

********************************************************************************* * Rutinas de inicializacin del sistema ********************************************************************************* * Inicializacin del software SW_INI CLR.B Datos_nuevos CLR.B Seco CLR.B Alarma_grave MOVE.L MOVE.L RTS #CONSULTA,D0 D0,Retardo

* Inicializacin del hardware HW_INI CLR.L PACNT(A0) CLR.L PBCNT(A0) MOVE.W #$0000,D0 MOVE.W D0,PADDR(A0) MOVE.W #$007F,D0 MOVE.W D0,PBDDR(A0) MOVE.W MOVE.W MOVE.W MOVE.W MOVE.W MOVE.W CLR.W MOVE.W MOVE.W BSR RTS #$311D,D0 D0,TMR2(A0) #$KKKK,D0 D0,TRR2(A0) #$EF05,D0 D0,TMR1(A0) TCN0(A0) #$7CC5,D0 D0,TMR0(A0) INTERR_INI

; Configuracin de puertos

; Configuracin de temporizadores

* Inicializacin de las interrupciones INTERR_INI MOVEQ.L #$60,D0 MOVE.B D0,PIVR(A0) MOVE.L #$LLLLLLLL,D0 MOVE.L D0,ICR1(A0) CLR.L MOVE.W ANDI MOVE.W RTS D0 SR,D0 #$F8FF,D0 D0,SR

; Inicializacin de PIVR ; Inicializacin de ICR1

; Habilitacin de ; interrupciones en SR

********************************************************************************* * Rutina de clculos del sistema ********************************************************************************* CALCULOS MOVEA.L offset1(A7),A2 ; Apertura MOVEA.L offset2(A7),A1 ; Plazo MOVE.L offset3(A7),D0 ; Humedad MOVE.L offset4(A7),D1 ; Temperat MOVE.L offset5(A7),D2 ; Programa CLR.L MOVE.L SUB.L LSL.L MOVE.L LSL.L ADD.L MOVE.L MOVEA.L MOVE.L MULS LSR.L MOVE.L RTS D3 #$0F,D3 D0,D3 #9,D3 D1,D4 #11,D4 D3,D4 D4,(A1) #Rapidez,A3 0(A3,D2*4),D3 D1,D3 #4,D3 D3,(A2)

175
5

********************************************************************************* * Rutinas de servicio de las interrupciones ********************************************************************************* *** Rutina de control de temporizacin - Temporizador 2 TIMER MOVE.L D0,-(A7) BSET.B #1,TER2_L(A0) MOVE.L Retardo,D0 SUBQ.L #1,D0 MOVE.L D0,Retardo BNE SALIR TST.B Seco BNE ALAR_GRAVE MOVE.L #CONSULTA,D0 MOVE.L D0,Retardo * Lectura de los valores de humedad y temperatura BCLR.B #4,PBDAT_L(A0) ; Se introduce un retardo MOVE.B PADAT_L(A0),D0 AND.L #$0F,D0 MOVE.L D0,Temperat BSET.B #4,PBDAT_L(A0) ; Se introduce un retardo MOVE.B PADAT_L(A0),D0 AND.L #$0F,D0 MOVE.L D0,Humedad MOVE.B #1,D0 MOVE.B D0,Datos_nuevos BRA SALIR * Activar la alarma grave ALAR_GRAVE MOVE.B MOVE.B BSET.B BCLR.B BCLR.B SALIR MOVE.L RTE #1,D0 D0,Alarma_grave #6,PBDAT_L(A0) #4,TMR2_L(A0) #4,TMR1_L(A0) (A7)+,D0

*** Rutina de control del timeout de la vlvula Temporizador 1 TIMEOUT MOVE.L D0,-(A7) BSET.B #1,TER1_L(A0) BCLR.B #4,TMR1_L(A0) MOVE.B PBDAT_L(A0),D0 AND.L #$F0,D0 MOVE.B D0,PBDAT_L(A0) SALIR2 MOVE.L (A7)+,D0 RTE *** Rutina de control de la captura de entrada Temporizador 0 CAP_ENTRADA MOVE.L D0,-(A7) BSET.B #0,TER0_L(A0) TST.B Seco BEQ ACTIVA_VALV CLR.B Seco BCLR #5,PBDAT_L(A0) BRA SALIR3 * Activar la vlvula de emergencia ACTIVA_VALV BSET #5,PBDAT_L(A0) MOVE.B #1,D0 MOVE.B D0,Seco MOVE.L #SIGUE_SECO,D0 MOVE.L D0,Retardo SALIR3 MOVE.L (A7)+,D0 RTE END

176
6

1. Configuracin del subsistema de memoria


1.1. Complete la siguiente tabla con el mapa de memoria que se deduce a partir de la informacin del enunciado y del listado. RANGO DE DIRECCIONES (HEX) DISPOSITIVO ASIGNADO Memoria EPROM Memoria RAM Mdulo SIM 1.2. Teniendo en cuenta el listado, las especificaciones del sistema y que la RAM necesita 2 estados de espera, configure los registros CSBR1 y CSOR1. Justifique cada uno de los campos de los registros.

2. Control de la pila
2.1. Cul debe ser el valor mnimo de la etiqueta Tam_pila? Justifique su respuesta. Se debe tener en cuenta tanto los parmetros que se guardan en la pila como las instrucciones que la utilizan. Suponga que se pueden anidar dos interrupciones en cualquier momento de la ejecucin del programa. 2.2. Qu deben valer offset1, offset2, offset3, offset4, offset5? Dibuje el contenido de la pila al comienzo de la subrutina CALCULOS incluyendo la posicin del puntero de pila si la posicin inicial de A7 en la figura es la que tiene en la etiqueta PROGRAMA.

A7 inicial 2.3. Cul debe ser el valor de $MM en la instruccin ADDA.L #$MM,A7 del programa principal? Justifique brevemente su respuesta.

3. Temporizacin e interrupciones
3.1. Determine los valores $XXXXXXXX, $YYYYYYYY y $ZZZZZZZZ para que las interrupciones del sistema funcionen correctamente. Justifique su respuesta. 3.2. Determine el valor $LLLLLLLL en la rutina INTERR_INI para que todas las interrupciones estn adecuadamente configuradas. Justifique su respuesta. 3.3. Qu valor debe tener $KKKK para que se examinen los valores de temperatura y humedad cada 30 minutos? Justifique detalladamente su respuesta.

177
7

3.4. Cundo se detecta que el depsito est totalmente seco? 3.5. Cunto tardar en activarse Alarma_grave si se detecta que el depsito est seco y no se consigue salir de dicho estado? 3.6. Cmo se detecta que despus de haber estado seco el depsito ya no lo est? 3.7. Cul es el propsito de la variable Datos_nuevos? 3.8. Complete los cambios habra que hacer en la rutina CAP_ENTRADA para saber el tiempo que ha tardado en dejar de estar seco el sistema. Se desea que dicho tiempo quede almacenado en D0 expresado en milisegundos. Suponga que no hay desbordamiento en ninguna operacin. A continuacin, justifique los clculos realizados.
CAP_ENTRADA MOVE.L BSET.B TST.B BEQ CLR.B BCLR MOVE.W MOVE.L DIVU.L BRA ACTIVA_VALV BSET CLR.W MOVE.B MOVE.B MOVE.L MOVE.L MOVE.L RTE D0,-(A7) #0,TER0_L(A0) Seco ACTIVA_VALV Seco #5,PBDAT_L(A0) ,D0 ,D1 , SALIR3 #5,PBDAT_L(A0) #1,D0 D0,Seco #SIGUE_SECO,D0 D0,Retardo (A7)+,D0

SALIR3

3.9. Por qu no hace falta hacer nada si se produce un desbordamiento del contador TCN1 utilizado para el clculo del timeout?

4. Software
4.1. Cules son las frmulas que se aplican para determinar el tiempo que est abierta la vlvula (Plazo) y el grado de apertura de la vlvula (Apertura) en funcin de las variables Humedad, y Temperat y el valor Programa ledo en PADAT[5:4]? 4.2. Si Humedad=$3, Temperat=$E, PADAT4=0 y PADAT5=1, cunto vale Plazo y cunto tiempo tardara en cerrarse la vlvula principal? 4.3. En qu estado queda el sistema despus de activarse Alarma_grave? En qu condiciones se saldr de dicho estado?

178
8

También podría gustarte