Estoy siguiendo este tutorial , programando el ATtiny85 con un Arduino, usándolo para reproducir algunos tonos (a través de un altavoz piezoeléctrico). Estoy luchando por obtener los tonos en el tono correcto (estoy creando las formas de onda manualmente, ya que la función tone () no es compatible con el ATtiny85).
Creo que el problema puede deberse a diferentes velocidades de reloj en Arduino y ATtiny. Entiendo que la velocidad del reloj se puede alterar en el ATtiny, ¿cómo puedo lograr esto usando el entorno arduino?
arduino
attiny
fuse-bits
clock-speed
miedo
fuente
fuente
Respuestas:
Creo que el software Arduino (bibliotecas y todo) asume que estás operando a 16MHz. Si aplica esa suposición al reloj en el que realmente se está ejecutando ... las cosas deberían funcionar. Suponiendo que esté ejecutando el Tiny85 en su oscilador interno, creo que funciona a 1MHz, así que simplemente multiplique todas sus declaraciones de retraso (y otras nociones de tiempo) por 16.
Si necesita una precisión mejor que la que proporciona el oscilador interno, debería pensar en usar un cristal externo o un resonador, pero necesitará cambiar la configuración de fusibles del AVR para que funcione, y creo que necesitará un programador como el AVRISP mkII para hacer eso con AVR Studio (mi recomendación).
No sé mucho sobre el boceto ArduinoISP, pero para mí parece que golpea 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 fusibles. ArduinoISP se documenta aquí http://arduino.cc/en/Tutorial/ArduinoISP , fwiw. Tenga en cuenta que no puede utilizar una 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 GUI de AVR Studio.
EDITAR : Parece que las cosas se han puesto al día y una UNO es viable para ArduinoISP ahora, gracias por los comentarios.
fuente
delay(20)
insted dedelay(40)
en su definición devoid heartbeat()
.)Estoy usando Arduino UNO + ArduinoISP con éxito.
Agregue
-U
banderas a suavrdude
comando para configurar cualquiera o todos los tres fusibles ATtiny.La selección del reloj se realiza en bits [3: 0] en el tercer fusible ('Fusible de byte bajo'). Ajústelos de la siguiente manera para utilizar un cristal externo (de 8MHz o más rápido):
Su definición (infiero) debe ser algo así como: [Fusible de byte bajo]: [escribir]: [valor hexadecimal]: [establecer manualmente]
El valor predeterminado para los cuatro bits altos de este byte es
0110
, así que deje el6
in0x6f
como está y solo cambie el segundo dígito, elf
(su valor predeterminado es2
).NB: Si sus procesos tardan más o menos de lo esperado, verifique su escalador de reloj y su definición de F _ CPU.
fuente
-U lfuse:w:0x6f:m
opción avrdude anterior . Necesitaré restablecerlo usando una configuración de alto voltaje. Entonces, una advertencia para las personas (como yo) que están tratando de restablecer los fusibles sin saber lo que están haciendo.Intente usar el tutorial relacionado del mismo grupo (High-Low Tech del MIT) titulado Programming an ATtiny w / Arduino 1.0 .
Un resumen rápido: desde el menú Herramientas-> Tablero en el IDE de Arduino, seleccione el ATtiny85 y la frecuencia con la que desea ejecutar (reloj interno de 1 u 8 Mhz o cristal externo de 20 Mhz) y luego use Herramientas -> Grabar cargador de arranque " Creo que seleccionar la tarjeta de velocidad deseada modifica la forma en que funcionan el delay () y otras funciones relacionadas con el tiempo de Arduino para sincronizarse con la velocidad del reloj.
He tenido éxito con este enfoque usando algunos chips ATtiny84. El programa de parpadeo simple es fijo, así como también se requiere un tiempo más sensible para controlar manualmente los pulsos enviados a un servo usando delayMicroseconds ().
fuente
Parece que está usando ArduinoISP, intente usar AVR Studio o las opciones de línea de comando para
avrdude
. Dependiendo de cómo se escribió el ArduinoISP, puede funcionar como un Atmel AVRISP mkII o similar.fuente
Los ajustes de fusibles predeterminados para el ATtiny85 son: lfuse 0x62, hfuse 0xdf, efuse 0xff. Utiliza el oscilador interno RC (8 MHz) con "dividir por 8", por lo que el reloj es de 1 MHz.
Consulte http://www.engbedded.com/fusecalc para obtener más configuraciones de fusibles.
Todavía puede usar avrdude directamente para cambiar la configuración de fusibles de su ATtiny85 incluso cuando usa un ArduinoISP como programador.
Si termina cambiando manualmente el fusible para alterar el reloj, asegúrese de editar la
attiny85.build.f_cpu
línea de su archivo [arduino_folder] \ hardware \ attiny45_85 \ boards.txt.fuente
Creo que puede configurar los fusibles con ArduinoISP, pero no con Arduino IDE sino con avrdude, consulte este enlace . Nunca lo probé yo mismo.
El tutorial dice explícitamente que puede usar Arduino UNO y lo he probado y funcionó, por lo 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, probablemente tenga un gestor de arranque defectuoso, deberá volver a cargar el gestor de arranque. Revisa esta página para obtener más información (ignore los números de serie, todos mis UNO no eran de esa serie y tenían problemas).
Las bibliotecas centrales portadas que descargó del tutorial están escritas para usar el oscilador interno de 1MHz (confirmado por el archivo boards.txt), por lo que tal vez el problema de ajuste podría estar en las bibliotecas centrales portadas o en su código.
Saludos cordiales
fuente
Elija un tablero ATTiny del "administrador de tableros" que incluye el ATTiny85. Esto está en el menú "Herramientas". Creo que esto incluye "PLL interno de 16MHz" ahora. (Puede instalar uno desde http://drazzy.com/package_drazzy.com_index.json )
Seleccione ATTiny85 explícitamente si es necesario.
Elige un reloj. Hasta que sepa más, elija un reloj interno .
Haga clic en "Grabar cargador de arranque" como elemento del 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 al final a menos que tenga repuestos o un programador de alto voltaje para reiniciar los fusibles.
fuente