viernes, 23 de mayo de 2014

PIANO MUSICAL 8 NOTAS PIC16F84A



DESCRIPCIÓN:

Para este proyecto se tiene que programar el micro controlador como si fuera un mini-piano con 8 notas musicales. Se usara el Puerto B como entrada, así que se deben activar la resistencias pull-up (internas del micro controlador). La señal es una onda cuadrada que sale por el pin 0 del Puerto A hacia una bocina de 8 ohms. Se usan retardos para representar los unos y ceros de la señal. Las frecuencias son de la 5 octava de las notas musicales.

CIRCUITO:

Este es el circuito utilizado para esta proyecto.  En el PIC16F84A, 8 botones van a sus respectivas entradas en el PORTB, sin resistencias, porque, por medio del código, se han activado las resistencias pull-up internas. Por los otros extremos de éstos, están conectados a tierra. El MCLR está conectado a voltaje. La salida del Pin RA0 va hacia una resistencia de 10kOhms y de ahí a un transistor 2N2222. Un extremo va a tierra y el otro va a una bocina de 8Ohms, el otro pin de la bocina va conectado a voltaje. A los pines 15 y 16 va conectado el cristal de cuarzo de 4Mhz junto con 2 capacitores de 22pF.




MATERIAL:

-Microcontrolador PIC16F84A
-8 micro-switches de 2 terminales
-1 bocina de 8Ohms
-1 resistencia de 1KOhm
-1 transistor de metal 2N2222
-Cristal de cuarzo de 4 MHz
-2 capacitores de 22 pF
-Alambres
-Protoboard
-Fuente y sus cables


CÓDIGO DEL PROGRAMA:

https://mega.co.nz/#!IR0m2IxC!_7pjUpz1iiRUe5thIuR-8ZUBkdxv-15_MAp6Lk15k6o




CONCLUSIÓN:

Reforcé lo que había aprendido sobre las instrucciones de salto y de los retardos. Para hacer una señal, necesitamos hacer retardos, no utilizamos la frecuencia más que para hacer cálculos del tiempo. Las instrucciones de CALL siempre deben llevar un RETURN para evitar el STACK OVERFLOW que se presenta al utilizar muchos GOTO.


TEORIA SOBRE RESISTENCIAS PULL-UP Y FRECUENCIAS DE AUDIO


Una forma usual de producir pulsos es mediante pulsadores que necesitan de sus resistencias correspondientes de pull-up. El PIC16F84A permite configurar una resistencia de pull-up interna en cada una de las líneas del PuertoB, ahorrando estas necesarias resistencias externas se utilizan cuando se utilizan pulsadores u otros dispositivos externos de lectura. Para configurar esta resistencia hay que utilizar el bit NOT_RBPU del registro OPTION:

- /RBPU, (resistor Port B pull-up enable bit) Habilitación de las resistencias pull-up del Puerto B

-/RBPU=0. Habilita las resistencias del PULL-UP del Puerto B

-/RBPU=1. Deshabilita las resistencias de Pull-Up del Puerto B.

Por tanto, para activar las resistencias de Pull-Up del Puerto B basta con resetear el bit NOT_RBPU del registro OPTION utilizando la instrucción:

            bcf       OPTION_REG,NOT_RBPU.

Las resistencias pull up y pull down no son más que resistencias dispuestas en una configuración determinada. Dicha configuración determina si la resistencia es de pull up o pull down. Este tipo de configuración establece un estado lógico a la entrada de un circuito lógico cuando dicho circuito está en reposo, siendo para pull up un estado lógico alto y para pull down bajo. De esta forma, se evita falsos estados producidos por ruido eléctrico si dejáramos una entrada con un valor indeterminado.
En la configuración pull up, cuando el pulsador está en reposo, Vout será prácticamente Vcc pudiéndose considerar como nivel lógico alto. Ahora bien, cuando se pulsa un switch conectado a tierra, se deriva toda la corriente a masa, por tanto Vout será 0v, valor lógico bajo. Esto mismo ocurre con la configuración pull down pero a la inversa. Cuando el circuito esta en reposo, la caída de tensión en la resistencia conectada a tierra es prácticamente 0v que es la misma tensión de Vout. En ese momento tendremos un nivel lógico bajo. Al pulsar el switch conectado a vcc, la caída de tensión en la resistencia conectada a tierra ahora será Vcc, Vout será un nivel lógico alto.
Generalmente, se suele usar un valor de 10K para estas resistencias.
La frecuencia del sonido hace referencia a la cantidad de veces que vibra el aire que transmite ese sonido en un segundo. La unidad de medida de la frecuencia son los Hertzios (Hz). La medición de la onda puede comenzarse en cualquier punto de la misma.

Para que el ser humano pueda oír un determinado sonido su frecuencia debe estar comprendida entre los 20 y los 20 000 Hz.

La frecuencia del sonido está relacionada con la altura de la oscilación de la onda sonora. La altura del sonido es perceptible sólo si la frecuencia de su oscilación es la misma en un intervalo de tiempo mínimo. Los sonidos agudos tienen una altura más elevada y mayor frecuencia que los sonidos graves. La frecuencia del sonido de los tonos agudos oscila entre los 2000 y los 4000 Hz mientras los graves van desde los 125 a los 250 Hz. Los tonos medios tienen una frecuencia de oscilación entre 500 a 1000 Hz.













6 comentarios:

Unknown dijo...

Hola Ivan!! Muy interesante. Será posible lograr los 12 notas de una octava?

Ivan Mendoza dijo...

Mmm, no estoy muy seguro se ve un tanto limitado por las salidas de micro, pero talvez se pudieran conseguir o ya cuando menos 10 u 11.

Saludos y perdon por la demora

Unknown dijo...

buen dia ivan, como hace para incluir la libreria sonido.inc, o donde la encuentro?

Unknown dijo...

Me sale que tiene errores el código

Unknown dijo...

como debe funcionar en el proteus

DianaN dijo...

No conozco del todo proteus, y es que me sale un error al momento de ejecutar sobre que me no puede leer el archivo HEX, podrias orientarme?