Primera versión del código de control
Aquí les dejo la primera versión del código del PIC que estoy ensayando
y deberé ajustar para funcionamiento óptimo en la plaqueta definitiva.
Para el desarrollo de la placa e instalación definitiva tardarè un tiempo, pues ahora por aquí es invierno y mantendrè la caldera funcionando y sin tocar con el hardware y código provisorio.
; MAIN BEGIN
;
;-----------------------------------------------------------------------------------------
list p=16f628 ; list directive to define processor
#include <p16f628.inc> ; processor specific variable definitions
;DEFINE OSCILADOR INTERNO DE 4 MHZ Y MCLR
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_ON & _LVP_OFF
;------------------------------------------------------------------------------
;*************** MAIN *******************************************************
;------------------------------------------------------------------------------
;Definicion de las puertas:
; ;
LRA0 EQU 0X00 ;Led ROJO activo BAJO
RRA1 EQU 0X01 ;Led indicador en plaqueta ROJO activo BAJO
LLA2 EQU 0X02 ;Activaciòn RL1 LLAVE HONEYWEEL activo ALTO
EEA3 EQU 0X03 ;Activación RL2 ENCENDIDO ELECTRONICO activo ALTO
XXA4 EQU 0X04 ;XX
XXA5 EQU 0X05 ;Reset/Pgrm
LVA6 EQU 0X06 ;Led VERDE activo BAJO
LAA7 EQU 0X07 ;Led AZUL activo BAJO
GGB0 EQU 0X00 ;Entrada SENSOR GAS . activa BAJA
L1B1 EQU 0X01 ;Entrada detector de llama LL1. activa BAJA
L2B2 EQU 0X02 ;Entrada detector de llama LL2, activa BAJA
TTB3 EQU 0X03 ;Entrada Temperatura deseada S1 activado, activa ALTA
XXB4 EQU 0X04 ;XX
XXB5 EQU 0X05 ;XX
XXB6 EQU 0X06 ;PGD
XXB7 EQU 0X07 ;PGC
;Contadores usados para retardos
COUNT0 EQU 0X70 ;Contadores
COUNT1 EQU 0X71 ;para
COUNT2 EQU 0X72 ;retardo
ENCONN EQU 0X73 ;Timer de espera de encendido Quemador
;-------------------------------------------------------------------------------
ORG 0x0000 ; processor reset vector
goto main ; go to beginning of program
main ;
clrf INTCON ; deshabilita interrupciones, apaga flags
;
bsf STATUS,RP0 ;banco 1
movlw 0x00 ;byte de config
;;; movwf OPTION_REG
bcf STATUS,RP0 ;banco 0
;--------------------------------------------------------------------------
bcf STATUS,RP1 ;apuntar al banco 0
bcf STATUS,RP0
;inicializar salidas antes de cambiar banco (todas a uno)
movlw b'11111111' ; b'00000000' ;
movwf PORTA ;
movwf PORTB ;
movlw 0x07 ;turn off comparators and enable pins for I/O functions
movwf CMCON
bcf STATUS,RP1 ; apuntar al banco 1
bsf STATUS,RP0 ; donde esta los TRISA Y TRISB
;
movlw 0X00 ; A7 A6 A5 A4 A3 A2 A1 A0
movwf TRISA ; -- -- -- -- -- -- -- -- 0 indica buffer de salida conectado
; 0 0 0 0 0 0 0 0 1 indica buffer de salida desconectado
; pero la entrada siempre esta y es impuesta por el
; nivel en el pin correspondiente
movlw 0x0F ;0XC0 ; B7 B6 B5 B4 B3 B2 B1 B0
movwf TRISB ; -- -- -- -- -- -- -- -- las patas que no uso las pongo salidas para que no bailen
; 0 0 0 0 1 1 1 1 ;
; 0 0 0 0 0 0 0 0 ;TODAS salidas
;
;;; bcf OPTION_REG, RBPU ;Activar el Pull-Up del port B
bcf STATUS,RP1 ; apuntar al banco 0
bcf STATUS,RP0 ; donde estaN los PORTA Y PORTB
;las salidas quedan todas en UNO
main0 ;main continua
;acerar contadores
clrf COUNT0
clrf COUNT1
clrf COUNT2
clrf PORTA ;notar el pequeño parpadeo desde el reset en los leds RGB
clrf PORTB
;Apagar Leds
;-------------------------------------------------------------------------------
;-------------------------------
init
;apagar todo
call apa_all
; secuencia de colores de encendido ROJO, VERDE Y AZUL
call ret02
bcf PORTA,RRA1 ;encender Led ROJO plaqueta
bcf PORTA,LAA7 ;encender led AZUL
call ret02 ;mandar un retardo
call apa_all
bcf PORTA,RRA1 ;encender Led ROJO plaqueta
bcf PORTA,LVA6 ;encender led VERDE
call ret02 ;mandar un retardo
call apa_all
bcf PORTA,RRA1 ;encender Led ROJO plaqueta
bcf PORTA,LRA0 ;encender led ROJO
call ret02 ;mandar un retardo
call apa_all
call ret02
laz_rep ;lazo en reposo
;1) Lazo de monitoria en reposo LUZ AZUL DE FRIO
; El quemador esta apagado, no hay solicitud de encendido por Temp.
; se monitorea la presencia de gas y llamas, si hay alguno se pone en alarma
; si esta todo OK se monitorea la solicitud de encendido
;
btfss PORTB,GGB0 ;Entrada SENSOR GAS . activa BAJA
goto si_gas ;hay GAS detectado, alarmar !!!!!!!
btfss PORTB,L1B1 ;Entrada detector de llama LL1. activa BAJA
goto si_ll1 ;hay llama detectada en reposo, alarmar!!!!
btfss PORTB,L2B2 ;Entrada detector de llama LL2, activa BAJA
goto si_ll2 ;hay llama detectada en reposo, alarmar!!!
btfsc PORTB,TTB3 ;Entrada Temperatura deseada activado, activa ALTA
goto si_ton; Temp ON , hay que encender el quemador!!!
;no paso nada, se continua en reposo
bcf PORTA,LAA7 ;mantener Led AZUL
call ret07 ;mandar un retardo
;sensar segunda vez (son dos veces por si queres pardear)
btfss PORTB,GGB0 ;Entrada SENSOR GAS . activa BAJA
goto si_gas ;hay GAS detectado, alarmar !!!!!!!
btfss PORTB,L1B1 ;Entrada detector de llama LL1. activa BAJA
goto si_ll1 ;hay llama detectada en reposo, alarmar!!!!
btfss PORTB,L2B2 ;Entrada detector de llama LL2, activa BAJA
goto si_ll2 ;hah llama detectada en reposo, alarmar!!!
btfsc PORTB,TTB3 ;Entrada Temperatura deseada activado, activa ALTA
goto si_ton; hay que encender !!!
;no paso nada, se continua en reposo
; bsf PORTA,LAA7 ;pequeño papadeo indicador
; call ret03
bcf PORTA,LAA7 ;mantener led AZUL
call ret07
goto laz_rep ;seguir en el lazo Scaneo de reposo
;-------------------------------
;2) Encendido del quemador
; La solicitud de encender se activo, se debe activar la salida de gas
; y el encendedor electronico, esparar 5 seg y si no hay llama, cortar
;
si_ton ;hay que encender Temp.ON
call ret07 ;esperar un cachito
;sensar otra vez, una sensada previa antes de entrar en lazo
btfss PORTB,GGB0 ;Entrada SENSOR GAS . activa BAJA
goto si_gas ;hay GAS detectado, alarmar !!!!!!!
btfss PORTB,L1B1 ;Entrada detector de llama LL1. activa BAJA
goto si_ll1 ;hay llama detectada en reposo, alarmar!!!!
btfss PORTB,L2B2 ;Entrada detector de llama LL2, activa BAJA
goto si_ll2 ;hay llama detectada en reposo, alarmar!!!
;todo chequeado bien, ir a encender
movlw 0x14 ; cargar un 10 para la espera de que encienda
movwf ENCONN ; cargado del timer del encendedor en ON
call apa_all ;apagar todos los leds
bcf PORTA,LVA6 ;Encender el VERDE de encendido normal
;
laz_on ;arranque de encendido del quemador
decfsz ENCONN ;decrementar timer de espera de encendido
goto laz_enc
goto abortar ;se acabo el timer y no encendio, ir abortar
laz_enc ;lazo de detectar el quemador encendido y mantenerlo encendido
bsf PORTA,LLA2 ;Activaciòn LLAVE HONEYWEEL activo ALTO
bsf PORTA,EEA3 ;Activación ENCENDIDO ELECTRONICO activo ALTO
call ret07 ;esperar un momento
;
btfsc PORTB,L1B1 ;Entrada detector de llama LL1, activa BAJA
goto laz_on ;si no se detecto llama1 seguir en lazo
btfsc PORTB,L2B2 ;Entrada detector de llama LL2, activa BAJA
goto laz_on ;si no se detecto llama2 seguir en lazo
;se detectaron ambas llamas, pues entonces encendiò
;
;3) Lazo de mantener el quemador encendido
laz_man
call ret07 ;esperar
bsf PORTA,LLA2 ;Activaciòn LLAVE HONEYWEEL activo ALTO
bcf PORTA,EEA3 ;DESACTIVACION ENC. ELECTRONICO activo ALTO
bcf PORTA,LVA6 ;encender Led VERDE indicador de encendido fijo
;igualmente el led del rele HONEYWELL estara encendido tambien
;seguir sensando
btfss PORTB,GGB0 ;Entrada SENSOR GAS . activa BAJA
goto si_gas ;hay GAS detectado, alarmar !!!!!!!
btfsc PORTB,L1B1 ;Entrada detector de llama LL1. activa BAJA
goto no_ll1 ;NO hay llama detectada en ENCENDIDO, alarmar!!!!
btfsc PORTB,L2B2 ;Entrada detector de llama LL2, activa BAJA
goto no_ll2 ;NO hay llama detectada en ENCENDIDO, alarmar!!!
btfsc PORTB,TTB3 ;Entrada Temperatura deseada Activado, activa ALTA
goto laz_man; hay que mantener encendido
;4) Se alcanzo la temperatura deseada, apagar quemador
;en realidad la llave HoneyWell y por ende el quemador se desactivó con la apertura
;del seteo ST1 perilla de encendido, ergo la entrada de Temp deseada se desactivo
laz_apa ;Apagar el quemador
call ret07 ;esperar
bcf PORTA,LLA2 ;DES_Activaciòn LLAVE HONEYWEEL activo ALTO
bcf PORTA,EEA3 ;DES_Activación ENCENDIDO ELECTRONICO activo ALTO
bsf PORTA,LVA6 ;apagar Led VERDE indicador de encendido fijo
;igualmente el led del rele estara apagado tambien
bcf PORTA,LAA7 ;ENCENDER Led AZUL
call ret07
; call ret07
; call ret02
goto laz_rep ;volver al lazo de reposo
;---------------------
;5)Procedimientos de alarmas
;el seteo de temp que entra por trafo y doblador de tension
;se retarda y los detectores de fuego
;actuan primero, parpadean y salta la alarma apagando
;Entonces hay tres instancias de deteccion antes de decidir apagar
;
;primer instancia de deteccion
no_ll1 ;NO hay llama detectada en ENCENDIDO, ir a alarmar!!!
no_ll2 ;NO hay llama detectada en ENCENDIDO, ir a alarmar!!!
call ret02 ;retardar un poco
btfsc PORTB,L1B1 ;Entrada detector de llama LL1. activa BAJA
goto no_ll3 ;NO hay llama detectada con el quemador supuestamente encendido
btfsc PORTB,L2B2 ;Entrada detector de llama LL2, activa BAJA
goto no_ll4 ;NO hay llama detectada con el quemador supuestamente encendido
goto laz_apa; ambos detectores detectan llama, ir a mantener encendido
;segunda instancia de deteccion
no_ll3 ;NO hay llama detectada en ENCENDIDO, ir a alarmar!!!
no_ll4 ;NO hay llama detectada en ENCENDIDO, ir a alarmar!!!
call ret02 ;retardar un poco
btfsc PORTB,L1B1 ;Entrada detector de llama LL1. activa BAJA
goto no_ll5 ;NO hay llama detectada con el quemador supuestamente encendido
btfsc PORTB,L2B2 ;Entrada detector de llama LL2, activa BAJA
goto no_ll6 ;NO hay llama detectada con el quemador supuestamente encendido
goto laz_apa; ambos detectores detectan llama, ir a mantener encendido
;terceraa instancia de deteccion
no_ll5 ;NO hay llama detectada en ENCENDIDO, ir a alarmar!!!
no_ll6 ;NO hay llama detectada en ENCENDIDO, ir a alarmar!!!
call ret02 ;retardar un poco
btfsc PORTB,L1B1 ;Entrada detector de llama LL1. activa BAJA
goto no_ll7 ;NO hay llama detectada con el quemador supuestamente encendido
btfsc PORTB,L2B2 ;Entrada detector de llama LL2, activa BAJA
goto no_ll8 ;NO hay llama detectada con el quemador supuestamente encendido
goto laz_apa; ambos detectores detectan llama, ir a mantener encendido
;----------------------------------------
;PROCESO DE ALARMAS , solo el reset sale de estos lazos
no_ll7 ;el LL1 sigue sin detectar llama en Quemador Encendido despues de 3 instancias
;lazo de indicacion de que el LL1 no detecta Llama, parpadear ROJO y VERDE
bcf PORTA,LLA2 ;DES_Activaciòn LLAVE HONEYWEEL activo ALTO
bcf PORTA,EEA3 ;DES_Activación ENCENDIDO ELECTRONICO activo ALTO
bcf PORTA,RRA1 ;encender Led ROJO plaqueta
bcf PORTA,LRA0 ;encender Led ROJO activo BAJO
bsf PORTA,LVA6 ;apagar Led VERDE activo BAJO
call ret02
bcf PORTA,LLA2 ;DES_Activaciòn LLAVE HONEYWEEL activo ALTO
bcf PORTA,EEA3 ;DES_Activación ENCENDIDO ELECTRONICO activo ALTO
bsf PORTA,RRA1 ;apagar Led ROJO plaqueta
bsf PORTA,LRA0 ;apagar Led ROJO activo BAJO
bcf PORTA,LVA6 ;encender Led VERDE activo BAJO
call ret02
goto no_ll7 ;hasta que no haya reset no sale de aca
no_ll8 ;el LL2 sigue sin detectar llama en Quemador Encendido despues de 3 instancias
;lazo de indicacion de que el LL2 no detecta Llama, parpadear ROJO y AZUL
bcf PORTA,LLA2 ;DES_Activaciòn LLAVE HONEYWEEL activo ALTO
bcf PORTA,EEA3 ;DES_Activación ENCENDIDO ELECTRONICO activo ALTO
bcf PORTA,RRA1 ;encender Led ROJO plaqueta
bcf PORTA,LRA0 ;encender Led ROJO activo BAJO
bsf PORTA,LAA7 ;apagar Led AZUL activo BAJO
call ret02
bcf PORTA,LLA2 ;DES_Activaciòn LLAVE HONEYWEEL activo ALTO
bcf PORTA,EEA3 ;DES_Activación ENCENDIDO ELECTRONICO activo ALTO
bsf PORTA,RRA1 ;apagar Led ROJO plaqueta
bsf PORTA,LRA0 ;apagar Led ROJO activo BAJO
bcf PORTA,LAA7 ;encender Led AZUL activo BAJO
call ret02
goto no_ll8 ;hasta que no haya reset no sale de aca
;
si_gas ;hay GAS detectado, alarmar !!!!!!!
;se detecto gas sin quemar, el detector MQ3 se disparò
;lazo de indicacion de que el MQ3 esta activo, parpadear BLANCO
bcf PORTA,LLA2 ;DES_Activaciòn LLAVE HONEYWEEL activo ALTO
bcf PORTA,EEA3 ;DES_Activación ENCENDIDO ELECTRONICO activo ALTO
bcf PORTA,RRA1 ;encender Led ROJO plaqueta
bcf PORTA,LRA0 ;encender Led ROJO activo BAJO
bcf PORTA,LAA7 ;encender Led AZUL activo BAJO
bcf PORTA,LVA6 ;encender Led VERDE activo BAJO
call ret02
bcf PORTA,LLA2 ;DES_Activaciòn LLAVE HONEYWEEL activo ALTO
bcf PORTA,EEA3 ;DES_Activación ENCENDIDO ELECTRONICO activo ALTO
bsf PORTA,RRA1 ;apagar Led ROJO plaqueta
bsf PORTA,LRA0 ;apagar Led ROJO activo BAJO
bsf PORTA,LAA7 ;apagar Led AZUL activo BAJO
bsf PORTA,LVA6 ;apagar Led VERDE activo BAJO
call ret02
goto si_gas ;hasta que no haya reset no sale de aca
si_ll1 ;hay llama detectada en reposo, alarmar!!!!
;el LL1 detecta llama en reposo, o sea que no debe haber llama
;parpadear solo el ROJO
bcf PORTA,LLA2 ;DES_Activaciòn LLAVE HONEYWEEL activo ALTO
bcf PORTA,EEA3 ;DES_Activación ENCENDIDO ELECTRONICO activo ALTO
bcf PORTA,RRA1 ;encender Led ROJO plaqueta
bcf PORTA,LRA0 ;encender Led ROJO activo BAJO
; bcf PORTA,LAA7 ;encender Led AZUL activo BAJO
; bcf PORTA,LVA6 ;encender Led VERDE activo BAJO
call ret02
bcf PORTA,LLA2 ;DES_Activaciòn LLAVE HONEYWEEL activo ALTO
bcf PORTA,EEA3 ;DES_Activación ENCENDIDO ELECTRONICO activo ALTO
bsf PORTA,RRA1 ;apagar Led ROJO plaqueta
bsf PORTA,LRA0 ;apagar Led ROJO activo BAJO
bsf PORTA,LAA7 ;apagar Led AZUL activo BAJO
bsf PORTA,LVA6 ;apagar Led VERDE activo BAJO
call ret02
goto si_ll1 ;hasta que no haya reset no sale de aca
si_ll2 ;hay llama detectada en reposo, alarmar!!!!
;el LL2 detecta llama en reposo, o sea que no debe haber llama
;parpadear solo el VERDE
bcf PORTA,LLA2 ;DES_Activaciòn LLAVE HONEYWEEL activo ALTO
bcf PORTA,EEA3 ;DES_Activación ENCENDIDO ELECTRONICO activo ALTO
bcf PORTA,RRA1 ;encender Led ROJO plaqueta
; bcf PORTA,LRA0 ;encender Led ROJO activo BAJO
; bcf PORTA,LAA7 ;encender Led AZUL activo BAJO
bcf PORTA,LVA6 ;encender Led VERDE activo BAJO
call ret02
bcf PORTA,LLA2 ;DES_Activaciòn LLAVE HONEYWEEL activo ALTO
bcf PORTA,EEA3 ;DES_Activación ENCENDIDO ELECTRONICO activo ALTO
bsf PORTA,RRA1 ;apagar Led ROJO plaqueta
bsf PORTA,LRA0 ;apagar Led ROJO activo BAJO
bsf PORTA,LAA7 ;apagar Led AZUL activo BAJO
bsf PORTA,LVA6 ;apagar Led VERDE activo BAJO
call ret02
goto si_ll2 ;hasta que no haya reset no sale de aca
abortar ;se acabo el timer de encendido y no encendio !!!
;parpadear solo el AZUL
bcf PORTA,LLA2 ;DES_Activaciòn LLAVE HONEYWEEL activo ALTO
bcf PORTA,EEA3 ;DES_Activación ENCENDIDO ELECTRONICO activo ALTO
bcf PORTA,RRA1 ;encender Led ROJO plaqueta
; bcf PORTA,LRA0 ;encender Led ROJO activo BAJO
bcf PORTA,LAA7 ;encender Led AZUL activo BAJO
; bcf PORTA,LVA6 ;encender Led VERDE activo BAJO
call ret02
bcf PORTA,LLA2 ;DES_Activaciòn LLAVE HONEYWEEL activo ALTO
bcf PORTA,EEA3 ;DES_Activación ENCENDIDO ELECTRONICO activo ALTO
bsf PORTA,RRA1 ;apagar Led ROJO plaqueta
bsf PORTA,LRA0 ;apagar Led ROJO activo BAJO
bsf PORTA,LAA7 ;apagar Led AZUL activo BAJO
bsf PORTA,LVA6 ;apagar Led VERDE activo BAJO
call ret02
goto abortar ;hasta que no haya reset no sale de aca
;-----------------------------------------------------------------
;-----------------------------------------------------------------
;-----------------------------------------------------------------
;---------------------------------------------------------------
;----------------------------------------------------
;--------- RUTINAS DE RETARDO ----------------------
;----------------------------------------------------
Continuaremos cuando estè listo el proyecto definitivo. Saludos