¿Cómo puedo cambiar la frecuencia de mi ATmega168?

0

Soy completamente nuevo en la programación de MCU. Tengo un ATmega168 y un oscilador de 20 MHz. Mi pregunta es, ¿cómo puedo "decirle" al controlador que use este oscilador? Intenté leer la hoja de datos, ¡pero eso no ayudó mucho!

¡Mi conjetura es que debería configurar los "bits de fusible"!

¿Es posible que use este oscilador y ejecuto el controlador con una frecuencia más baja, por ejemplo 16 MHz?

Por cierto, estoy usando Atmel Studio 6 para programar esto.

ACTUALIZAR

Después del comentario de dextorb, he subido esta imagen:

En la hoja de datos Tabla9-5 , dicen que para un rango de frecuencia de 20MHz CKSEL3..1 debe ser 011 ! ¿Dónde puedo poner este valor y después de configurarlo, significa que estoy listo para ir con 20 MHz?

    
pregunta Engine

1 respuesta

5

La fuente de reloj en AVR se configura mediante fusibles que pueden ser cambiados por un programador externo (el mismo que se usa para cargar el archivo HEX), pueden configurar la fuente de reloj en RC interno, reloj externo, cristal, etc. Aquí hay una calculadora de fusibles que puede ser útil enlace

Después de configurar los fusibles de la fuente del reloj, puede cambiar el prescaler del reloj para obtener una frecuencia de núcleo más baja, el ATmega48 / 88/168/328 tiene un fusible CLKDIV8 que controla el valor cargado predeterminado a CLKPR (registro de preescala del reloj) a cualquiera de

  • clk / 1
  • clk / 8

Aparte de ese valor cargado predeterminado, puede cambiar la escala de precarga del reloj a voluntad durante el tiempo de ejecución, todo lo que necesita es incluir el siguiente encabezado

#include <avr/power.h>

y llame a la siguiente función con el valor apropiado que desea usar

   clock_prescale_set(clock_div_1),    // divide by 1, for example with 20MHz clock result      20MHz
   clock_prescale_set(clock_div_2),    // divide by 2, for example with 20MHz clock result      10MHz
   clock_prescale_set(clock_div_4),    // divide by 4, for example with 20MHz clock result       5MHz
   clock_prescale_set(clock_div_8),    // divide by 8, for example with 20MHz clock result     2.5MHz
   clock_prescale_set(clock_div_16),   // divide by 16, for example with 20MHz clock result   1.25MHz
   clock_prescale_set(clock_div_32),   // divide by 32, for example with 20MHz clock result  0.625MHz
   clock_prescale_set(clock_div_64),   // divide by 64, for example with 20MHz clock result  0.312MHz
   clock_prescale_set(lock_div_128),   // divide by 128 for example with 20MHz clock result  0.156MHz
   clock_prescale_set(clock_div_256),  // divide by 256, for example with 20MHz clock result 0.078MHz

manual de power.h

    
respondido por el alexan_e

Lea otras preguntas en las etiquetas