Programador horario – PIC RTC RELAY

8 diciembre, 2010

Estoy convencido que en numerosas ocasiones hemos necesitado programar la hora de encendido y apagado de algún dispositivo. Es en esos momentos cuando este programador horario que nos envía el amigo JFMateos es de suma utilidad.
Su concepto y su diseño son tan simples como sumamente útiles.

Y el acabado, digno de un maestro.

Este dispositivo es un temporizador en el que podemos definir dos alarmas con resolución de segundos que se repiten cada intervalo de 24 horas.

Este intervalo no tiene por qué coincidir con el día natural (de 0:00:00 a 23:59:59). Cada alarma está compuesta por un estado On y un estado Off que cierran y abren, respectivamente, las láminas de un relé de tipo reed. La alarma 1 tiene que ser anterior a la alarma 2 y, además, el estado Off de la alarma 2 no puede estar más de 24 horas retrasado respecto al estado On de la alarma 1.

El dispositivo está programado para no saltarse ningún estado dentro de cada periodo de 24 horas, aunque se pierda el suministro eléctrico. Por ejemplo, si al recuperar el suministro eléctrico se detecta que no se ha pasado por alguno de los estados de alguna alarma anterior, el dispositivo reproduce inmediatamente todos los estados saltados dejando un segundo entre ellos, hasta ponerse “al día”.

Por ejemplo, si la alarma 1 está programada de 1:00:00 a 2:00:00 y la alarma 2 de 3:00:00 a 4:00:00, si se pierde el suministro eléctrico a las 0:30:00 y se recupera a las 2:30:00, el relé se cerrará (estado On de la alarma 1), un segundo después se abrirá (estado Off de la alarma 1), y un segundo después volverá a cerrarse para alcanzar el estado que le corresponde por la hora actual.

En este mismo sentido, el dispositivo está programado para dar prioridad al estado frente el cambio de estado. En otras palabras, al recuperarse de un fallo de suministro eléctrico, el relé se coloca en el estado que le corresponda según las horas de las alarmas, aunque ello suponga volver a cerrar el relé.

Por ejemplo, si la alarma 1 está programada de 1:00:00 a 2:00:00 y la alarma 2 de 3:00:00 a 4:00:00, si se pierde el suministro eléctrico a las 3:30:00 y se recupera a las 3:45:00, el relé se cerrará aunque ya se había cerrado previamente a las 3:00:00.

Si no se desea este comportamiento, sino dar prioridad al cambio de estado frente al estado en sí, basta con comentar las líneas de la 561 a la 563:

//if((ultimoEstadoRegistrado==1||ultimoEstadoRegistrado==3)&&!input_state(PIN_C7)){
//   output_high(PIN_C7);
//}

RTC RELAY

Aunque se ha montado un relé de tipo reed (HE3621) que admite cargas muy bajas (está pensado simplemente para simular la pulsación de un pushbutton de un deshumidificador), este relé puede sustituirse perfectamente por cualquier otro mayor con la única condición de que su bobina funcione a 5V y sea capaz de excitarse con la corriente que es capaz deconducir el BC548 (Q8). Los contactos del relé se encuentran en los pines 3 y 4 del conector X1.

El circuito debe alimentarse a 5V, bien a través del conector USB o bien a través de los pines 1 y 2 del conector X1 (EXT). Mediante el jumper JP2 elegiremos cuál de estas dos fuentes deseamos utilizar.

Mediante el jumper JP6 podemos indicar que todo el circuito se alimente a 5V o que el PIC18LF2455 y el DS3231 se alimenten a 3V3. Si optamos por alimentarlo todo a 5V podremos prescindir del MAX604, pero para logar la mayor precisión del reloj DS3231 es recomendable alimentarlo a 3V3.

La programación del PIC puede realizarse a través del conector ICSP. En este caso podemos utilizar el jumper JP3 para determinar si queremos alimentar el PIC a través de la placa (PCB) o a través del propio programador (ICSP).

Los displays de 7 segmentos (realmente de 9) elegidos son de tipo ánodo común (concretamente son el modelo LA8041-11 L de LedTech). Estos 6 displays están multiplexados, de modo que sólo uno de ellos (determinado por el CD4022) está alimentado en cada instante. Obsérvese que algunos de los displays se han montado girados 180º respecto a los demás para poder crear el signo : de separación entre horas y minutos sin añadir LEDs adicionales.

RTC Esquema

El dispositivo tiene los siguientes modos de funcionamiento:

  • Fecha/Hora. Es el modo en el que arranca inicialmente.
  • Configuración de fecha/hora
  • Hora de las alarmas
  • Configuración de hora de la alarma
  • Temperatura: Muestra la temperatura registrada por el DS3231, que tiene una resolución de 0.25ºC y una precisión de +/-3ºC.
  • Ahorro de energía: Deja sólo encendidos los signos : parpadeantes de separación entre horas:minutos:segundos.

La misión de los botones A, B, C y D es la siguiente:

  • Botón A: En el modo Fecha/Hora, con una pulsación corta permite alternar entre la visualización de la fecha y la hora, mientras que con una pulsación larga entra en el modo Configuración de fecha/hora. En el modo Configuración de fecha/hora, con una pulsación corta permite alternar entre el ajuste de hora/dia, minutos/mes y segundos/año, mientras que con una pulsación larga regresa al modo Fecha/Hora sin aplicar ningún cambio. En el modo Configuración de hora de alarma, con una pulsación corta confirma el cambio en la hora de la alarma configurada. Si intentamos configurar una fecha no válida, como 30 de febrero, no será aceptada y el display mostrará el mensaje “Error”. En cualquier otro modo, con una pulsación corta regresa al modo Fecha/Hora.
  • Botón B: En el modo Hora de las alarmas, con cada pulsación corta va visualizando las horas configuradas para los estados On y Off de cada una de las 2 alarmas; el punto izquierdo del display 1 se ilumina en el estado On de la alarma 1, el punto derecho del display 1 se ilumina en el estado Off de la alarma 1, el punto izquierdo del display 6 se ilumina en el estado On de la alarma 2, y el punto derecho del display 6 se ilumina en el estado Off de la alarma 2. El estado Off siempre debe ser posterior al estado On, el estado On de la alarma 2 debe ser posterior al Off de la alarma 1, y el estado Off de la alarma 2 no debe estar retrasado más de 24 horas respecto al estado On de la alarma 1; en caso contrario el display mostrará el mensaje “Error”. En este mismo modo (Hora de las alarmas) con una pulsación larga entra en el modo Configuración de hora de alarma del estado que estemos visualizando. En el modo Configuración de hora de alarma, con una pulsación corta permite alternar entre el ajuste de hora, minutos y segundos, mientras que con una pulsación larga regresa al modo Hora de las alarmas sin aplicar ningún cambio. En el modo Configuración de fecha/hora, con una pulsación corta confirma el cambio configurado en la fecha o la hora. En cualquier otro modo, con una pulsación corta regresa al modo Hora de las alarmas.
  • Botón C: En los modos Configuración de fecha/hora y Configuración de hora de la alarma, con una pulsación corta resta una unidad en el valor que estemos configurando (hora, minuto, segundo, día, mes o año), mientras que con una pulsación larga resta unidades de forma continua (retroceso rápido). En cualquier otro modo, con una pulsación corta pasa al modo Temperatura.
  • Botón D: En los modos Configuración de fecha/hora y Configuración de hora de la alarma, con una pulsación corta suma una unidad en el valor que estemos configurando (hora, minuto, segundo, día, mes o año), mientras que con una pulsación larga suma unidades de forma continua (avance rápido). En cualquier otro modo, con una pulsación corta pasa al modo Ahorro de energía.

Si los dos estados (On y Off) de una alarma se configuran exactamente a la misma hora, minuto y segundo, simplemente será ignorada (no se cerrará ni se abrirán los contactos del relé).

Cuando los contactos del relé están cerrados se enciende el punto superior derecho del display 5; por el contrario, si los contactos del relé están abiertos este punto permanece apagado.

El botón R permite resetear el PIC.

Aunque se interrumpa el suministro eléctrico o se resetee el PIC, la configuración de las alarmas no se pierde porque está registrada en la EEPROM. Si se interrumpe el suministro eléctico tampoco se pierde la configuración de fecha/hora del DS3231 porque queda alimentado por la batería de botón 2032 de 3V.

El PCB es un diseño a doble cara relativamente fácil de fabricar porque las pistas, las vias y los pads son bastante gruesos. Por ejemplo, el prototipo ha sido fabricado con el método de la plancha utilizando papel CPM 6.3.

Todos los componentes son Through hole, excepto el PIC18LF2455 y el DS3231 que son SMD.

Los pines del DS3231 están disponibles a través de las dos tiras de pines JP4 y JP5 porque quería aprovechar este diseño como placa de entrenamiento sobre el DS3231.

Una característica importante de este proyecto es que no existe acoplamiento eléctrico (sino magnético, a través del relé) entre el PIC_RTC_Relay y el dispositivo que se quiere controlar con él.

El software ha sido desarrollado en CCS C, aprovechando la librería para el DS1307 de RedPIC sobre la que se han aplicado pequeñas modificaciones para adaptarla al DS3231.

El código está un poco desordenado porque se fueron introduciendo modificaciones sobre la marcha.

Posibles mejoras:

  • Resultaría relativamente sencillo convertirlo en un cronotermostato aprovechando el sensor de temperatura del DS3231.
  • Ampliar la resolución hasta milésimas de segundo aprovechando que la salida SQW del DS3231 puede programarse a un máximo de 8192Hz.
  • Aumentar el número de relés para manejar simultáneamente varios pushbuttons. Podría ser de utilidad, por ejemplo, en la automatización de maquetas de trenes, luces de Navidad, aplicaciones domóticos, … o, en general, en la automatización de cualquier dispositivo que se maneje manualmente mediante botones.
  • Podría implementarse un software para PC que, a través de la conexión USB, permitiese programar otros tipos de alarmas (semanales, mensuales, cada cierto intervalo, …), o incluso manejar simultáneamente varios relés a modo de secuenciador.

Este proyecto se distribuye de forma gratuita, estando compuesto originalmente por:

  • Esquema electrónico en formato de Eagle y PDF
  • Diseño del PCB en formato de Eagle y PDF
  • Código fuente en CCS C
  • Archivo compilado en formato HEX
  • Bill of materials

La descarga de toda esta documentación, aquí.

Registro de cambios

v1

He modificado el sistema de ajuste de la hora y la fecha para que la hora, minutos, segundos, o el día, mes y año, sigan corriendo mientras el usuario no los modifique explícitamente. De esta forma, el usuario, por ejemplo, puede cambiar la hora y los minutos sin tener que volver a establecer los segundos. Así es más cómodo, por ejemplo, para ajustar la hora al horario de verano/invierno que sólo implica modificar la hora.

Share

Etiquetas: , , ,