Notas Musicales tipo “MIDI” con Microncontrolador AVR de ATMEL (Lenguaje ensamblador, “Assembler”).
NOTA: Para poder
utilizar la información que se proporciona en este Post, se requieren
conocimientos básicos de programación de Microcontroladores AVR en lenguaje
ensamblador (Assembler).
En este post les
comparto el código para poder reproducir notas musicales tipo “MIDI”, de manera
fácil y rápida, utilizando cualquier microcontrolador AVR de Atmel (ATMega8, ATMega328, ATMega8515, ATTiny2313, ATTiny85, ATTiny45, ATTiny12, ATTiny13, etc....), a través de
alguna de sus salidas digitales (link de descarga al final de este post).
El principio de
funcionamiento es la utilización de retardos para generar una señal cuadrada de
la frecuencia correspondiente a cada nota musical.
Este tipo de tonos se
utilizan comúnmente con pequeños altavoces piezoeléctricos (como los que tienen
las tarjetas musicales navideñas), y pueden ser útiles para agregar tonos que indiquen el estado de algún proceso, en cualquier proyecto que utilice Microcontroladores AVR
programados en lenguaje ensamblador. La siguiente imagen muestra dos tipos de altavoz piezoeléctrico:
Las Notas disponibles
en el código que se proporciona en este Post son las siguientes:
DO_3 = 261,626 Hz
RE_3 = 293,665 Hz
MI_3 = 329,628 Hz
FA_3 = 349,228 Hz
SOL_3 = 391,995 Hz
LA_3 = 440,000 Hz
SI_3 = 493,883 Hz
DO_4 = 523,251 Hz
RE_4 = 587,330 Hz
MI_4 = 659,255 Hz
FA_4 = 698,456 Hz
SOL_4 = 783,991 Hz
LA_4 = 880,000 Hz
SI_4 = 987,767 Hz
DO_5 = 1046,50 Hz
Los retardos para cada
una de las notas anteriores ya se encuentran ajustados, y solo basta con
utilizar el comando “RCALL” para reproducir la Nota que se desee.
Las frecuencias están
calculadas para funcionar con una velocidad de operación de 4MHz del
microcontrolador.
El tiempo de
reproducción de todas las notas, es de 1/3 segundos (una tercera parte de un
segundo). Por lo que si se desea reproducir un mismo tono, por ejemplo, por un
lapso de un segundo, se debe ejecutar la misma nota 3 veces seguidas.
Ejemplo:
RCALL SOL_3
RCALL DO_3
RCALL FA_3 ; Nota FA x 3 = un segundo
RCALL FA_3
RCALL FA_3
RCALL SILENCIO_1 ;SILENCIO x 3 = un segundo
RCALL SILENCIO_1
RCALL SILENCIO_1
RCALL SOL_3
RCALL DO_3
El diagrama de conexión del circuito para reproducir las notas musicales, puede ser utilizando un simple altavoz piezoelectrico. La conexión debe ser como se muestra en la siguiente imagen:
También pueden ser utilizadas unas bocinas de PC, para lo cual se debe agregar un capacitor en serie para evitar que pase el voltaje directo DC. A continuación se muestra el diagrama de conexión para utilizarse con bocinas de PC:
A continuación se muestra un video del circuito armado y funcionando, con el programa que se proporciona en este post, utilizando unas bocinas de PC:
A continuación se muestra un video del circuito armado y funcionando, con el programa que se proporciona en este post, utilizando unas bocinas de PC:
Finalmente se muestra una imagen con el circuito utilizando un altavoz piezoeléctrico.
Espero esta información les sea de utilidad. A continuación encontrarás el link de descarga con el código de las Notas Musicales y el código del "programa ejemplo" que aparece en el video, ambos en lenguaje ensamblador (assembler):
Espero esta información les sea de utilidad. A continuación encontrarás el link de descarga con el código de las Notas Musicales y el código del "programa ejemplo" que aparece en el video, ambos en lenguaje ensamblador (assembler):
Palabras clave: Assembler code, código
ensamblador, lenguaje ensamblador, subrutina, librería, avr lib, atmel,
microcontrolador AVR, MCU, ATMega 8,
ATMega 328, ATMega 8515, ATTiny 2313, ATTiny 85, ATTiny 45, ATTiny 25, ATTiny 15,
ATTiny 12, ATTiny 13, como reproducir MIDI, play MIDI, sounds, audio, notas
musicales, música, music, melodías, songs, programar, how to?, programing,
rcall, code source, código fuente, reproducir sonidos MIDI.
excelente amigo
ResponderBorrarGracias amiga, saludos ;-)
Borrar¿VAS A QUERETARO?
ResponderBorrarHola que tal quisiera comunicarme contigo, necesito pasar el codigo con atmega328p me podrias ayudar
ResponderBorrarUna pregunta si deseo poner push boton a cada nota como lo estableceria en la programacion
ResponderBorrarQue horrible blog, hasta el cursor es feo
ResponderBorrar