Sei sulla pagina 1di 8

GENERADOR DE MELODIAS CON PIC 16F627

Hoy en da los telfonos celulares pueden programarse para sonar con cualquier ringtone. Esta tendencia me incentiv a la creacin de un generador de melodas personal, el cual puede ser modificado para conectarse al telfono de casa, a la bocina de auto, el timbre de la peurta o llavero.

RINGTONES PERSONALIZADOS
Este circuito genera melodas personalizadas o ringtones que se pueden aplicar a cualquier funcin, 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 melodas se graban durante la compilacin y no pueden ser alteradas. Para cambiar alguna meloda se debe codificar la partitura y modificar el sector de la tabla correspondiente a la meloda 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 meloda a tocar. El pin RA6 est conectado a un pulsador, que al ser presionado comienza la reproduccin de la meloda. En el Puerto B se conectan 7 LEDs que generan un efecto visual y se encienden segn la nota musical. El pin RB7, llamado SPK, controla el encendido y apagado del transistor de salida que produce el sonido a travs de un parlante.

LAS NOTAS MUSICALES


El odo humano tiene la capacidad de or en forma logartmica, tanto en frecuencia como en volumen. Por este motivo las notas musicales se dividen en escalas logartmicas 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. Adems de estos tonos principales, el odo es capaz de distinguir tonos intermedios, por lo que algunos instrumentos musicales agregaron notas intermedias o semitonos, llamados comnmente 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 nmero 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 frmula 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 ejecucin. Al igual que en las frecuencias, la escala de tiempos duplica al tiempo de ejecucin anterior. Ver tabla 1.

LA GENERACION DE LAS NOTAS


Este circuito est basado en la generacin de pulsos cuadrados a diferentes frecuencias y tiempos para generar hasta 25 notas musicales y sus correspondientes silencios. La utilizacin de ondas cuadradas facilita su amplificacin porque slo se necesita un transistor trabajando en corte-saturacin, pero produce armnicas de 2 y 3 orden que pueden distorsionar el sonido, segn 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 sucesin de encendido retrasoapagadoretraso se repite las veces que sean necesarias para que la nota dure el tiempo mnimo 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 ms aguda sea la nota (registro VALOR ms chico) ms veces se deber repetir el lazo cerrado (registro TIME). Este ltimo lazo ejecuta la nota durante el tiempo mnimo 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 repeticin. Estas tablas se denominan TABLA_V (valor de retraso o VALOR) y TABLA_T (tiempo de repeticin 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 repeticin se duplica, aprovechando las propiedades de las notas musicales.

FORMATO DE LAS MELODIAS


Para obtener cada meloda, se recurre a la utilizacin de cuatro tablas cargadas en memoria de programa mediante la instruccin RETLW. Las dos primeras tablas contienen la direccin de memoria en donde se ubica el principio de la meloda. 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 automtico y sin tener que recurrir a clculos de direcciones es poner las siglas M1 a M16 y los operandos de compilacin HIGH y LOW. El compilador calcula automticamente los valores de los punteros a devolver reemplazando las constantes por las direcciones sin importar a dnde apunten las constantes M1 a M16. Esto permite agregar notas extra a una meloda, sin importar cuales son las direcciones de los punteros. Estas dos tablas se denominan T_HI y T_LO. Para saber cuntas notas tiene cada meloda se recurre a una tercer tabla, llamada T_AUX. Esta tabla contiene la resta de los punteros de inicio de la meloda y el inicio de la meloda siguiente. Esta diferencia la calcula el compilador y queda la cantidad de notas a tocar durante la meloda. Las notas y los tiempos se ubican dentro del mismo byte en una tabla que contiene todas las notas musicales de todas las melodas. El formato de las notas y tiempos se muestra en la figura 2. Los bits <3:0> representan a la nota musical sin importar cul 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 b01111010

La mayora de las melodas no necesita ms de dos octavas para ser reproducida. En el caso de necesitarse ms notas, puede modificarse el programa eliminando la bandera QUINTA y haciendo una tabla con 32 notas seguidas, la cual abarcara has ta 3 octavas (tener en cuenta que ocupa ms memoria de programa). La otra forma es ms complicada y necesita trasladar todas las notas de la meloda de manera que se ubiquen dentro

MODIFICACION DEL CIRCUITO SEGUN EL USO A DARLE


El circuito est diseado para ser utilizado como llavero, alimentado con dos bateras de 1,5 Volts. En el caso de utilizarse para otros fines debera intercalarse un regulador de 5 volt y un diodo de proteccin contra inversin de fuente. Si se desea utilizar un parlante de mayor potencia se debe cambiar el tipo de transistor o conectar otro en configuracin Darlington. Si el timbre de las notas musicales no resulta agradable al odo, 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 sera 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 duracin de la onda completa debe ser constante o se perder la relacin de las notas musicales.