Audio y ADC del PIC

#1
Buen dia, me gustaria saber como se puede hacer para leer audio con el adc del pic
Lo que quiero hacer es esto

AUDIO - ADC(del pic) - PIC(programacion) -DAC - AUDIO

Si eso usar el adcdel pic y sacar el audio con el dac y meterlo a un amplificador
Pero no se como acoplar el audio al adc para que no se dañe,¿con un capacitor basta no?
bueno pienso usar como audio la salida de mi telfono celular.Se acepta toda la ayuda haha
 
#2
¿De que PIC hablamos?, en cuanto a la interfaz sólo es necesario acoplar la entrada de tal manera que las fluctuaciones de la señal de audio queden comprendidas entre 0 y Vcc del PIC. Antes de eso creo que la dificultad sería la velocidad de muestreo que creo los PIC's normales no llegan a alcanzar.
¿que dices de un dsPIC?
 
#3
Bueno el ADC de mi micro muestrea a 1000 Khz (ATmega328)
Si tenia entendido que se debe hacer un offset para que se adapte al voltaje que maneja el micro y evitar los valores negativos pero no se nada de audio haha
como que amplitud maxima de entrada o esas cosas
 
#4
Las señales de audio andan entre los 200 y 350mV (según algunas medidas que hice), lo que a mi me ha servido es poner a la entrada del micro un divisor de tensión con dos resistores iguales de forma que el voltaje de offset quedara en 2.5V. Luego sobre ese nodo monté la alterna con un capacitor de 10uF y funcionaba, pero aclaro que yo sólo procesaba la señal y no la volvía a reproducir por lo que no se que tanta distorsión genere la conexión que hice. Prueba
 
#6
yo hise ese proyecto para alguien que me lo encargo para pasar una materia :LOL:

usando 2 pic 18f2550 y el 18f4550 "los use por que los tenia a la mano no significa que asi debe ser"
usando el teorema de Nyquist dice que frecuencia de muestreo = 2Fmax
es decir si yo quiero muestrear 4khz "una frecuencia de audio aceptable".
debo muestrear minimo a 8khz .

ahora este proyecto lo use metiendo la señal de audio directo al ADC "no hay riesgo de quemar el micro" pues el audio standard es de 1Vpp un micro lee maximo 0 a 5v

si el audio es muy bajo puedes multiplicar por 10 o por 100 tu lectura para evitar usar un amplificador si se te complica, o usar un preamplificador a transistor.

el DAC lo puedes hacer por PWM o con el tumbaburros DACR2R
eso si, si vas a usar el DACR2R no vale la pena leer un ADC de 10 bits pues un puerto es de 8 bits
si haces por PWM pues tu ancho del pulso variara con 1024 eso es muy logico.

es posible, dificil al principio pero no tan imposible :LOL:
 
#7
yo hise ese proyecto para alguien que me lo encargo para pasar una materia :LOL:

usando 2 pic 18f2550 y el 18f4550 "los use por que los tenia a la mano no significa que asi debe ser"
usando el teorema de Nyquist dice que frecuencia de muestreo = 2Fmax
es decir si yo quiero muestrear 4khz "una frecuencia de audio aceptable".
debo muestrear minimo a 8khz .
¿3 PIC's?, ¿que proyecto era?, y ¿el sonido muestreado era reproducido nuevamente?
 
#8
y que opinan de alimentar el micro con una tension que comprenda de -2.5v en gnd y 2.5v en VDD, no debe haber ningun problema. no se en micros de atmel, pero en pic un 18f2550 puede llegar segun recuerdo a veintitantos Khertz.

seria un interesante proyecto, lastima que todavia no domino ASM, quizas en un futuro XD
 
Última edición:
#9
y que opinan de alimentar el micro con una tension que comprenda de -2.5v en gnd y 2.5v en VDD, no debe haber ningun problema. no se en micros de atmel, pero en pic un 18f2550 puede llegar segun recuerdo a veintitantos Khertz.

seria un interesante proyecto, lastima que todavia no domino ASM, quizas en un futuro XD
Se lograría el mismo efecto del divisor resistivo. Además sería más inconvenientes por las interfaces y demás, pero experimentar no cuesta (y)
 
#11
Pues si es que el amigo EDWAR quiera usar un DAC. Sobre todo por eso de las referencias de voltajes. Pero viéndolo bien, si todo el sistema funcionara con +-2.5V no creo haya inconveniente.
Esperemos a que diga que le convence
 
#12
Bueno lei bien y dice que el clock del ADC es 1000.000 Khz :LOL:

Si exactamente eso me habian dicho Daniel Meza del divisor y el capacitor probare aver que tanta distorsion hay como comentas

TRYLO-BYTE osea que puedo meter la señal directamente sin hacer offset???
Y si trabajare a 8 bits.

Tambien probare eso de +-2.5v para alimentar el pic
 
Última edición:
#13
No, tenés que meter el offset de 2,5v, que lo podés hacer como dice Daniel, usas un divisor con los valores adecuados y acoplás la señal con un capacitor.

Similar a esta entrada:



Antes de la base (como si el transistor fuera el ADC), pero R1 y R2 serán iguales; el valor del capacitor dependerá del paralelo R1//R2.

Sobre la frecuencia de muestreo, fijate que tan veloz es el uC para luego rearmar la señal, nyquist se aplica tanto para el ADC como para el DAC.
 
Última edición:
#15
jaja no eran 3 pic solo eran 2 uno emitia y otro recivia por UART
para eso configure el ADC como de 8 bits para que cupiera perfecto en un unsigned Char
los pic no se programan solo en ASM yo programo en C18 ;) tambien en CCS pero hay bugs :LOL:

respecto al ofset pues como la señal de audio es tan baja pues si con un capacitor de 100nf basta

y como dice el colega Cosme el amplificador a transistor si funciona perfecto ese viejo proyecto lo hise con el mismo circuito del transistor "viene el el libro del Floyd si lo quieres calcular"

pero como mi cliente era un inepto en electronica no me arriesgue y lo hise multiplicando por 10 el valor que leia del reproctor ;) asi uno evita electronica pero resta velocidad al micro.

pero a 8Khz el audio se oye bastante bien almenos que tengas un super oido o seas muy exigente .
 
#16
OK gracias por sus respuestas, realice la simulación del circuito y
y con una señal senoidal de 100Hz a la entrada con el acoplamiento por divisor y capacitor
el resultado fue satisfactorio pero a frecuencias mas altas, como 1 khz el resultado es muy malo les adjunto las imagenes de mis resultados, tal vez sea por la velocidad de muestreo
¿Que puedo esperar si le pongo audio en lugar de senoidal con estos resultados?
Sonara aunque sea algo?

Haa y el micro lo que hace es leer el ADC y multiplicar el valor para hacer mas grande o mas chiquita la señal eso lo elijo con dos pulsadores
 

Adjuntos

Última edición:
#17
Eso es debido a la frecuencia de muestreo. ¿cómo es tu programa que procesa esa parte?, quizá se pueda optimizar para elevar la velocidad (de preferencia hacerlo en ASM)
 
#19
Ok, verificare la frecuencia de corte del filtro

y mi programa es en realidad solo una linea

Código:
PORTB = amplitud*read_adc(0) ;
Donde amplitud es una variable del tipo float que aumenta o decrementa mediante dos interrupciones del micro.La cambiare al tipo char .
Y la funcion read_adc trae un delay por defecto de 10 microsegundos que para estabilizar el voltaje.
Seria buena idea en ensamblador pero no conozco nada de eso :LOL:
 
Arriba