Este artículo es una introducción al chip de reloj DS1302.
Directorio de artículos
1. Introducción al chip de reloj DS1302
DS1302 es un chip de reloj de carga lenta lanzado por DALLAS, que contiene un reloj/calendario en tiempo real y 31 bytes de RAM estática, y se comunica con el microcontrolador a través de una interfaz serie simple. Este chip es una interfaz SPI de 3 cables.
El circuito de reloj/calendario en tiempo real proporciona información sobre segundos, minutos, horas, días, semanas, meses y años, y el número de días de cada mes y año bisiesto se puede ajustar automáticamente.
La operación del reloj vía AM/PM simplemente determina si está en formato de 24 o 12 horas.
DS1302 y el microcontrolador pueden comunicarse simplemente de manera síncrona en serie, lo que requiere solo tres líneas de comunicación:
① reinicio RES; ② línea de datos de E/S; ③ reloj serie SCLK.
Los datos de lectura/escritura de reloj/RAM se comunican como un byte o como un grupo de caracteres de hasta 31 bytes.
El consumo de energía del DS1302 es muy bajo cuando está en funcionamiento y la potencia es inferior a 1 mW cuando mantiene datos e información del reloj.
Los pines de fuente de alimentación duales del DS1302 se utilizan para la fuente de alimentación principal y la fuente de alimentación de respaldo. Vcc1 es una fuente de alimentación de carga lenta programable con siete bytes adicionales de memoria. Se utiliza ampliamente en campos de productos como teléfonos, faxes, instrumentos portátiles e instrumentos que funcionan con baterías.
Principales indicadores de rendimiento de DS1302:
- El reloj en tiempo real tiene la capacidad de calcular segundos, minutos, horas, días, semanas, meses y años antes de 2100, así como la capacidad de ajustarse a los años bisiestos.
- 31 RAM de almacenamiento temporal de datos de 8 bits.
- El método del puerto serie de E/S minimiza el número de pines.
- Voltaje de funcionamiento de amplio rango 3,0 ~ 5,5 V.
- Cuando se trabaja a 2,0 V, la corriente es inferior a 300 nA.
- Hay dos métodos de transmisión al leer/escribir datos de reloj o RAM: transmisión de un solo byte y transmisión de varios bytes.
- Paquete DIP de 8 pines o paquete SOIC de 8 pines opcional según el montaje en superficie.
- Interfaz sencilla de 3 cables.
- Compatible con TTL Vcc=5V.
- Rango de temperatura industrial opcional -40~+85.
- Tiene capacidad de carga lenta.
- Adopta una fuente de alimentación dual de la fuente de alimentación principal y la fuente de alimentación de respaldo. La fuente de alimentación de respaldo puede realizarse mediante batería o condensador de gran capacidad.
Los pines del chip DS1302 son los siguientes:
Función de pin de chip:
Nombre del pin | Número de PIN | ilustrar |
---|---|---|
vcc2 | 1 | Pin de alimentación de respaldo, conectado a la batería para proporcionar fuente de alimentación 1302 cuando la batería está apagada |
X1, X2 | 2、3 | Pasador de oscilador de cristal externo, generalmente requiere un oscilador de cristal externo de 32.768K |
Tierra | 4 | tierra eléctrica |
CE | 5 | El pin de habilitación es también el pin de reinicio RST. Está activo en un nivel bajo y se establece en un nivel alto durante la operación. |
E/S | 6 | El pin de datos en serie, utilizado para la salida o entrada de datos, tiene función de tres estados |
SCLK | 7 | pin de reloj serie |
Vcc1 | 8 | Pin de alimentación de trabajo |
2. Uso de DS1302
El proceso general de operación de DS1302 es escribir varios datos en los registros de DS1302 para configurar su formato de hora actual; luego inicie DS1302 para operar, el reloj DS1302 funcionará de acuerdo con la configuración y luego usará el microcontrolador para leer los datos en su registrarse; finalmente, se utiliza una pantalla de cristal líquido, que a menudo se denomina reloj electrónico simple.
En pocas palabras, el funcionamiento del DS1302 se divide en dos pasos: la parte de la pantalla es el contenido de la pantalla de cristal líquido, no el contenido del DS1302 en sí.
Primero, entendamos los registros: DS1302 tiene un registro de control, 12 registros de calendario/reloj y 31 RAM.
2.1 Registro de control de DS1302
El registro de control se utiliza para almacenar las palabras de comando de control de DS1302. El primer byte escrito después de que el pin RST de DS1302 regresa al nivel alto es el comando de control. Se utiliza para controlar el proceso de lectura y escritura de DS1302. El formato es el siguiente sigue:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
1 | RAM /CK |
A4 | A3 | A2 | A1 | A0 | RD /WR |
- El bit 7 se fija en 1.
- El bit 6, 1 indica RAM en el chip; 0 indica bits de selección de registro de calendario y reloj.
- Los bits 5 a 1, bits de dirección, se utilizan para seleccionar el calendario, el registro de reloj o la RAM en el chip para lectura y escritura.
- Bit 0, 1 significa RD, es decir, la siguiente operación es lectura; 0 significa WR, es decir, la siguiente operación es escritura.
La RAM o registro representado por el valor de los bits 5 a 1 se muestra en la siguiente tabla. Según la siguiente tabla podemos saber que si se quiere leer el registro de segundos el comando es 1000 0001, y si se quiere escribir el registro de segundos el comando es 1000 0000.
Nombre del registro | D7 1 |
D6 RAM/CK |
D5 A4 |
D4 A3 |
D3A2 _ |
D2A1 _ |
D1 A0 |
D0 RD/WR |
Valor de registro |
---|---|---|---|---|---|---|---|---|---|
registro de segundos | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 o 1 | 80H/81H |
sub-registro | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 o 1 | 82H/83H |
registro de tiempo | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 o 1 | 84H/85H |
registro del día | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 o 1 | 86H/87H |
registro del mes | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 o 1 | 88H/89H |
registro entre semana | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 o 1 | 8AH/8BH |
registro del año | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 o 1 | 8CH/8DH |
registro de protección contra escritura | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 o 1 | 8EH/8FH |
Registro de carga lenta | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 o 1 | 90H/91H |
modo de ráfaga de reloj | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 o 1 | BEH/BFH |
RAM0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 o 1 | C0H/C1H |
… | 1 | 1 | … | … | … | … | … | 0 o 1 | … |
RAM30 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 o 1 | FCH/FDH |
Modo de ráfaga de RAM | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 o 1 | FEH/FFH |
2.2 Calendario/registro de reloj del DS1302
DS1302 tiene un total de 12 registros, 7 de los cuales están relacionados con calendario y reloj, los datos almacenados están en forma de código BCD y el formato es el siguiente:
Nombre del registro | Rangos | D7 | D6~D4 | D3~D0 |
---|---|---|---|---|
registro de segundos | 00~59 | CH | Decenas de segundos | unidades dígito de segundo |
sub-registro | 00~59 | 0 | décimo lugar | unidades de puntos |
registro de tiempo | 01 ~ 12 o 00 ~ 23 | 12 o 24 | D6-D5-D4 0-A/P-HR |
unidades dígitos de tiempo |
registro del día | 01~31 | 0 | D6-D5D4 0-el décimo dígito del día |
dígito del día |
registro del mes | 01~12 | 0 | D6-D5-D4 0-0-1 o 0 |
unidad dígito del mes |
registro semanal | 01~07 | 0 | D6-D5-D4 0-0-0 |
Día de la semana |
registro del año | 01~99 | Décimo lugar del año | Décimo lugar del año | unidades del año |
registro de protección contra escritura | WP | 0-0-0 | 0-0-0-0 | |
Registro de carga lenta | TCS | TCS-TCS-TCS | DS-DS-RS-RS | |
registro de ráfaga de reloj |
Descripción del registro:
-
Registro de segundos: los cuatro bits inferiores son SEC y los tres bits inferiores son 10SEC. El bit CH es el bit de pausa del reloj. Cuando CH=1, el reloj está en pausa. Cuando CH=0, el reloj comienza.
-
Registro de hora: el bit más alto es el bit de selección de formato de 12/24 horas, 1 indica formato de 12 horas, 0 indica formato de 24 horas;
- Cuando se configura en el formato de visualización de 12 horas, el nivel alto de D5 indica AM y el nivel bajo de D5 indica PM;
- Cuando se configura en formato de 24 horas, D5 y D4 representan el décimo dígito de la hora.
-
Registro de protección de escritura: cuando el bit más alto WP es 1, DS1302 solo puede leer y no escribir. Generalmente, asegúrese de que WP sea 0 antes de escribir datos en DS1302.
-
Registro de carga lenta: el bit TCS controla la selección de carga lenta. Cuando es 1010, la carga lenta puede funcionar.
-
DS es el bit de selección de diodo. DS=01 significa que se selecciona un diodo, DS=10 significa que se seleccionan dos diodos, DS=11 o 00 significa que el cargador está desactivado, independientemente del TCS.
-
RS se utiliza para seleccionar la resistencia conectada entre Vcc2 y Vcc1. RS=00, el cargador está deshabilitado y no tiene nada que ver con el TCS. La selección de resistencia es la siguiente:
-
bit RS Resistor Resistencia 00 ninguno ninguno 01 R1 2K 10 R2 4k 11 R3 8K
-
Los datos del reloj leídos del DS1302 están en formato BCD y deben convertirse al sistema decimal habitual.
El código BCD utiliza un código binario de 4 dígitos para representar los 10 dígitos del 0 al 9 en el sistema decimal de 1 dígito.
El método para convertir código binario a código BCD es: cuando el código binario de 4 dígitos es mayor que 1001, suma 6. Por ejemplo, el código binario del código BCD 00001100 es: 00001100+6=0010010.
Como sigue:
código decimal código binario 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001
2.3 RAM en chip
Hay 31 unidades de RAM en el chip DS1302. Hay dos formas de operar la RAM en el chip: modo de un solo byte y modo de varios bytes.
Cuando los bits de la palabra de comando de control son C0H ~ FDH, es un modo de lectura y escritura de un solo byte. D5 ~ D1 en la palabra de comando se utilizan para seleccionar la unidad RAM correspondiente.
Cuando las palabras de comando de control son FEH y FFH, es una operación de múltiples bytes. En el modo de ráfaga de RAM en la tabla, la operación de múltiples bytes puede leer y escribir el contenido de todas las celdas de RAM al mismo tiempo. FEH es una operación de escritura y FFH es una operación de lectura.
2.4 Temporización de lectura y escritura de DS1302
En el flanco ascendente del siguiente reloj SCLK después de ingresar la palabra de instrucción de control, los datos se escriben en DS1302 y la entrada de datos comienza desde el bit bajo. Los datos de DS1302 se leen en el flanco descendente del siguiente pulso SCLK inmediatamente después de la palabra de comando de control de 8 bits, y los datos se leen de menor a mayor. El diagrama de tiempos es el siguiente.
- DS1302 se comunica con el microcontrolador a través del bus serie SPI. Al realizar una operación de lectura o escritura, se deben leer y escribir al menos dos bytes. El primer byte es el byte de control, que es un comando que le indica a DS1302 si es una lectura o operación de escritura y si es una operación de lectura o escritura, operación de registro RAM o RELOJ. El segundo byte son los datos que se leerán o escribirán.
- Para lectura y escritura de un solo byte, CE se puede configurar en alto solo cuando SCLK está en nivel bajo. Por lo tanto, antes de operar, debe configurar SCLK en un nivel bajo, luego configurar CE en un nivel alto y luego comenzar a poner la señal de nivel a transmitir en IO. Luego haga la transición a SCLK. Cuando los datos están en el flanco ascendente de SCLK, el DS1302 lee y escribe datos. Cuando los datos están en el flanco descendente de SCLK, el DS1302 coloca los datos en el IO.
La imagen de arriba muestra los tres tiempos de DS1302: tiempo de reinicio, tiempo de escritura de un solo byte y tiempo de lectura de un solo byte.
CE (RST): reinicio del tiempo, se genera un pulso positivo en el pin RST. Durante todo el período de lectura y escritura, RST permanece alto. Después de leer y escribir un byte, RST vuelve al nivel bajo para prepararse para la siguiente lectura y ciclo de escritura.
Temporización de lectura de un solo byte: antes de leer, primero debe escribir un comando en el registro, comenzando desde el bit más bajo; puede ver que la escritura de datos se implementa en el flanco ascendente de SCLK y la lectura de datos se implementa en el flanco descendente de SCLK . En la secuencia de lectura de un solo byte, el octavo flanco descendente inmediatamente después del octavo flanco ascendente del comando de escritura leerá el primer bit de datos en el registro que se leerá en la línea de datos. La lectura de datos también comienza con el bit más bajo.
Temporización de escritura de un solo byte: se pueden escribir dos bytes de datos con 16 flancos ascendentes.
hay que tener en cuenta es:
- La protección contra escritura debe desactivarse antes de utilizar el DS1302.
- Los retrasos se utilizan para ralentizar el microcontrolador para que coincida con la sincronización del dispositivo.
- Los datos leídos por DS1302 están en forma de código BCD y deben convertirse al decimal de uso común.
- Antes de leer los bytes, configure el IO como puerto de entrada. Después de leer, cambie el IO nuevamente al puerto de salida.
- Al escribir un programa, se recomienda abrir un conjunto de matrices para colocar una serie de datos de DS1302 para facilitar la entrada de teclado ampliada.
3. Introducción al bus SPI
SPI, Interfaz periférica serie, interfaz periférica serie. La interfaz SPI se utiliza principalmente entre EEPROM, FLASH, reloj en tiempo real, convertidor AD, procesador de señal digital y decodificador de señal digital.
La interfaz SPI es una transmisión de datos en serie síncrona entre la CPU y los dispositivos periféricos de baja velocidad. Bajo el pulso de cambio del dispositivo maestro, los datos se transmiten bit a bit, con el bit alto al frente y el bit bajo detrás. Es una comunicación full-duplex y la velocidad general de transmisión de datos es más rápida que la del bus I2C, hasta varios Mbps.
La interfaz SPI funciona en modo maestro-esclavo, en este modo suele haber un dispositivo maestro y uno o más dispositivos esclavos, su interfaz incluye las siguientes cuatro señales:
- MOSI——Salida de datos del dispositivo maestro, entrada de datos del dispositivo esclavo;
- MISO: entrada de datos del dispositivo maestro, salida de datos del dispositivo esclavo;
- SCLK: señal de reloj generada por el dispositivo maestro;
- /CE——Señal de habilitación del dispositivo esclavo, controlada por el dispositivo maestro;
El hardware interno de la interfaz SPI es el siguiente:
SPI no tiene un control de flujo específico ni un mecanismo de respuesta para confirmar si se han recibido datos.
4. Ejemplo de uso de DS1302
La función implementada por este ejemplo es: cuando el sistema está funcionando, el reloj electrónico se muestra en el tubo digital en el formato "xx-xx-xx".
Los recursos utilizados incluyen tubos digitales y el chip de reloj DS1302. El módulo de reloj DS1302 está diseñado de la siguiente manera. Los pines de control del chip DS1302 están conectados a los puertos P3.4~P3.6 del microcontrolador. Un 32.768 externo está conectado al Pines X1 y X2 del chip. El oscilador de cristal KHz proporciona una frecuencia de reloj estable para el funcionamiento del reloj.
Para la implementación del software, escriba el código de sincronización de lectura y escritura de DS1302 de acuerdo con la sincronización presentada anteriormente, de la siguiente manera:
sbit DSIO=P3^4;
sbit RST=P3^5;
sbit SCLK=P3^6;
// DS1302读时、分、秒等寄存器的地址命令,依次是秒分时日月周年
uchar code READ_RTC_ADDR[]={
0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
// DS1302写时、分秒等寄存器的地址命令,依次是秒分时日月周年
uchar code WRITE_RTC_ADDR[]={
0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
// 时钟初始化2023-12-26星期二12点0分0秒,存储顺序按照秒分时日月周年,
// 存储格式使用BCD吗
uchar TIME[7]={
0, 0, 0x12, 0x26, 0x12, 0x02, 0x23};
// 向DS1302发送命令,向地址addr写入数据dat
void DS1302Write(uchar addr, uchar dat)
{
uchar i;
RST=0; // RST拉低
_nop_(); // 延时
SCLK=0; // 拉低SCLK,SCLK为低时才可拉高RST
_nop_(); // 延时
RST=1; // RST拉高,整个读写期间保持RST高电平
_nop_(); // 延时
for(i=0;i<8;i++) // 从低位开始传送八位地址addr
{
DSIO=addr&0x01;
addr>>=1;
SCLK=1; // 上升沿向DS1302写数据
_nop_();
SCLK=0; // SCLK拉低为下一位传送做准备
_nop_();
}
for(i=0;i<8;i++) // 从低位开始传送八位数据dat
{
DSIO=dat&0x01;
dat>>=1;
SCLK=1; // 上升沿向DS1302写数据
_nop_();
SCLK=0; // SCLK拉低为下一位传送做准备
_nop_();
}
// 数据传送结束,将RST拉低,为下一次传送做准备
RST=0;
_nop_();
}
// 从DS1302中读取地址addr的数据dat
uchar DS1302Read(uchar addr)
{
uchar i;
uchar dat, bi;
RST=0; // RST拉低
_nop_(); // 延时
SCLK=0; // 拉低SCLK,SCLK为低时才可拉高RST
_nop_(); // 延时
RST=1; // RST拉高,整个读写期间保持RST高电平
_nop_(); // 延时
for(i=0;i<8;i++) // 从低位开始传送八位地址addr
{
DSIO=addr&0x01;
addr>>=1;
SCLK=1; // 上升沿向DS1302写数据
_nop_();
SCLK=0; // SCLK拉低为下一位传送做准备
_nop_();
}
_nop_();
for(i=0;i<8;i++) // 从低位开始读取八位数据dat
{
bi=DSIO;
dat=(dat>>1)|(bi<<7);
SCLK=1; // 上升沿向DS1302写数据
_nop_();
SCLK=0; // SCLK拉低为下一位传送做准备
_nop_();
}
// 数据传送结束,将RST拉低,为下一次传送做准备
RST=0;
_nop_();
// DS1302复位稳定时间
SCLK=1;
_nop_();
DSIO=0;
_nop_();
DSIO=1;
_nop_();
return dat;
}
Antes de leer, debe inicializar DS1302, escribir la hora establecida y luego leer la hora. El código es el siguiente:
// DS1302初始化
// 1. 在对DS1302操作之前需要关闭写保护,0x8e写0x00
// 2. 写入设置的时间
// 3. 打开写保护功能
void DS1302Init()
{
uchar i;
DS1302Write(0x8E, 0x00); // 关闭写保护
for(i=0;i<sizeof(WRITE_RTC_ADDR);i++) // 设置时间
{
DS1302Write(WRITE_RTC_ADDR[i], TIME[i]);
}
DS1302Write(0x8E, 0x80); // 打开写保护
}
// 从DS1302中读取时间信息
void DS1302ReadTime()
{
uchar i;
for(i=0;i<sizeof(READ_RTC_ADDR);i++)
{
TIME[i] = DS1302Read(READ_RTC_ADDR[i]);
}
}
En el programa principal, lea la hora en la función de procesamiento de datos y asigne la hora a la matriz de datos de visualización después del procesamiento, de la siguiente manera
void DataPros()
{
DS1302ReadTime(); // 首先读取时间信息
display[0]=smg[TIME[2]/16]; // 时
display[1]=smg[TIME[2]&0x0f];
display[2]=0x40; // - 号
display[3]=smg[TIME[1]/16]; // 分
display[4]=smg[TIME[1]&0x0f];
display[5]=0x40; // - 号
display[6]=smg[TIME[0]/16]; // 秒
display[7]=smg[TIME[0]&0x0f];
}
La función de visualización del tubo digital es similar al ejemplo de uso del sensor de temperatura. La función principal es la siguiente:
void main()
{
DS1302Init(); // 初始化,第一次初始化后可以注释掉
while(1)
{
DataPros();
DigDisplay();
}
}
Resultados de la primera simulación de inicialización:
Al anotar la función de inicialización, se mostrará la hora actual, de la siguiente manera: