Muestreo de señal de audio con dsPIC

Para empezar, se recomienda declarar la función principal main como

int main(void){----

vos lo tenes como

main()
----------------
Pasos/secuencia para iniciar/usar el CAD según la hoja de datos, página 114 del pdf:

1. Configure the ADC module:
- Configure analog pins, voltage reference and
digital I/O
- Select A/D input channels
- Select A/D conversion clock
- Select A/D conversion trigger
- Turn on A/D module
2. Configure A/D interrupt (if required):
- Clear ADIF bit
- Select A/D interrupt priority
3. Start samplificadorng.
4. Wait the required acquisition time.
5. Trigger acquisition end, start conversion
6. Wait for A/D conversion to complete, by either:
- Waiting for the A/D interrupt
- Waiting for the DONE bit to get set
7. Read A/D result buffer, clear ADIF if required.

El punto 1 sería configurar las referencias de tensión Vcfg<2:0> (ADCON2), entradas digitales (registros TRIS), ADPCFG....

Ahora que me fijo.... en ningún momento pusiste que AN2/----/RB2 tenga su bit tris =1 (entrada).
Sin eso no tendría por qué funcionar.
En la inicialización del CAD meté TRISBbits.TRISB2=1 arriba de todo, a ver si es eso y nada más. De no ser así sigo viendo el programa y después edito este mensaje
 
es buena alternativa lo del diodo zener y la aplicare, referente a lo del operacional, para ponerlo como sumador, tengo que alimentarlo con fuente negativa?
porque mi fuente de offset, trabaja muy bien ya que lo vi en el osciloscopio.
La señal de audio varía entre 2.5 y 4.5 volts ya que el voltaje de mi señal de audio iria de -1 a 1 por lo que si lo monto en la señal de offset sería de 2.5 a 4.5V.
no tengo un simulador de "hardware" solamente utilizo el MPLAB SIM para observar el comportamiento, yo programo sobre MC30.
Y ya corregí lo del TRISB no lo programé!
que tonto olvidé eso .
probare de nuevo con el dspic a ver que tal.
seguimos caminando.
un saludo y buen fin de semana
 
Sí, altamente que sea probable lo del TRIS. Eso explica por qué andaba la simulación y no al programar el PIC. Como directamente inyectabas valores al registro ADRES....
Lástima no lo ví antes, hubieramos ahorrado mucho tiempo.

En cuanto a lo del op-amp, podés usar un single supply, con salida rail-to-rail (que la salida pueda tomar valores lo más cercano a GND y a Vcc). Desconozco cual se ua para audio en particular.
Bueno, el que la salida sea rail-to-rail dependerá también de que referencia de tensión pongas en AVdd. Mejor dicho, habría que ver que la salida del op-amp (señal + offset) pueda excursionar desde AVss hasta AVdd a partir de la alimentación que tengas en tu circuito para aprovechar la resolución del CAD al máximo (eso en las hojas de datos se pone como "output voltage rail" o algo así, generalmente es el valor de alimentación menos/más un margen respecto de Vcc/GND).
 
Revisaré mi circuito de offset, porque presiento que debe ser algo de hardware, no aseguro eso vdd?
revisaré lo de rail to rail para preguntarte algo ya que no me gustaría hacer preguntas al por mayor sin saber algo del tema.
he configurado el trise y aun obtengo resultados extraños no puedo deducir lo que arroja en el PORTE.
Estas dos líneas que comente no son necesarias verdad? ya que si utilizo el timer3 para interrupcion del ADC, no es necesario configurar TAD... o me equivoco?
las líneas comentadas:
//ADCON3bits.ADCS=63;
//ADCON3bits.SAMC=31;

un saludo
 
he configurado el trise y aun obtengo resultados extraños no puedo deducir lo que arroja en el PORTE.

El TRISE?, no usabas AN2 para medir la señal de audio? (habría que configurar TRISB)

Estas dos líneas que comente no son necesarias verdad? ya que si utilizo el timer3 para interrupcion del ADC, no es necesario configurar TAD... o me equivoco?
las líneas comentadas:
//ADCON3bits.ADCS=63;
//ADCON3bits.SAMC=31;

Siempre va a ser necesario definir un reloj para el CAD. Creo que estás confundiendo los bits SSRC con reloj.
Los bits SSRC solamente seleccionan el disparador (trigger) del CAD, es decir, con que señal se inicia la conversión analógica-digital.

No dejes de el manual de referencia del conversor AD para éste módulo:

Section 17. 10-Bit A/D Converter - dsPIC30F FRM

la información de la hoja de datos es más bien escasa (ni siquiera tiene una explicación registro por registro como en otras hojas de datos).

También hay ejemplos de código:

http://ww1.microchip.com/downloads/en/DeviceDoc/CE001_ADC_DSP_lib_Filter_010908.zip
http://ww1.microchip.com/downloads/en/DeviceDoc/CE002_ADC_1MSPS_010908.zip

Bon apetit
 
si, una disculpa, configuré el TRISBbits.TRISB2=1 para configurarlo como entrada el AN2.
Es posible que exista algun conflicto por lo del ADCS y SAMC bits ya que no he comprendido bien eso y por consigiente los he puesto en comentario y a pesar de eso , no presenta problemas la simulación sin embargo he leído un poco y no logro comprender como fncionan, además en que varía si yo pongo el SAMC o el ADCS.
 
ADCS = clock source del ADC = fuente de reloj, siempre necesaria. Lo mejor es que convierta rapido, hasta que velocidad se puede llegar?->hoja de datos ->características eléctricas-> Tad mínimo; aunque la tabla 18-1 de la hoja de datos está más claro.

SAMC (sample clock) determina el tiempo de muestreo del canal antes de iniciar la conversión. Por ahí en tu caso se puede fijar al mínimo, ya que el Sample/Hold que realiza la muestra siempre va a estar conectado a AN2. El tiempo de muestreo se usa cuando uno cambia de canal (por ejemplo, cuando se pasa de convertir AN2 a convertir AN0, el tiempo de muestreo lo que hace es darle tiempo al circuito Sample/Hold de llegar al nivel de tensión de AN0 después del cambio brusco que significa cambiar de entrada).

Una cosa es el tiempo de muestreo de la señal, que justamente lo fija uno con SAMC; y otra cosa el reloj del CAD.

tiempo muestreo = TSMP = SAMC<4:0>*TAD
Tad = reloj del CAD

Es imprescindible definir ambos, tanto el SAMC como el Tad (a través de bits ADCS).

Fijate en la sección 17.15.1 (página 31/60) del manual de referencia, tenés como configurar el módulo AD para muestrear una sola entrada.
Tendrás que adaptarlo a tus necesidades (cada cuantas conversiones se genera interrupción, frecuencia de muestreo, disparador de conversión...).

A ver como te va...
 
Hola, Soy nuevo en esto de los pics y dsPics, de casualidad tieene un programa y diagrama (ejemplo) de como meter la señal de audio en el micro y oirla en el altavoz? les agradeceria mucho su ayuda!

Saludos
 
Pues mira, no soy un experto en el tema pero vengo trabajando con algunos proyectos de conversión AD y DA de señales de audio sobre todo para telefonía así que conozco sobre el tema y te puedo decir que a esa frecuencia de muestro no podrás reconstruir la señal original.

Las frecuencias audibles para el ser humano van desde los 20 Hz hasta los 20Khz, en el caso de la voz humana las frecuencias van desde los 300 Hz hasta los 10 KHz aprox. y en el caso de telefonía se suele utilizar hasta los 4 KHz.

Y como se sabe por el teorema de Nyquist la frecuencia de muestreo, para posteriormente poder reconstruir la señal sin pérdidas, es el doble de la frecuencia máxima de la señal de entrada, es decir, para telefonía la frrecuencia máxima es 4KHz por lo que se debería tener una frecuencia muestreo de 8 KHz.

Algunas frecuencias de muestreo conocidas son:
8000 muestras/seg - Telefonía
22050 muestras/seg - Radio
44100 muestras/seg - CD de audio
48000 muestras/seg - DVD

Actualmente estoy desarrollando un gateway de voz para telefonía IP utilizando un dsPIC33FJ128GP802 y parte de la funcionalidad incluye muestrear, convertir y codificar señales de audio, para ello utilizo una frecuencia de muestreo de 8000 Hz tanto para el ADC como para el DAC y la señal se reconstruye perfectamente.

Con 2400 Hz de muestreo solo podrás procesar y reconstruir señales de hasta 1200 Hz que si bien incluye un rango de sonidos de la voz humana no es suficiente para una buena calidad de audio. Solo tendrías que elegir una velocidad de muestreo adecuada para tu aplicación. Espero te sea de utilidad y suerte.
 
Atrás
Arriba