Tabla de contenido:

Parpadeo, canto, mariomano: 5 pasos
Parpadeo, canto, mariomano: 5 pasos

Video: Parpadeo, canto, mariomano: 5 pasos

Video: Parpadeo, canto, mariomano: 5 pasos
Video: Banban and Banbaleena + Panties = ??? Garten of BanBan Chapter 2 Animation 2024, Noviembre
Anonim
Parpadeando, Cantando, Marioman
Parpadeando, Cantando, Marioman

Utilice un attiny13a, dos LED y un altavoz de tarjeta de felicitación para crear un Marioman parpadeante que reproduzca la canción principal de Super Mario Brothers. ¡Este puede ser un proyecto fácil y de bajo costo para cualquiera que esté buscando una manera divertida de ingresar a la programación AVR! las notas de las canciones son generadas por una onda cuadrada emitida en un solo pin del microcontrolador AVR. Los LED que se alternan en cada nota están conectados a 2 pines cada uno del mismo chip.

Paso 1: Materiales y construcción

Materiales y construcción
Materiales y construcción

1 attiny13a

www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dCost: $ 1.40

  • 2 LED: cualquier LED servirá
  • 1 batería de litio de tipo botón

www.sparkfun.com/commerce/product_info.php?products_id=338 Costo: $ 2.00

1 soporte para celda de moneda

www.sparkfun.com/commerce/product_info.php?products_id=8822 Costo: $ 1.25

1 pequeño altavoz de una tarjeta de felicitación musical

Costo total de los materiales ~ $ 5 Los dos LED se conectaron directamente a dos pines de cada uno de los attiny13A. Se utilizan dos pines para cada LED, el segundo pin se establece bajo para usarlo como conexión a tierra. El límite de corriente de los pines de E / S en el AVR evitará que los LED dibujen demasiado, por lo que no es necesario conectar una resistencia. El parlante utilizado es típico de uno que se encuentra en una tarjeta de felicitación musical, cualquier parlante pequeño servirá, dado que este emite un tono de onda cuadrada, no es demasiado importante preocuparse por controlar el parlante o la calidad del sonido.

Paso 2: soldar el AVR a los LED y al altavoz

Soldar el AVR a los LED y al altavoz
Soldar el AVR a los LED y al altavoz
Soldar el AVR a los LED y al altavoz
Soldar el AVR a los LED y al altavoz

Para que los LED se extiendan como brazos, se dobla un pin sobre el AVR a cada lado. Al orientar el AVR de esta manera, es fácil conectarlo al altavoz (segunda imagen) ya que las conexiones están en los dos pines inferiores. Por motivos de estética, desea que la parte frontal del chip quede hacia afuera, así que asegúrese de que el altavoz esté orientado de la misma manera cuando está adjunto.

Paso 3: Programación del Attiny13a

Programación del Attiny13a
Programación del Attiny13a

Hay muchas opciones diferentes para programar AVR. Para este proyecto se usó el USBtiny que está disponible como un kit en el sitio de ladyadahttps://www.ladyada.net/make/usbtinyisp/index.html Para conectar el AVR al programador, puede conecte los cables a la toma hembra y conéctelos a una placa de pruebas o, mejor aún, obtenga un adaptador de programación AVR barato como este.

Paso 4: creación del firmware para Marioman

Creación del firmware para Marioman
Creación del firmware para Marioman

El attiny13A tiene 1K de flash programable y 64bytes de SRAM. El archivo tar adjunto tiene el archivo fuente y el firmware compilado para descargar. Se utilizaron tres matrices en el código c para generar la música.

  • freq - frecuencias de cada nota
  • length - longitud de cada nota
  • delay - pausa entre cada nota

La matriz de frecuencias no tiene las frecuencias reales, sino el valor para poner en el registro TTCROB para generar la onda cuadrada desde el pin PB0. Aquí hay un breve resumen de los cálculos y la configuración de los pines para la generación de ondas cuadradas:

  • El attiny13A tiene un oscilador interno configurado en 9.6MHz
  • El reloj interno para IO es el oscilador dividido por 8 o 1.2MHz
  • Se configura un temporizador interno en un registro de 8 bits para contar cada ciclo de reloj con una preescala de 8.
  • Esto da como resultado un tic igual a 1 / (1.2MHz / 8) =.006667ms
  • El attiny13A está configurado para comparar lo que hay en el registro TCCR0B de 8 bits con el temporizador y alternar un pin cuando coinciden.
  • Por ejemplo, para generar una onda cuadrada a 524Hz (una octava por encima del C medio) que tiene un período de 1.908ms.

1.908ms = 286 tics de reloj (1.908 /.0067) Divida 286 entre 2 para alternar el pin en t / 2 (286/2 = 143) Ponga 143 en el registro TTCR0B para generar esta nota. Este es todo el código que es necesario para configurar el temporizador, haga la comparación y emita una onda cuadrada:

TCCR0A | = (1 << WGM01); // configura el temporizador 1 para el modo CTC TCCR0A | = (1 << COM0A0); // alternar OC0A en la comparación TCCR0B | = (1 << CS01); // clk / 8 preescala TTCR0B = 143; // generar una onda cuadrada a 524HzPara retrasar los tonos y las pausas entre ellos se utilizó una función de retardo simple

void sleep (int ms) {int cnt; para (cnt = 0; cnt <(ms); cnt ++) {int i = 150; while (i--) {_asm ("NOP"); }}}Esto hace una cuenta regresiva desde 150 donde cada ciclo NOP es aproximadamente.006667ms. Lo último que hace el código es recorrer las matrices, generar la música y hacer parpadear los dos LED. Esto se hace en un bucle for continuo 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]); salida_toggle (PORTB, PB3); salida_toggle (PORTB, PB4); dormir (pgm_read_byte (& longitud [cnt])); salida_toggle (PORTB, PB3); salida_toggle (PORTB, PB4); // detener el temporizador TCCR0B = 0; sleep (pgm_read_word (& delay [cnt])); // iniciar el temporizador TCCR0B | = (1 << CS01); // clk / 8 preescala}}Hay 156 elementos en las matrices de frecuencias / longitudes / retardos, este bucle los atraviesa. Los pines PB3 y PB4 se alternan para que se alternen con cada nota. El primer sueño es la duración de la nota que tocamos después de configurar el registro OCR0A en el valor apropiado. El segundo sueño es la pausa entre las notas que tocamos. En el código anterior, es posible que haya notado las dos funciones pgm_read_byte () y pgm_read_word (), así como la palabra clave PROGMEM. Con un chip integrado como attiny, la cantidad de SRAM es muy limitada, en este caso solo 64bytes. Las matrices que estamos usando para todos los datos de frecuencia / retardo / longitud son mucho más grandes que 64bytes y, por lo tanto, no se pueden cargar en la memoria. Mediante el uso de la directiva especial PROGMEM avr-gcc, se evita que estas grandes matrices de datos se carguen en la memoria, sino que se leen desde la memoria flash.

Paso 5: Dejar que el marioman se suelte

El video de arriba muestra a Marioman en acción. El consumo de energía promedio es de aproximadamente 25 mA, por lo que puede parpadear y hacer ruidos durante aproximadamente 10 horas antes de drenar la celda de moneda de litio. La única forma de encenderlo y apagarlo es quitar la batería de celda de moneda, la resistente que se indica en los materiales es muy adecuado para esto. Se puede agregar un interruptor, pero hay algo que decir para mantenerlo simple.

Recomendado: