Configuración de una fuente de reloj externa en un ATmega8

Estoy intentando configurar V-USB en mi ATmega8-16PU ( hoja de datos ), y me vendría bien un poco de ayuda para conectarle una fuente de reloj de cristal externa. He tratado de entender la hoja de datos lo mejor que he podido y he sacado algunas conclusiones que agradecería si alguien pudiera verificar y criticar. Como referencia, usaré un cristal de 16 MHz o 20 MHz, entre los cuales también necesito ayuda para decidir.

Aquí está mi plan hasta ahora, basado en mi entendimiento:

  • Conecte mi cristal externo (dos pines uno), a los pines XTAL1 y XTAL2 del IC
  • Utilice dos condensadores cerámicos de 22pF
  • Basado en la Tabla 2 de la página 26, CKSEL3..0 tiene que ser 1111-1010
  • CKOPT no estará programado (según la descripción en la parte superior de la página 27) porque no necesito un gran cambio de salida, no estoy manejando nada más con el cristal
  • CKSEL3..1 tiene que ser 101, 110 o 111 porque mi cristal es superior a 1 MHz
  • CKSEL0 debe establecerse en 1 y SUT1..0 en 11 (basado en la tabla 5 en la página 28) porque quiero permitir el máximo tiempo de inicio para ir a lo seguro

Correcto, he tomado estas notas y no sé adónde ir desde aquí. Por ejemplo:

  1. ¿Qué son todas estas cosas (CKSEL3..1, CKSEL3..0, etc.) y cómo sé qué valor elegir para CKSEL3..0 y CKSEL3..1 si tengo una variedad de opciones para elegir? ?
  2. ¿Qué debo cambiar y cómo configuro los bits del fusible para habilitar esta configuración? Estoy usando avrdude para programar mi microcontrolador.
  3. ¿Necesito usar un perro guardián? Si lo hago, no parece que haya ninguna configuración para habilitarlo o deshabilitarlo (parte inferior de la página 26), o ¿siempre está habilitado?

Gracias a todos. Perdón por todas estas preguntas, soy muy nuevo en todo esto, pero estoy decidido a aprender.

Respuestas (1)

CKSEL generalmente significa selección de reloj. Hay varias opciones que se pueden seleccionar a través de un multiplexor interno, algunas para prueba, otras para fuentes alternativas.

Como está usando un xtal, puede proporcionar el código para seleccionar esa opción: que se encuentran en las primeras 2 filas de la página 26. Puede usar las 3 filas inferiores de la tabla 4 para un cristal. Cada uno está sintonizado a un rango particular de frecuencias como se muestra. Si su referencia de cristal fue diseñada para oscilar alrededor de 4 MHz, configuraría los bits de selección en código, 111, por ejemplo. 16Mhz solo funciona con CKOPT bajo usando cualquiera de los tres códigos seleccionados que se muestran en la fila 4 de la tabla.

Los límites externos deben ser 12-22pF, no 22uF para el xtal según la misma tabla. También solo especifica un límite máximo de oscilador de 16 MHz, por lo que no usaría un xtal de 20 MHz.

Me parece que la funcionalidad del temporizador de vigilancia es interna.

*Tenga en cuenta que xtal y crystal se usan aquí como sinónimos.

Gracias por la respuesta. Desafortunadamente, no responde algunas de mis preguntas. Primero, edité los 22uF a pF, fue un error, lo siento. En segundo lugar, en la primera fila de la página 26, dice que puedo elegir CKSEL3..0 para que sea 1111 - 1010. ¿Qué significa eso? ¿Por qué me da un rango? Tercero, ¿cómo sabes que una frecuencia de alrededor de 4 MHz corresponde a 111? En cuarto lugar, parece que el límite de 16 MHz solo se aplica a los resonadores, ¿es así? ¿Dónde dice que se aplica un límite de 16 MHz a los cristales externos? Finalmente, ¿qué hago a continuación, una vez que elijo mi configuración? Gracias de nuevo, muy apreciado.
CKSEL tiene 4 bits que puede seleccionar a través de ff bits. El rango de esos 4 bits es como se muestra: 1111-1010 para su aplicación (mire la fila 1 tabla 2), el bit más a la izquierda o MSB siempre será 1 para usted, porque solo necesita elegir los 3 correctos para su rango de frecuencia ( explicado en la tabla 4). Ya que dijiste que vas a usar >=1MHz y CKOPT=0, entonces cualquiera de los códigos de bit, 101,110,111 debería ser adecuado para tu aplicación. Mire de cerca la tabla 4, p 27. Tenga en cuenta que CKSEL 3..1=111 corresponde al rango 3.0-8Mhz. Usarás el que quieras que corresponda a 16MhZ que está justo debajo si te entendí.
como se menciona en la hoja de datos, le ofrece algunos circuitos internos para optimizar la frecuencia externa y el rango que proporciona. Le dices ese valor a través de los bits. Si crees que esto fue útil, puedes darme un empujón ya que soy nuevo aquí.
Gracias, todo parece haber salido muy bien. FWIW, aquí está el comando avrdude que usé: avrdude -c usbasp -p m8 -U lfuse:w:0b11111111:m -U hfuse:w:0b11001001:m... puede ser útil para futuros lectores de esta pregunta. Para que quede claro, este comando se usó para configurar un cristal externo de 16MHz en mi ATMega8 usando el programador USBasp.