[Aporte] Audio - Atmega16 en adelante

Para un proyecto necesitaba generar audio usando un Atmega, buscando encontré este tutorial muy práctico para generar sonido:

http://avrpcm.blogspot.com.ar/2010/11/playing-8-bit-pcm-using-any-avr.html

Resumiendo un poco:

- Se crea un audio wav muestreado a 8kHz y una resolución de 8bits.
- Mediante el programa wav2c se lleva ese audio a un vector en código C que tendrá todas las muestras de dicho audio.
- Las muestras se almacenarán en la memoria de código Flash, mediante el uso de las librerías "avr/pgmspace.h".
- Se usa una de las salidas con PWM para reemplazar un DAC (conversor digital->analógico).
- El PWM trabaja a una frecuencia no audible, 31kHz 1er armónica, por lo tanto no requiere filtro pasa bajos (igual es recomendable poner un filtro en 4kHz, frecuencia máxima teórica de audio). Piensen que la idea es quedarse con la componente en continua de dicha señal, no con el resto de los armónicos, por eso reemplazaría al DAC.
- Se configura un timer a casi 8kHz para enviar las distintas muestras (en realidad se lo configura a 31kHz y se usa un flag de contador, eso da mayor resolución en la cuenta).
- La salida PWM irá cambiando cada 125uSeg su duty en función de la amplitud que tenga la muestra.

Yo probé el código anterior en un Atmega16 y funciona muuuuy bien y luego generé mi propio audio y no tuve inconvenientes usando las herramientas que menciona el tutorial.

Tengan en cuenta, que al muestrear a 8kHz, se supone que 1Seg de audio equivale a un poco menos 8KByte en memoria de código, por lo tanto, en un Atmega8 la memoria está demasiado justa, en un Atmega16 da para un 1Seg y un poco más. Lo ideal es usarlo en los uC con mayor memoria flash, por ej. para el proyecto yo usé un Atmega128.

Otra alternativa, si partimos que la calidad de audio no es importante, se podría bajar la frecuencia de muestreo a 4kHz, permitiendo un audio hasta 2kHz (en realidad menos), de esta forma un 1Seg de audio equivale a 4kByte de memoria flash.

Con respecto al nivel de audio, piensen que al trabajar con una señal cuadrada de 0 a 5V, el nivel de tensión obtenido es relativamente alto, hasta tal punto, que colocando un auricular luego del filtro se escucha bastante fuerte.
 
Atrás
Arriba