Parpadear, cantando, Marioman (4 / 5 paso)

Paso 4: Crear el firmware para Marioman

La attiny13A cuenta con 1K de flash programable y 64bytes de SRAM.
El archivo tar adjunto tiene el archivo de código fuente así como firmware compilado para descargar.

Se utilizaron tres matrices en el código c para generar la música

  • Freq [] - las frecuencias de cada nota
  • [] longitud - longitud de cada nota
  • [demora] - pausa entre cada nota

La matriz de frecuencia no tiene las frecuencias reales sino más bien el valor para poner en el registro TTCROB para generar la onda cuadrada de la pin PB0.

Aquí está un breve resumen de los cálculos y la configuración de pines para la generación de la onda cuadrada:

  • El attiny13A tiene un oscilador interno a 9,6 MHz
  • El reloj interno de IO es el oscilador dividido por 8 o 1,2 MHz
  • Un temporizador interno está configurado en un registro de 8 bits a contar cada ciclo de reloj con prescaler de 8.
  • Esto se traduce en una señal igual a 1 / (1.2 MHz / 8) =.006667ms
  • El attiny13A está configurado para comparar lo que está en el registro de TCCR0B con el temporizador de 8 bits y cambiar un pin cuando coinciden.
  • Por ejemplo, con el fin de generar una onda cuadrada a 524 Hz (una octava sobre C media) que tiene un período de 1.908ms.

1.908ms = 286 reloj garrapatas (1.908/.0067)
Dividir 286 por 2 para cambiar el pin en t/2 (286/2 = 143)
Puesto 143 en el registro de TTCR0B para generar esta nota.

Este es todo el código necesario configurar el temporizador, hacer la comparación y una onda cuadrada de salida:

 TCCR0A |= (1<<WGM01); // configure timer 1 for CTC mode TCCR0A |= (1<<COM0A0); // toggle OC0A on compare match TCCR0B |= (1<<CS01); // clk/8 prescale TTCR0B = 143; // generate a square wave at 524Hz 

Para retrasar los tonos y las pausas entre ellos se utilizó una función de retardo simple:

 void sleep(int ms) { int cnt; for (cnt=0; cnt<(ms); cnt++) { int i = 150; while(i--) { __asm("NOP"); } }} 

Esta cuenta regresiva de 150 donde cada ciclo NOP es aproximadamente.006667ms.

Lo último que hace el código es recorrer los arreglos de discos, generan la música y parpadean los LEDs.

Esto se hace en un continuo bucle con el siguiente código:

 const uint8_t freq[] PROGMEM = { ... data };const uint8_t length[] PROGMEM = { ... data };const uint8_t delay[] PROGMEM = { ... data };...while (1) { for (cnt=0; cnt<156; cnt++) { OCR0A=pgm_read_byte(&freq[cnt]); output_toggle(PORTB,PB3); output_toggle(PORTB,PB4); sleep( pgm_read_byte(&length[cnt]) ); output_toggle(PORTB,PB3); output_toggle(PORTB,PB4); // stop timer TCCR0B = 0; sleep ( pgm_read_word(&delay[cnt]) ); // start timer TCCR0B |= (1<<CS01); // clk/8 prescale }} 

Hay 156 elementos en los arreglos de discos de retardo de frecuencias de longitudes, este bucle recorre los. PIN PB3 y PB4 son cada uno fijada por lo que se alternan con cada nota el primer sueño es la longitud de la nota que tocamos después de establecer el registro de OCR0A en el valor adecuado. El segundo sueño es la pausa entre las notas que tocamos.

En el código anterior podría tener aviso las dos funciones pgm_read_byte() y pgm_read_word(), así como la palabra clave PROGMEM.

Con un chip incrustado como el attiny la cantidad de SRAM es muy limitada, en este caso sólo 64bytes. Los arreglos de discos que estamos utilizando para todos los datos de longitud de frecuencia de retardo son mucho más grandes que 64bytes y por lo tanto no pueden ser cargados en memoria. Mediante el uso de la Directiva de avr-gcc PROGMEM especial que estos arreglos de discos de datos de gran tamaño les impide cargar la memoria, en cambio ellos pueden leer flash.

Artículos Relacionados

Programa de una cadena de luces de Navidad a parpadear el código morse con Arduino y Snap circuitos

Programa de una cadena de luces de Navidad a parpadear el código morse con Arduino y Snap circuitos

esto es un proyecto de mi hijo Dylan (9) y pongo usando una placa de circuito de Arduino, un conjunto de broche de presión del circuito y una cadena de luces de Navidad.Lo que usted necesita:Un Arduino: Un Arduino es un equipo en una sola placa de ci
Parpadear LED| Fituro

Parpadear LED| Fituro

Bueno yo conozco a que mucha gente le gustaría empezar con arduino, así que he decidido hacer este tutorial porque es perfecto para principiantes. Como se puede leer en el título usted aprenderá a programa que hace parpadear un LED. Bueno espero que
"Parpadear" - una escultura de globo ocular intermitente de prototipos

"Parpadear" - una escultura de globo ocular intermitente de prototipos

Como artista trabajando con diversas formas de tecnología, me a menudo encuentro imaginando creaciones fuera de mi alcance tecnológicamente. Mi escultura de Blink es un ejemplo perfecto. Primero pensé en esta pieza hace varios años, pero diversos pro
Parpadear módulo

Parpadear módulo

Uno de los módulos comunes utilizados en la fabricación de robots sencillos es el módulo parpadeará. Se trata de photocoupling un LED a una luz de seguridad de la bicicleta. Cuando se enciende la luz de seguridad, enciende el motor y cuando la luz se
Introducción a LinkIt uno - parpadear un LED

Introducción a LinkIt uno - parpadear un LED

¡Hola!¿Usted a menudo se confunden por el mundo entero de nuevas tarjetas y tecnología que siguen llegando cada pocos meses?¿A menudo busca en google para hacer sentido de todo esto?¿Estás dispuesto a hacer proyectos realmente impresionantes pero no
Parpadear un LED con cebolla Omega

Parpadear un LED con cebolla Omega

Ayer, recibí el Omega de la cebolla, que respaldé en Kickstarter un par de meses atrás. Omega de la cebolla es un ordenador monoplaca de Linux, corriendo Open WRT y puede conectarse fácilmente a internet (en realidad tiene dos antenas Wi-Fi). Creo qu
Acuario de Hotpoint WF541 parpadear luces de muerte Fix, reparar.

Acuario de Hotpoint WF541 parpadear luces de muerte Fix, reparar.

Aquí es una rápida instructivo de cómo me fijo mi lavadora, que no encienda correctamente.Todos o la mayoría de las luces vino en comenzó a parpadear y no pudo arrancar la máquina.Conexión y desconexión a la red trabajó durante un mes o así, pero emp
Parpadear un LED con lenguaje ensamblador y un PIC

Parpadear un LED con lenguaje ensamblador y un PIC

para decir lo tan obvio, hay muchos sabores de microcontroladores en el mundo.  Existen innumerables aplicaciones para ellos.  Este Instructable cubrirá los pasos necesarios a parpadear un LED usando un microcontrolador PIC y el lenguaje de ensamblad
LED mod pickup guitarra eléctrica *** actualizado con esquema para parpadear leds y video! ¿

LED mod pickup guitarra eléctrica *** actualizado con esquema para parpadear leds y video! ¿

Ever quería que su guitarra sea único? ¿O una guitarra que hace todo el mundo celoso de él? ¿O estás cansado del look antiguo llano de la guitarra y quieren ataviar encima? Bueno, en este muy simple Ible te voy a mostrar cómo se iluminan las pastilla
Parpadear una serie de LEDs utilizando lenguaje de programación Python y frambuesa Pi

Parpadear una serie de LEDs utilizando lenguaje de programación Python y frambuesa Pi

Resumen de pasosEn la primera fase, voy a instalar sólo un LED. A continuación, descargar el módulo de python de clase LED que representan un hardware LED. Ejecuto la clase LED módulo python a parpadear eso LED. La primera fase sirve como una "prueba
Parpadear un LED con frambuesa pi

Parpadear un LED con frambuesa pi

Hoy voy a publicar como a parpadear un led con frambuesa pi. Un LED parpadea es una tarea para principiantes y simple.componentes necesarios:Frambuesa pi.2 macho a hembra conectores.Una resistencia de 330 omh.UN LED.Un protoboard.Paso 1: procedimient
Parpadear con ESP8266 y Visuino

Parpadear con ESP8266 y Visuino

En mi último Instructable, mostró cómo preparar el IDE de Arduino para módulos de programa ESP 8266 .En este Instructable mostrará cómo puede programar el ESP 8266 con Visuino.Es una tradición empezar con un proyecto de abrir y cerrar, así que vamos
Parpadear comparador en ordenador Personal

Parpadear comparador en ordenador Personal

realizar una tarea en su equipo que podría realizarse antes por una máquina grande, torpe y costosa y hacerlo mejor. Este Instructable utiliza muchas palabras para describir un procedimiento bastante fácil, pero la recompensa merece la pena. A reír,
Cómo a parpadear {respiración estilo} LED$ mientras que son playin re4/mgs/crysis

Cómo a parpadear {respiración estilo} LED$ mientras que son playin re4/mgs/crysis

HELLOW!! Cada uno. Estoy con un nuevo instructivo.¿Eres un hardcore gamer? ¿Playin adrenalina juegos como la serie MGS, Resident evil, crysis, Lost planet etc.? ¿Quieres mostrar tus amigos ¿cómo están bombeando sus pulmones?Entonces esta instructable