¿Cómo configuro los fusibles de velocidad de reloj en un ATtiny85 cuando uso un Arduino como programador?

17

Sigo este tutorial , programando el ATtiny85 con un Arduino, usándolo para reproducir algunos tonos (A través de un altavoz piezoeléctrico). Estoy luchando para obtener los tonos en el tono correcto (estoy creando las formas de onda manualmente, ya que la función tone () no se admite en el ATtiny85).

Creo que el problema puede deberse a diferentes velocidades de reloj en Arduino y ATtiny. Entiendo que la velocidad del reloj puede modificarse en el ATtiny, ¿cómo puedo lograr esto utilizando el entorno arduino?

    
pregunta fearoffours

7 respuestas

2

Creo que el software Arduino (bibliotecas y todo) asume que está operando a 16MHz. Si aplica esa suposición al reloj en el que realmente se está ejecutando a ... las cosas deberían funcionar. Suponiendo que está ejecutando el Tiny85 en su oscilador interno, creo que funciona a 1 MHz, así que multiplique todas sus declaraciones de demora (y otras nociones de tiempo) por 16.

Si necesita una mayor precisión de la que proporciona el oscilador interno, debería pensar en usar un cristal externo o un resonador, pero necesitará cambiar la configuración de los fusibles del AVR para que funcione, y creo que necesitará un programador. como AVRISP mkII para hacer eso con AVR Studio (mi recomendación).

No sé mucho sobre el boceto de ArduinoISP, pero a mi me parece que es un poco el protocolo ISP para cargar un programa en el chip de destino (no el Mega328 a bordo), no estoy seguro de que esté equipado para manipular los fusibles. ArduinoISP se documenta aquí enlace , fwiw. Tenga en cuenta que no puede utilizar un UNO actualmente para ejecutar el boceto ArduinoISP. No me parece que pueda usar el boceto para hacer que Arduino sea una interfaz viable para usar las herramientas de la GUI de AVR Studio.

EDIT : parece que las cosas se han puesto al día y que UNO es viable para ArduinoISP ahora. Gracias por todos los comentarios

    
respondido por el vicatcu
4

Estoy usando Arduino UNO + ArduinoISP con éxito.

Agregue los indicadores -U a su comando avrdude para configurar cualquiera o todos los tres fusibles ATtiny.

avrdude -p attiny85 -P com8 -c stk500v1 -b 19200 -U lfuse:w:0x6f:m -U flash:w:main.hex

La selección del reloj se realiza en bits [3: 0] en el tercer fusible ('Fuse Low Byte'). Configúrelos de la siguiente manera para hacer uso de un cristal externo (de 8 MHz o más rápido):

-U lfuse:w:0x6f:m

Su definición (infiero) debe ser algo como: [Fuse Low Byte]: [write]: [hex valor]: [establecer manualmente]

El valor predeterminado para los cuatro bits altos de este byte es 0110 , así que deje el 6 en 0x6f tal como está, y solo cambie el segundo dígito, el f (su valor predeterminado es 2 ).

NB: Si sus procesos tardan más o menos tiempo de lo que espera, verifique el reloj de su prescalizador y su definición de F _ CPU.

    
respondido por el JellicleCat
3

Intente usar el tutorial relacionado del mismo grupo (MIT's High-Low Tech) titulado Programando un ATtiny con Arduino 1.0 .

Un resumen rápido: de las herramientas- > Menú de la placa en el IDE de Arduino, seleccione el ATtiny85 y la frecuencia que desea ejecutar en (1 u 8 Mhz reloj interno o 20Mhz cristal externo) y luego use las Herramientas - > Grabar el cargador de arranque ". Creo que al seleccionar la placa de velocidad deseada se modifica la forma en que funcionan el retardo () y otras funciones de Arduino relacionadas con el tiempo para sincronizarse con la velocidad del reloj.

He tenido éxito con este enfoque utilizando algunos chips ATtiny84. El programa simple de parpadeo es fijo, así como el tiempo más sensible requerido para controlar manualmente los pulsos enviados a un servo usando delayMicroseconds ().

    
respondido por el Tom B
1

Parece que está usando ArduinoISP, intente usar AVR Studio o la línea de comandos opciones para avrdude . Dependiendo de cómo se haya escrito el ArduinoISP, puede funcionar como un AVRISP mkII de Atmel o similar.

    
respondido por el Nick T
1

La configuración predeterminada de los fusibles para el ATtiny85 es: lfuse 0x62, hfuse 0xdf, efuse 0xff. Esto utiliza el oscilador RC interno (8 MHz) con "dividir entre 8", por lo que el reloj es de 1 MHz.

Consulte enlace para ver más configuraciones de fusibles.

Aún puede usar avrdude directamente para cambiar la configuración de los fusibles de su ATtiny85 incluso cuando usa un ArduinoISP como programador.

Si terminas cambiando el fusible manualmente para alterar el reloj, asegúrate de editar la línea attiny85.build.f_cpu de tu archivo [arduino_folder] \ hardware \ attiny45_85 \ boards.txt.

    
respondido por el Craig
0

Creo que puedes configurar los fusibles con el ArduinoISP, pero no con el IDE de Arduino, pero con avrdude, revisa este enlace . Nunca lo probé yo mismo.

El tutorial dice explícitamente que puedes usar Arduino UNO y lo he probado y trabajado, así que puedo confirmarlo, por lo que la página ArduinoISP está desactualizada y la advertencia de UNO debe ignorarse. Si su UNO fue uno del primer lote, es probable que tenga un cargador de arranque defectuoso, deberá volver a instalar el cargador de arranque. Consulte esta página para obtener más información ( ignore los números de serie, todos mis UNO no eran de esa serie y tuvieron problemas).

Las bibliotecas principales portadas que descargó del tutorial están escritas para usar el oscilador interno de 1 MHz (confirmado desde el archivo boards.txt), por lo que tal vez el problema del timming pueda estar en las bibliotecas centrales portadas o en su código.

Saludos cordiales

    
respondido por el Havok
0
  1. Elija un tablero ATTiny de "administrador de tableros" que incluya el ATTiny85. Esto está en el menú "Herramientas". Creo que esto incluye "16MHz interno PLL" ahora. (Puede instalar uno desde enlace )

  2. Seleccione ATTiny85 explícitamente si es necesario.

  3. Elige un reloj. Hasta que sepa más, elija un reloj interno .

  4. Haz clic en "Grabar el cargador de arranque" como elemento de menú.

Precaución, es posible que ya no pueda programar la MCU si elige valores muy bajos. Si esta es su intención, haga esto último a menos que tenga repuestos o un programador de alto voltaje para restablecer los fusibles.

    
respondido por el mckenzm

Lea otras preguntas en las etiquetas

Comentarios Recientes

Puede habilitar este comportamiento utilizando el pin 11 y el pin 16 en el ATmega. Esta información también se aplica a un IDE. Normalmente instalo en la línea de comandos, en Arduino IDE cuando los argumentos de la línea de comandos para programar son: "sudo valgrind". Asegúrese de hacer una copia de seguridad de todos sus cambios de hardware y flashear la antigua placa Linux con un controlador nuevo para asegurarse de que su ATtiny y Arduino no choquen. Después de una instalación exitosa, asegúrese de compilar... Lees verder