El Reloj de Tiempo Real (Real Time Clock – RTC) DS1337C de Dallas Semiconductor nos ofrece características muy interesantes que lo convierten en un dispositivo muy particular. Además de sus dos alarmas y de mantener las características básicas que transformaron al DS1307 en un éxito, este RTC ofrece la ventaja de no depender de ningún cristal ni resonador externo. La ventaja de tener integrado todo el conjunto bajo el mismo encapsulado elimina cualquier posibilidad de variación horaria más allá de las especificadas por el fabricante. Sin duda alguna, una solución al clásico problema de cualquier RTC. Esto y mucho más en este artículo.
La aparición en el mercado de los RTC trajo un cúmulo de soluciones muy importantes a los diseñadores que necesitaban “medir el tiempo” con la mayor exactitud posible. Una de las soluciones más populares fue el DS1307, ubicado dentro de una amplia lista de dispositivos que ofrecían, además, la ventaja de conectarse a cualquier microcontrolador mediante el popular bus I2C. Sin embargo, uno de los problemas habituales de estos componentes radicaba (y radica porque se continúan utilizando a diario) en las variaciones de la indicación horaria como resultado de la utilización de cristales resonadores poco apropiados. Es decir, entre varios cristales de una misma frecuencia (32,768Khz), los resultados pueden ser muy diferentes. A esto, si recordamos lo visto en el artículo del DS1307, se le suma la acertada elección del montaje del cristal teniendo en cuenta el largo de los pines de conexión, la puesta (o no) a GND del cuerpo del cristal y tantos “detalles” que acumulados entre sí deforman la medición horaria en valores importantes. Por ejemplo, dos cristales iguales, pero de distinto fabricante, pueden “atrasar” diferentes cantidades de tiempo en una semana. Por el contrario, dos “montajes” diferentes pueden provocar distintos “adelantos” en el mismo lapso de tiempo.
El DS1337 de Dallas Semiconductor no está exento de este problema y al igual que su antecesor, el DS1307, necesita de atenciones especiales en lo que al montaje mecánico del cristal se refiere. Sin embargo, existe una versión que nos ofrece una solución a todos estos inconvenientes, el DS1337C. Si observamos con atención la hoja de datos, que el fabricante nos ofrece sobre el DS1337, encontraremos esta variante del componente que ya trae incorporado en su encapsulado al cristal. De este modo, los problemas relacionados con las variaciones horarias que siempre ocasionaba el montaje mecánico y eléctrico del cristal, ya no serán un problema. De todos modos, no estamos hablando de que esta construcción lo transforma en un reloj de precisión y exactitud comparable a un reloj atómico sino que el diseñador tendrá una preocupación menos a la hora de considerar las precauciones a tomar mientras diseña el PCB que requiere la utilización de un RTC.
Como en cualquier sistema que trabaja a temperatura ambiente, las variaciones son inevitables y se encuentran comprendidas entre las 10 ppm (partes por millón) y esto equivale a valores cercanos a un minuto (o menos) en un mes. De todas maneras, temperaturas cercanas a 25°C proporcionan errores mínimos. En la Nota de Aplicación N°58 de Dallas Semiconductor (Maxim) (que te dejamos al pié del artículo) encontrarás la bibliografía necesaria para saber si estos dispositivos se ajustan a las necesidades de tu aplicación. Por supuesto, la precisión que se gana en el tiempo en cierto modo “se paga” con un encapsulado de mayor tamaño, aunque esta idea es relativa ya que si observamos el resultado con atención, un encapsulado estándar más el cristal, ocuparían el mismo espacio físico que el DS1337C. Otra diferencia importante, que posee este modelo de RTC respecto al DS1307, es la ausencia de conexión a una batería de respaldo para mantener el reloj funcionando al momento de desconectar la energía. Sin embargo, la tensión de alimentación “necesaria” del DS1337 permite “jugar” con esta posibilidad y mediante un sencillo arreglo de hardware en la conexión de alimentación (por supuesto, con una batería de respaldo), podemos mantener nuestro sistema ajustado sin preocuparnos por la falta de energía. Observa:
Las especificaciones del DS1337C al respecto nos muestran que con una tensión comprendida entre 1,8Volts y 5,5Volts, el dispositivo es funcional y si la tensión desciende por debajo del umbral mínimo de tensión (1,8Volts) hasta 1,3Volts, el DS1337C será capaz de seguir funcionando y manteniendo ajustada su hora. Hay que aclarar que para este último punto, se presenta la imposibilidad de comunicar vía I2C con el RTC y por debajo de 1,3Volts deja de funcionar por completo. En este caso, todos los registros se reinician al momento de la re-conexión a la energía y el reloj deberá ser programado. El diagrama superior nos ofrece una muestra de la manera en que podemos asegurar el funcionamiento continuo de nuestro RTC con la aplicación de sólo dos pequeños diodos 1N4148 y una batería del tipo CR2032. Por otro lado, tal como encontrábamos en el DS1307, la salida SQW nos ofrece la posibilidad de entregarnos una referencia de funcionamiento del oscilador. Esto se programa mediante los registros del DS1337C y podemos utilizar esta salida como indicador de segundero. Una segunda función fue agregada a este pin, en este componente, y se trata de una salida de alarma, la identificada como N°2 (INTB). Por su parte, la alarma N°1 posee su pin de salida independiente y se la denomina INTA. Ambas salidas son Open Drain, en consecuencia necesitan una resistencia Pull-Up y trabajan como activas en estado bajo. Es decir, cuando una alarma se inicializa, el pin se conecta a GND. Por este motivo, lo usual para este tipo de conexiones son salidas activas con transistores PNP como veremos en el circuito final de nuestro desarrollo.
Para nuestro ejemplo, como se observa en la imagen superior, no hemos montado un sistema de respaldo de energía ya que no es una construcción definitiva (es solo explicativa) y además, esa carencia nos resulta útil para demostrar como todos los registros se pasan a un valor cero al momento de la desconexión de la energía. Por otro lado, vale recordar que el modo de funcionamiento de este circuito integrado es igual al del DS1307 en cuanto a la manera de almacenar/leer los datos desde los registros, por lo tanto, puedes consultar algunos detalles que aquí no te especifiquemos en el artículo correspondiente a ese RTC. Mientras tanto, aquí te mostramos y explicamos las partes fundamentales del montaje ensayado y haremos hincapié en resaltar algo fundamental. Te ofrecemos una orientación inicial de cómo utilizar el dispositivo, tu trabajo será mejorarlo y optimizarlo para tu aplicación. Si nosotros hubiéramos construido una aplicación “dedicada”, igual hubieras tenido el trabajo de reformarla a tus necesidades. De este modo, te ofrecemos la base y tú luego nos deslumbrarás con las aplicaciones finales. Observa; esto es lo que haremos:
El circuito necesario para concretar esta construcción es muy sencillo, se basa en un PIC 18F25K20 y el programa está realizado con el software libre Amicus. Como se muestra en el video utilizaremos cuatro pulsadores para realizar los ajustes del RTC, del mismo modo que lo hacen los radio-relojes convencionales: un pulsador nos introduce en el menú de programación de la hora y la fecha, otro nos lleva a la programación de la alarma que mostraremos y dos botones estarán dedicados a subir y bajar las unidades hasta alcanzar la fecha y hora deseada, tanto para el funcionamiento normal, como para la alarma. El modo de ajuste es muy sencillo y te lo explicamos de manera clara y práctica en el video final. Lo que debemos recordarte y aclararte es que el software está realizado de una manera simple y sin optimizar. Esto significa que está realizado con instrucciones sencillas y quizás pueda parecer un poco extenso ya que se reiteran las estructuras de las rutinas para programar cada registro dentro del DS1337C. El motivo de esto es una reiteración de lo explicado antes. Tú optimizarás todo a tu necesidad. Además, realizarlo y mostrarlo de la manera en que te lo ofrecemos, te ayudará a comprender la secuencia en que se realizan las lecturas y escrituras sobre los registros, como así también la presentación de la información sobre el LCD, actualizada en todo momento.
El circuito, como te mencionamos antes, es el que utilizamos en nuestros montajes habituales y no supone complicación alguna, más allá del montaje del DS1337C sobre un PCB adaptador para trabajar de manera cómoda en el protoboard. De todos modos, la utilización de un DS1337 convencional en encapsulado DIP puede ayudarte a resolver este problema, aunque podrías tener inconvenientes con la exactitud del reloj, ya que estarás obligado a utilizar un cristal externo. Como puedes ver, el DS1337C es un circuito integrado muy sencillo de utilizar y te permitirá realizar cualquier tipo de contadores de tiempo con elaborados sistemas de alarma. Podrás hacer desde temporizadores industriales para control de procesos, hasta un reloj despertador convencional. (No tan convencional, será único en el mundo: Estará hecho por ti). Si decides programar las dos alarmas tendrás acceso a un controlador de puesta en marcha y detención automática de cualquier evento que requiera un funcionamiento desatendido. Así como programas el horno microondas para que al levantarte el desayuno esté listo, podrás hacer lo mismo con cualquier proceso similar. Desde apagar y encender luces durante la noche, en horarios programables, hasta decidir en que momentos harás funcionar las luces de un comercio luego de cerrar por la tarde. El DS1337C es un circuito que puede ayudarte en muchos desarrollos donde al tiempo lo manejas tú.
Como me gustan esos adaptadores para usar los samples en los proboards. En cuanto al articulo no conocia ese integrado, a tener en cuenta en algun futuro proyecto. Saludos
Mario, excelente artículo. No me había percatado del hecho de que no se necesita cristal, lo cual es excelente!! Debe disminuir muchísimo los errores.
Saludos!!!
#2 Exacto Pacman! :))
El error se reduce de manera notable. Ya no importa si diseñamos bien o mal el PCB en la zona del cristal. Este IC se encarga de todo.
Saludos!
Mario
Muy bueno el proyecto Mario muchas gracias, pero el firmware no se puede descargar, DS1337C.rar’ is unavailable. This file was deleted.
#3 Hola Eduardo!
Resuelto el error en el enlace. Gracias por mencionarlo.
Saludos!
Mario
Muchisimas gracias por el articulo, de seguro hay varias aplicaciones en las que podemos usar este integrado; lo que mas me interesa es la programacion de la hora y fecha con los pulsadores, voy a revisar el codigo para mirar como lo haces y cualquier duda escribo en el foro.
Un saludo
Yesbond
#4 OK Yesbond!
El código es muy sencillo y no hay "condiciones especiales" en él. Hay situaciones que puede parecer redundante, pero la idea era esa. Dejar de lado la eficiencia buscando la comprensión de lo que se está haciendo. Dicho de otro modo, darles los elementos y que cada uno juegue como le convenga. 😉
Saludos amigo!
Mario
Gracias Mario!!
No sabes cuantas veces me has salvado en algun proyecto, tus ideas siempre inspiran. Buen Trabajo sigue así.
P.S.
Me encanta las nuevas adiciones a la portada, en especial porque fui uno de los que sugerí los "Articulos Destacados". Esta si es una mejora!!
Por favor alguien puede facilitarme el email de Mario Sacco tengo, unas preguntas que hacerle
#6 Yo te lo paso:
mariogsacco@gmail.com
Saludos!
Mario
Muy bueno, muchas gracias por la información 😀
Genial articulo!!!, si hubiera conocido este integrado antes!!!! me volvi loco para hacer funcionar el 1307 y todo por la dichosa capacitancia del cristal, vaya quebraderos de cabeza.
Sabeis como pedir samples del integrado??
#12 Hola Emilio!
Me alegra que te sea útil el artículo.
Tienes que registrarte en la web de Maxim Semiconductor, entrar a la página del componente y allí encontrarás los pasos para solicitar muestras gratis.
Recuerda que no debes utilizar mails "populares" (hotmail, yahoo, gmail) si deseas tener éxito. Trata de conseguir algún mail de universidad o de empresas, o de una página web reconocida.
Saludos!
Mario
#13 Muchisimas gracias Mario,ya me han llegado los samples y he quedado alucinado,ya que pedi tambien algunos samples de los CI drivers de Led que figuran en otro articulo y todo de forma muy rapida y sin coste alguno, ya estoy manos a la obra para reemplazar el 1307 por estos nuevos pequeñajos que me han llegado….
Saludos
Hola Mario!!!
Buenisimo el articulo y buenisimo el 1337. Los adaptadores para el 1337 los compras en algun lado o lo desarrollaste vos? es un tema a la hora de hacer algun diseño no contar con los adaptadores para realizar pruebas sobre el protoboard.
Muchas gracias por el articulo
disculpad yo escribo en pbp, hbusin y hbusout equivalen a i2cwrite y i2cread
gracias por contestar
disculpad, yo use pbp, me podiais decir si hbusin y hbusout equivalen a i2cread y i2cwrite en pbp
gracias por contestar
Hola Mario:
Una duda, se puede comunicar vía I2C el DS1337C con un PIC 16F870 el cual se alimenta con 5 volts?
Gracias