• No results found

Czajkowski’s Marriages and Return to Ukraine

KNOWNS AND UNKNOWNS

5.1. Czajkowski’s Marriages and Return to Ukraine

El uc1 es un microcontrolador PIC16F870 el mismo que se encarga de recibir la señal del sensor de caudal, que es un tren de pulsos con relación de trabajo fija pero de frecuencia variable (3 a 42 Hz), y transformarla en un dato digital que está en un rango de 20 a 255. Para ello utiliza un programa que inicialmente ejecuta una subrutina DECLARACION E INICIALIZACION DE REGISTROS, en la cual se pre asigna y se da nombres a locaciones de memoria del microcontrolador con el

objetivo de utilizarlas posteriormente en las operaciones de 16 bits (resta y división) necesarias para la conversión.

Posteriormente se tiene una subrutina CONFIGURACION DE PORTICOS en la misma que se configura al pórtico B como pórtico de salida de datos, con la finalidad de utilizarlo para enviar un dato de 8 bits, resultado de la conversión, hacia el uc2.

Luego se ejecuta una subrutina CONFIGURACION DEL MODULO CCP1 EN MODO CAPTURA Y TIMER1, mediante la cual se configura al módulo CCP que posee este microcontrolador para capturar el tiempo entre flancos ascendentes de la señal del sensor (conectada al pin RC2/CCP1). También se hace la configuración del TIMER1 como temporizador y con el preescaler más alto (8). Al final de esta subrutina, se activa el módulo CCP y se enciende el TIMER1 en el cuál se almacenará el dato capturado.

Se tiene declarado un dato llamado FLANCO. Este dato corresponde al estado del bit PIR1,2 que es la bandera que utiliza el módulo CCP para anunciar que existió un flanco ascendente en la señal y que se ha capturado un dato en los registros CCPR1H y CCPR1L. En el programa principal, y por poleo de este dato, se toman decisiones según el estado del mismo. Si FLANCO está en bajo, significa que no se ha presentado un flanco ascendente, por lo que se procede a testear el estado de un dato llamado DESBORDADO que corresponde al bit PIR1,TMR1IF. Si DESBORDADO está en alto, esto indica que el TIMER1 se ha desbordado y se ejecutan las siguientes acciones:

 Se reinicia la cuenta del TIMER1.

 Se pone en cero el bit PIR1, TMR1IF.

 Se envía al pórtico B el valor 0.

 Se regresa a testear el estado de FLANCO

Si DESBORDADO está en bajo, se regresa a testear el estado de FLANCO. Si FLANCO está en alto, se reinicia la cuenta del TIMER1 y se pone en bajo el bit

PIR1,2. Luego se ejecutan dos restas, con la ayuda de una subrutina llamada RESTA. Por medio de estas primero se compara el tiempo obtenido (Tc) con el de trabajo en el límite inferior (Ti). Si Tc es mayor que Ti, se envía un valor de 15 al pórtico B (en el cual el uc2 se basará para saber que la frecuencia medida está en un rango entre 0-4 Hz en donde el sensor no trabaja adecuadamente) y se regresa a testear el estado de FLANCO, si Tc es menor que Ti, se prosigue a la segunda resta en la que se compara el tiempo obtenido (Tc) con el de trabajo en el límite superior (Ts). Si Tc es menor que Ts, se envía un valor de 255 al pórtico B (en el cual el uc2 se basará para saber que la frecuencia medida está en su máximo valor) y se regresa a testear el estado de FLANCO, si Tc es mayor que Ts, se procede a realizar dos divisiones con la ayuda de la subrutina DIVISION. Estas divisiones ayudan a calcular un valor entre 20 y 255, que es proporcional a la frecuencia medida (entre 4 y 43 Hz) y que se envía por el pórtico B al uc2.

Los registros Tx y Ty que se mencionan en el diagrama de flujo se cargan con valores de 60000 y 13 respectivamente. Estos registros son usados en la subrutina DIVISION.

Luego de las operaciones de división, se regresa a testear el estado de FLANCO con lo que inicia de nuevo el programa.

INICIO CONFIGURACION DE PORTICOS CONFIGURACION DE MODULO CCP1 EN MODO CAPTURA Y TIMER1 DECLARACION E INICIALIZACION DE REGISTROS FLANCO=1? L DESBORDADO=1? L Enviar valor 0 al pórtico B  DESBORDADO=0  TMR1=0 L  FLANCO=0  TMR1=0

 INICIALIZAR REGISTROS PARA SUBRUTINA RESTA

 CARGAR Ti EN MINUENDO  CARGAR Tc EN SUSTRAENDO

CARRY_FINAL=1 RESTA

 INICIALIZAR REGISTROS PARA SUBRUTINA DIVISION

 CARGAR VALOR Ty EN EL DIVISOR  CARGAR Tc EN EL DIVIDENDO

DIVISION

 INICIALIZAR REGISTROS PARA SUBRUTINA DIVISION

 CARGAR VALOR Tx EN EL DIVIDENDO

 CARGAR RESULTADO_DIVISION EN EL DIVISOR DIVISION Enviar valor RESULTADO_DIVISION al pórtico B A A L Enviar valor 15 al pórtico B L  INICIALIZAR REGISTROS PARA

SUBRUTINA RESTA  CARGAR Ts EN MINUENDO  CARGAR Tc EN SUSTRAENDO CARRY_FINAL=0 RESTA B B Enviar valor 255 al pórtico B L Si No Si Si No No No Si

RESTA

REALIZAR RESTA 16 BITS ENTRE MINUENDO Y SUSTRAENDO CARGADOS OBTENER SIGNO DE LA RESTA Y CARGAR EN REGISTRO CARRY_FINAL RETORNAR DIVISION

REALIZAR DIVISION 16 BITS ENTRE DIVIDENDO Y DIVISOR CARGADOS

CARGAR RESULTADO EN REGISTRO RESULTADO_ DIVISION

RETORNAR DECLARACION E

INICIALIZACION DE VARIABLES Asignación de locaciones de memoria para los registros:  Dividendo_M  Dividendo_L  Divisor_M  Divisor_L  Minuendo_M  Minuendo_L  Sustraendo_M  Sustraendo_L  FLANCO  DESBORDADO  Contador  CARRY_FINAL  Ty, Tx, Ti, Tc, Ts  RESULTADO_DIVISION

Asignación de valores iniciales de los registros:  Contador=16  Ty=13  Tx=60000  Ti=31250  Tc=0  Ts=2907  Registros adicionales se inicializan con un valor de 0

RETORNAR CONFIGURACION DE PORTICOS  TRISB=0  PORTB=0 RETORNAR CONFIGURACION DEL MODULO CCP1 EN MODO CAPTURA Y TIMER 1  TRISC<2>=1  T1CON=49  TMR1H=0  TMR1L=0  CCP1CON=0  CCP1CON<0>=1  CCP1CON<2>=1  PIR1<0>=0  PIR1<2>=0 RETORNAR

Figura 3.36: Subrutinas adicionales