71
Lenguaje Basic para microcontroladores PIC / Re:PIC BASIC del PIC Simulator IDE Oshonsoft (Índice en página 1)
« Último mensaje por dogflu66 en 08 de Abril de 2026, 20:44:55 »🔧 Módulo (I²C) con RTC DS3231 y E²PROM 24C32
Librería desarrollada para trabajar con módulos que integran el circuito integrado DS3231.
Incluye librería y ejemplos de prueba.
El módulo utilizado en esta practica se puede encontrar con el nombre de HW-084.
Versión probada con:
• Microcontrolador: PIC18F46K22 @ 64 MHz
• Tarjeta entrenadora: HL-K18
• Entorno de desarrollo: PIC18 Basic Compiler v6.10
Este popular módulo está pensado para realizar practicas de comunicación I2C, y contiene un chip DS3231M, un zócalo integrado en la PCB para insertar una batería recargable para mantener activo el reloj, y otro chip independiente que es una memoria E²PROM tipo 24C32.
El DS3231 es un reloj en tiempo real (RTC) de alta precisión y bajo coste, que integra un oscilador interno compensado por temperatura (TCXO) junto con su cristal, lo que mejora notablemente la estabilidad y reduce la necesidad de componentes externos.
Este dispositivo dispone de una entrada para batería de respaldo, lo que le permite mantener la hora incluso cuando se pierde la alimentación principal.
🧠 Características principales del DS3231
• Comunicación mediante bus I²C (hasta 400 kHz).
• Reloj/calendario completo:
◦ segundos, minutos, horas.
◦ día, fecha, mes y año.
◦ compensación automática de meses y años bisiestos (hasta 2100).
• Formato de hora:
◦ 24 horas.
◦ 12 horas con AM/PM.
• Alta precisión:
◦ ±2 ppm (≈ ±1 minuto/año en 0–40 °C).
• Oscilador interno compensado en temperatura (TCXO).
• Sensor de temperatura integrado (±3 °C), accesible por I²C.
• Pin 32Khz: salida 32768hz.
• Pin _INT/SQW salida configurable:
◦ Puede funcionar como salida de onda cuadrada (una o varias frecuencias dependiente de la versión del chip).
◦ O como salida de interrupción por alarma, activa a nivel bajo (dispone de dos alarmas independientes sobre el mismo pin).
◦ Nota: ambas funciones son mutuamente excluyentes:
▪ Si el pin se configura como onda cuadrada, no se pueden utilizar las alarmas.
▪ Si se configura como salida de alarma, no se puede usar como generador de onda cuadrada.
• Pin _RST: no implementado en el módulo.
◦ salida de reset por fallo de alimentación.
◦ entrada para reset manual del microcontrolador.
• Detección automática de fallo de alimentación y conmutación a batería.
• Dirección base I2C para la comunicación con RTC DS3231: 0xD0.
⚠️ Nota importante sobre versiones
Existen varias versiones del chip:
• DS3231SN → mayor precisión, salida SQW configurable (1 Hz, 1.024 kHz, 4.096 kHz, 8.192 kHz) .
• DS3231M → menor precisión, salida SQW solo 1 Hz.
Conviene comprobar qué versión monta el módulo.
📦 Características del módulo HW-084
• Tensión de alimentación: 3,3 V – 5,5 V
• Chip RTC: DS3231M
• Zócalo para batería de respaldo del RTC.
• EEPROM integrada: AT24C32 (32 Kbit = 4 KB)
🧩 EEPROM AT24C32
• Capacidad: 32 Kbit (4 KB).
• Dirección I²C base en el módulo: 0x57.
• Dirección I2C configurable mediante pines A0/A1/A2.
• Necesita librerías anteriormente publicadas:
• _I2CLib.bas y _AT24C32Lib.bas.
🔋 Batería de respaldo
El módulo está preparado para usar una batería tipo LIR2032 (recargable), que mantiene el reloj en funcionamiento en ausencia de alimentación principal.
⚠️ Nota: algunos módulos están diseñados para baterías no recargables (CR2032). Conviene revisar si el circuito incluye circuito de carga que suele estar compuesto por una resistencia y un diodo.
🔌 Conexión típica (ejemplo I2C mediante módulo interno MSSP):
Módulo -- Pic
VCC ----- 5V
GND ----- GND
SDA ----- C4 (MSSP)
SCL ----- C3 (MSSP)
🔹 Librería
Librerías necesarias:
📡 Librería I2C para PIC18F46K22 usando MSSP1
Esta librería proporciona funciones esenciales para gestionar la comunicación I2C en modo maestro utilizando el módulo MSSP1 del PIC18F46K22. Incluye inicialización, lectura, escritura y control de transacciones I2C, tales como señales START, STOP y RESTART. Está diseñada para trabajar con dispositivos esclavos I2C como memorias EEPROM, sensores o RTCs.
• Init_I2C: Inicializa el módulo MSSP1 en modo maestro I2C y configura la velocidad del reloj.
• START_I2C: Envía una condición START para iniciar la comunicación en el bus I2C.
• STOP_I2C: Envía una condición STOP para finalizar una transacción en el bus I2C.
• ReStart_I2C: Envía una condición RESTART para continuar una transacción sin finalizarla.
• WRITE_I2C: Escribe un byte en el bus I2C y verifica la recepción de ACK por parte del dispositivo esclavo.
• READ_I2C: Lee un byte del bus I2C y envía un ACK o NACK tras la lectura.
• WriteDevice_I2C: Envía la dirección del esclavo y escribe datos en el dispositivo mediante I2C.
• ReadDevice_I2C: Envía la dirección del esclavo y lee un byte desde el dispositivo mediante I2C.
🕒 Librería DS3231 para PIC18 Basic (I2C)
Esta librería permite la comunicación con el módulo de reloj en tiempo real DS3231 (RTC), proporcionando funciones para leer, escribir y configurar el reloj. Incluye soporte para formatos de 12 y 24 horas, modos AM/PM, control de las salidas de onda cuadrada y programación de las dos alarmas internas del chip.
• Const DS3231_ADDR = 0xD0: asigna dirección base del dispositivo.
• DS3231_Init: inicializa el DS3231 verificando y reiniciando el oscilador si es necesario.
• DS3231_Set_24h: configura el DS3231 en modo de 24 horas.
• DS3231_Set_12h: configura el DS3231 en modo de 12 horas.
• DS3231_Set_AM_PM: establece el modo AM o PM en formato de 12 horas.
• DS3231_Get_AM_PM_24h: obtiene el modo actual AM/PM/24h.
• DS3231_Set_DateTime: configura la fecha y hora en el DS3231.
• DS3231_Get_Date: lee la fecha actual del DS3231.
• DS3231_Get_Time: lee la hora actual del DS3231.
• DS3231_Set_Hour: establece la hora en el DS3231, asegurando compatibilidad con el modo horario actual (12h/24h).
• DS3231_Set_Minutes: establece los minutos en el DS3231.
• DS3231_Set_Seconds: establece los segundos en el DS3231.
• DS3231_Set_DayOfWeek: establece el día de la semana en el DS3231.
• DS3231_Get_DayOfWeek: lee el día de la semana del DS3231.
• DS3231_SquareWave: activa/desactiva la salida _INT/SQW de onda cuadrada del DS3231 y configura su frecuencia.
• DS3231_32Khz: activa la salida 32Khz.
• DS3231_ReadTemperature: devuelve una lectura de temperatura.
• DS3231_SetAlarm1: establece la alarma interna 1.
• DS3231_EnableAlarm1: On/Off alarma 1.
• DS3231_SetAlarm2: establece la alarma interna 2.
• DS3231_EnableAlarm2: On/Off alarma 2.
• DS3231_ClearAlarmFlags: borra los flags de las alarmas.
• DS3231_Write: envía un comando y datos al DS3231 en el registro especificado.
• DS3231_Read: lee un byte de datos del registro especificado del DS3231.
💾 Librería EEPROM AT24C32 para PIC18 Basic (I2C)
Dirección base I²C en el módulo: 0x57.
En la librería "_AT24C32Lib.bas" editar la nueva dirección base de la E2Prom para este módulo:
' I2C address of the AT24C32 EEPROM (0x57 is the base address).
Const AT24C32_ADDR = 0x57
📂 Archivos incluidos:
• Test RTC DS3231.bas: código de test (rutina principal).
• _Pic18F46K22Lib.bas: librería para facilitar la configuración Pic18F46K22.
• _I2CLib.bas: librería para facilitar la configuración y control I2C hardware.
• _DS3231Lib.bas: librería especifica para el control del DS3231.
Los resultados se muestran por UART.
Salida de datos por consola serie:
Librería desarrollada para trabajar con módulos que integran el circuito integrado DS3231.
Incluye librería y ejemplos de prueba.
El módulo utilizado en esta practica se puede encontrar con el nombre de HW-084.
Versión probada con:
• Microcontrolador: PIC18F46K22 @ 64 MHz
• Tarjeta entrenadora: HL-K18
• Entorno de desarrollo: PIC18 Basic Compiler v6.10
Este popular módulo está pensado para realizar practicas de comunicación I2C, y contiene un chip DS3231M, un zócalo integrado en la PCB para insertar una batería recargable para mantener activo el reloj, y otro chip independiente que es una memoria E²PROM tipo 24C32.
El DS3231 es un reloj en tiempo real (RTC) de alta precisión y bajo coste, que integra un oscilador interno compensado por temperatura (TCXO) junto con su cristal, lo que mejora notablemente la estabilidad y reduce la necesidad de componentes externos.
Este dispositivo dispone de una entrada para batería de respaldo, lo que le permite mantener la hora incluso cuando se pierde la alimentación principal.
🧠 Características principales del DS3231
• Comunicación mediante bus I²C (hasta 400 kHz).
• Reloj/calendario completo:
◦ segundos, minutos, horas.
◦ día, fecha, mes y año.
◦ compensación automática de meses y años bisiestos (hasta 2100).
• Formato de hora:
◦ 24 horas.
◦ 12 horas con AM/PM.
• Alta precisión:
◦ ±2 ppm (≈ ±1 minuto/año en 0–40 °C).
• Oscilador interno compensado en temperatura (TCXO).
• Sensor de temperatura integrado (±3 °C), accesible por I²C.
• Pin 32Khz: salida 32768hz.
• Pin _INT/SQW salida configurable:
◦ Puede funcionar como salida de onda cuadrada (una o varias frecuencias dependiente de la versión del chip).
◦ O como salida de interrupción por alarma, activa a nivel bajo (dispone de dos alarmas independientes sobre el mismo pin).
◦ Nota: ambas funciones son mutuamente excluyentes:
▪ Si el pin se configura como onda cuadrada, no se pueden utilizar las alarmas.
▪ Si se configura como salida de alarma, no se puede usar como generador de onda cuadrada.
• Pin _RST: no implementado en el módulo.
◦ salida de reset por fallo de alimentación.
◦ entrada para reset manual del microcontrolador.
• Detección automática de fallo de alimentación y conmutación a batería.
• Dirección base I2C para la comunicación con RTC DS3231: 0xD0.
⚠️ Nota importante sobre versiones
Existen varias versiones del chip:
• DS3231SN → mayor precisión, salida SQW configurable (1 Hz, 1.024 kHz, 4.096 kHz, 8.192 kHz) .
• DS3231M → menor precisión, salida SQW solo 1 Hz.
Conviene comprobar qué versión monta el módulo.
📦 Características del módulo HW-084
• Tensión de alimentación: 3,3 V – 5,5 V
• Chip RTC: DS3231M
• Zócalo para batería de respaldo del RTC.
• EEPROM integrada: AT24C32 (32 Kbit = 4 KB)
🧩 EEPROM AT24C32
• Capacidad: 32 Kbit (4 KB).
• Dirección I²C base en el módulo: 0x57.
• Dirección I2C configurable mediante pines A0/A1/A2.
• Necesita librerías anteriormente publicadas:
• _I2CLib.bas y _AT24C32Lib.bas.
🔋 Batería de respaldo
El módulo está preparado para usar una batería tipo LIR2032 (recargable), que mantiene el reloj en funcionamiento en ausencia de alimentación principal.
⚠️ Nota: algunos módulos están diseñados para baterías no recargables (CR2032). Conviene revisar si el circuito incluye circuito de carga que suele estar compuesto por una resistencia y un diodo.
🔌 Conexión típica (ejemplo I2C mediante módulo interno MSSP):
Módulo -- Pic
VCC ----- 5V
GND ----- GND
SDA ----- C4 (MSSP)
SCL ----- C3 (MSSP)
🔹 Librería
Librerías necesarias:
📡 Librería I2C para PIC18F46K22 usando MSSP1
Esta librería proporciona funciones esenciales para gestionar la comunicación I2C en modo maestro utilizando el módulo MSSP1 del PIC18F46K22. Incluye inicialización, lectura, escritura y control de transacciones I2C, tales como señales START, STOP y RESTART. Está diseñada para trabajar con dispositivos esclavos I2C como memorias EEPROM, sensores o RTCs.
• Init_I2C: Inicializa el módulo MSSP1 en modo maestro I2C y configura la velocidad del reloj.
• START_I2C: Envía una condición START para iniciar la comunicación en el bus I2C.
• STOP_I2C: Envía una condición STOP para finalizar una transacción en el bus I2C.
• ReStart_I2C: Envía una condición RESTART para continuar una transacción sin finalizarla.
• WRITE_I2C: Escribe un byte en el bus I2C y verifica la recepción de ACK por parte del dispositivo esclavo.
• READ_I2C: Lee un byte del bus I2C y envía un ACK o NACK tras la lectura.
• WriteDevice_I2C: Envía la dirección del esclavo y escribe datos en el dispositivo mediante I2C.
• ReadDevice_I2C: Envía la dirección del esclavo y lee un byte desde el dispositivo mediante I2C.
🕒 Librería DS3231 para PIC18 Basic (I2C)
Esta librería permite la comunicación con el módulo de reloj en tiempo real DS3231 (RTC), proporcionando funciones para leer, escribir y configurar el reloj. Incluye soporte para formatos de 12 y 24 horas, modos AM/PM, control de las salidas de onda cuadrada y programación de las dos alarmas internas del chip.
• Const DS3231_ADDR = 0xD0: asigna dirección base del dispositivo.
• DS3231_Init: inicializa el DS3231 verificando y reiniciando el oscilador si es necesario.
• DS3231_Set_24h: configura el DS3231 en modo de 24 horas.
• DS3231_Set_12h: configura el DS3231 en modo de 12 horas.
• DS3231_Set_AM_PM: establece el modo AM o PM en formato de 12 horas.
• DS3231_Get_AM_PM_24h: obtiene el modo actual AM/PM/24h.
• DS3231_Set_DateTime: configura la fecha y hora en el DS3231.
• DS3231_Get_Date: lee la fecha actual del DS3231.
• DS3231_Get_Time: lee la hora actual del DS3231.
• DS3231_Set_Hour: establece la hora en el DS3231, asegurando compatibilidad con el modo horario actual (12h/24h).
• DS3231_Set_Minutes: establece los minutos en el DS3231.
• DS3231_Set_Seconds: establece los segundos en el DS3231.
• DS3231_Set_DayOfWeek: establece el día de la semana en el DS3231.
• DS3231_Get_DayOfWeek: lee el día de la semana del DS3231.
• DS3231_SquareWave: activa/desactiva la salida _INT/SQW de onda cuadrada del DS3231 y configura su frecuencia.
• DS3231_32Khz: activa la salida 32Khz.
• DS3231_ReadTemperature: devuelve una lectura de temperatura.
• DS3231_SetAlarm1: establece la alarma interna 1.
• DS3231_EnableAlarm1: On/Off alarma 1.
• DS3231_SetAlarm2: establece la alarma interna 2.
• DS3231_EnableAlarm2: On/Off alarma 2.
• DS3231_ClearAlarmFlags: borra los flags de las alarmas.
• DS3231_Write: envía un comando y datos al DS3231 en el registro especificado.
• DS3231_Read: lee un byte de datos del registro especificado del DS3231.
💾 Librería EEPROM AT24C32 para PIC18 Basic (I2C)
Dirección base I²C en el módulo: 0x57.
En la librería "_AT24C32Lib.bas" editar la nueva dirección base de la E2Prom para este módulo:
' I2C address of the AT24C32 EEPROM (0x57 is the base address).
Const AT24C32_ADDR = 0x57
📂 Archivos incluidos:
• Test RTC DS3231.bas: código de test (rutina principal).
• _Pic18F46K22Lib.bas: librería para facilitar la configuración Pic18F46K22.
• _I2CLib.bas: librería para facilitar la configuración y control I2C hardware.
• _DS3231Lib.bas: librería especifica para el control del DS3231.
Los resultados se muestran por UART.
Salida de datos por consola serie:

Mensajes recientes