M41T56 es un chip de reloj de tiempo real, que es un an谩logo del popular DS1307. Y aunque incluso el pinout del microcircuito es el mismo, tienen diferencias significativas, de las que tratar茅 de hablar.
Breve descripci贸n
No me detendr茅 en el funcionamiento del bus IIC, solo observo que ambos chips tienen la direcci贸n 0xd0. Para trabajar con el tiempo, el microcircuito contiene siete registros de cuenta y un registro de control. Los registros de cuenta contienen n煤meros en formato decimal binario, sin embargo, algunos bits tienen un significado especial.
Registrosxxx: el valor de bit no est谩 definido.
Pedacitosx - despu茅s de encender, el estado del bit puede ser cualquiera.
Las diferencias comienzan en la asignaci贸n de los bits 7, 6 y 5 del registro del reloj. En el M41T56, los bits 7 y 6 se usan para indicar la transici贸n al nuevo siglo, y los bits 5 y 4 se usan para contar decenas de horas. Adem谩s, el recuento de horas solo es posible en el modo 24, el modo AM / PM no est谩 disponible. En DS1307, el bit 7 no se usa, un cero en el bit 6 indica que se usa el modo de conteo 24, y en este caso, los bits 5 y 4 contienen decenas de horas. Si el bit 6 es uno, entonces el bit 5 se convierte en el indicador AM / PM, y el bit 4 contiene decenas de horas.
Hay diferencias significativas en el registro de control, que contiene el trazo de correcci贸n de palabra.
Correcci贸n del curso
M41T56 le permite compensar el error del resonador de cuarzo en el rango de -62 a +124 ppm, lo que proporciona una desviaci贸n de no m谩s de 卤 5 segundos por mes. Para la compensaci贸n, los seis bits menos significativos del registro de control son responsables. Los bits 4-0 contienen un n煤mero entero sin signo del valor de correcci贸n, y el bit 5 establece la direcci贸n de correcci贸n. Si el bit 5 contiene cero, la carrera se ralentiza en incrementos de 2.034 ppm, de lo contrario, RTC se acelera en incrementos de 4.068 ppm. Esto es inconveniente, por lo que esboc茅 un par de funciones simples para convertir de ppm a palabra de correcci贸n y viceversa.
#define MASK_CALIBR ((1 << 4) | (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0)) #define MASK_CALIBR_SIGN (1 << 5) int8_t caliber_to_ppm(uint8_t caliber) { int8_t result = caliber & MASK_CALIBR; result = (uint8_t) result * 2; if ((caliber & MASK_CALIBR_SIGN) != 0) { result = -result; } else { result = (uint8_t) result * 2; } return result; } uint8_t ppm_to_caliber(int8_t ppm) { uint8_t result; if (ppm < 0) { result = (uint8_t) (-ppm + 1) / 2; result |= MASK_CALIBR_SIGN; } else { result = (uint8_t) (ppm + 2) / 4; } return result; }
Detecci贸n de fallas
Ni DS1307, pero M41T56 pueden detectar errores de generaci贸n, pero garantizan que cuando se enciende la alimentaci贸n, algunos bits estar谩n en un cierto estado. M41T56 cuando est谩 habilitado en el registro de control ser谩 10xxxxxx. Para rastrear bloqueos de programa, puede usar el siguiente algoritmo. Si, cuando se enciende el microcontrolador, el registro de control RTC contiene 10xxxxxx, entonces hubo una falla de energ铆a y se debe escribir un valor en el registro cuyos bits altos no son iguales a 10. Lo m谩s simple es escribir la palabra de correcci贸n con los bits 7 y 6 iguales a cero.
Literatura