ATmega: ¿por qué el valor predeterminado de fábrica del preescalador es 8?

¿Por qué ATmega (por ejemplo, 328P o 644P) tiene CKDIV8(o CLKPS = 0011) programado de fábrica junto con un oscilador interno predeterminado de 8 MHz?

De la documentación del 644P: 6.12.2 CLKPR - Registro de preescala de reloj , página 40:

El fusible CKDIV8 determina el valor inicial de los bits CLKPS. Si CKDIV8 no está programado, los bits CLKPS se restablecerán a "0000". Si se programa CKDIV8, los bits CLKPS se restablecen a "0011", dando un factor de división de 8 al inicio. Esta función debe utilizarse si la fuente de reloj seleccionada tiene una frecuencia superior a la frecuencia máxima del dispositivo en las condiciones de funcionamiento actuales. [...] El software de la Aplicación debe garantizar que se elija un factor de división suficiente si la fuente de reloj seleccionada tiene una frecuencia más alta que la frecuencia máxima del dispositivo en las condiciones de funcionamiento presentes. El dispositivo se envía con el fusible CKDIV8 programado.

¿Es solo una precaución para asegurarse de que el reloj de la CPU no exceda, digamos, un límite de 16 MHz al configurar la MCU para que funcione con un oscilador externo de frecuencia demasiado alta (y olvidarse de cambiar en consecuencia) CLKPS? ¿O hay otras razones?

Respuestas (3)

Tenga en cuenta la dependencia de la velocidad de reloj máxima permitida en el voltaje de suministro: por ejemplo, el 644PV solo puede alcanzar los 4 MHz cuando se ejecuta a 1,8 V (similar para otros chips)

Si los controladores estuvieran programados a 8 MHz predeterminados, no podría programarlos en un circuito que funciona con un voltaje de suministro tan bajo. 1 MHz es una frecuencia predeterminada segura que cualquier AVR puede alcanzar con cualquier voltaje de suministro dentro de sus especificaciones.

Puede cambiar el oscilador interno a uno de 1 MHz y dejar el divisor de reloj sin programar, pero esto prohíbe ejecutar el controlador a una frecuencia de reloj más alta sin una fuente de reloj externa.

Es para compatibilidad lista para usar y fácil migración desde el ATmega163, que solo tiene un oscilador RC interno de 1 MHz (con otras frecuencias de reloj disponibles a través de un cristal o reloj externo).

Por supuesto, nadie usa/debería usar más el '163 en esta década, pero el legado continúa.

Parece muy extraño que tal legado provenga de un modelo de chip específico, del cual '328 ni siquiera es una ruta de actualización natural. No sé si '163 y '644 son compatibles con binarios, pero no pude encontrar ninguna mención al respecto en la hoja de datos de '644. En contraste, por ejemplo, '162 específicamente tiene un modo de compatibilidad '161, la gama tiny25 tiene un modo tiny15 y así sucesivamente. La explicación más probable es que se estandarizaron en 1 MHz para permitir que cualquier dispositivo se programara de manera segura bajo cualquier voltaje permitido.

Puede deducirlo lógicamente de una serie de parámetros, todos los cuales tienen que ver con garantizar que el chip se pueda programar de manera segura en todas las condiciones de voltaje permitidas, desde la configuración de fábrica.

  • Los dispositivos AVR requieren que se programe un reloj válido. Si desea utilizar el oscilador RC, no debería tener que agregar un cristal o una señal de reloj externa solo para programar el dispositivo. Conclusión: los bits del fusible deben programarse para ejecutar el chip del oscilador RC de fábrica.
  • El oscilador RC debe calibrarse a un valor lo suficientemente rápido para ser útil en general, mientras tiene una precisión lo suficientemente buena. Atmel probablemente decidió en algún momento que 8 MHz era un punto óptimo. Conclusión: se eligió 8 MHz como punto de calibración para el oscilador RC en la mayoría de los dispositivos AVR.
  • No todos los dispositivos pueden funcionar a 8 MHz en todas las condiciones de voltaje. Conclusión: Atmel estandarizó la división del reloj por 8, lo que da como resultado un reloj de 1 MHz, que es seguro para cualquier dispositivo.

También puede ser útil la estandarización en una sola frecuencia en todos los dispositivos, lo que parece ser el caso, incluso si no es estrictamente necesario para algunos de los dispositivos.