GENERADOR DE MELODIAS CON PIC 16F627

Hoy en día los teléfonos celulares pueden programarse para sonar con cualquier ringtone. Esta tendencia me incentivó a la creación de un generador de melodías personal, el cual puede ser modificado para conectarse al teléfono de casa, a la bocina de auto, el timbre de la peurta o llavero.

RINGTONES PERSONALIZADOS

Este circuito genera melodías personalizadas o ringtones que se pueden aplicar a cualquier función, sea el timbre de la casa o la bocina del auto. Para ello se implementan varias tablas en memoria que contienen la partitura y variables necesarias para las notas musicales. Estas tablas se ubican en memoria de programa y utilizan instrucciones RETLW, las cuales devuelven una constante. Las melodías se graban durante la compilación y no pueden ser alteradas. Para cambiar alguna melodía se debe codificar la partitura y modificar el sector de la tabla correspondiente a la melodía a cambiar.

Para este circuito se implementa el PIC16F627 el cual utiliza Reset y Oscilador Interno, de manera de tener disponibles 3 pines extra en el Puerto A para funciones especiales. Los Pines RA<3:0> se encuentran conectados a un Dip-Switch de 4 llaves y a 4 resistencias Pull-UP. Estos pines seleccionan la melodía a tocar.

El pin RA6 está conectado a un pulsador, que al ser presionado comienza la reproducción de la melodía. En el Puerto B se conectan 7 LEDs que generan un efecto visual y se encienden según la nota musical.

El pin RB7, llamado SPK, controla el encendido y apagado del transistor de salida que produce el sonido a través de un parlante.

 
LAS NOTAS MUSICALES
El oído humano tiene la capacidad de oír en forma logarítmica, tanto en frecuencia como en volumen. Por este motivo las notas musicales se dividen en escalas logarítmicas u octavas.

Cada octava está compuesta por siete notas musicales llamadas tonos principales y se representan con las letras C - D - E - F - G - A - B . Se las conoce generalmente con el nombre DO, RE, MI, FA, SOL, LA y SI.

Además de estos tonos principales, el oído es capaz de distinguir tonos intermedios, por lo que algunos instrumentos musicales agregaron notas intermedias o semitonos, llamados comúnmente bemoles. Estos semitonos completan la octava y aumentan las notas musicales a 12 por octava.

En la figura 1 se muestra una octava de piano en donde las teclas blancas corresponden a los tonos principales y las negras a los semitonos intermedios. A su derecha se encuentran sus nombres y las frecuencias correspondientes a cada nota.

Cada octava posee las mismas notas, pero su frecuencia duplica a la octava anterior. Para identificar cada octava, se coloca un número al lado de la nota musical.

Para calcular las frecuencias de las notas musicales se recurre siempre a la nota central de cuarta octava o A4 (LA4) de 440Hz. La fórmula para obtener el resto de las notas es el siguiente:

 
 
La variable i representa la distancia de la nota LA. Si está a la derecha el signo es positivo y si está a la izquierda es negativo. Si queremos obtener la frecuencia de la nota DO que está 9 teclas a la izquierda.
 
 
A cada nota musical le corresponde un tiempo de ejecución. Al igual que en las frecuencias, la escala de tiempos duplica al tiempo de ejecución anterior. Ver tabla 1.
 
LA GENERACION DE LAS NOTAS
Este circuito está basado en la generación de pulsos cuadrados a diferentes frecuencias y tiempos para generar hasta 25 notas musicales y sus correspondientes silencios. La utilización de ondas cuadradas facilita su amplificación porque sólo se necesita un transistor trabajando en corte-saturación, pero produce armónicas de 2º y 3º orden que pueden distorsionar el sonido, según el parlante que se utilice.

Para generar la onda cuadrada se recurre a un lazo cerrado que enciende y apaga el pin RB7 en forma alternada con un retraso intermedio que depende de la nota musical que se esté tocando. El retraso se produce con una llamada a subrutina que repite un lazo interno. El tiempo de demora de esta rutina de retardo es aproximadamente 10ms * VALOR.

Esta sucesión de encendido– retraso–apagado–retraso se repite las veces que sean necesarias para que la nota dure el tiempo mínimo correspondiente a una FUSA, que en nuestro caso equivale a 0,02 segundos.

Esto se realiza mediante un lazo cerrado y la cantidad de veces que se repite depende de la nota musical.

Mientras más aguda sea la nota (registro VALOR más chico) más veces se deberá repetir el lazo cerrado (registro TIME). Este último lazo ejecuta la nota durante el tiempo mínimo de 1 o FUSA. Si la nota tiene un tiempo mayor, se debe repetir el ciclo las veces que sea necesario para cumplir el tiempo programado por la partitura.

Al finalizar cada nota, se ejecuta un silencio de 500 ms para identificar claramente notas consecutivas.

El valor de los tiempos y los retardos no puede calcularse con una rutina dentro del PIC y es necesario utilizar una tabla con valores para cada nota para el retraso y para los lazos de repetición. Estas tablas se denominan TABLA_V (valor de retraso o VALOR) y TABLA_T (tiempo de repetición o TIME). Ver tabla 2.

Existen trece valores que corresponden a un silencio y doce notas musicales de la cuarta octava. La quinta octava aprovecha los mismos valores de la cuarta octava, pero su valor de retardo de divide por dos y su tiempo de repetición se duplica, aprovechando las propiedades de las notas musicales.

 
FORMATO DE LAS MELODIAS
Para obtener cada melodía, se recurre a la utilización de cuatro tablas cargadas en memoria de programa mediante la instrucción RETLW.

Las dos primeras tablas contienen la dirección de memoria en donde se ubica el principio de la melodía. Como las direcciones contienen 10 bits, es necesario dos tablas independientes con el valor del byte de mayor peso y el byte de menor peso. La forma de hacerlo automático y sin tener que recurrir a cálculos de direcciones es poner las siglas M1 a M16 y los operandos de compilación HIGH y LOW. El compilador calcula automáticamente los valores de los punteros a devolver reemplazando las constantes por las direcciones sin importar a dónde apunten las constantes M1 a M16.

Esto permite agregar notas extra a una melodía, sin importar cuales son las direcciones de los punteros. Estas dos tablas se denominan T_HI y T_LO.

Para saber cuántas notas tiene cada melodía se recurre a una tercer tabla, llamada T_AUX. Esta tabla contiene la resta de los punteros de inicio de la melodía y el inicio de la melodía siguiente. Esta diferencia la calcula el compilador y queda la cantidad de notas a tocar durante la melodía.

Las notas y los tiempos se ubican dentro del mismo byte en una tabla que contiene todas las notas musicales de todas las melodías. El formato de las notas y tiempos se muestra en la figura 2.

Los bits <3:0> representan a la nota musical sin importar cuál escala sea. El cuarto bit encendido indica que se trata de una nota de quinta escala. Los bits <7:5> representan el tiempo de la nota.

Cada nota ya está configurada como constante EQU al principio del programa. Por ejemplo si queremos tocar una nota LA negra de quinta, lo codificamos de la siguiente manera:

retlw NE+A5

Que equivale a:

retlw b’01111010’

La mayoría de las melodías no necesita más de dos octavas para ser reproducida. En el caso de necesitarse más notas, puede modificarse el programa eliminando la bandera QUINTA y haciendo una tabla con 32 notas seguidas, la cual abarcaría has ta 3 octavas (tener en cuenta que ocupa más memoria de programa).

La otra forma es más complicada y necesita trasladar todas las notas de la melodía de manera que se ubiquen dentro

 
MODIFICACION DEL CIRCUITO SEGUN EL USO A DARLE
El circuito está diseñado para ser utilizado como llavero, alimentado con dos baterías de 1,5 Volts. En el caso de utilizarse para otros fines debería intercalarse un regulador de 5 volt y un diodo de protección contra inversión de fuente. Si se desea utilizar un parlante de mayor potencia se debe cambiar el tipo de transistor o conectar otro en configuración Darlington.

Si el timbre de las notas musicales no resulta agradable al oído, se puede modificar el ciclo de trabajo de la onda cuadrada cambiando los retardos que se intercalan entre el encendido y el apagado del PIN RB7. Una forma sería duplicar el valor del registro VALOR durante el encendido y dividir por dos el registro VALOR durante el apagado del pin RB7. Tener en cuenta que la duración de la onda completa debe ser constante o se perderá la relación de las notas musicales.

 
Autor: Ing. Esteban Bosernitzan
FIGURA 1
 
FIGURA 2
 
FIGURA 3
 
FIGURA 4
 
FIGURA 5
 
TABLA 1
 
TABLA 2
 
MATERIALES
 
PROGRAMA PARA EL GENERADOR