ATmega328P Salida de reloj de 16MHz o superior en el pin CLKO

0

Necesito un reloj de alta frecuencia (16MHz o superior) para manejar el módulo de cámara OV7670, y quiero que mi ATmega328P sea la fuente de ese reloj. Estoy usando el pin CLKO ya que no puedo obtener frecuencias tan altas de PWM.

Programé los bits de fusible inferiores (0xBF - 8MHz + cristal externo., PB0 utilizado para generar reloj) para que salga su reloj de cuarzo en PB0 pin. El problema es que si manejo mi ATmega con cuarzo de 16MHz, obtengo una salida de 8MHz. Si uso cuarzo de 20MHz, obtengo una salida de 4MHz en PB0 . El reloj más alto que obtengo es de cuarzo de 12MHz, luego obtengo 12MHz en PB0 .

Es bastante extraño ya que la frecuencia va en dirección opuesta. ¿Estoy haciendo algo mal?

    
pregunta arasu

1 respuesta

2

Verifique la configuración de los bits de fusible:

  • Debería elegir el oscilador de cristal de giro completo, que es CKSEL3...1 debería ser 011.
  • Luego puedes elegir " Crystal Oscillator, lentamente aumentando ", que es CKSEL0 es 1 y SUT1..0 es 11.
  • Has seleccionado 8 MHz, ¿por qué? Si utiliza 16 MHz, no es la configuración correcta.
  • CLKO pin dará salida al reloj del sistema, que se puede dividir por el prescaler.
  • Consulte el capítulo 9.12.2 en la hoja de datos. El registro CLKPR debe tener los bits CLKPS3...0 establecidos en 0, por lo que le da un valor de preescala de 1.
  • Asegúrese de que el bit de fusible CKDIV8 no esté habilitado, ya que esto dividirá el reloj entre 8.

Por lo tanto, es más probable que 0xB7 sea la configuración correcta, no el 0xBF. Consulte esta calculadora

    
respondido por el zupazt3

Lea otras preguntas en las etiquetas