# audio digital



## johncaro12 (Dic 21, 2011)

buenas..
Me encuentro planeando un proyecto... consiste en transmitir audio digital, recibirlo en un lugar remoto y poder escucharlo.

Quería hacerlo con un pic, es decir: el pic hará de cuantizador, codificador, y enviara los datos en forma serial al "modulo" RF..

quisiera que me aconsejen acerca de la factibilidad del proyecto y la forma como se debería hacer.

Según tengo entendido, debería pasar la señal por un filtro pasa bajos de 20khz
luego muestrearla a una frec superior a 40khz.
Ahora, en la cuantizacion, he oído que para audio, debe usarse mas de 16 bits, ahí estaría el problema ya que los pics solo cuentan hasta 12 y para empeorar la situación, la comunicación serial me permite a penas 8 bits, entonces tendría un cuantizador de 8 bits... habría algún problema serio en la calidad? o puede pasar por alto?
les agradezco de antemano su respuesta


----------



## Dano (Dic 21, 2011)

El ADC lo haría externo con un conversor flash. 8bits está bien para empezar, la calidad no es tan mala, y es bastante facil de trabajarlo en un pic.
Si el resultado es bueno, se puede expandir facilmente a 16bits que serían 2 puertos...


----------



## johncaro12 (Dic 21, 2011)

Dano dijo:


> El ADC lo haría externo con un conversor flash.



y ese conversor flash que es??? software o hardware??? y que ventajas tiene sobre el ADC del pic???



Dano dijo:


> 8bits está bien para empezar, la calidad no es tan mala, y es bastante facil de trabajarlo en un pic.


Uffff!!!... gracias gracias... esas palabras de aliento necesitaba 



Dano dijo:


> Si el resultado es bueno, se puede expandir facilmente a 16bits que serían 2 puertos...



2 puertos??? 16 ADCs de 12 bits cada uno??? eso creo que seria equivalente a un solo ADC de 16 bits??? estoy mal??

Gracias por tu ayuda..


----------



## Dano (Dic 21, 2011)

El ADC siempre es hardware, como todas las cosas en el mundo existen varios tipos (Flash, AS, Delta-Encoded, Pipeline, Tipo Rampa y mas) , cada uno con su ventaja, los conversores internos que traen los pics son AS (de aproximación sucesiva) en pocas palabras trabaja como "una balanza colocando y sacando pesas".

El AS es un conversor muy barato y de reducido espacio, el problema es que la conversión no se realiza instantaneamente, requiere cierto tiempo (que en procesamiento de señal es crítico) determinado por el clock del mismo.

Por eso se recurre a un conversor externo al pic, en este caso lo mas adecuado es el tipo Flash porque no requiere tiempo de conversión (el tiempo de conversión es despreciable solo limitado por la velocidad de las compuertas y comparadores).

El conversor se puede hacer a mano con una red R/2R + comparadores + lógica, o se puede comprar en un integrado y evitas problemas.

Para empezar arma o compra un conversor de 8 bits Flash, (el conversor requiere de alimentación, entrada de la señal analógica a convertir, y dispone de una salida de 8bits (en este caso) que lo conectas directo a un puerto en el pic)

El ADC siempre es hardware, como todas las cosas en el mundo existen varios tipos (Flash, AS, Delta-Encoded, Pipeline, Tipo Rampa y mas) , cada uno con su ventaja, los conversores internos que traen los pics son AS (de aproximación sucesiva) en pocas palabras trabaja como "una balanza colocando y sacando pesas".

El AS es un conversor muy barato y de reducido espacio, el problema es que la conversión no se realiza instantaneamente, requiere cierto tiempo (que en procesamiento de señal es crítico) determinado por el clock del mismo.

Por eso se recurre a un conversor externo al pic, en este caso lo mas adecuado es el tipo Flash porque no requiere tiempo de conversión (el tiempo de conversión es despreciable solo limitado por la velocidad de las compuertas y comparadores).

El conversor se puede hacer a mano con una red R/2R + comparadores + lógica, o se puede comprar en un integrado y evitas problemas.

Para empezar arma o compra un conversor de 8 bits Flash, (el conversor requiere de alimentación, entrada de la señal analógica a convertir, y dispone de una salida de 8bits (en este caso) que lo conectas directo a un puerto en el pic)


----------



## johncaro12 (Dic 21, 2011)

me pondre a averiguar lo que dices...
ahhh.. por cierto, otra cosa que me preocupa es el ancho de banda 
Es decir.. simplemente usando 8 bits con una frecuencia de muestreo superior a 40k, me da un ancho de banda entre 300 y 400k... pienso transmitirla por FM o en alguna banda libre... pero me preocupa que salga tanto...


----------



## johncaro12 (Dic 28, 2011)

Disculpen que escriba dos mensajes seguidos...
Una pregunta con respecto a los ADC de aproximacion sucesiva:
Segun el simulador, cada instruccion del ADC requiere como 180 ciclos de maquina! 
Porque en la imagen adjunta estoy colocando una onda sinusoidal de 1k.. y se ve asi de feo 
mas o menos midiendo el tiempo de muestreo son 90 us (con oscilador interno de 8Mhz) eso me da una freq de muestreo de 11kHz mas o menos... lo que lo inutiliza para aplicaciones de audio.. 
Es cierto lo que me dice el simulador??? tanto demora una lectura del ADC en el pic?? 

gracias...


----------



## Dano (Dic 28, 2011)

johncaro12 dijo:


> Disculpen que escriba dos mensajes seguidos...
> Una pregunta con respecto a los ADC de aproximacion sucesiva:
> Segun el simulador, cada instruccion del ADC requiere como 180 ciclos de maquina!
> Porque en la imagen adjunta estoy colocando una onda sinusoidal de 1k.. y se ve asi de feo
> ...



Sep, el ADC del pic es lento (por eso te recomende uno tipo Flash).

A 48Mhz el ADC interno deja de ser tan malo, ademas si se usa con una interrupción se pueden lograr cosas medianamente aceptables.


----------



## johncaro12 (Dic 28, 2011)

siiiii... ahora veo... y ya estoy haciendo pruebas en protoboard... y se oye medio feo.. un poco peor que las radios AM...
ademas: mira que el codigo que uso (en C) para el pic es de lo mas simple:

```
asm{
  lazo:
  }
    PORTB = ADC_Read(2)/4;         // Envía 8 bits menos significativos a PORTB
  asm{
  goto lazo
  }
```

y me genera semejantes retardos... y aparte tengo que enviar cada byte serialmente... 
Conoces algun integrado ADC tipo flash que sea bien comun???  ya que aca no se consiguen chips raros..

Gracias por tu ayuda!


----------



## Dano (Dic 28, 2011)

johncaro12 dijo:


> siiiii... ahora veo... y ya estoy haciendo pruebas en protoboard... y se oye medio feo.. un poco peor que las radios AM...
> ademas: mira que el codigo que uso (en C) para el pic es de lo mas simple:
> 
> ```
> ...



Los ADC flash que usé siempre los hice con compuertas y comparadores, pero se que existen integrados específicos.

El esquema del Flash lo podes buscar en google imagenes como ADC flash.


----------



## johncaro12 (Dic 28, 2011)

ahhh... tu los has armado con componentes discretos???
Y que tan factible seria utilizar los comparadores del pic???  nunca los he usado, asi que no se como funcionan... solo quisiera saber si se podria o no, para investigar como funcionan...
Gracias nuevamente


----------



## fabian9013 (Abr 8, 2012)

Una pregunta yo ando haciendo lo mismo muestreando una señal de audio con el pic, en cuestion es el pic 16F873A, peor tengo que transmitiri por serial lo convertido por el ADC.. Ahí el problema, como tengo configurado el pic, hago lo siguiente(con interrupcion):
Doy la orden para convertir=> interrupción del adc=> muevo lo convertido al registro de Transmision de la UART y espero a que termine de transmitir para ir de nuevo a convertir. para de nuevo pasar a convertir el otro canal y el mismo proceso a esperar de transmitir para de neuvo convertir el canal 0.

Creo que en esperar a que se termine la transmisión serial me limita mucho tiempo y por ende me limita la frecuencia del sampleo por asi decirlo.

Cabe destacar que tengo dos canales, el otro canal es una señal de baja frecuencia si acaso 250Hz.

Tengo una idea y consiste en hacer una mini memoria de como maximo 6 registro e irlos llenando como una especie de mini FIFO.. Para no perder resolución ni tiempo al momento de la conversion cuando ando transmitiendo.. Sera que resulta?

Una opinión diferente para ayuda.

P.D: Algo que no he entendido todavia es que el flag del registro TXREG siempre esta en 1 lo que significa que esta vacio inclusive después de asiganarle algun dato inmediantamente se coloca en 1 vacio.
Como manejo o como interpreto  esta interrupción?


----------



## johncaro12 (Abr 9, 2012)

pues te adelanto que, como dices, el UART te limita a señales de 5K mas o menos, y tengo entendido que cambiar de canal del ADC toma su tiempo tambien... pero si las dos señales son de baja frecuencia y cumplen con el criterio de Nyquist, si se podria hacer sin problemas.
Saludos


----------



## fabian9013 (Abr 11, 2012)

mm no ahi si no puedo porque una señal es de audio minimo hasta 15 khz.
Me toca utilizar el conversor adc0820 y y realizar mínimo unas 60 muestras para luego pasar a muestrear la señal de baja frecuencia.

Por lo cual me toca realzair una memoria de 60 registros y con otro contador direccionar lo que quiero que la UART transmita....


----------

