Os transcribo un interesante artículo publicado por :Juan Domenech Fernandez
Convertidor
Analógico Digital de 16 bits y 448000 muestras por segundo
basado en el Bt878A
|
![]() |
Antecedentes: La potencia de los actuales
ordenadores personales, ofrecen infinitas posibilidades de análisis y
manipulación de señales analógicas, pero primero, es necesario digitalizarlas
mediante un Convertidor Analógico Digital (ADC). El PC mas sencillo incorpora
una tarjeta de sonido con la que podemos digitalizar fácilmente señales, pero con
la limitación de 44000 muestras por segundo (Sps) en la mayoría de casos y de
96000 Sps en algunas tarjetas de gama alta. Según Nyquist
esto nos permitirá llegar a señales con amplitud de 48Khz en el mejor de los
casos. Para realizar experimentación con sonidos, esta frecuencia puede ser mas
que suficiente pero para subir mas por el espectro o analizar
con mas detalle señales de baja frecuencia son necesarias mas muestras por
segundo.
Objetivo: Obtener un ADC que nos permita
digitalizar a la frecuencia mas alta posible, utilizando hardware de uso corriente.
Método: Utilizaremos el ADC de baja
frecuencia que incorpora el chip Bt878A en un tarjeta capturadora de video de uso corriente.
Advertencia: Este artículo narra practicas que
deben ser realizadas por personas con experiencia en electrónica y que pueden
provocar daños en sus equipos. |
Preparación:
1 - Material utilizado:
- Tarjeta capturadora de video con sintonizador (tuner) de la marca: BestBuy
modelo: EasyTV (Fabricada por
Prolink modelo PV-BT878P+ Rev 9D) basada en el chip Conexant 878A Fusion y
tuner Philips PAL_BG FI1216
- PC de uso corriente con tarjeta de sonido Creative.
- Linux Mandrake 9.1
- Condensador 1ľF (no polarizado).
- Conectores RCA hembra y cables de audio coaxiales.
- Herramientas diversas: alicates de corte, soldador, etc.
- PC de uso corriente con tarjeta de sonido Creative.
- Linux Mandrake 9.1
- Condensador 1ľF (no polarizado).
- Conectores RCA hembra y cables de audio coaxiales.
- Herramientas diversas: alicates de corte, soldador, etc.
2 - ¿Qué el chip Bt878A?
Es el
sucesor del famoso Bt848. En el diseño de este nuevo
integrado, Brooktree (ahora
Conexant) incluyó diversas mejoras, entre
ellas un ADC de baja frecuencia destinado inicialmente a digitalizar las
señales de sonido (y las subportadoras de audio)
provenientes del sintonizador (tuner) para realizar
la posterior demodulación (FM estereo,
TV estereo, RDS, MTS, etc.) mediante software, en el driver del sistema operativo. Por desgracia, ningún
fabricante ha aprovechado estas características (que yo sepa) y simplemente se
utiliza el ADC de un Bt878A para obtener el sonido
mono del tuner (en el mejor de los casos).
3 - Yo tengo una capturadora con un "878" pero no esta fabricado por Brooktree.
![]() |
Y por Conexant, con el encapsulado Bt878KHF (datasheet download page) |
|
4 - ¿Qué características tiene este ADC?
Conexant
dice en su datasheet:
"1.2.6 Audio DMA Channels
The audio channel delivers 8-bit or 16-bit digital samples of a digital frequency-multiplexed analog signal to system memory in packets of DWORDs.
A RISC program controls the audio DMA Program Initiator. The flow of audio data and audio RISC instructions is completely independent and asynchronous to the flow of video data and video RISC instructions.
Since the audio data path operates in continuous transfer mode (no sync gaps), both the analog and the digital audio inputs can be used for other data capture applications. The analog input offers 360 kHz usable BW at 8 effective bits or 100kHz usable BW at 12 effective bits. The digital input offers up to 20 Mbps for the parallel mode and 40 Mbps for the serial mode."
The audio channel delivers 8-bit or 16-bit digital samples of a digital frequency-multiplexed analog signal to system memory in packets of DWORDs.
A RISC program controls the audio DMA Program Initiator. The flow of audio data and audio RISC instructions is completely independent and asynchronous to the flow of video data and video RISC instructions.
Since the audio data path operates in continuous transfer mode (no sync gaps), both the analog and the digital audio inputs can be used for other data capture applications. The analog input offers 360 kHz usable BW at 8 effective bits or 100kHz usable BW at 12 effective bits. The digital input offers up to 20 Mbps for the parallel mode and 40 Mbps for the serial mode."
Gerd Knorr, dice en el
README
de su modulo btaudio:
"The analog mode supports mono only. Both 8 + 16 bit. Both are _signed_int, which is uncommon for
the 8 bit case. Sample rate range is 119
kHz to 448 kHz. Yes, the number of digits
is correct. The driver supports downsampling
by powers of two, so you can ask for more usual sample rates
like 44 kHz too."
Por lo
que al presente documento se refiere, concluimos que: El ADC del Bt878A puede operar a 8 y 16 bits, a 119000 y 448000 Sps
y un canal (monaural)
de forma nativa sin ningún tipo de hardware o conversión adicional.
5 - Mi capturadora
está basada en un Bt878A pero no es una "PV-BT878P+ Rev 9D" ¿Me sirve igualmente?
Es
necesario realizar una inspección ocular de la tarjeta y averiguar si el fabricante
ha aprovechado las entradas del ADC.

Los pins del ADC son:
Pin # |
Signal |
Description |
100 |
STV I |
TV sound
input from TV tuner. |
98 |
SFM I |
FM sound
input from FM tuner. |
94 |
SML I |
MIC/line
input. |
96 |
SMXC A |
Audio MUX anti-alias filter RC node. Connect through
68 pF capacitor to BGND. |
106 |
RBIAS A |
Connection point for external bias 9.53 kΩ 1%
resistor. |
105 |
VCOMO A |
Common mode voltage for the audio analog circuitry.
This pin should be connected to an external filtering 0.1 ľF capacitor. |
104 |
VCOMI A |
Common mode voltage for the audio analog circuitry.
This pin should be connected to an external filtering 0.1 ľF capacitor. |
107 |
VCCAP A |
Audio analog voltage compensation capacitor. This
pin should be connected to an external filtering 0.1 ľF capacitor. |
103 |
VRXP A |
Audio input circuitry reference voltage. This pin
should be connected to an external filtering 0.1 ľF capacitor. |
102 |
VRXN A |
Audio input circuitry reference voltage. This pin
should be connected to an external filtering 0.1 ľF capacitor. |
Los pins que nos interesan son 100, 98 y 94 que son las
entradas de la señal. En mi caso el 94 no esta utilizado, el 100 y 98
están
unidos por una pista y luego conectados directamente a la salida de
sonido del tuner. Se recomienda verificar que el fabricante haya
instalado los condensadores externos para los voltajes de referencia.
El Bt878A incorpora un multiplexador
interno (mux) para seleccionar la entrada de sonido
activa (TV, FM o MIC) al igual que incorpora un mux
interno para seleccionar la señal de video activa (Tuner,
S-Video o Composite).
Es
importante no confundir este mux con el mux externo que incorpora la PV-BT878P+ utilizando un
Philips HEF4052B
(datasheet download page) gobernado a través de GPIO.
Las instrucciones de este
documento se aplican directamente solo a la tarjeta Prolink PV-BT878P+ 9D,
pero aprovechándolas y estudiando con detalle otro tipo de tarjeta se puede
conseguir el mismo objetivo.
En el
caso de que el fabricante no aproveche las entradas del ADC (no estén soldadas
a ninguna pista) se recomienda no
utilizar esta tarjeta, ya que para realizar soldaduras en un integrado SMD
se requieren herramientas que no están al alcance de la mayoría de nosotros.
Instalación:
1 - Como paso previo necesitamos
tener funcionando un Linux con Kernel
2.4.x y con soporte de sonido.
Yo he utilizado un Mandrake
9.1
# uname –a Linux lab 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i586 unknown unknown GNU/Linux
La principal razón de utilizar
Linux en la fase de captura de las señales es que no he encontrado drivers para
Windows que permitan utilizar el ADC del Bt878A como periférico de sonido en el
sistema operativo. Si alguien aporta información al respecto, se agradecerá
enormemente. (Esto no significa que no me guste trabajar con Linux... Al
contrario :)
2 - Verificaremos que se ha
cargado el modulo de sonido correctamente:
# lsmod
Module Size Used by Not tainted
af_packet 14952 0 (autoclean)
ide-floppy 15580 0 (autoclean)
ide-tape 48304 0 (autoclean)
ide-cd 33856 0 (autoclean)
cdrom 31648 0 (autoclean) [ide-cd]
floppy 55132 0
ne2k-pci 6752 1 (autoclean)
8390 7916 0 (autoclean) [ne2k-pci]
supermount 15296 2 (autoclean)
videodev 7872 0
sb 9044 0 (unused)
sb_lib 41454 0 [sb]
uart401 8196 0 [sb_lib]
sound 70644 0 [sb_lib uart401]
soundcore 6276 0 [sb_lib sound]
rtc 8060 0 (autoclean)
ext3 59916 2
jbd 38972 2 [ext3]
3 - Verificamos que se ha creado
el primer dispositivo de sonido:
# ll /dev/dsp*
lr-xr-xr-x 1 root root 9 Jan 6 12:26 /dev/dsp -> sound/dsp
lr-xr-xr-x 1 root root 10 Jan 6 12:26 /dev/dspW -> sound/dspW
4 - Desde Xwindows
verificaremos que el mezclador, nos muestra los parámetros de nuestra tarjeta
de sonido:

5 - Reproduciremos un sonido de
muestra que debemos escuchar por nuestros altavoces.
Por ejemplo:
# sox –t .wav /usr/share/licq/sounds/fun/Online.wav –t ossdsp /dev/dsp
6 - Instalamos físicamente la tarjeta sintonizadora en el PC
Conectar únicamente el cable de antena de televisión. No conectar ningún cable de sonido.
Conectar únicamente el cable de antena de televisión. No conectar ningún cable de sonido.
7 - Instalamos bttv (0.7.107)
Debido a diversos problemas con la instalación de modulo bttv y sus
componentes asociados, se ha simplificado este paso, omitiendo esta fase y
saltando directamente a la instalación única del modulo btaudio.
8 - Carga de btaudio
btaudio es el módulo que nos permite utilizar el ADC del Bt878A,
montándolo como un dispositivo de sonido (¡Gracias Gerd!). Mi release de Linux (Mandrake
9.1) lleva incluido este modulo en /lib/modules/2.4.21-0.13mdk/kernel/drivers/sound/btaudio.o.gz
y sin mas complicaciones podemos proceder a cargarlo.
# insmod btaudio debug=1
Si todo ha ido bien, podemos observar la salida del kernel:
#tail -100f /var/log/syslog | grep btaudio
Apr 17 19:08:57 lab kernel: btaudio: driver version 0.7 loaded [digital+analog]
Apr 17 19:08:57 lab kernel: btaudio: Bt878 (rev 17) at 00:09.1, irq: 10, latency: 32, mmio: 0xde001000
Apr 17 19:08:57 lab kernel: btaudio: using card config "default"
Apr 17 19:08:57 lab kernel: btaudio: registered device dsp1 [digital]
Apr 17 19:08:57 lab kernel: btaudio: registered device dsp2 [analog]
Apr 17 19:08:57 lab kernel: btaudio: registered device mixer1
Apr 17 19:08:57 lab kernel: btaudio: driver version 0.7 loaded [digital+analog]
Apr 17 19:08:57 lab kernel: btaudio: Bt878 (rev 17) at 00:09.1, irq: 10, latency: 32, mmio: 0xde001000
Apr 17 19:08:57 lab kernel: btaudio: using card config "default"
Apr 17 19:08:57 lab kernel: btaudio: registered device dsp1 [digital]
Apr 17 19:08:57 lab kernel: btaudio: registered device dsp2 [analog]
Apr 17 19:08:57 lab kernel: btaudio: registered device mixer1
9 - Compilación del modulo
En el caso de que nuestro linux no incluya el modulo compilado podemos
intentar hacerlo nosotros mimos. Puedes descargarlo de aqui
btaudio-0.7.tar.
Descomprimimos, nos situamos en el directorio y compilamos:
# gcc -O2 -DMODULE -D__KERNEL__ -c btaudio.c -isystem /lib/modules/2.4.21-0.13mdk/build/include/
Se comprime el modulo y lo movemos a su sito:
# gzip btaudio.o
# mv btaudio.o.gz /lib/modules/2.4.21-0.13mdk/kernel/drivers/sound/
# depmod -a
# mv btaudio.o.gz /lib/modules/2.4.21-0.13mdk/kernel/drivers/sound/
# depmod -a
En mi caso aparece el mensaje "depmod: *** Unresolved symbols in
btaudio.o.gz" pero hago caso omiso de él.
# insmod btaudio debug=1
Si nos aparece el mensaje:
./btaudio.o: kernel-module version mismatch
./btaudio.o was compiled for kernel version 2.4.21-0.13mdkcustom while this kernel is version 2.4.21-0.13mdk.
./btaudio.o was compiled for kernel version 2.4.21-0.13mdkcustom while this kernel is version 2.4.21-0.13mdk.
Deberemos editar el fichero /usr/src/linux/include/linux/version.h y
sustituir '#define UTS_RELEASE "2.4.21-0.13mdkcustom"' por
'#define UTS_RELEASE
"2.4.21-0.13mdk"' y repetimos la compilación.
10 - Verificamos que se han creado
dos nuevos dispositivos de sonido:
# ll /dev/dsp* lr-xr-xr-x 1 root root 9 Jan 6 13:54 /dev/dsp -> sound/dsp lr-xr-xr-x 1 root root 10 Jan 6 14:04 /dev/dsp1 -> sound/dsp1 lr-xr-xr-x 1 root root 10 Jan 6 14:04 /dev/dsp2 -> sound/dsp2 lr-xr-xr-x 1 root root 10 Jan 6 13:54 /dev/dspW -> sound/dspW
El /dev/dsp1 es para la interfase digital I2S y /dev/dsp2 para el ADC del Bt878A,
la cual utilizaremos.
11 - El mezclador ha detectado el nuevo
dispositivo: "Brooktree_Bt878_audio"

Activamos
el Rec y subimos la ganancia en Line1, dejando en
Mute Line2 y Line3 tal como indica la imagen.
12 - Prueba de entrada de sonido:
# sox -w -r 32000 -t ossdsp /dev/dsp2 -t ossdsp /dev/dsp
Deberíamos
oír una fuerte señal de ruido en nuestros altavoces conectados a la tarjeta de sonido.
Se trata de la señal de sonido que proviene del tuner
(que se activa tan pronto como arranca el PC) la cual estamos digitalizando y
enviando a la tarjeta de sonido. ¡Lo estamos haciendo con nuestro Bt878! :)
Podemos
utilizar un programa de televisión para sintonizar un canal (xawTV).
No es necesario que veamos correctamente la imagen de televisión. Si dejamos el
comando sox
funcionando en una shell, escucharemos el sonido del
canal.
13 - Prueba de captura de sonido:
# sox -w -r 448000 -t ossdsp /dev/dsp2 -t .wav sound.wav
-w 16 bits -r 448000 Sps /dev/dsp2 entrada analógica del ADC -t .wav formato archivo de sonido
Realizando
un análisis del fichero de sonido utilizando Audacity (freeware), podemos observar que hasta 20Khz tenemos el sonido audible que
proviene de la televisión pero también aparecen
señales a frecuencias mas altas (sobretodo ruido) que son la mejor prueba de
que estamos digitalizando frecuencias superiores (hasta 224Khz aproximadamente).
Modificaciones
1 - Entrada de señal externa
La
PV-BT878P+ 9D dispone de las siguientes conexiones:

Todo
parece indicar que el conector AudioIN nos permite introducir una señal en la tarjeta y en
consecuencia, en la entrada del ADC del Bt878A, pero
por desgracia no es así. Inexplicablemente, la misión de la entra AudioIN es
únicamente obtener esa misma señal en AudioOUT al pasar por el mux Philips tal como muestra el siguiente gráfico. Desearía
estar equivocado, pero... :(

Resumiendo: Mediante el mux externo escogemos si en la salida AudioOut
obtenemos la señal externa del AudioIN o la señal de sonido del tuner,
pero en ningún caso esta señal externa llegara al ADC
2 - Acceso a la salida del tuner.
La idea
del "mod" es: Inyectar una señal externa utilizando
la conexión de la salida del tuner en el pin 25, inhabilitando
primero dicha salida y conduciéndola luego hasta fuera del PC.
También
sacamos fuera del PC la salida de sonido del tuner
para no perder este recurso.

SYMBOL |
PIN |
DESCRIPTION |
VT |
11 |
tuning voltage (monitor) |
VS |
12 |
supply voltage tuner section +5 V |
SCL |
13 |
I2C-bus serial clock |
SDA |
14 |
I2C-bus serial data |
AS |
15 |
I2C-bus address select |
n.c. |
21 |
not connected |
2nd IF sound output |
22 |
second IF sound output |
CVBS |
23 |
Composite Video Baseband Signal output |
VIF |
24 |
supply voltage IF section +5 V |
AF sound
output |
25 |
AF sound
output |
3 - Pasos:
- Extraer la tarjeta del PC
- Cortar (¡con cuidado!) la salida de sonido del tuner, en el pin 25
- Soldar en la antigua conexión del pin 25 (en la superficie de la tarjeta) un condensador de 1ľF para bloquear la CC, con las patas mas cortas que nos sea posible.
- Soldar entre el condensador y la toma de masa de la tarjeta un cable coaxial de sonido (la malla del cable conectada a masa).
- Se recomienda utilizar como conexión de masa la pata del chasis del tuner que atraviesa el circuito impreso.
- Soldar un conector de audio RCA hembra (o lo que mas nos interese) al extremo del cable. Llamaremos a esta entrada: ADC_IN
- Soldar entre el pin 25 del tuner (que ha quedado al aire) y masa otro cable coaxial de audio.
- Soldar un conector de audio RCA hembra (o lo que mas nos interese) al extremo del cable. Llamaremos a esta salida: Tuner_OUT
- Instalar la tarjeta dejando los cables fuera del PC.
- Cortar (¡con cuidado!) la salida de sonido del tuner, en el pin 25
- Soldar en la antigua conexión del pin 25 (en la superficie de la tarjeta) un condensador de 1ľF para bloquear la CC, con las patas mas cortas que nos sea posible.
- Soldar entre el condensador y la toma de masa de la tarjeta un cable coaxial de sonido (la malla del cable conectada a masa).
- Se recomienda utilizar como conexión de masa la pata del chasis del tuner que atraviesa el circuito impreso.
- Soldar un conector de audio RCA hembra (o lo que mas nos interese) al extremo del cable. Llamaremos a esta entrada: ADC_IN
- Soldar entre el pin 25 del tuner (que ha quedado al aire) y masa otro cable coaxial de audio.
- Soldar un conector de audio RCA hembra (o lo que mas nos interese) al extremo del cable. Llamaremos a esta salida: Tuner_OUT
- Instalar la tarjeta dejando los cables fuera del PC.

4 - Prueba.
Una vez
instalada la tarjeta, realizaremos una prueba para asegurarnos que hemos
realizado correctamente las soldaduras.
Utilizando
un cable normal de audio con conectores RCA
macho, puenteamos ADC_IN con Tuner_OUT y repetiremos el
punto: Instalación-12. Deberíamos oír
nuevamente la señal de ruido (o sonido si tenemos sintonizado un canal) que proviene del tuner
pero ésta vez saliendo y entrando en nuestro PC.
Si la
prueba es satisfactoria ya tenemos listo nuestro ADC casero de 16 bits y 448000 Sps.
5 - Interferencias.
Llegados
a este punto es interesante realizar una pequeña prueba para conocer a las
"vecinas" que tendremos siempre en nuestros experimentos: Las interferencias del
interior de nuestro ordenador.
Por muy
bien que realicemos las soldaduras y por muy cortos que dejemos los trozos de
cobre sin apantallar, sufriremos diversas interferencias provocadas por toda la
electrónica que rodea al Bt878A.
Esta imagen es
un espectrograma realizado con el programa
SpectraPLUS (demo 30 días) para
Microsoft Windows, de una señal obtenida del Bt878A sin nada conectado al ADC_IN y amplificada por software con
el parámetro Plot_Top
= 0.010
En mi
caso se observan fuertes señales en la zona de 0 a los 2000Hz y diversos
"pitos" a 60, 98, 102, 120.4 y 180.4 Khz.
Teóricamente,
cada modelo de PC provocará otro tipo de interferencias y es importante
conocerlas para evitar obtener falsos resultados en nuestros experimentos. Pero
sin preocuparnos demasiado, ya que si tenemos una carga conectada y en el nivel
de entrada es lo suficientemente fuerte, las interferencias casi desaparecen.
6 - ¿Y ahora que?
Vosotros mismos, ya no tenemos el limite de nuestra pobre tarjeta de sonido.
Yo estoy explorando nuevas zonas y encontrando cosas realmente interesantes y
espero publicar nuevos artículos pronto.
¿Alguien
adivina a qué corresponde el espectro de la siguiente señal? (clic
para ampliar)
73 de EA7DYY (Santi)