ATmega - ¿Por qué la fábrica de prescaler está predeterminada en 8?

4

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

De la documentación de 644P: 6.12.2 CLKPR - Clock Prescale Register , página 40:

  

El Fusible CKDIV8 determina el valor inicial de los bits CLKPS. Si CKDIV8 no está programado, los bits de CLKPS se restablecerán a "0000". Si se programa CKDIV8, los bits CLKPS se restablecen a "0011", lo que da un factor de división de 8 en el inicio. Esta función se debe utilizar si la fuente de reloj seleccionada tiene una frecuencia más alta que la frecuencia máxima del dispositivo en las condiciones operativas 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 operativas actuales. El dispositivo se envía con el fusible CKDIV8 programado.

¿Es solo una precaución garantizar que el reloj de la CPU no exceda, por ejemplo, un límite de 16 MHz cuando se configura la MCU para que funcione con un oscilador externo de frecuencia demasiado alta (y se olvide de cambiar CLKPS en consecuencia)? ¿O hay otras razones?

    

3 respuestas

9

Tenga en cuenta la dependencia de la velocidad de reloj máxima permitida en la tensión de alimentación: P.ej. el 644PV solo puede alcanzar 4 MHz cuando se ejecuta a 1.8V (similar para otros chips)

Si los controladores estuvieran programados a un valor predeterminado de 8 MHz, no podría programarlos en un circuito que funcionara a una tensión de suministro tan baja. 1 MHz es una frecuencia predeterminada segura que cualquier AVR puede alcanzar a cualquier voltaje de suministro dentro de sus especificaciones.

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

    
respondido por el asdfex
5

Es para una compatibilidad inmediata con la migración de ATmega163, que solo tiene un oscilador RC interno de 1MHz (con otras velocidades de reloj disponibles a través de un cristal o reloj externo).

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

    
respondido por el Ignacio Vazquez-Abrams
1

Puede deducirlo lógicamente a partir de una serie de parámetros, todo lo cual tiene que ver con garantizar que el chip pueda programarse de manera segura en todas las condiciones de voltaje permitidas, desde la configuración de fábrica.

  • Los dispositivos AVR requieren un reloj válido para ser programados. Si desea utilizar el oscilador RC, no debería tener que agregar una señal de cristal o reloj externo solo para programar el dispositivo. Conclusión: los bits de fusible deben programarse para ejecutar el chip desde el oscilador RC de fábrica.
  • El oscilador RC debe calibrarse a un valor lo suficientemente rápido como para ser generalmente útil, mientras que tenga 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 el 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 entre 8, lo que da como resultado un reloj de 1 MHz, que es seguro para cualquier dispositivo.

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

    
respondido por el nitro2k01

Lea otras preguntas en las etiquetas