|
DS1307: Reloj en tiempo real con 18F2550 | ||||
El DS1307 de Dallas Semiconductor (Maxim) es una solución muy interesante cuando necesitamos trabajar con eventos que requieren puntualidad y exactitud a lo largo del tiempo. Este pequeño circuito integrado es uno de los más populares relojes RTC (Real Time Clock) del mercado por su sencillez de uso y por su confiabilidad a largo plazo. Preparado para ofrecerte la hora hasta el año 2100, esta semana agregamos a la entrenadora NeoTeo esta útil aplicación con la explicación en detalle de su construcción, características y ajustes. El DS1307 a fondo en este artículo.La flexibilidad de trabajo que nos ofrece el bus I2C hoy nos trae una aplicación muy útil e importante para los momentos en que necesitamos controlar dispositivos o aplicaciones en las que la exactitud horaria es un factor fundamental. |
|||||
El DS1307 de Dallas Semiconductor (Maxim) es un dispositivo que se conoce como “Reloj de Tiempo Real” (Real Time Clock – RTC) que opera a través del bus I2C y que, además de brindarnos la hora con minutos y segundos, posee un calendario que contempla los años bisiestos hasta fin de siglo, es decir, hasta el año 2100.Entre las características destacadas, posee una salida (configurable por software) que, en nuestro caso, la utilizamos como “segundero luminoso”, y la posibilidad de trabajar con una pequeña batería para almacenar los datos mientras el sistema se encuentra desconectado de la alimentación. Además, esta pequeña alimentación de respaldo permite mantener funcionando el oscilador maestro del reloj con un consumo ínfimo de 300nA, según su hoja de datos. |
|||||
Mi primer receptor: TDA7000 |
Una simple batería de Litio CR2032 puede brindarnos un funcionamiento satisfactorio durante 10 años. ¿Te parece poco? Conectar un artefacto que construimos hace tres años y que siga estando siempre ajustado en fecha y hora es algo muy interesante de experimentar. |
||||
ON-OFF de un toque | |||||
Monitor Cardíaco | |||||
Montajes | |||||
|
|
||||
|
Este curioso circuito integrado es mucho más que un simple segundero o un contador de minutos: es un reloj que podemos incorporar a nuestros desarrollos para que, además de informar la hora en un visor, sea capaz de activar periféricos o recordar actividades con absoluta precisión. Un ejemplo: que nos recuerde que cada día a determinada hora se ponga en marcha un motor, una luz o cualquier dispositivo externo que realice un trabajo por nosotros, o también que el día 15 de agosto de cada año nos recuerde el cumpleaños de algún amigo. Por supuesto que para el desarrollo de este artículo y la explicación paso a paso de cómo aprender a utilizar este genial reloj utilizaremos la placa entrenadora NeoTeo y el súper-cómodo sistema de carga de archivos por USB con el método de BootLoader desarrollado en el artículo anterior. No más palabras, observa este video. Esto haremos hoy: |
||||
|
|||||
|
Lo primero que haremos entonces es construir el hardware. Habrás notado en las imágenes una memoria EEPROM 24C04, compartiendo la placa con el DS1307. Por el momento no utilizaremos este dispositivo, pero tuvimos la idea de colocarlo en la placa para futuras aplicaciones gracias a que este tipo de memorias también trabajan con el protocolo de comunicaciones I2C. En próximos montajes combinaremos el uso del reloj con eventos grabados en la memoria, como pueden ser alarmas múltiples seleccionadas por el mismo PIC o para utilizarla como banco de datos generales que pueda conservar información a pesar de que el equipo conectado pierda el suministro de energía. Por ejemplo, podemos citar el caso de un sistema de semáforos sincronizados que deben manejar un tráfico variable, es decir, variar sus tiempos de operación de acuerdo a las horas de mayor tránsito. A esto podemos sumarle la posibilidad de dejar liberada la circulación vehicular a partir de un horario determinado durante la noche hasta las primeras horas del día siguiente, y todos estos datos deben ser almacenados en un lugar seguro, a prueba de cortes energéticos y con la seguridad de inicializar su funcionamiento en perfecta sincronía horaria. Para eso, nada mejor que una EEPROM 24Cxx. |
||||
|
El circuito de conexiones para la placa del DS1307 |
||||
|
El circuito es muy sencillo de organizar y comprender. Tanto el DS1307 como la memoria 24C04 comparten las conexiones SDA y SCL, respectivamente, mientras que la tensión de alimentación es filtrada C2 - L1 - C1 para eliminar ruidos extraños en el circuito que pudieran llegar a corromper las tramas de datos. Esta prevención la incrementamos con el diseño de un circuito impreso generoso en planos de tierra. La salida SQW/OUT necesita una resistencia “Pull-Up” para su funcionamiento y a la vez se encarga de excitar a T1 para que el LED nos sirva de “segundero luminoso”. Recordemos que esta salida del DS1307 es programable y pueden obtenerse allí otros submúltiplos de 32768Khz para otras aplicaciones específicas. Por su parte, en el pin 3 conectaremos una batería de Litio tipo CR2032 que nos permitirá el funcionamiento del DS1307 cuando la tensión de alimentación Vcc no esté presente. No dejes de colocar un receptáculo apropiado para permitir una remoción cómoda de la batería cuando sea necesario cambiarla. Además, si te decides soldarle pequeños terminales para conectarla a la placa, debes tener mucho cuidado de no pasarte de temperatura para no provocar un accidente y la rotura de la batería. |
||||
Una pequeña batería puede conservar el ajuste del DS1307 durante muchos años |
|||||
|
Una consideración especial se debe tener a la hora de montar el cristal de 32768Khz. Primero debes saber que será muy difícil lograr un circuito impreso óptimo para obtener una precisión ideal en el funcionamiento del reloj. Luego, debes comprender también que es de suma rareza encontrar cristales que resuenen a la frecuencia exacta que indica su nomenclatura. Es decir, lo normal será encontrar cristales con una “tolerancia” de error que a lo largo de los días (o meses) se haga notable en algunos segundos de atraso o adelanto de la hora grabada. Si las variaciones son de muchos minutos en pocas semanas, sin dudas debemos cambiar el cristal por otro de mejor calidad. Pero si optas por un cristal común (sin demasiada selección especial), con un lazo de alambre conectado a GND (como ves en la imagen superior), con un buen plano de tierra en los alrededores de su conexión (tal como indica la hoja de datos del DS1307) y con un largo adecuado de los pines de conexión, debes lograr una pequeña variación de pocos segundos en uno o dos meses. NUNCA obtendrás una precisión absoluta pero al menos puedes aproximarte mucho a un excelente funcionamiento. Observa los planos de tierra en el circuito impreso. |
||||
La placa terminada vista desde el lado del circuito impreso (lado solder) |
|||||
|
En el párrafo anterior mencionamos que entre los puntos destacados para obtener un correcto funcionamiento del DS1307 está el largo de los pines de conexión desde el cristal hasta el IC. Esto significa dos cosas: en primer lugar, que las vías de cobre del impreso entre un dispositivo y el otro DEBEN ser lo más cortas posibles y, en segundo lugar, que los pines del cristal NO DEBEN ser tan cortos como sea posible (en su conexión hacia el impreso). Parece una contradicción, pero la explicación está en que al acercar o alejar los pines del cristal entre sí, estamos provocando variaciones de capacidad parásita entre ambos conductores. En la práctica y en los instrumentos de medición de frecuencia, esto puede ser despreciable y no afectar en nada al oscilador maestro. Pero en los meses de funcionamiento de nuestro reloj, unos pocos Hertz de variación pueden significar varios segundos (o minutos) de desfasaje horario. Observa la imagen anterior para apreciar el largo aconsejado para los pines del cristal. No hay que exagerar, ya que con un milímetro de variación podemos resolver todo nuestro problema. De lo que puedes estar seguro es que conocerás la posición exacta de estos pines luego de algunas semanas de funcionamiento del equipo. |
||||
tener siempre a mano un sistema de iluminación de emergencia. |
La placa instalada sobre la entrenadora y lista para comenzar a funcionar |
||||
crear una pequeña matriz de LEDs |
El resto del montaje no
merece mayores comentarios. En nuestro ejemplo utilizado para la
entrenadora NeoTeo con el PIC 18F2550, hemos empleado el conector
específico que dejamos reservado para las conexiones dedicadas a
dispositivos que trabajen por bus I2C. La imagen superior (como el video
mostrado al inicio del artículo) nos muestra que la placa se puede
insertar de manera muy fácil, quedando en una posición cómoda de trabajo
y visualización sobre el display LCD que utilizaremos para obtener los
resultados de este trabajo. Si eres un fiel seguidor de nuestros
proyectos y vienes realizando las placas de la manera que mostramos en
los artículos relacionados a esta entrenadora, al final encontrarás el
PDF para descargar que contiene el dibujo propuesto para realizar el
circuito impreso de este interesante accesorio. |
||||
Construye tus propios LCD I2C |
Comprendiendo de manera correcta el funcionamiento y el orden de trabajo de los bytes de registro del DS1307, podremos lograr una construcción rápida y eficaz. Al momento de grabar o escribir sobre el dispositivo, debemos hacerlo sobre ocho registros que tienen el tamaño de un byte. En cambio, al leer la información horaria, sólo lo haremos con siete registros. Los registros se distribuyen en el mapa de memoria del DS1307 del siguiente modo: |
||||
una fuente de alimentación múltiple que se pueda incrustar en cualquier punto del protoboard sencilla matriz de LEDs de al menos 8 LEDs por otros 8 LEDs (ancho por alto). |
Los 8 registros del DS1307 (00H - 07H) que primero deben ser "escritos" para luego ser "leídos" y así obtener la información horaria |
||||
Midiendo diodos y transistores Otra maravilla de la tecnología y el avance en capacidad de almacenamiento de información y calidad de imagen. |
El primer registro
(posición 0) corresponde a los segundos durante la cuenta del tiempo. El
segundo registro corresponde a los minutos, el tercero a las horas,
luego los días, los meses, los años y por último, en el octavo registro
(posición 7), encontramos el registro de control. Escribiendo y leyendo
de manera correcta estos registros, tendremos el funcionamiento adecuado
del DS1307. El primer registro (el de los segundos) nos servirá de
ejemplo para comprender el resto. El bit 7 de este registro determina el
funcionamiento del oscilador maestro o su detención. Esta función puede
ser muy útil en ciertas aplicaciones donde haya que detener una cuenta
de tiempo por motivos de operación. Pero en nuestro caso, como
utilizaremos este circuito integrado como un reloj común, lo
mantendremos siempre en funcionamiento, y esto se logra escribiendo un
cero en este bit. |
||||
|
Ejemplo de cómo se incrementan los valores dentro de los registros del DS1307 |
||||
Microcontroladores - PIC No te pierdas este nuevo espacio donde hablamos de ... más Electrónica |
Si observas con detenimiento, se produce el cambio durante el incremento de 9 a 10. En lugar de ser una cuenta binaria convencional y pasar de 0001001 a 0001010, pasa de 0001001 a 0010000, es decir, en la parte baja del byte cuenta hasta un máximo de 9 (las unidades) y en la parte alta cuenta las decenas (del 10 al 50). Uniendo los máximos de ambas partes (nibbles), llegamos al 59 para incrementar en una unidad el registro siguiente y reiniciar la cuenta en este registro desde cero. Esto puede tomarse como una notación hexadecimal, por lo tanto, para visualizarla en el LCD debemos manejarla como tal. Al leer el registro, el DS1307 nos devuelve sólo un número cuando no llegamos a la decena, pero utilizando la instrucción HEX2 en BASIC el LCD nos muestra un cero en adelanto cuando esta situación se produce. Del mismo modo se registran los minutos, las horas, los números de los días, los meses y los años. |
||||
|
Vista del sistema completo funcionando |
||||
|
Para el caso de las horas,
el DS1307 nos brinda la posibilidad de seleccionar una vista de 12 o 24
horas con sólo variar el bit 6 del registro que corresponde a las horas.
El cuarto registro cuenta los días y los enumera comenzando por el
domingo, al que le asigna el número 0. Luego viene el lunes con el 1, el
martes con el 2 y así sucesivamente, hasta el sábado con el 7.
Utilizando estos números podemos mostrar en pantalla el nombre del día
en el que estamos a partir del número que devuelve este registro. Por
último, el Byte de control habilitará o no la salida SQWE desde el pin 7
del DS1307. Nosotros escribimos este registro con el valor binario
[10010000] y obtenemos una onda cuadrada de 1 Hertz a la salida. Esto se
visualiza en el LED montado en la placa. |
||||
te brindaremos una idea para poder incrementar tu seguridad y la de tus pertenencias más valiosas. un circuito muy sencillo y una guía paso a paso de construcción de esta alarma concebida para cuidar tus circuitos. |
|||||
|
Resumiendo
|
||||
Indice de montajes | |||||