3 votos

¿Es obligatorio el uso de un oscilador externo en el diseño de un circuito de arduino?

Estoy diseñando un circuito para arduino. Voy a utilizar Atmega328p y se conectarán algunos cabezales macho para el acceso a los pines y 6 cabezales macho para la programación (MOSI,MISO,SCK,RST,Vcc,GND). Entonces, ¿es obligatorio usar un oscilador externo? Sé que el MCU también puede funcionar con un oscilador interno, pero no estoy seguro de que al programar a través de USBasp funcionará o no. He oído en alguna parte que al programarlo usando USBasp se requiere un oscilador externo. Entonces, ¿se requiere un oscilador externo o no?

0 votos

¿qué problema tienes al conectar el oscilador externo a tu circuito?

2voto

Borgar Puntos 12493

La fuente de reloj por defecto para el atmega328p es el oscilador RC interno a 8MHz con el fusible CKDIV8 programado. Ver página 28 aquí .

Puedes programar absolutamente la pieza usando el oscilador RC interno. Después de todo, la pieza viene con esta configuración por defecto. Asumiendo que quieres programar la pieza usando el IDE de arduino y que todo se comporte como se espera, necesitarás cambiar algunas configuraciones en tu archivo boards.txt de arduino para que la fuente de reloj interna sea seleccionada (como sabes las placas de arduino que usan el atmega328 vienen con un oscilador externo y el archivo boards.txt por defecto instruye a la pieza a usar el oscilador externo) y luego grabar el cargador de arranque. En el archivo boards.txt tendrás que modificar los fusibles para seleccionar la fuente de reloj adecuada. Una solución fácil es modificar la configuración de la placa uno ya que esa placa utiliza el mismo chip. Copie/pegue todas las configuraciones de uno para que tenga una nueva entrada de placa (llámela suUno o algo así) en el archivo. La placa Uno tiene las siguientes configuraciones:

uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.build.f_cpu=16000000L

Querrás modificar eso a:

yourUno.bootloader.low_fuses=0xe2
yourUno.bootloader.high_fuses=0xda
yourUno.build.f_cpu=8000000L

Esto debería seleccionar el RC interno de 8MHz como su fuente de reloj. Ten en cuenta que según los comentarios de abajo hay otras maneras de hacer esto si estás bien con un reloj de 1 MHz.

0 votos

Tenga en cuenta que los ajustes de los fusibles sólo se utilizan cuando Burn Bootloader se selecciona en el IDE de Arduino. Si usted tiene la intención de no utilizar nunca esta opción, entonces no hay necesidad de cambiar esa parte de la configuración. Ten en cuenta también que el gestor de arranque por defecto de la Uno asume un reloj de 16MHz; tendrás que modificarlo y reconstruirlo si quieres que funcione a 8MHz.

0 votos

@IgnacioVazquez-Abrams si buen punto, pero estoy asumiendo que va a programar la parte usando el IDE/librería de arduino. Si no graba el bootloader entonces cosas como delay() no se comportarán como se espera.

0 votos

Sí, tengo que cargar el bootloader primero. Así que quieres decir que mientras subo el gestor de arranque, tengo que cambiar uno.build.f_cpu=16000000L a Uno.build.f_cpu=8000000L y entonces puedo diseñar mi circuito sin oscilador. y durante la programación elegiré el oscilador interno. ¿Estoy en lo cierto?

2voto

chrisbunney Puntos 228

Sólo se requiere un oscilador externo durante la programación si los fusibles están programados para requerir uno durante el funcionamiento normal. Sin embargo, no es necesario que sea un cristal; es posible inyectar un reloj al menos 3 veces más rápido que el reloj de programación a través de XTAL1 si es necesario. Consulta la sección "Programación de la memoria", subsección "Descarga en serie" de la hoja de datos del ATmega328P para más detalles.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X