Paso 13: Reloj de tiempo Real DS1307 IC
http://www.Maxim-IC.com/datasheet/index.MVP/ID/2688
Lea la hoja de datos, contiene los comandos para el chip y otros detalles. Usted necesitará saber estas cosas cuando usted mira mi código fuente para que usted sepa lo que está sucediendo.
¿Qué hace? Realiza un seguimiento de tiempo, por lo que el microcontrolador no tiene por qué. Incluso a registrar el tiempo usando una pila de monedas, mientras que su alimentación principal está apagada, para que no te clásico 12:00 parpadeante sucede a viejos despertadores cuando se va la luz. Oh y realiza un seguimiento de la fecha también.
Tenga en cuenta que hay mucho mejores alternativas para el DS1307 hoy con mejores características, sin embargo, he encontrado este chip en mi colección de piezas impares, así que voy a utilizarlo.
Este chip requiere las siguientes cosas alrededor de él: un cristal de reloj, una batería de respaldo (célula de la moneda de 3V de la voluntad de la tienda de dólar hace 9 años), una fuente de alimentación y un capacitor de desacoplamiento.
El microcontrolador comunicará al DS1307 por medio del autobús de I2C (circuito Inter-integrado). El bus I2C es también conocido como TWI (dos cables de interfaz, sólo utiliza dos hilos). Está diseñado para la comunicación entre circuitos integrados múltiples. Consulte el Apéndice D para obtener más información sobre el I2C y TWI.
Lo que tenemos que hacer con el DS1307 es simple, sólo tenemos que ajustar la hora y leer la hora.
El DS1307 mantiene sus datos en varios registros. Consulte la hoja de datos, tabla 2, página 8. Muestra los datos que se almacenan en formato binario codificado decimal, que nuestro código fuente a codificar y decodificar. Vamos a escribir a estos registros cuando ajuste la hora y leer los registros de la misma para recuperar el tiempo.
Una buena descripción del bus I2C se da en la página 10 de la hoja de datos. La sección de características eléctricas AC de la hoja de datos dice que nuestro bus I2C debe ejecutar a 100 KHz o menos (esto es configurable dentro de nuestro código fuente), Téngalo en cuenta. La dirección del DS1307 es 1101000, recordar que también.
Por ejemplo, queremos seleccionar los segundos, por lo que el registro es 0 x 00. Primero enviamos por I2C
0b11010000
Esto aborda el DS1307 y dice que quiere escribir
entonces enviamos
0 x 00
para indicar el registro 0 x 00
entonces enviamos el número al que queremos establecer, y codificado en formato binario codificado decimal
Entonces, si queremos leer detrás de los segundos, el registro es nuevo, 0 x 00, primero enviamos
0b11010000
Note que esta es la dirección, pero todavía estamos especificando que queremos escribir
¿por qué especificar "escriba" cuando queremos leer? Porque no hemos dicho el DS1307 donde queremos leer (configuración de la dirección de registro dentro del DS1307). Por lo que enviar
0 x 00
luego terminamos la transferencia de datos
a continuación, enviar
0b11010001
Ahora estamos indicando que queremos leer y abordar el DS1307
luego nos dirigimos al reloj para leer de nuevo los datos, que el DS1307 se coloque en la línea de datos para nosotros. Entonces podemos descifrar los datos de formato binario codificado decimal.
Es importante entender que ya estamos usando el módulo incorporado de TWI de la AVR para la comunicación I2C, sabe para liberar automáticamente la línea SDA cuando indicamos "leer" en el primer byte que enviamos. El hardware y software (estamos usando "twi.c" de biblioteca "Wire" de Arduino). TODO es automatizado, incluso los reconocimientos.
Para nuestros propósitos, leer y escribir todos los parámetros de tiempo de una sola vez, para la eficiencia. Los detalles de cómo funciona esto es en la hoja de datos. También puede ver mi código fuente más adelante. La idea es la misma para los registros individuales, sino repetidamente de lectura/escritura sin finalizar a la transferencia. Verás cómo esto funciona a través de la hoja de datos, código fuente y mis formas de onda del analizador de lógica.
Une es una demostración de un programa simple que establece el tiempo y muestra el tiempo en su pantalla LCD. Demostrará mediante el bus de TWI para realizar operaciones de lectura y escritura de byte único o múltiple (ver las formas de onda que he proporcionado).
Añadir primero el DS1307 para su circuito según mi esquema. Una mayor resolución de imagen es dentro del. Paquete ZIP. El punto importante es que el DS1307 necesita 5V, y nosotros hemos modificado la Teensy ++ a 3.3V, el diagrama le muestra dónde obtener 5V de Teensy ++.
Usted necesitará el LCD todavía conectado si desea ver el funcionamiento del reloj. El terminal de serie todavía mostrará que usted mensajes de depuración.
He incluido las formas de onda del analizador de lógica para que pueda ver claramente lo que I2C parece, la hoja de datos del DS1307 también muestra formas de onda similares, estudiar las formas de onda juntos mientras que también ha examinado los datos que se intercambian (como lo mando, cuál fue la respuesta), tratar de emparejar los eventos a los puntos en el código fuente.