Resonador de cristal ATmega168 más de 20 MHz

Intento hacer un reproductor WAV basado en tarjeta SD con ATmega168 . He conectado un cristal de cuarzo de 16 MHz y puede dar una frecuencia portadora de 64 kHz y una frecuencia de muestreo de 8 kHz.

Pero en ese proyecto puedo multiplicar mi frecuencia. Así que conecto un cristal de cuarzo de 16 MHz a ATtiny85 , lo multiplico a 64 MHz y doy una frecuencia portadora de 250 kHz y una frecuencia de muestreo de 32 kHz, mucho mejor.

No puedo encontrar una función de multiplicación en la hoja de datos de ATmega168, ¿puedo simplemente conectar un cristal de cuarzo de 64 MHz a MK?

No puedes hacer esto. La arquitectura no está diseñada para funcionar a velocidades de reloj superiores a 20 Mhz, habrá un comportamiento indefinido.
... ¿Qué tipo de archivos de onda estás reproduciendo que tienen una frecuencia portadora?
La referencia de "frecuencia portadora" es la velocidad de fotogramas de PWM.

Respuestas (3)

No puedes hacer esto. La arquitectura no está diseñada para funcionar a velocidades de reloj superiores a 20 MHz, habrá un comportamiento indefinido.

Las fuentes de reloj externas no se multiplican dentro de los AVR/ATtiny, solo se dividen. Los procesadores más avanzados, como los procesadores ARM Cortex de la serie SAM de Atmel, tienen circuitos PLL incorporados para la multiplicación de frecuencia, lo que le permite darle una fuente externa de 12 MHz y multiplicarla hasta los 64,72, 120 MHz necesarios, etc. para el reloj maestro. . Parece que la serie ATtiny x5 tiene un PLL interno con un multiplicador x8, pero eso es solo para "periféricos", que es todo lo que necesita de todos modos para los temporizadores y periféricos PWM.

En los chips AVR que está utilizando, si lee las hojas de datos, no pueden operar en un reloj maestro superior a 20 MHz, e incluso eso lo está empujando si tiene una fuente de alimentación de baja calidad o condiciones de temperatura.

En el ATmega168, puede PWM a alrededor de 250 kHz con un reloj maestro de 16 MHz (desde una fuente externa) utilizando el modo "PWM rápido" del chip, sacrificando la resolución de bits a PWM de solo 6 bits.

Debe leer más sobre las fuentes de reloj, la división del reloj, cómo estos ATmegas manejan sus relojes y cómo se usan los "temporizadores" con el hardware PWM para crear estas señales "portadoras" a las altas velocidades que está buscando.

@DavidFreitag Es porque a medida que los transistores de conmutación en el núcleo de procesamiento se calientan, su resistencia aumenta y disminuyen la velocidad de conmutación y comienzan a funcionar mal si las cosas no son como deberían ser cuando el próximo ciclo está listo para comenzar. ¡Si reduce el calor, por supuesto que puede retrasar esto inevitable!
En realidad, me preocuparía el agrietamiento por congelación de las uniones de soldadura u otras fallas mecánicas, y la idea es una tontería cuando solo puede obtener un procesador Atmel SAM3 o SAM4 ARM y obtener 64Mhz + listo para usar, en solo 3.3V VCC, y nada de nitrogeno liquido tonto xD
@KyranF, PWM de 6 bits: ¿dónde puedo encontrar información al respecto? Intento encontrarlo en la hoja de datos y no puedo. ¿Debería simplemente iniciar el modo FastPWM de 0xFF a 0x3F en OCR0A, lo que significa 6 bits, y compararlo con OCR0B? Parece que podría obtener 250 kHz... ¿Estoy en lo cierto?
@gek0n Hay muchos blogs sobre personas que hacen esto, aquí hay uno con código dentro de las especificaciones.30ohm.com/2014/02/20/Fast-PWM-on-AtMega328
@KyranF Sí, pero simplemente decir que no puede hacer algo solo porque no se puede hacer a temperatura ambiente es una tontería. Casi tan tonto como hacer funcionar un AVR que se enfría con nitrógeno líquido.
@DavidFreitag se acepta su punto, pero preferiría adoptar la postura agresiva de "no" aquí, en beneficio de los novatos. Las personas aventureras siempre pueden intentar (ya menudo tener éxito) romper las barreras comúnmente aceptadas.

No, no funcionará. Consulte la hoja de datos. Hay grados de velocidad de 10MHz y 20MHz.

Grados de velocidad ATmega168

ATMega168 no tiene el periférico PLL interno de 64 MHz que está buscando, lo que de hecho multiplica la frecuencia de reloj de algunos de sus periféricos. La serie ATtinyX5 en el proyecto vinculado tiene este PLL. Solo los periféricos específicos admiten esta frecuencia PLL más alta y ciertamente no el núcleo en sí, por lo tanto, no puede simplemente conectar un reloj externo de alta frecuencia al dispositivo.

Aquí hay algunos AVR que son más o menos similares al ATtinyX5 utilizado en el artículo vinculado, que tienen soporte para PLL:

ATtiny26
ATtiny261a (The 'a' is an essential part of the part number! Similar for the other part numbers.)
ATtiny461a
ATtiny861a
ATtinyx5
ATmega128rfa1
ATmega16m1
ATmega16u2
ATmega16u4
ATmega32c1
ATmega32m1
ATmega32u2
ATmega32u4
ATmega32u6
ATmega64c1
ATmega64hve
ATmega64m1
ATmega8u2
ATtinyx61

Pero asegúrese de consultar la hoja de datos antes de la compra, ya que la implementación y las frecuencias admitidas en dispositivos específicos pueden diferir.