DOMOTICA: Control Riego AUTOMATICO con RTC
Fecha de publicación: Dec 21, 2018 1:51:0 AM
Hoy, les traigo un proyecto de automatizacion de riego, donde se emplea una RTC.
El o las RTC, son una especie de reloj que luego de programarlos, mantienen en su dispotivo la fecha, hora,dia,mes y hasta año en tiempo real.
El proyecto ya fue armado y se testeo toda su funcionalidad, dando excelentes resultados y practicamente, se obtuvo un sistema muy similar a los comerciales empleados para riegos automaticos.
El funcionamiento del ejemplo que les anexo es muy sencillo...
Para configurar nuestro CONTROLADOR, presionaremos el pulsador "SET / ESC" y entraremos en un menu.
Como primer paso, se programa la fecha, día y hora actual. Las teclas mas y menos, incrementan o decrementan los valores y la tecla "OK" guarda el valor fijado para pasar a la siguiente configuracion
Luego, de indicarle al RTC estos datos, podemos continuar con el resto de la programacion que consta de “Día de la SEMANA”, “Hora de encendido” y “Tiempo de Riego”.
Tambien tenemos una seccion con Programas PreCARGADOS listo para usar, que si no nos interesa, presionando la tecla "SET/ESC" salimos de la configuracion
Otra opcion que sume, es la de poder controlar la salida de la bomba en forma manual
Al desplazar el menu o finalizadas todas las opciones de configuracion, la ultima opcion del menu, es la de salir
que al precionar "OK", guarda y carga todas las configuraciones
El display en todo momento indica el estado del equipo.
Ahora... como hice la programacion????
Muchas veces suelo cometer el error de subirles ejemplos con programas completos y luego, el interesado, solo copia, pega, compila, graba microcontrolador y lo vende como un proyecto propio...
En esta oportunidad, vamos a cambiar la metodologia de trabajo, y les voy a dar las pauta y consignas para que ustedes luego puedan generar sus propios proyectos, y ante una eventual duda, pueden realizarmela que con gusto, me tomare mi tiempo para solventarla...
Ahora, veamos unas lineas de programacion para que vean como trabajar la comunicacion con el dispositivo RTC (PCF8583) mediante el comando I2CREAD-I2WRITE o bien, los comandos SHIFTOUT-SHIFTIN
Para leer los datos de una RTC, emplearemos el comando "I2CREAD"
'****************************************************************
DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 3
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
symbol SCL = PORTC.3 ' I2C data pin
symbol SDA = PORTC.5 ' I2C clock pin
Sec var bit
B0 var byte
S var byte ' Segundos
M var byte ' Minutos
H var byte ' Hora
D var byte ' Dia
Mn var byte ' Mes
Y var byte ' Año
OPTION_REG = $7f
menu:
I2CREAD SDA,SCL,%10100001,2,[S]
I2CREAD SDA,SCL,%10100001,3,[M]
I2CREAD SDA,SCL,%10100001,4,[H]
I2CREAD SDA,SCL,%10100001,5,[D]
I2CREAD SDA,SCL,%10100001,6,[Mn]
I2CREAD SDA,SCL,%10100001,6,[Y]
lcdout $fe,1
lcdout $fe,2
lcdout "Hora : ", hex(H),":", hex(M)," ", hex(S)
lcdout $fe,$c0
lcdout "Fecha: ", hex(D),".", hex(Mn),".20",hex(Y)
Pause 500
goto menu
End
'****************************************************************
Si quisieramos configurar algunos datos de la RTC, emplearemos el comando "I2CWRITE"
'****************************************************************
grabarRTC:
I2CWRITE SCL,SDA,%11010000,0,[$00] ;setear 00 segundos
Pause 10 ;retardo para finalizar grabación
I2CWRITE SCL,SDA,%11010000,1,[$39] ;setear 39 minutos
Pause 10
I2CWRITE SCL,SDA,%11010000,2,[$23] ;setear las 23 horas
Pause 10
I2CWRITE SCL,SDA,%11010000,3,[$5] ;setear día lunes ,D=1,L=2
Pause 10 ;M=3 , M=4, J=5, V=6, S=7
I2CWRITE SCL,SDA,%11010000,4,[$06] ;setear día 27 del mes
Pause 10
I2CWRITE SCL,SDA,%11010000,5,[$8] ;setear mes agosto
Pause 50
I2CWRITE SCL,SDA,%11010000,6,[$09] ;setear año 09
Pause 10
I2CWRITE SCL,SDA,%11010000,7,[$10] ;control %00010000 para
Pause 10 ;encender el led cada 1 seg.
WRITE 0,1 ;escribe en la memoria 0 el valor de 1 para que no
;se vuelva a grabar otra vez estos datos en el RTC
goto menu
'****************************************************************
Tambien podemos establecer la comunicacion mediante el comando SHIFTOUT-SHIFTIN, pero para ello, tendremos que configurar un
puerto mas para la funcion RESET que lo haremos manualmente por software
'****************************************************************
RST var PORTC.0
SCL var PORTC.1
SDA var PORTC.2
high RST : OUTPUT SDA
shiftout SDA, SCL, 0, [$BF]: INPUT SDA
SHIFTIN SDA, SCL, 1, [S,M,H,D,Mn,Y]