Audio y ADC del PIC

Ha, es que se trata de hacerlo solo con el DAC y tratar de obtener el mejor resultado posible.
 
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:

Yo probaria no haciendo ninguna operacion matematica en el medio (portB = read_adc(0)) para obtener el maximo de datos posibles a la salida, el procesamiento lo harias despues off-line. O es una aplicacion en tiempo real?
 
Por cierto ¿usas un dac paralelo o serie?

si coloca el valor en todo el puerto es paralelo, casi puedo apostar que es R2R.

a nivel sofware y por ASM se puede hacer con mas eficiencia con PWM, y tengo entendido que haciendo un "hibrido" (PWM+R2R) se puede tener todavia mejor calidad.

ya hace tiempo habia leido y visto las mejores opciones para hacerlo, pero me detuvo y me sigue deteniendo mi falta de practica en programacion ASM.



@ Trilo-Byte

yo hise ese proyecto para alguien que me lo encargo para pasar una materia

normalmete a mi no me gusta pedir los trabajos de otros, pero debido al interes que tengo en este tema me atrevo a pedirte si fuera posible que nos compartas el proyecto, a mi en realidad me gustaría saber como se escucha bajo esas condiciones tan "limitadas"
 
Última edición:
Por cierto ¿usas un dac paralelo o serie?
El DAC es paralelo.

Yo probaria no haciendo ninguna operacion matematica en el medio (portB = read_adc(0)) para obtener el maximo de datos posibles a la salida, el procesamiento lo harias despues off-line. O es una aplicacion en tiempo real?

Si es en tiempo real y esa multiplicacion que hago controla la amplitud de la salida.

Suena interesante eso del hibrido que comentas papirrin. Pero para esta aplicacion no puedo usar PWM esa la condicion.
Lo haria en ASM pero no conosco elleguaje.
 
Bueno, si no se puede por ese camino del ensamblador, ¿que dices de elevar la frecuencia de muestreo investigando si se puede acelerar el reloj del ADC?. El AT328 tiene un preescaler antes de la entrada de reloj al ADC. ¿Que ajustes tienes al configurar el ADC?

adc.png
 
El DAC es paralelo.



Si es en tiempo real y esa multiplicacion que hago controla la amplitud de la salida.

Suena interesante eso del hibrido que comentas papirrin. Pero para esta aplicacion no puedo usar PWM esa la condicion.
Lo haria en ASM pero no conosco elleguaje.

En ese caso en lugar de multiplicacion yo lo limitaria a hacer shift obteniendo multiplicaciones y divisiones por multiplos de dos, mas limitado pero muchisimo mas rapido que una multiplicacion
 
El tema es que al meter una señal tan chica (500mVp), está haciendo pelota la resolución del ADC, ya que su rango de entrada solo irá de 2 a 3v.

No cuesta nada hacer la amplificación en forma analógica que es bastante sencilla, se ahorra ese tiempo que menciona chclau y aprovechás al máximo el ADC.
 
Definitivamente no es el primer tema que veo de esto y no sera el ultimo, XD...

todos los que he visto mas o menos terminan en : "para que te la complicas compra un amplificador, un microcontrolador no fue diseñado para eso"

la alternativa es hacerlo como el compañero trilo-byte :unsure: sin importar para nada la calidad y no preocuparse de nada mientras parezca que se escucha XD
 
Es que en realidad un uC asi a secas como amplificador no se que tan buena idea sea.

Supongo que el ADC es de 10bits, a 5v son casi 5mV (poco menos), por lo tanto tu rango de entrada será de solo 200 cuentas :rolleyes:.

La digitalización la veo útil cuando se:

- Quiere transmitir.
- Quiere procesar en algo mucho más complejo, por ej. algún filtro digital que pueda variar sus frecuencias de corte.
 
Por que no ponemos cuales son los requerimientos reales de la conversión AD, empezando con el ancho de banda de la señal de entrada y siguiendo con algun datasheet del micro que se va a usar????

Tal como dice cosme, es un desastre usar la quinta parte de la resolución del ADC para hacer la conversión y luego multiplicar por software (en punto flotante! :eek: :eek:) para creerse que se ahorraron un amplificador analógico y que el resultado obtenido es el real.

Por otra parte, hace falta información del micro+adc, por que están suponiendo que la conversión es secuencial con el resto del procesamiento, pero bien puede ser concurrente y que el ADC soporte dispararse automáticamente a tiempos prediefinidos y guardar los resultados en posiciones de memoria contiguas (eso lo hacía el Intel 80196KB hace más de 20 años), con lo cual solo informa con una interrupción al final de la adquisición... y si no lo hace así, puede escribirse un poco de código para que resulte en el mismo efecto.

De todas formas, sin requerimientos claros esto ya lleva dos hojas de adivinanzas...
 
Bueno, si no se puede por ese camino del ensamblador, ¿que dices de elevar la frecuencia de muestreo investigando si se puede acelerar el reloj del ADC?. El AT328 tiene un preescaler antes de la entrada de reloj al ADC. ¿Que ajustes tienes al configurar el ADC?
Ver el archivo adjunto 109158

Si mira lo tengo configurado así:

ADCSRA=0xA3;

Ahora veo que el factor de division del reloj es 8.
Lo modificare para que divida por 2 .

En ese caso en lugar de multiplicacion yo lo limitaria a hacer shift obteniendo multiplicaciones y divisiones por multiplos de dos, mas limitado pero muchisimo mas rapido que una multiplicacion

Bien probare tambien esa opcion.

El tema es que al meter una señal tan chica (500mVp), está haciendo pelota la resolución del ADC, ya que su rango de entrada solo irá de 2 a 3v.

No cuesta nada hacer la amplificación en forma analógica que es bastante sencilla, se ahorra ese tiempo que menciona chclau y aprovechás al máximo el ADC.

Entonces haré la amplificación analógica antes de meterlo al ADC para que lo aproveche al máximo.


que sentido tienen este invento??

Solo entra al micro la señal de un mp3 o un celular y sale por un puerto hacia el DAC pero mas grande . No es invento :LOL:.
 
Última edición:
Siendo así manos a la obra, por mera experimentación pero a menos que proceses la señal digitalmente con el micro no creo viable amplificar con el uC, pero como te digo... experimenta ;)
 
Bueno si se nota una leve mejoría cambiando la velocidad del reloj del ADC
y con una señal senoidal a la entrada del ADC de 1 Khz y 5 Vpp.
Pero a 10 Khz no se ve nada bien.
Aqui adjunto las fotos de mis resultados, no habra algun otro registro del ATmega que pudiera modificar haha:LOL:? O que frecuencia debe de ser nesesaria alcanzar para que se escuche bien.
 

Adjuntos

  • 1 khz Clock con Division por 2.png
    1 khz Clock con Division por 2.png
    21.7 KB · Visitas: 12
  • 1 Khz Clock con Division por 8.png
    1 Khz Clock con Division por 8.png
    27.6 KB · Visitas: 10
  • 10 Khz.png
    10 Khz.png
    20.7 KB · Visitas: 11
Puedes intentar con otro cristal de mayor frecuencia pero siempre respetando las consideraciónes del fabricante cobre el tiempo de adquisición del ADC (lee en la hoja de datos), por demás, si sólo quieres reproducir voz con esa frecuencia es suficiente
 
Atrás
Arriba