Instituto Polit�cnico Nacional
Instituto Politécnico Nacional
"La Técnica al Servicio de la Patria"
Error
  • JUser: :_load: No se ha podido cargar al usuario con 'ID': 77

Boletín No. 55
1o. de julio de 2016

 

 

 

 

PROGRAMACIÓN DE NOTAS MUSICALES EN MICROCONTROLADORES

 

José Juan Torres Duarte,
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Marco Antonio Quintero Mercado,
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Francisco Alejandro Chávez Estrada,
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Juan Carlos Herrera Lozada,
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Mauricio Olguín Carbajal,
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Jesús Antonio Álvarez Cedillo,
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

IPN CIDETEC
Instituto Politécnico Nacional
Centro de Innovación y Desarrollo Tecnológico en Cómputo

 

Abstract

En este trabajo se presenta un análisis dirigido a la capacidad del microcontrolador PIC16F628A para generar frecuencias que deriven en tonos musicales. Se diseñó una metodología con subdivisiones (bemol y sostenido) para diversificar más la generación de frecuencias utilizando el lenguaje de alto nivel PicBasic Pro.

 

Introducción

PicBasic es un lenguaje de alto nivel para programar microcontroladores PIC.Desarrollado por la empresa Melabs, PicBasic Pro consta de un conjunto de instrucciones diseñadas a la medida para ayudar al diseñador principiante o al profesional.

La instrucción SOUND en PicBasic Pro genera un tono y/o ruido blanco en uno de los pines del microcontrolador, el cual ha sido configurado como salida, por ejemplo PORTA.0, que se refiere a que el pin 0 del puerto A será por donde se obtenga el tono deseado [1]. La nomenclatura SOUND Pin,[Note,Duration{,Note,Duration...}] se refiere a la manera de utilizar la instrucción. Note es un valor entre 0 y 255, considerando Note 0 para el silencio, Note con valores de 1 y hasta 127 son tonos y Note con valores de 128 y hasta 255 son ruido blanco .Los tonos y el ruido blanco están en una escala ascendente (p.ej. 1 y 128 son las frecuencias menores, 129 y 266 las mayores). Note 1 es aproximadamente 78,74 Hz, así como Note 127 es aproximadamente 10000 Hz, en ambos casos considerando el oscilador interno del microcontrolador a 4 MHz. La variable Duration puede tomar valores de 0 y hasta 255, determinando el largo de la nota, en incrementos de 12 ms. SOUND entrega como salida ondas cuadradas con nivel TTL, por lo que el circuito básico recomendado para trabajar con la instrucción SOUND se aprecia en la Figura 1. Obsérvese que el valor del capacitor está calculado acorde a la frecuencia de 4 MHz del oscilador interno del dispositivo PIC16F628A.

 figura 1
Figura 1: Circuito a construir para utilizar la instrucción SOUND de PicBasic Pro. Imagen extraía de [1]

Como ejemplo práctico, es posible consultar el código implementado por Dr. Herrera Lozada para la Unidad de Aprendizaje de Aplicaciones de Microcontroladores en el IPN CIDETEC, utilizando la interfaz MicroCode Studio en conjunto con el compilador de PicBasic Pro, en el cual se describe la simulación de los sonidos en frecuencia de una escala diatónica la cual se compone de las notas Do, Re, Mi, Fa, Sol, La y Si [2]. La escala diatónica está compuesta de 5 tonos y 2 semitonos distribuidos como se aprecia en la Figura 2. En este código sencillo se anexó un valor de silencio con la tarea de darle dinámica a las piezas musicales, todo esto implementado en un PIC16F628A.

 figura 2
Figura 2: Composición de la escala diatónica

Otro trabajo interesante en el que se diseñó e implementó una alarma para protección civil utilizando este mismo formato se presenta en [3].

Análisis

Toda secuencia musical está descrita por un comportamiento exponencial, sin embargo existen errores en los cuales el oído humano, que tiene un rango de audición entre los 20 y 20Khz, se deja llevar creyendo escuchar sonidos lineales, es decir, sonidos consecutivos como se muestra en la Figura 3.

 figura 3
Figura 3: Representación lineal de sonidos. “Error”

Se logra apreciar en la Figura 4, el comportamiento correcto de las frecuencias en aumento. Cabe destacar que los sonidos son apreciados dependiendo de su altura o tono; cuanto mayor sea su frecuencia, más aguda o "alta" será la nota musical, es decir, un sonido agudo o grave “alto o bajo”, donde todos estos términos son subjetivos.

 figura 4 figura 5
Figura 4: Representación exponencial de sonidos

Octava La palabra octava viene de la teoría musical; la octava es el intervalo entre dos sonidos que tienen una relación de frecuencias igual a 1:2 y que corresponde a ocho notas de una escala musical diatónica; o trece en una escala cromática.

Propuesta e implementación en un Microcontrolador PIC16F628A

Con la teoría antes mencionada se propone subdividir las frecuencias, basándose en el código desarrollado en [2], logrando abrir un abanico de posibilidades para trabajar con escalas como la escala cromática, escala menor, escala pentatónica, etc. Y así mismo interpretar melodías con estas nuevas frecuencias, tonos o sonidos, pero con una restricción; estas escalas se logran solo en una octava ya que las frecuencias que puede aportar el PIC16F628A son limitadas.

Las subdivisiones nos obligan a tener nuevos conceptos como lo son:

Bemol

figura 6  Disminuye el tono de una nota por un semitono
 figura 7 Aumenta el tono de la nota por un semitono

Se realizaron 3 códigos; el primero con la finalidad de verificar la viabilidad de la propuesta, el segundo fue demostrar hasta qué rangos de frecuencias lograba generar el PIC16F628A y por último la implementación de una melodía (se decidió el Himno a la Alegría) haciendo uso de las subdivisiones.

Primer código:

TRISB = 0
CMCON = 7
melodia var byte
num var byte
d CON 2
d CON 2
d1 CON 8
r CON 15
rm CON 20
m CON 27
f CON 36
f1 CON 42
s CON 48
s1 CON 53
l CON 59
l1 CON 64
y CON 70
b CON 0
dG CON 72
d1G CON 78
rG CON 93
rmG CON 113
mG CON 140
fG CON 176
f1G CON 218
sG CON 266
s1G CON 319
lG CON 378
l1G CON 442
yG CON 512

inicio:
FOR melodia=0 to 140

lookup melodia,[d,d1,r,rm,m,f,f1,s,s1,l,l1,y,b,b,b,y,l1,l,s1,s,f1,f,m,rm,r,d1,d,b,b,b],num sound PORTB.0, [num, 12]
pause 10 next melodia goto inicio end

 

Segundo código:
TRISB = 0 CMCON = 7 melodia var byte num var byte
d CON 2
d1 CON 8
r CON 15
rm CON 20
m CON 27
f CON 36
f1 CON 42
s CON 48
s1 CON 53
l CON 59
l1 CON 64
y CON 70
b CON 0
dG CON 72
d1G CON 78
rG CON 93
rmG CON 113
mG CON 140
fG CON 176
f1G CON 218
sG CON 266
s1G CON 319
lG CON 378
l1G CON 442
yG CON 512
inicio:
FOR melodia=0 to 140
lookup melodia,[d,d1,r ,rm,m,f,f1,s,s1,l,l1,y,b,b,dG,d1G,rG,rmG,mG,fG,f1G,sG,s1G,lG ,l1G,yG],num
sound PORTB.0, [num, 12]
pause 10
next melodia
goto inicio
end

La máxima tonalidad que se alcanzo fue m en 140, a partir de ese rango en adelante todo fue ruido.

El tercer código que contiene la melodía el Himno a la Alegría se presenta de la siguiente forma:

TRISB = 0
CMCON = 7
melodia var byte
num var byte
d CON 2
d1 CON 8
r CON 15
rm CON 20
m CON 27
f CON 36
f1 CON 42
s CON 48
s1 CON 53
l CON 59
l1 CON 64
y CON 70
b CON 0
inicio:
FOR melodia=0 to 140
lookup melodia,[f,0,f,0,s,0,l,0,l,0,s,0,f,0,m,0,r,0,r,0,m,0,f,0,f,f,0,m,m,0,0,0,0,_ f,0,f,0,s,0,l,0,l,0,s,0,f,0,m,0,r,0,r,0,m,0,f,0,m,m,0,r,r,0,0,0,0,_ m,0,m,0,f,0,r,0,m,0,f,0,s,f,0,r,0,m,0,f,0,s,f,0,m,0,r,0,m,0,l,0],num
sound PORTB.0, [num, 12]
pause 10
next melodia
goto inicio
end

Cabe mencionar que en este diseño de implementación de melodía sólo se hizo uso de la escala diatónica.

La construcción física del circuito solo hace uso del PIC16F628A, un altavoz con 4Ω 3W, un capacitor de 10μF, una tabla de prueba o placa fenólica según sea la aplicación, posibilidades o accesibilidad y una fuente de alimentación de 5v.

En las siguientes figuras, Figura 5 y Figura 6, se muestran el circuito finalizado en una tabla de prueba así como la simulación funcional en ISIS de Proteus, respectivamente.

 figura 8

Figura 5: Construcción física

 

 figura 9
Figura 6: Simulación en ISIS de Proteus

 

 

Conclusión

Se logró tener una gama más alta de tonalidades. Esto nos abre las posibilidades de llevar a cabo la ejecución de una melodía con más juegos tonales, destacando que ahora se conoce más propiedades y limitantes del PIC16F626A. Es posible considerar en diferentes proyectos la teoría aquí expuesta.

Referencias

[1] Micro Engineering Lab, Manual de PicBasic Pro. http://melabs.com/resources/pbpmanual/. Consultado en línea el 29 de abril de 2016.

[2] Herrera – Lozada, J.C., IPN CIDETEC, Aplicaciones de Microcontroladores. http://www.embebidos-cidetec.com.mx/profesores/jcrls/doctos/bocina.zip. Consultado en línea el 29 de abril de 2016.

[3] Márquez-Sánchez C. et Al., Boletín Upiita No. 45, Diseño y Construcción de un Prototipo de una Alarma para Protección Civil con un Microcontrolador. http://www.boletin.upiita.ipn.mx/index.php/ciencia/593-cyt-numero-45/1077-diseno-y-construccion-de-un-prototipo-de-una-alarma-para-proteccion-civil-con-un-microcontrolador.

Consultado en línea el 29 de abril de 2016.