Fuente de alimentación ds1307. Conexión del módulo RTC DS1307 a Arduino. Proyecto de prueba para DS1307

Módulo de reloj en tiempo real DS1307
Pequeño módulo RTC I2C, memoria 24C32, reloj DS1307

Un pequeño módulo que realiza las funciones de un reloj en tiempo real. Fabricado sobre la base del chip DS1307ZN+. La sincronización continua se produce gracias a la alimentación autónoma desde una batería instalada en el módulo. El módulo también contiene una memoria EEPROM de 32 KB, que retiene información cuando se corta todo tipo de energía. La memoria y el reloj están conectados mediante un bus de interfaz I2C común. Las señales del bus I2C se envían a los contactos del módulo. Cuando está conectado Fuente de alimentación externa La batería se recarga a través de un circuito de carga primitivo. La placa tiene espacio para montar un sensor de temperatura digital DS18B20. No está incluido en el paquete.
Este dispositivo se utiliza cuando se miden intervalos de tiempo de más de una semana con dispositivos basados ​​en microcontroladores. Utilizar los recursos propios de MK para este fin no está justificado y, a menudo, es imposible. Proporcionar fuente de poder ininterrumpible en a largo plazo caro, es imposible instalar una batería para alimentar el MK debido al importante consumo de corriente. Aquí es donde el módulo de reloj en tiempo real DS1307 viene al rescate.
Además, el módulo de reloj en tiempo real DS1307, gracias a su propia memoria, permite registrar datos de eventos que ocurren varias veces al día, por ejemplo, mediciones de temperatura. A continuación se lee el registro de eventos de la memoria del módulo. Estas capacidades le permiten utilizar el módulo como parte de una estación meteorológica automática autónoma o para investigaciones climáticas en lugares de difícil acceso: cuevas, acantilados. Es posible registrar parámetros tensométricos de estructuras arquitectónicas, como soportes de puentes y otros. Al equipar el dispositivo con comunicación por radio, basta con instalarlo en la zona en estudio.

Características

Tensión de alimentación 5 V
Dimensiones 27 x 28 x 8,4 mm

Diagrama eléctrico

El dispositivo se comunica con la electrónica del instrumento mediante señales SCL y SDA. El chip IC2 es un reloj en tiempo real. Los condensadores C1 y C2 reducen el ruido en la línea eléctrica VCC. Las resistencias R2 y R3 aseguran el nivel adecuado de las señales SCL y SDA. Desde el pin 7 de IC2 se recibe la señal SQ, que consta de pulsos rectangulares con una frecuencia de 1 Hz. Se utiliza para comprobar la funcionalidad de MS IC2. Los componentes R4, R5, R6, VD1 permiten recargar la batería BAT1. Para almacenar datos, el módulo de reloj en tiempo real DS1307 contiene IC1, un chip de memoria a largo plazo. US1 - sensor de temperatura. Las señales del módulo y de la línea de alimentación salen a los conectores JP1 y P1.

Autobús informativo

I2C es una interfaz serie estándar que utiliza dos líneas de señal SCL, SDA y un cable común. Las líneas de interfaz forman un bus. Se pueden conectar varios chips a las líneas de interfaz I2C, no solo chips de módulo. Identificar el microcircuito en el bus, es decir, escribir datos en el MS requerido y determinar de qué MS provienen los datos. Cada chip tiene una dirección única para el bus enrutado. DS1307 tiene la dirección 0x68. Está grabado en fábrica. El chip de memoria tiene la dirección 0x50. EN software Arduino incluye una biblioteca de software que brinda soporte I2C.

chip de reloj en tiempo real

DS1307 tiene bajo consumo de energía, intercambia datos con otros dispositivos a través de la interfaz I2C, contiene una memoria de 56 bytes. Contiene un reloj y un calendario hasta 2100. El chip del reloj en tiempo real proporciona a otros dispositivos información sobre el momento presente: segundos, minutos, horas, día de la semana, fecha. El número de días de cada mes se tiene en cuenta automáticamente. Existe una función de compensación para los años bisiestos. Hay una bandera para determinar si el reloj está funcionando en modo de 24 horas o de 12 horas. Para funcionar en modo de 12 horas, el chip tiene un bit desde el cual se leen los datos para su transmisión sobre el período de tiempo: antes o después del almuerzo.

Chip de memoria a largo plazo

Dibujo del módulo de reloj en tiempo real DS1307 desde el lado de la batería con el sensor de temperatura U1 instalado.

Batería

En el titular de parte trasera La placa está equipada con una batería de disco de litio CR2032. Es producido por muchos fabricantes, por ejemplo, el fabricado por GP proporciona un voltaje de 3,6 V y una corriente de descarga de 210 mAh. La batería se recarga cuando se enciende la alimentación; nos encontramos con este modo de funcionamiento de una batería de litio encendida; tarjeta madre computadora.

Cargando la batería

Software

Para que el módulo funcione como parte de Arduino, una biblioteca desactualizada del sitio web de Adafruit llamada RTCLib es bastante adecuada. El boceto se llama DS1307.pde. Hay una versión actualizada. Debe descargar el archivo, descomprimirlo, cambiarle el nombre y copiar la biblioteca en el directorio de su biblioteca Arduino.

Conexión a Arduino Mega

Para hacer esto debes usar bocetos.
SetRTC establece el tiempo en horas según el tiempo especificado en el boceto.
GetRTC muestra la hora.
Ambos bocetos requieren la biblioteca Wire y definen la dirección I2C. Para configurar la dirección del reloj en el bus I2C, utilice este escáner I2C.

Conexión con Arduino Mega.

Conecte SCL y SDA a los pines correspondientes 21 y 20 en el Arduino Mega 2560. Conecte la alimentación.

Conexión con Arduino Uno


Establezca la hora en el boceto SetRTC y cárguelo en Arduino. Luego presione el botón de reinicio para configurar el reloj. Ahora descargue el boceto de GetRTC. Abra su monitor serial y observe. Hay una biblioteca de tiempo especial. Tiene muchas características diferentes que pueden resultar útiles según la situación. Para configurar la hora usando la biblioteca, debe descargar . Al utilizar el boceto, puede sincronizar el reloj en tiempo real con el reloj de su computadora personal.

¡Hola!
Hoy quiero hablaros de un microcircuito tan interesante como el DS1307. Este es un reloj maravilloso además de un calendario y lo mejor es que este pequeño reloj tiene una Biblia en CVAVR. Sí, y acaba de llegar a mis manos y decidí torturarlo 8) En primer lugar, necesitamos un diagrama para su conexión. Es bastante simple y fue tomado de la hoja de datos. Pero hay una pequeña excepción. La hoja de datos requiere que conecte una resistencia entre el pin de alimentación y el pin de salida de pulso rectangular. Como estaba haciendo una placa separada para poder probar más proyectos en ella, también agregué un LED. Resultó muy conveniente. Puedes ver, por ejemplo, segundos pulsos.
En realidad el esquema.

Y así es como se ve ensamblado.

Realicé pruebas en combinación con ATmega32 + LCD 16x2 + DS1307. A continuación hay dos opciones. Primero, puedes generar el código directamente usando el generador CVAVR. En segundo lugar, escriba todo usted mismo. Sugiero escribirlo usted mismo, pero primero repasemos las características del DS1307.
1. rtc_init(rs, sqwe, fuera) Esta es la primera función para inicializar el chip. Ahora todos los argumentos están en orden. rs necesario para establecer la frecuencia de los pulsos rectangulares de salida en la pierna SQW/SALIDA. 0 - 1 Hz 1 - 4096 Hz 2 - 8192 Hz 3 - 32768 Hz sqwe necesario para permitir la salida de pulsos rectangulares. 1 - posible 0 - no. afuera necesario para determinar el nivel lógico en el tramo de salida si no hay permiso para emitir pulsos rectangulares. Vo inclinado. En resumen, si no necesitas mover la pierna SQW/SALIDA, entonces el parámetro sqwe meter en 0 y ahora si afuera es igual 1 , entonces estará en la pierna 1 , y si escribimos 0 , luego en la pierna también 0 . Ejemplo: rtc_init(0,1,0); Esto significa activar la salida de pulsos rectangulares con una frecuencia de 1 Hz. 2. rtc_set_time(hora, minuto, segundo) Bueno, como sugiere el nombre, esta función establece la hora. Aquí todo es sencillo, los argumentos son horas, minutos y segundos. 3. rtc_set_date(día, mes, año) El mismo sombrero pero con fecha. 4. rtc_get_time(&hora, &min, &seg) Y aquí hay más detalles. Esta función es necesaria para obtener la hora actual. Los argumentos de la función son las direcciones de las variables donde luego escribirá los valores. Esto se hace debido al hecho de que las funciones sólo pueden devolver un parámetro (como C). Es decir, antes de llamar a la función, debe inicializar tres variables de caracteres sin firmar. 5. rtc_get_date(&día, &mes, &año) Lo mismo pero con la fecha. Ahora todo es igual con los ejemplos. rtc_set_time(15, 0, 0); Establecer la hora a las 15:00:00 rtc_set_date(14, 2, 14); La fecha se fijó para el 14 de febrero de 2014. Tenga en cuenta que el año está escrito en dos números. Pieza de hoja de datos: El reloj en tiempo real (RTC) cuenta segundos, minutos, horas, fecha del mes, mes, día de la semana y año con compensación de año bisiesto válido hasta 2100 Hasta el 2100, y como le pasamos un carácter sin firmar a la función, el valor se puede tomar de 0 a 255. No intenté conducir más de cien, pero el año 2014, anotado por el susto, se mostró como 144 8) hora de carbón sin firmar, min, seg; rtc_get_time(&hora, &min, &seg); Primero inicializamos las variables y luego llamamos a la función. Después de llamarlo, puede operar de forma segura con el tiempo, que se escribirá en las variables. día, mes, año del carácter sin firmar; rtc_get_date(&día, &mes, &año); En principio aquí es lo mismo, solo que en las variables estará la fecha. Y por último, todo el programa con comentarios, como prometí. /************************************************ * *** Programa para trabajar con reloj en tiempo real DS1307 Microcontrolador: ATmega32 Frecuencia de cuarzo: 3.686400 MHz ******************************* ******* *************************/ #incluir // Especifica el puerto y los pines para el bus I2C #asm .equ __i2c_port=0x1B ;PORTA .equ __sda_bit=0 .equ __scl_bit=1 #endasm #include // Conecta la biblioteca para trabajar con DS1307 #incluir // Especifica a qué puerto está conectado el LCD #asm .equ __lcd_port=0x12 ;PORTD #endasm // Conecta la biblioteca para trabajar con LCD #incluir // Conecta la biblioteca para trabajar con cadenas #incluir vacío principal (vacío) ( // Inicializa la matriz para cadenas y variables para datos cadena de caracteres sin firmar; carácter sin firmar c, m, s, d, yo, g; PORTA=0x00; DDRA=0x00; PUERTOB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0x00; PUERTO=0x00; DDRD=0x00; // Inicializa el bus I2C i2c_init(); // Inicializa DS1307 rtc_init(0,1,0); // Inicializa la pantalla lcd_init(16); // Usé estas funciones una vez para configurar la hora y la fecha. // rtc_set_time(16, 0, 0); // rtc_set_date(13, 2, 14); mientras (1) ( // Tener tiempo rtc_get_time(&c, &m, &s); lcd_gotoxy(0,0); // formateado sprintf(cadena, "Tiempo %02i:%02i:%02i ", c, m, s); // Mostrar la hora lcd_puts(cadena); // tengo la fecha rtc_get_date(&d, &yo, &g); lcd_gotoxy(0,1); // formateado sprintf(cadena, "Fecha %02i.%02i.20%2i ", d, yo, g); // Salida de la fecha lcd_puts(cadena); ); ) Bueno, parece que eso es todo. Para empezar, creo que está claro, pero a quién le importa. Así es como se ve en acción.



Romano 29.10.15 21:30

Gracias por el artículo, todo claro y sin agua.

Alexéi 29.10.15 22:47

Intentando)

Zhenya 07.11.15 09:33

Alexey muchas gracias!

Alexey 11.07.15 10:23

Por favor.

Pedro 05/04/16 00:11

¿Es realmente posible repetir esto en el programa Flowcode?

alexey 05/04/16 08:52

¿Qué tipo de programa es este?

Miguel 09.09.16 00:18
alexey 09.09.16 12:16
Serguéi 20.11.16 12:28

Gracias por la explicación detallada de los ejemplos. ¿Podrías agregar un ejemplo? Instalación manual tiempo en RTC? A veces todavía son necesarios ajustes de tiempo.

Alexey 20.11.16 15:33

Para trabajar completamente con los relojes en tiempo real DS1307 y DS3231, escribí funciones que están incluidas en la biblioteca. Recomiendo usarlo para una generación de proyectos más simplificada en Atmel Studio. También puedes mirar video sobre el uso de esta biblioteca.

Veniamín 10/12/16 23:33

Rtc_set_date(13, 2, 14);
El compilador puede quejarse de una entrada como "muy pocos argumentos", ya que se deben pasar 4 argumentos, el primero de los cuales es el día de la semana. Por lo tanto, es necesario transmitir 4 números y contestar, también 4. Hasta donde yo sé, en algunas versiones de Codevision funciona con tres, pero personalmente lo modifiqué bastante hasta que descubrí por qué el tiempo es fácil. escrito y leído por mí, pero la fecha no.

Alexey 11/12/16 00:00

Es por eso que abandoné CVAVR con sus jambas (y no solo están en los relojes), cambié a AtmelStudio y escribí una biblioteca como CVAVR. Ahora todo funciona para mí y no tiene errores.)))

ANÓNIMO 02/03/17 00:39

Aconsejo a todos que reemplacen Ds1307 con 3231 porque 32 es mucho más preciso y 1307 solo es adecuado para temporizadores.

ANTÓNIMO 03/04/17 15:18

Mucho más precisamente: ¿cuánto exactamente? En mi humilde opinión, la precisión del reloj está determinada por una precisión del 99,9999999%. resonador de cuarzo.

alexey 03/04/17 16:09

Bueno, no del todo. Probablemente se refería simplemente a la compensación de temperatura, ya que la frecuencia del cuarzo también depende de la temperatura.

Igor Kazantse 31/07/19 16:54

Situación: compré un mikruhu DS1307. Soldé tu circuito. La única función necesaria es la salida de segundos pulsos. No se necesita nada más. ¿Qué hacer? ¿Qué programador debo usar? [correo electrónico protegido]

Alexey 01.08.19 10:50

No se necesita programador. Necesita escribir un programa para cualquier microcontrolador que envíe un comando para configurar la frecuencia del pin de salida SQW/OUT. Además, mientras haya voltaje en el microcircuito, la salida tendrá una onda cuadrada de 1 Hz.

En muchos diseños es útil saber tiempo actual, pero esto no siempre es posible, e incluso si el controlador está muy cargado, el reloj se retrasará o acelerará constantemente, lo que no es muy bueno. La salida puede ser una fuente de tiempo externa lista para usar (reloj de tiempo real) DS1307.

El reloj consta de un microcircuito DS1307, cuarzo de 32,768 KHz, una batería y 2 resistencias pull-up en las líneas SDA y SLC. Gracias a la batería, siguen funcionando cuando se corta la alimentación externa. El DS1307 también tiene 56 bytes libres de RAM estática volátil que puede usarse para sus propios fines.

Las líneas SCL y SDA son I2C. La línea SQW contiene un pulso de reloj con una frecuencia de 1 Hz a 32,768 KHz y normalmente no se utiliza;

El reloj tiene un par de características:

1. Para que funcionen deben tener una batería o, en casos extremos, una resistencia de 4-10 kOhm, de lo contrario no funcionarán y responderán con todo tipo de basura.
2. Debe haber un circuito de tierra cerrado alrededor de las pistas de cuarzo y también es mejor conectar el cuerpo de cuarzo a tierra.

una pequeña teoría

El cronómetro tiene una dirección fija de 68h, en una dirección de 7 bits + 1 bit indica la acción - lectura/escritura.
Se utiliza el siguiente algoritmo para grabar:
El primer byte es la dirección del reloj 68h + 0 bits que indican la grabación, total D0h. Una vez recibida la confirmación, se transmite la dirección de registro. Esto configurará el puntero del registro. Luego, la transferencia de bytes de datos comienza a detenerse: se genera una condición de terminación.
Para leer:
El primer byte es la dirección del reloj 68h + 1 bit que indica la grabación, total D1h. Después de decodificar la dirección y emitir un reconocimiento, el dispositivo comienza a transmitir datos desde la dirección especificada (almacenada en el registro de puntero). Si el puntero del registro no se escribe antes de que comience la lectura, entonces la primera dirección leída es la última dirección almacenada en él. El DS1307 debe aceptar un "no reconocimiento" para finalizar la lectura.

Para encender el reloj, establezca el bit CH en cero; esto debe hacerse a la fuerza, porque; El reloj se apaga de forma predeterminada cuando se enciende.

El reloj almacena información en formato binario decimal; para obtener datos basta con leer el registro correspondiente.

DS1307 puede funcionar tanto en modo de 24 como de 12 horas; el 12/24 bits (02h 6 bits) es responsable de esto. En el modo de 24 horas, los bits 5 y 4 del registro 02h corresponden a la decena de la hora actual; en el modo de 12 horas, el bit 4 almacena la decena y el bit 5 almacena el signo antes del mediodía/después del mediodía.

El registro 7 es responsable del generador de reloj de salida, salida SQW. El bit OUT invierte la señal de salida, el bit SQWE enciende el reloj y los bits RS0 y RS1 configuran la frecuencia del reloj.

Práctica

Se fabricó un pequeño módulo de reloj en tiempo real. Se montó un reloj en una placa utilizando un microcontrolador PIC16F628A, una pantalla generadora de caracteres de 2x16, un botón para configurar la hora, un módulo de reloj en tiempo real y una pequeña cantidad de cableado.

La placa contiene un chip DS1307 en versión SMD. Se le suelda un cuarzo a 32.768 KHz, en una caja DT-38 debe haber un anillo de tierra alrededor del cuarzo y la propia caja de cuarzo también debe estar conectada a tierra, para esto hay un agujero especial al lado. . Para trabajar horas en modo offline Se proporciona una batería CR120 de 3V. Además, para indicar el funcionamiento del módulo, se puede instalar un LED SMD con una resistencia de 470 Ohm en un tamaño de bastidor 0805.

El PIC16F628A no contiene hardware I2C, por lo que se implementó en software. El software I2C se escribió desde cero y se diferencia ligeramente del protocolo estándar en que no espera la confirmación del esclavo. El software I2C se analizará en uno de los siguientes artículos. Con base en las funciones I2C, se implementaron las siguientes funciones de control DS1307:

Void ds_write(dirección de caracteres sin firmar, datos de caracteres sin firmar) ( i2c_start(); i2c_write(0xD0); i2c_write(dirección); i2c_write(datos); i2c_stop(); ) char sin firmar ds_read(dirección de caracteres sin firmar) (temperatura sin firmar; i2c_start( ); i2c_write(0xD0); i2c_stop(); i2c_write(0xD1); temperatura de retorno; (0x00)|0x80); ( unsigned char i; // establece el modo en 24 horas i=ds_read(0x02); if ((i&0x40)!=0) ( ds_write(0x02,i&~0x40); ) // Si el reloj está apagado, entonces actívelo i=ds_read(0x00); if((i&0x80)!=0) ( ds_write(0x00,i& ~0x80); ) ) unsigned char IntToBoolInt(unsigned char data) ( data=data%100; return data/10 *16+datos%10;

ds_write( DIRECCIÓN , byte de datos ) - envía 1 byte de datos a la dirección especificada DS1307
byte de datos ds_read( DIRECCIÓN ) - lee 1 byte de datos de la dirección DS1307 especificada
ds_off()- apague DS1307
ds_on()- enciende DS1307
ds_init()— inicialización de DS1307
byte IntToBoolInt( byte ) — función para convertir un número en forma decimal binaria

Durante la inicialización, se verifican y configuran los siguientes bits si están apagados: el bit responsable del modo de funcionamiento de 24 horas del reloj y el bit responsable del estado encendido del reloj. Se han implementado 2 funciones para habilitar y deshabilitar el reloj. El DS1307 puede enviar y recibir mensajes de un solo byte y de varios bytes, pero para simplificar el trabajo con el reloj, las funciones de lectura y escritura son de un solo byte. Para configurar el reloj, también existe una función para convertir la forma decimal habitual de representar un número en decimal binario, en la que el microcircuito almacena indicadores de tiempo. Las funciones proporcionadas para trabajar con el reloj son suficientes.

El firmware implementa funciones para leer y mostrar la hora. tiempo(), fechas - fecha(). En un bucle sin fin, estas funciones se llaman en ciertos intervalos para mostrar la hora y la fecha en la pantalla. Veamos cómo funciona la función para leer y luego generar la hora actual:

Tiempo vacío() (carácter sin signo i; SetLCDPosition(1, 0); i=ds_read(0x02); buffer = i/16+"0"; buffer = i%16+"0"; buffer = ":"; i =ds_read(0x01); búfer = i%16+"0"; búfer = "\0"; buffer)

El cursor se sitúa en la pantalla. Leemos el valor del registro responsable de la hora y media byte, porque Los datos se almacenan en formato decimal binario y se escriben en un búfer. A continuación, agregue un separador de dos puntos. Leemos y escribimos en el buffer de la misma forma los valores de minutos y segundos. Mostramos el contenido del buffer en la pantalla. La función para mostrar la fecha actual está diseñada de la misma manera.

El firmware tiene una función para configurar horas y minutos. fijar tiempo(). Esta función establece la hora con un botón. Cómo hacer esto: presione el botón; en la pantalla aparece la inscripción "Establecer hora:" y el número de horas, aumente la hora presionando brevemente el botón; Habiendo fijado la hora con una pulsación larga, pasamos a configurar los minutos, como lo demuestra la inscripción “Set min:”, de la misma forma configuramos los minutos, y con una pulsación larga volvemos al bucle sin fin a las horas. . Pero porque Esta función es grande, presentamos solo una línea, que escribe el valor de los minutos en DS1307:

Ds_write(0x02,IntToBoolInt(hora));

Escribimos el valor deseado, previamente convertido a forma decimal binaria, en el registro que corresponde a los minutos.

Cálculo del tiempo real en segundos, minutos, horas, fechas del mes, meses, días de la semana y años, teniendo en cuenta la altitud del año en curso hasta 2100.

56 bytes de RAM no volátil para almacenamiento de datos

Interfaz serie de 2 hilos

Generador de impulsos cuadrados programable. Puede emitir 1 Hz, 4,096 kHz, 8,192 kHz y 32,768 kHz.

Detección automática de apagado de la fuente de alimentación principal y conexión de la de respaldo

Modo de 24 horas y 12 horas

Consumo no superior a 500 nA cuando se alimenta con una batería de respaldo a una temperatura de 25 °C

El microcircuito está disponible en paquetes DIP y SOIC de ocho pines. El pinout es el mismo para todos. A continuación proporcionaré líneas de la hoja de datos para completar la imagen.

Documentación del chip (hoja de datos)

Asignación de pines:

. X1, X2- Sirve para conectar un resonador de cuarzo de 32.768 kHz

. Vbat- Entrada para cualquier batería de litio estándar de tres voltios u otra fuente de energía. Para operación normal DS1307 requiere que el voltaje de la batería esté en el rango de 2,0 ... 3,5 V. Batería de Litio con una capacidad de 48 mAh o más admitirá el DS1307 en ausencia de energía
durante más de 10 años a una temperatura de 25°C.

. Tierra- general menos

. vcc- Esta es una entrada de +5 V. Cuando el voltaje de suministro es superior a 1,25 * VBAT, el dispositivo está completamente habilitado y se pueden leer y escribir datos. Cuando se conecta una batería de 3 V al dispositivo y Vcc es inferior a 1,25 * VBAT, se prohíbe la lectura y la escritura, pero la función de sincronización continúa funcionando. Una vez que Vcc cae por debajo de VBAT, la RAM y el RTC cambian a VBAT con batería.

. SQW/SALIDA- Señal de salida con pulsos rectangulares.

. SCL- (Entrada de reloj serie - entrada de reloj serie): se utiliza para sincronizar datos a través de la interfaz serie.

. S.D.A.- (Entrada/Salida de datos en serie): pin de entrada/salida para una interfaz en serie de dos cables.

Trabajar con pin SQW/OUT.

Primero, veamos la estructura de registro del DS1307.

Estructura de registro del chip DS1307.

Nos interesa el “Registro de control” ubicado en la dirección 0x7, porque Determina el funcionamiento del pin SQW/OUT.

Si el bit SQWE = 1, entonces comienza la formación de pulsos rectangulares, si SQWE = 0, entonces la salida de la salida será el valor del bit OUT.

Los bits RS0 y RS1 son responsables de la frecuencia del pulso, a saber:

RS0 RS1 Frecuencia
0 0 1Hz
0 1 4,096 kHz
1 0 8,192 kHz
1 1 32,768 kilociclos

He aquí un ejemplo:

Si necesitamos comenzar a generar pulsos rectangulares con una frecuencia de 1 Hz, entonces debemos enviar el byte 00010000 o 0x10 en el sistema numérico hexadecimal al registro 0x7 del microcircuito, que tiene la dirección 0x68.

Usando la biblioteca Alambre.h, Se puede hacer de la siguiente manera:

Wire.beginTransmission(0x68); Cable.write(0x7); Cable.write(0x10); Wire.endTransmission();

Conexión a Arduino:

Los pines responsables de la interfaz I2C en placas Arduino basadas en diferentes controladores varían.

Bibliotecas requeridas:

para trabajar con DS1307: http://www.pjrc.com/teensy/td_libs_DS1307RTC.html
para trabajar con el tiempo: http://www.pjrc.com/teensy/td_libs_Time.html

Establecer la hora

. Manualmente en código

La hora se configura manualmente en el código del programa y se completa placa arduino. Este método no es el más preciso porque Los tiempos de compilación y carga pueden variar.

Código de muestra

#incluir #incluir vacío configuración () { De serie.comenzar(9600); mientras (! De serie ) ; // Sólo para tablero Leonardo //obtener tiempo de RTC De serie //falló la sincronización demás De serie.println("RTC ha configurado la hora del sistema"); // instalar manualmente 16/02/2016 12:53 Elementos de tiempo; te.Segundo = 0; //segundos te.Minuto = 53; //minutos te.Hora = 12; //horas te.Día = 16; //día te.Mes = 2; // mes te.Año = 2016 - 1970; //el año en la biblioteca se cuenta desde 1970 time_t timeVal = makeTime(te); RTC .set(timeVal); setTime(timeVal); ) vacío bucle() ( digitalClockDisplay(); // tiempo de retardo de salida (1000); ) void digitalClockDisplay() ( De serie De serie.imprimir(" "); De serie.print(día()); De serie.imprimir(" "); De serie.print(mes()); De serie.imprimir(" "); De serie.print(año()); De serie //hora de salida mediante ":" De serie.imprimir(":");< 10) De serie si (dígitos De serie.imprimir("0");

.print(dígitos); ). Instalación desde

"Monitor de puerto"

Opción de configuración de hora más precisa. La hora se configura a través del “monitor de puerto” mientras funciona el controlador.

Código de muestra

Abrimos el monitor, introducimos los datos en el formato requerido, miramos el reloj de referencia, aprovechamos el momento y pulsamos “enviar”. //formato para indicar la hora actual "DD.MM.AA hh:mm:ss" //donde DD es el día, MM es el mes, YY es el año, hh son las horas, mm son los minutos, ss son los segundos#incluir #incluir //AA - de 00 a 99 para 2000-2099 bool isTimeSet = falso; vacío configuración () { De serie.comenzar(9600); mientras (! De serie ) ; // Sólo para tablero Leonardo//bandera que indica si la fecha ya ha sido fijada //obtener tiempo de RTC setSyncProvider(RTC.get); De serie si (tiempoEstado() != conjunto de tiempo) //falló la sincronización demás De serie.println("No se puede sincronizar con el RTC"); bucle.println("RTC ha configurado la hora del sistema"); ) vacío De serie() ( si ( .disponible()) (//se recibió un comando con tiempo De serie setTimeFromFormatString( .readStringUntil("\n" )); isTimeSet = verdadero;//se ha fijado la fecha ) si (esTimeSet)//si se especificó la fecha De serie( digitalClockDisplay(); //tiempo de salida ) retraso (1000); ) anular digitalClockDisplay() ( De serie.imprimir(" "); De serie.print(día()); De serie.imprimir(" "); De serie.print(mes()); De serie.imprimir(" "); De serie.print(año()); De serie.print(hora()); imprimirDígitos(minuto()); imprimirDigits(segundo()); //hora de salida mediante ":" De serie.imprimir(":");< 10) De serie si (dígitos De serie.println(); ) void imprimirDigits(int dígitos) ( .print(dígitos); ) void setTimeFromFormatString(Tiempo de cadena) (//DD.MM.AA hh:mm:ss int día = time.substring(0, 2).toInt(); int mes = time.substring(3, 5).toInt(); int año = time.substring(6, 8).toInt(); int horas = time.substring(9, 11).toInt(); int minutos = time.substring(12, 14).toInt(); int segundos = time.substring(15, 17).toInt(); Elementos de tiempo; te.Second = segundos; te.Minuto = minutos; te.Hora = horas; te.Día = día ; te.Mes = mes; te.Año = año + 30;//el año en la biblioteca se cuenta desde 1970. Queremos desde 2000

El reloj serial en tiempo real DS1307 es un reloj calendario BCD completo de bajo consumo que incorpora 56 bytes de SRAM no volátil. Las direcciones y los datos se transmiten en serie a través de un bus bidireccional de dos hilos. El reloj calendario cuenta segundos, minutos, horas, día, fecha, mes y año. La última fecha del mes se ajusta automáticamente para los meses con menos de 31 días, incluidos los ajustes de años bisiestos. El reloj funciona en modo de 24 horas y de 12 horas con un indicador AM/PM. El DS1307 tiene un circuito de monitoreo de energía incorporado que detecta cortes de energía y cambia automáticamente a energía de la batería.

Funcionamiento del microcircuito.

DS1307 funciona como dispositivo esclavo en el bus serie. Se accede configurando la condición START y enviando al dispositivo un código de identificación seguido de la dirección de registro. Se accede a los siguientes registros de forma secuencial hasta que se cumple la condición de PARADA.
Si V CC cae por debajo BATERÍA DE 1,25*V, DS1307 interrumpe el proceso de acceso y reinicia el contador de direcciones, y en este momento señales externas no se aceptan (para evitar que se escriban datos erróneos).
Si V CC cae por debajo V bate, DS1307 cambia al modo de soporte de batería de baja corriente.
Al encenderse, el DS1307 cambia de batería a Vcc cuando Vcc excede V bateria + 0,2 V. Las señales entrantes comienzan a percibirse cuando Vcc excede BATERÍA DE 1,25*V.
Descargar descripción rusa Descargado 3077 veces

Descargar documentación original