Paso 4: El lenguaje ensamblador programa
Este es el código para el programa de lenguaje ensamblador, el archivo .hex a continuación es el programa que se carga en el Attiny85:
;************************************ ; written by: JRV31 ; date: 2-20-15 ; version: 1.0 ; file saved as: FreqTest.asm ; for AVR: attiny85 ; clock frequency: 8MHz ;************************************ ; Program function: ; ; Test frequency of Attiny85 chips to see if they ; hold the +/- 10% specified in the data sheet. ; ;--------------------------------------- .nolist .include "./tn85def.inc" .list .def temp = r16 .def counter1 = r17 .def counter2 = r18 .def counter3 = r19 .org 0x0000 rjmp Init Init: ldi temp, 0b00000010 out DDRB,temp ; Configure PB1 as output. main: sbi PORTB, 1 ; Set PB1 (Turn on LED in 2 clock cycles) rcall delay cbi PORTB,1 ; Clear PB1 (Turn off LED in 2 clock cycles) rcall delay rjmp main ;=============================================== ; This subroutine is a triple nested delay loop. ; if counter1 = 2, counter2 = 30 and ; counter3 = 32 the delay this blink program ; runs at 504 Hz when the chip is running at 8 MHz. ;=============================================== delay: ldi counter1,2 ldi counter2,30 ldi counter3,32 count: dec counter3 cpi counter3,0 brne count ldi counter3,32 dec counter2 cpi counter2,0 brne count ldi counter2,30 dec counter1 cpi counter1,0 brne count ret
Y este es el archivo .hex ensamblado que se carga en el Attiny85s:
:020000020000FC :1000000000C002E007BBC19A03D0C19801D0FBCF6A :1000100012E02EE130E23A953030E9F730E22A95ED :0E0020002030C9F72EE11A951030A9F7089587 :00000001FF
Este archivo funciona en 504 Hz cuando se ejecuta a una velocidad de reloj de 8 MHz en mi prueba Attiny85 con un oscilador de cristal controlado. Cada chip se desarrollará en esta frecuencia si es controlado por mi cristal. Este es el estándar utilizado para medir la velocidad de los chips. Ejecutando esto en un chip usando el oscilador interno y medición de la diferencia podemos medir la velocidad de la viruta.
Copie este código en un archivo y asígnele el nombre FreqTest.hex.
Abra el IDE de Arduino y defina el tipo de junta "Attiny85 (reloj interno de 8 MHz)", y el cargador de arranque para configurar los fusibles por lo que el chip funciona a 8MHz.
Ahora copia el archivo FreqTest.hex en un Attiny85 con avrdude. AVRDUDE es el programa que utiliza el IDE de Arduino para cargar código así que ya lo tienes instalado.
Utilice este comando para cargar el programa:
sudo avrdude -b 19200 -c usbtiny -p t85 -v -e -U flash:w:FreqTest.hex
Medir la frecuencia con el multímetro. El valor medido más de 8.000.000 de 504 veces le dará la velocidad real del chip cuando se ejecuta en el reloj interno a 8 MHz.
Cada pieza fabricada tiene cierta tolerancia. El cristal que utiliza tiene una tolerancia de 30 PPM, así que todavía hay alguna posibilidad de error, pero se reduce al mínimo.