|
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:
Fi = 440 x 2(i/12)
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
fDO = 440 x 2(-9/12) = 261.63Hz
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
Tabla 1
Nombre Valor Tiempo
Fusa 1
Semicorchea 2
Corchea 4
Negra 8
Blanca 16
La Generación 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 retrasoapagadoretraso
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 Melodías
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 b01111010
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 hasta 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
Modificación del Circuito Según
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.
|