[Serie de microcontroladores 51] Módulo de reloj DS1302

Este artículo es una introducción al chip de reloj DS1302.

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:

clavija DS1302

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.

Temporización de lectura y escritura DS1302

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:

  1. MOSI——Salida de datos del dispositivo maestro, entrada de datos del dispositivo esclavo;
  2. MISO: entrada de datos del dispositivo maestro, salida de datos del dispositivo esclavo;
  3. SCLK: señal de reloj generada por el dispositivo maestro;
  4. /CE——Señal de habilitación del dispositivo esclavo, controlada por el dispositivo maestro;

interfaz SPI

El hardware interno de la interfaz SPI es el siguiente:

Diagrama de hardware interno de la interfaz SPI

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.

Módulo de reloj DS1302 en proteus

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:

Inicializar chip de reloj

Al anotar la función de inicialización, se mostrará la hora actual, de la siguiente manera:

La función de inicialización de comentarios muestra la hora actual

Supongo que te gusta

Origin blog.csdn.net/sinat_41752325/article/details/135229994
Recomendado
Clasificación