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]