26.12.13

WTV020-SD

El WTV020 es un módulo de sonido con el cual por ejemplo tu podrás crear frases a partir de palabras grabadas en una memoria SD, o quizás hacer un reloj que diga la hora... o lo que tu desees, las posibilidades son ilimitadas...


Características:
- Soporta memorias SD de hasta 1GB.
- Soporta memorias flash SPI de hasta 64Mb.
- Soporta archivos con formato de 4 bits ADCPM.
- Sampling Rate de 6kHz a 36kHz para formatos de voz .ad4
- Sampling Ratte de 6kHz a 16kHz para formatos de voz .wav
- 16 bit DAC.
- Salida de Audio PWM.
- Key mode.
- MP3 Mode.
- Two Line Serial Mode.
- Los archivos se pueden copiar a la SD directamente de la PC.
- Voltaje de trabajo 2.7Vv a 3.5v.
- Corriente de consumo en modo inactivo de 3uA.

Los modos Key y MP3 pueden ser fácilmente implementados ya que solo se necesitan pulsadores, pero para el modo Two Line Serial es necesario trabajar con un microcontrolador y es en este modo en el que nos centraremos. Debido a que no existe este protocolo de comunicación implementado en el ATmega16 (y no sé si este implementado en algún uC) lo que nos queda es implementar este protocolo, para esto nos vamos al datasheet para ver el diagrama de tiempos del protocolo de comunicación.


Como vemos, se necesitan tres pines para poder implementar este protocolo y además notemos que todos estos pines empiezan en valor High. 

RESET: Iniciar el módulo con un pulso de 5mS y luego esperamos 300mS antes de enviar datos.
CLK: Antes de enviar datos tenemos que esperar 2mS y luego el ancho de pulso de la señal CLK debe ser de 200uS, el dato será escrito con cada flanco de subida.
DATA: El bit del dato debe ser colocado cuando la señal del CLK esta en nivel bajo.

* La modificación que es necesaria para el correcto funcionamiento del módulo es reducir ese ancho de pulso de la señal CLK de 200uS a 50uS y además esperar 20mS  para enviar el siguiente dato.*


Para el envío de las instrucciones de Play, Pause, Stop o elegir el nivel de volumen (admite 8 niveles) se utiliza la siguiente tabla.


 Por ejemplo si queremos dar la orden de play enviamos la siguiente cadena de bits 1111111111111110 (FFFE). Por defecto el volumen esta colocado a nivel cero.


Los datos deben tener 16 bits, este módulo puede reproducir hasta 512 archivos, en el caso que se quiera reproducir el archivo 001, se debe enviar la siguiente cadena de bits 0000000000000001.


Para que los archivos puedan ser reproducidos de la memoria SD es necesario tenerlos en formato .ad4. Para esto instalamos el programa USBRecorder y en la pantalla principal seleccionamos la opción de Local Files, colocamos el Sample Rate a 32000 y seleccionamos el tipo de archivo que queremos convertir, en mi caso son archivos.mp3



Luego ubicamos la carpeta donde están los archivos que deseamos convertir, seleccionamos los archivos y presionamos el botón Encode.


Cuando termine de convertir, vamos a la carpeta donde se encontraban los archivos que se querían convertir.


Ahora renombramos los archivos con la numeración adecuada a nuestras necesidades.


Para el uso del módulo usaremos la libreria "WTV020SD", primero se define puerto que usaremos:

#define DI   PB0
#define CLK PB1
#define RST PB2
#define WTV20_PORT PORTB
#define WTV20_DDR DDRB

Las funciones de la librería son:

WTV20_begin(): Inicia el módulo.
WTV20_reset(): Envia el Reset inicial del módulo.
WTV20_send(): Envia la orden al módulo.






Descargas:
Datasheet ATmega16A
Datasheet WTV020-SD-20S
USBRecorder
Source Code

5 comments:

  1. excelente tutorial, tengo una duda que ojala me puedas resolver, estoy trabajando con la tarjeta WTV020M01 hasta donde tengo entendido funciona igual que la tuya sin embargo no obtengo ningun sonido, el led de "busy" se apaga pero no pasa mas. que puede ser??

    ReplyDelete
    Replies
    1. Gracias!!!, bueno, lo que puedes hacer es probar el modulo variando los delay, yo reduci los tiempos recomendados en el datasheet.

      Delete
  2. Anonymous14.7.16

    Buenos días. Estoy intentando reproducir dos sonidos cortos desde el modulo WTV020M01 y me es imposible. La librería de tu post la tengo, el mdelay también pero el avr/io.h no lo veo por ningún sitio...hay que descargarlo de algún lado? Agradecería que me echaras una mano porque no se cuanto tiempo llevo dando vueltas por internet buscando algún proyecto como el mío. Mi correo es terrinches@hotmail.com. Muchas gracias, un saludo

    ReplyDelete
    Replies
    1. Hola, la libreria avr/io.h es la libreria donde se definen las caracteristicas del uC usado, en este caso el uc ATmega16. Esta es una libreria nativa creada por el software que estas usando para compilar tu programa, en este caso yo estoy usando el AVR Studio v6.

      Para mas informacion acerca del AVR Studio puedes seguir el siguiente link http://www.netzek.com/2013/12/avr-studio-v6.html

      Saludos

      Delete
  3. Anonymous14.7.16

    El trabajo es con arduino UNO y el módulo es WTV020M01. Estoy hecho un lío, algunos dicen que las tarjetas son las que necesitan más de 3.3v y otros que no admite tarjetas de más de 1Gb. El fin de semana probaré con una de 1Gb a ver qué sucede.En un vídeo en youtube se necesitan más de 3.3v para hacerlo funcionar y no sé cómo hacerlo(por probar una tarjeta de 2Gb). Muchas gracias por responder

    ReplyDelete