User Tools

Site Tools


Writing /var/lib/dokuwiki/data/meta/teaching/ie0624/proyectos/caja_de_musica.meta failed
teaching:ie0624:proyectos:caja_de_musica

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
teaching:ie0624:proyectos:caja_de_musica [2018/12/17 01:07] – [Referencias] microsteaching:ie0624:proyectos:caja_de_musica [2022/09/20 00:08] (current) – external edit 127.0.0.1
Line 18: Line 18:
 El funcionamiento de AY-3-8910 consiste en la decrementación del valor guardado en un registro, y se activar (o desactivar) la señal de audio cuando este registro llega a cero, con lo que se consigue generar una señal cuadrada a frecuencias pre-establecidas y dependientes de la señal de reloj que se usa en el PSG (en nuestro caso, se usa una señal de 2MHz generada con los timers del STM32). Para programar este registro se hace uso de tres pines con los que se establece la comunicación con el PSG, los cuales son llamados BC1, BDIR y LATCH (se tiene un cuarto pin de BCD2, sin embargo, este se mantiene conectado a Vcc), y otros ocho con los que se envían los datos en paralelo. A continuación se indican cuales pines del STM32 se usarán, y a qué función se destinarán: El funcionamiento de AY-3-8910 consiste en la decrementación del valor guardado en un registro, y se activar (o desactivar) la señal de audio cuando este registro llega a cero, con lo que se consigue generar una señal cuadrada a frecuencias pre-establecidas y dependientes de la señal de reloj que se usa en el PSG (en nuestro caso, se usa una señal de 2MHz generada con los timers del STM32). Para programar este registro se hace uso de tres pines con los que se establece la comunicación con el PSG, los cuales son llamados BC1, BDIR y LATCH (se tiene un cuarto pin de BCD2, sin embargo, este se mantiene conectado a Vcc), y otros ocho con los que se envían los datos en paralelo. A continuación se indican cuales pines del STM32 se usarán, y a qué función se destinarán:
  
-   * DATAPIN0-DATAPIN7: PA1-PA4,  +   * DATAPIN0-DATAPIN7: PA1-PA4, PA8-PA10, PA15. 
-   * LATCHPIN: +   * LATCHPIN: PE8. 
-   BC1PIN+   PINBC1PE10. 
-   BDIRPIN+   PINBDIRPE11. 
-   * CLOCKPIN:+   * CLOCKPIN: PE9.
    
 Ahora, para la programación del PSG, primero debe enviarse la dirección del registro que se quiere programar, los valores a programarse en los registros son de hasta 12 bits, por lo que se requiere guardar el byte inferior en un registro y el byte superior en otro, lo que significa que por cada nota a programarse debe hacerse dos llamados al chip. Ahora, para la programación del PSG, primero debe enviarse la dirección del registro que se quiere programar, los valores a programarse en los registros son de hasta 12 bits, por lo que se requiere guardar el byte inferior en un registro y el byte superior en otro, lo que significa que por cada nota a programarse debe hacerse dos llamados al chip.
Line 30: Line 30:
 Por ejemplo, para programar un valor 478 (=0x1DE) en el canal A, primero se envía (por el método de comunicación antes explicado) la dirección del primer registro (0x00), posteriormente, se envía con este mismo método el byte inferior del valor a enviar (0xDE), continuando se envía la dirección del segundo registro del canal A (0x01) y se envía a este el byte superior del valor a enviar (0x01) con lo que se consigue programar la nota C4 en el canal A. Por ejemplo, para programar un valor 478 (=0x1DE) en el canal A, primero se envía (por el método de comunicación antes explicado) la dirección del primer registro (0x00), posteriormente, se envía con este mismo método el byte inferior del valor a enviar (0xDE), continuando se envía la dirección del segundo registro del canal A (0x01) y se envía a este el byte superior del valor a enviar (0x01) con lo que se consigue programar la nota C4 en el canal A.
  
-En el código usado, tenemos una función que establece la comunicación para el envío de la dirección y los datos, la cual se llama write_data y recibe la dirección y el dato a enviar, esta se usa en las funciones set_chA y set_chB, las cuales hacen los dos llamados necesarios a write_data con las direcciones de registro respectivas+En el código usado, tenemos una función que establece la comunicación para el envío de la dirección y los datos, la cual se llama write_data y recibe la dirección y el dato a enviar, esta se usa en las funciones set_chA y set_chB, las cuales hacen los dos llamados necesarios a write_data con las direcciones de registro respectivas.
  
 Para la reproducción de canciones se tienen piezas previamente programadas en arrays de dimensiones ix3, donde la primera columna establece el número MIDI de la nota del canal A y la segunda columna establece el del canal B, es importante destacar que este valor no es el que se programa en el AY-3-8910, sino el número de la nota que se usa para llamar otro array que contiene los valores respectivos de cada nota a programar en el PSG. Y la última columna establece la cantidad de tiempo que se tendrán estas dos notas activas. Para la reproducción de canciones se tienen piezas previamente programadas en arrays de dimensiones ix3, donde la primera columna establece el número MIDI de la nota del canal A y la segunda columna establece el del canal B, es importante destacar que este valor no es el que se programa en el AY-3-8910, sino el número de la nota que se usa para llamar otro array que contiene los valores respectivos de cada nota a programar en el PSG. Y la última columna establece la cantidad de tiempo que se tendrán estas dos notas activas.
Line 37: Line 37:
  
 ====Amplificación de sonido==== ====Amplificación de sonido====
 +
 +Para la señal de sonido se tienen dos pines en el AY-3-8910 en los cuales se obtienen las señales analógicas de audio generadas, estas se conectan la una a la otra, y este nodo se conecta a tierra con una resistencia de 100 kOhm, y a la entrada de la etapa de amplificación con una resistencia de 10 kOhm y un capacitor de 100 uF.
 +
 +Con la señal resultante de esto, implementamos la siguiente etapa de amplificación:
 +
 +Este circuito implementa el TDA2003 para amplificar la señal de audio, para después ser usada en una bocina de 8 Ohm y 6 Watt.
  
  
  
 =====Instrucciones de uso===== =====Instrucciones de uso=====
 +
 +Al estar las canciones previamente programadas, el uso de este dispositivo es bastante simple, para su uso solo se debe seguir las siguientes instrucciones:
 +
 +  *Activar el dip-switch #1 (Con esto se activa el STM32 y el AY-3-8910). 
 +  *Activar el dip-switch #2 (Se activa el TDA2003 y toda la etapa de audio).
 +  *Ajustar el volumen de audio con el potenciometro. 
  
 =====Referencias===== =====Referencias=====
Line 47: Line 59:
   *http://map.grauw.nl/resources/sound/generalinstrument_ay-3-8910.pdf   *http://map.grauw.nl/resources/sound/generalinstrument_ay-3-8910.pdf
   *https://playground.arduino.cc/Main/AY38910   *https://playground.arduino.cc/Main/AY38910
 +  *https://electronicsforu.com/electronics-projects/3w6w-audio-amplifier-using-tda2003
  
  
teaching/ie0624/proyectos/caja_de_musica.1545008855.txt.gz · Last modified: 2022/09/20 00:08 (external edit)