He visto docenas de diferentes chips de reloj en tiempo real en el mercado, así como varios procesadores con un módulo de reloj en tiempo real incorporado que funciona por separado.
Casi todos ellos no solo almacenan el tiempo como año-mes-día-horas-minutos-segundos, sino que incluso los campos individuales se almacenan en BCD en lugar de en formato binario.
¿Hay alguna razón subyacente para esto?
¿Hay alguna aplicación de microprocesador que haga algo más sofisticado que simplemente mostrar un reloj donde el formato BCD es más útil que el binario, o donde el formato año-mes-día-hora-minutos-segundos sería más útil que un recuento directo de 47 bits de los cambios de estado del oscilador?
Por lo que puedo decir, parece que los fabricantes de RTCC agregan muchos circuitos adicionales para que sus chips sean menos útiles; La única razón por la que puedo imaginar que los módulos RTCC en los procesadores se comporten de esa manera es que los proveedores de procesadores usan alguna implementación BCD preexistente en lugar de producir la suya propia.
Respuestas:
¿Todos los RTC usan codificación BCD?
Los RTC de Philips / NXP (tanto independientes como integrados en los chips ARM7 o Cortex-M3) no usan codificación BCD.
¿Qué hay de malo con un BCD RTC?
En comparación con el contador plano, las únicas operaciones que son más difíciles con un reloj BCD dividido son los cálculos de diferencia de tiempo (agregar segundos o calcular el tiempo transcurrido). Las comparaciones de tiempo como: "es el tiempo actual mayor que el tiempo de alarma establecido por el usuario" son igual de fáciles.
¿Qué tiene de bueno los BTC (y generalmente los RTC de campo dividido)?
Dividir los campos es realmente bueno cuando te importa la fecha del calendario. Los calendarios humanos tienen cosas divertidas como meses de diferentes duraciones y además de esos años bisiestos. Intenta hacerlo en un solo contador (puedes obtener un punto de bonificación por usar casi ningún poder). Ah, e intente soportar los días de la semana (bastante útil en todo tipo de dispositivos destinados a humanos: desde despertadores hasta controladores de calentadores) con esto.
El enfoque BCD tiene una característica adicional: obtienes interrupciones "cada segundo" o "cada diez segundos" de forma gratuita, sin tener que hacer ningún cálculo de horas o fechas.
Para el cálculo del año bisiesto récord, está un poco fuera de lugar en los RTC de NXP ya que solo se preocupa por la regla divisible por 4 y no verifica la división por 100 y 400. Si mantuviera el contador del año en BCD, esto sería trivial y muy probablemente bien hecho.
Resumen
Si quieres un reloj monótono, usa uno. Puede comprar un PIC o AVR con el "contador RTC" (que es solo un contador asíncrono con un oscilador autónomo de 32 kHz). Solo tenga en cuenta que simplemente mostrar la fecha será difícil. :)
Cuando necesite mostrar la hora y la fecha y configurar alarmas basadas en la entrada del usuario de horas y fechas, use un RTC. Y recuerde que cuando el usuario cambia la hora y fecha actuales, sus interrupciones basadas en RTC pueden ser inexactas.
fuente
Al usar los relojes al final, es más probable que te interesen los minutos y decenas de segundos (para mostrarlos) que solo el total de segundos, minutos, etc. En caso de que no esté interesado en dígitos separados, es probable que tampoco le interesen los valores de minutos o segundos por separado, y que también podría usar un contador binario largo como sugirió.
Es más fácil convertir de BCD a binario en software que al revés. Y dado que los contadores de BCD no requieren mucho espacio adicional sobre los contadores binarios, tiene sentido elegir BCD.
fuente
Sospecho varias razones:
Histórico: lo han estado haciendo de esta manera desde hace algún tiempo. Si desea que su nueva parte reemplace a otra parte, entonces tiene que funcionar más o menos igual. Así que sigue con el BCD.
Aplicación: si alguien está usando un RTC de un micro pequeño (algo en el rango de 8 bits, como un PIC de gama baja), entonces lidiar con un gran número (como su contador de 47 bits) es un gran dolor en el cuello. Es MUCHO más fácil lidiar con los dígitos BCD, ya que no tiene que trabajar para dividir las cosas.
No es tan difícil: hacer los contadores de BCD no es tan difícil, y de hecho creo que no son muchas más puertas que hacerlos binarios.
Uno puede imaginar un sistema en el que obtenga contadores de horas, minutos, etc. por separado en binario en lugar de BCD (evitando así el problema de 'descomponer el número de 47 bits'), pero no es mucho más fácil, y va a hacer algunos conversiones al mostrar la cosa de todos modos.
fuente
Estoy de acuerdo con Michael Kohne en que hay mucho impulso histórico.
Los primeros MCU también tenían mucho menos espacio para el código y los datos (piense en 128 BYTES de RAM, por ejemplo). Dado que la información de tiempo a menudo se usa para fines de interfaz humana, tenía más sentido mantener los datos más cercanos al formato utilizado para mostrar / ingresar desde humanos.
Algunas MCU más nuevas con más código y espacio de datos a veces implementan contadores de hardware en tiempo real; estos dispositivos a menudo mantienen conteos binarios de tics de 32 kHz.
fuente
En caso de que alguien esté interesado, solo estoy mirando la serie 32F de ST y parece que si bien la serie 32L más nueva usa un BCD RTC, el 32F usa un contador directo de 32 bits con preescalar configurable y proporciona una entrada de batería por separado (¡hurra! ) Preferiría tener un contador directo más largo sin un preescalar configurable (para poder obtener una precisión de 1 / 256seg pero mantener el tiempo durante años sin tener que preocuparme por el ajuste), pero si tuviera que configurar la preescala para 1 / 64sec, el temporizador podría funcionar Dos años sin desbordarse. No es ideal, pero no está mal. Un poco poco estético que si alguien enciende la máquina después de que ha estado apagada durante demasiado tiempo (más de 2.1 años), la hora / fecha se reduciría de forma indetectable en 2.1 años, pero no es un gran problema (el contador tiene un indicador de desbordamiento, pero en muchos casos que no serían de gran ayuda. Si la máquina estuvo encendida durante dos años antes de apagarse y se encendió tres meses después, se esperaría que el temporizador se desbordara; la pregunta sería si se había desbordado dos veces, y no conozco ninguna bandera para eso.
fuente
Maxim parece estar haciendo exactamente lo que quiere con DS1372U . Necesita menos de 1 μA, cuesta 1.7 USD y está disponible (!) En DigiKey y Mouser. El único problema es que no parece ofrecer alarmas con más de 1 segundo de precisión y la frecuencia de reloj de salida más baja es de $ \ aproximadamente $ 4kHz.
fuente