Hola
Tengo dos zonas de riego en el jardín y solo un programador con una salida en la domotica de casa donde me deja programar a que hora encender y a que hora apagar con una salida de relé.
Bien, tengo pensado conectar a una entrada del pic dicho relé y dos relés a la salida del mismo.
La idea es que cuando reciba señal en la entrada active el primer relé y cuando deje de recibir la señal active el segundo por el mismo periodo de tiempo.
Tengo el esquema del circuito ya hecho pero no se como programar el pic.
Mi nivel de programación es básico, todo lo que se lo he aprendido yo solo con un libro llamado Microcontrolador pic16f84a desarrollo de proyectos, el lenguaje que uso es ensamblador, y el programa es mlab ide.
Yo había pensado en lo siguiente:
El tiempo de riego no va a superar los diez minutos,por lo que no se si 600sg desbordarían el registro w que es de 8 bit, en ese caso pienso en que los tiempos de suma sean de 5 segundos en vez de 1 así se quedaría en 120 (600 sg en tramos de 5sg).
Como veis soy un perfecto novato en todo esto y no me va a venir nada mal algo (mucha) de ayuda
Gracias de antemano a todos ...
Tengo dos zonas de riego en el jardín y solo un programador con una salida en la domotica de casa donde me deja programar a que hora encender y a que hora apagar con una salida de relé.
Bien, tengo pensado conectar a una entrada del pic dicho relé y dos relés a la salida del mismo.
La idea es que cuando reciba señal en la entrada active el primer relé y cuando deje de recibir la señal active el segundo por el mismo periodo de tiempo.
Tengo el esquema del circuito ya hecho pero no se como programar el pic.
Mi nivel de programación es básico, todo lo que se lo he aprendido yo solo con un libro llamado Microcontrolador pic16f84a desarrollo de proyectos, el lenguaje que uso es ensamblador, y el programa es mlab ide.
Yo había pensado en lo siguiente:
Código:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
ENDC
#DEFINE ENTRADA PORTB,7 ;La señal que llega de la domotica
#DEFINE RIEGO_1 PORTA,3 ;Las salidas hacia las dos zonas de riego
#DEFINE RIEGO_2 PORTA,4
; ZONA DE CÓDIGOS *******************************************************************
ORG 0
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
clrf TRISA ; Las líneas del Puerto A configuradas como salida.
movlw b\'11111111\' ; Las 8 líneas del Puerto B configuradas como entrada.
movwf TRISB
bcf OPTION_REG,NOT_RBPU ; Activa las resistencias de Pull-Up del Puerto B.
bcf STATUS,RP0 ; Acceso al Banco 0.
Principal
bcf RIEGO_1
bcf RIEGO_2
Inicio
btfsc ENTRADA ;hay un 0? Llega señal domotica?
goto Inicio ;no
call Retardo_20ms ;si
btfsc ENTRADA ;sigue 0? o es rebote
goto Inicio ;no_es rebote
;si
bsf RIEGO_1 ;Pone a regar la primera zona
;Aquí es donde debería de usar el registro w empezando en cero
Aqui
;Aqui sumaria 1 al registro w no se como hacerlo
call Retardo_1s
btfsc ENTRADA ;compruebo si sigue llegando señal
goto Termina riego_1 ;no llega
goto Aqui ;si llega
;si todo ba bien estaria sumando 1 al registro w cada segundo para después usarlo de contador para la segunda zona
Termina riego_1 ;cuando deja de recibir señal de la domotica
bcf RIEGO_1 ;para el riego de la primera zona
bsf RIEGO_2 ;Pone a regar la segunda zona
Aqui_2
;Aqui restaria uno al registro w no se como hacerlo
call Retardo_1s
;Aqui comprobaria si el registro w es 0 y si lo es, se saltaria la siguiente instrucción y si no seguiría
goto Aqui_2
bcf RIEGO_2 ;para el riego de la segunda zona
goto Inicio
INCLUDE <RETARDOS.INC> ; Librería con subrutinas de retardo.
END ; Fin del programa.
Como veis soy un perfecto novato en todo esto y no me va a venir nada mal algo (mucha) de ayuda
Gracias de antemano a todos ...
Última edición por un moderador: