Programador de PICs JDM -parte 3-

Es hora de presentar los resultados de mi JDM full!

Diseño de la caja y detalles finales

Una vez finalizadas las 2 placas, el siguiente paso fue interconectarlas, conectar el cable, agregar el conector ICSP, y en fin... buscar alguna caja o habitáculo para "meter" todo!

Puesto que las victimas del "desguace" para armar este dispositivo fueron el jockstick de Family Game y un mouse con conector serial (del cual use el cable con 5 conductores), pensé que podría ser una buena idea aprovechar este para cubrir el circuito... pero hmmm! no me convenció demasiado:


Si bien la placa de componentes quedaba bien, no había mucho lugar y estética para la placa de zócalos...en la figura tambien se pueden ver mis bosquejos de la placa de zócalos y de la placa de componentes (que les presenté mas limpiamente en dos graficas) los cuales llevan su trabajo pero asi es divertido :-D .

Seguí buscando un poco mas, y encontré una cajita de madera delicada con cierre y todo, que me pareció interesante. De ese modo conseguí resultados que me convencieron mucho más...:


La caja que tiene la posibilidad de abrirse, fue seccionada su tapa de manera que la parte posterior de esta cubra el circuito. La apertura delantera permite acceder a los zócalos utilizando el cierre para cubrirlos del polvillo. En esta se encuentra la PCB donde podemos conectar los PICs que van a ser grabados, y la llave para alternar entre la tensión de alimentación Vpp1 y Vpp2, de acuerdo al micro que vaya a ser grabado. Aquí tan solo faltaría agregarle la serigrafia al lado de la llave, que "diga" que PICs pueden ser grabados en una posición y cuales en otra:


Si no se desea grabar los PICs en el dispositivo, sino en el circuito u on-board puede utilizarse el conector ICSP. Para esto en la parte lateral, situé el conector macho DB9 que permite conectar el cable ICSP para efectuar estas operaciones, en estos casos puede cerrarse el compartimiento de zócalos para librarlos del polvo:


Por ultimo el barnizado al estuche para darle un toque final de lujo!

Cómo opero el JDM?

El diseño que trabajamos pertenece a la versión full, que como ya dije mi diseño tiene algunas particularidades y modificaciones, por lo tanto, para los que decidieron fabricar y seguir mis consejos aquí les dejo explicado como deben operar el programador.

Conexión de dispositivos al zócalo

Dividiremos los dispositivos soportables en 3 grupos:

1er grupo: 12C5xx, 12C67x, 16C61, 16C62x, 16C71, 16C71x, 16C8x, 16F84 y 16F84A.

Este grupo se refiere a todos los PICs de 8 y 18 pines. Se conectarán en el zócalo de 18 pines (que corresponde al tercer zócalo, el mas pequeño de la PCB). La forma de conectarlos es con la muesca (indicador del pin 1) hacia arriba. La figura siguiente muestra un ejemplo con el PIC 16F84A:


Los PICs de 8 pines se conectaran en la parte superior del zócalo de 18 pines, también con la muesca hacia arriba. Simplificando, la forma de conexión es la misma que se muestra en el diagrama inicial en el zócalo de 18 pines. 

2do grupo: 16F87x, 16F877 y 16F877A.

Este otro grupo hace referencia a PICs de 28 y 40 pines. Se conectaran entre el zócalo de 28 y 24 pines de la PCB como se muestra mas abajo en la figura como ejemplo con el PIC 16F877A. El lado de la muesca que pertenece al lado del pin 1 debe apuntar hacia arriba como en el otro caso:


Se puede apreciar que el PIC sobresale del zócalo, pero no hay mayor problema, pues los pines restantes no tienen conexión durante la grabación. También puede verse que la conexión es entre el carril izquierdo tanto del zócalo de 24 como el de 28 pines. Importante, de lo contrario no se efectuara la grabación!

Los PICs de 28 pines se conectan también con la muesca hacia arriba y en los mismos carriles, la única diferencia que no sobresaldrán del zócalo de 28 (obviamente!!!) pero si del zócalo de 24.

3er grupo: EEPROMs 24Cxx, 24LC01 y 24LC02

Las memorias EEPROMs que el dispositivo puede grabar son las de 8 pines, pero no se conectan como los PICs de 8 pines.

Según el diagrama inicial, estas tienen un propio zócalo de 8 pines porque sus conexiones son diferentes a los PICs. Sin embargo, en mi diseño, las memorias también pueden grabarse conectándolas en el lugar adecuado entre los zócalos. Si siguieron al pie de la letra el diseño de PCB de zócalos que propuse les queda determinados una serie de pines para conectar las EEPROMs.

La conexion de estas se puede ver en la figura para la 24LC01:


Quizás les resulte difícil entender como se conectan, pero con la ayuda del diagrama de la PCB de zócalos se darán cuenta. Pero no es difícil, las memorias se conectan con la muesca hacia abajo y entre el zócalo de 24 pines y el de 18 pines, ubicada bien al tope inferior de este ultimo. Todas las EEPROMs se conectan de este modo y es la única que se conecta de distinto modo! 

Como verán el diagrama de conexión no es difícil, y si le resulta complicado pueden hacerse una serigrafia en la PCB para recordarlo, o bien una etiqueta en algún sector del dispositivo. 

Software

Por ultimo, lo mas importante y indispensable para el funcionamiento del proyecto, se trata del ICProg, que es un software libre para escribir, leer, borrar y configurar PICs y memorias EEPROMs. 

En mi caso, opte por la version 1.05D, que es la que pueden obtener a partir del link indicado. Esta version funciona perfectamente con el JDM full, y en el caso en que asi no sea es porque necesitan este driver. 

Entonces, una vez que tienen los dos .zip:

1 _ Instalar el ICProg 1.05D
2 _ Guardar el .sys (driver) en la misma carpeta que el ICProg.
3 _ Configurar el tipo de programador como se ve en la figura:


4 _ Conectar el programador y reiniciar el programa para que lo tome.

Como verán el programa es intuitivo y no les resultará complicado utilizarlo. Cualquiera sea el PIC o memoria que vayan a grabar deben seleccionar el tipo de dispositivo en Ajustes>Dispositivos... .

...y voila tout! espero que les haya resultado mas que interesante la propuesta. 

Vamos! animense a fabricar su propio programador de PICs JDM y veran que le dirán Adios!! al renegar jeje.


Disfrutenlo!
Saludos muy grandes a todos los lectores del blog!

Nos vemos pronto...

Programador de PICs JDM -parte 2-

Ya dejamos presentado el esquema del programador JDM, como se puede ver es muy simple su circuito y los componentes son sencillos de conseguir!

Si te parece, te invito a armar tu propio programador, comenzando por tener encima de la mesa los siguientes componentes:
  • 1x resistencia 1k
  • 1x resistencia 1k5 (significa 1.5K)
  • 1x resistencia 100K
  • 1x potenc. 1k *(opcional por 1x resistencia 1k)
  • 1x potenc. 10k *(opcional por 1x resistencia 10k) 
  • 1x capacitor 22uF/16v
  • 1x capacitor 100uF/16v
  • 1x diodo 5z1 (significa zener de 5.1 v)
  • 1x diodo 8z2 (significa zener de 8.2 v)
  • 4x diodo 1N4148 o similar
  • 2x transistor BC237 o similar
  • 1x transistor BC307 o similar
  • 1x zócalo DIP 8 pines 
  • 1x zócalo DIP 18 pines
  • 1x zócalo DIP 28 pines *(opcional)
  • 1x zócalo DIP 40 pines 
  • 1x conector DB9 hembra
  • 1x cable de 5 hilos (apantallado)
  • 1x conector DB9 macho
  • 1x cable adicional de 5 hilos
  • 1x llave de dos posiciones doble (es decir 4 o 6 pines)
  • 2x placas universales de 16x16 perforaciones (o similar)
  • 1x caja para el proyecto
Los componentes en color azul, solo los necesitaras si deseas armar la version full.
Aquellos componentes en color rojo o con asterisco (*) son los que necesitaras si quieres armar el JDM full con las modificaciones y mejoras tal cual como el que les presento a continuación.


Modificando mi JDM full...

Como la mano con mis anteriores programadores venia algo mal, decidí armar este con todos los detalles y "chiches" posibles para que se convierta en la estrella de los graba-PICs jeje.
Para esto decidí estudiar algo el esquema y resultaron algunas modificaciones:

1ra modificación

Los potenciómetros de 1k y 10k solo se usan para asegurar la tensión Vpp en el 16F84A, por lo que:

Para el PIC 16F84A:
R4=1k (posición 1)
R5=10k (posición 1)

Para todos los demás PICs:
R4=0k (posición 3)
R5=0k (posición 3)

por lo tanto siempre están o a final o a tope de carrera, lo cual es ineficaz su uso.
Mi propuesta es cambiar los potes por una resistencia en serie y una llave en paralelo como se muestra a continuación:

Así, si efectuamos dicho cambio en ambos casos (R4 y R5) necesitaremos una llave con 4 puntos o 6 puntos (de los cuales solo usaremos 4) para cortocircuitar la resistencia en el caso de grabar los demás PICs.
El efecto es el mismo y se logra de mejor manera!

2da modificación

Si observan los zócalos de 28 y 40 pines, la disposición de los pines Vpp,Vdd, Data, Clock y Vss, es similar. La única diferencia son los pines 11 y 12 del zócalo de 40, con el pin 8 del zócalo de 28. Los pines del zócalo de 40 tranquilamente podrían estar en el zócalo de 28, ahorrándonos un zócalo.

La siguiente gráfica deja mas claro lo que quiero expresar:
Entonces, podemos obviar el zócalo de 40 pines, usando el zócalo de 28 pines, tanto para PICs de 28 como 40 pines. La conexión es simple, guiándonos por la gráfica, tan solo debemos conectar:

Vdd --> pin 11 del zócalo 28
Vss --> pin 8 y 12 del zócalo 28 

Ya esta! ahora podemos eliminar el zócalo de 40 pines.

3ra modificación

Los PICs pueden grabarse antes de montarlos en el circuito, pero muchas veces (sobre todo al trabajar con protoboard) queremos modificar el código que hemos grabado y hay que desmontar el micro del circuito una y otra vez. Para evitar esto, se cuenta con la posibilidad de grabar el PIC on-board o ICSP (In-Circuit Serial Programming). Esta posibilidad se la daremos al JDM con el agregado de un conector ICSP que permite que las señales Vpp, Vdd, Vss, Clock y Data lleguen al circuito donde esta montado el PIC.

El conector que diseñé esta explicado mas abajo, en la sección "Diseño conector/cable ICSP".

4ta modificación (solo porque no conseguí zócalos adecuados :( )

Esta ultima modificación la lleve a cabo al no lograr conseguir los zócalos adecuados. Resulta que los zócalos DIP tienen dos anchos diferentes:

Solo conseguí los mas delgados, así que tuve que diseñar una placa de zócalos especial, que al final me termino convenciendo por el ahorro de espacio que me represento!

Mas abajo explicare como efectué dicho diseño de placa con 3 zócalos delgados: uno de 18, otro de 24 y otro de 28 pines.

Ahora a diseñar!!!...


Decidí trabajar con placas universales, si bien el diseño quedaría mas prolijo en una placa quemada, quería un diseño mas cómodo para mi modelo final.


Por otro lado opte por usar dos placas universales: una para el circuito de componentes y la otra para los zócalos. Por lo tanto, ambas se comunicarían entre si a través de las 5 señales que llegan a los zócalos.


Antes de empezar el trazado, hice un "collague" con el circuito en papel para ver que conexiones se pueden simplificar en la placa. El trazado se baso en las 5 señales que describí mas arriba. La siguiente gráfica muestra el trazado:
Diseñando placa 1: PCB para zócalos

En primer lugar diseñe la placa de zócalos. Al fin de cuentas en ella ingresan 6 señales (y no 5) que grabaran todos los PICs: Vpp1, Vpp2, Vdd, Clock, Data y Vss. Las señales Vpp1 y Vpp2 son respectivamente las tensiones de programación para todos los PICs (pin 4 en el zócalo 18) y para el PIC 16F84A (pines 1 en el zócalo 28 y 40, y pin 5 en el zócalo 8).

Utilicé una placa universal de 16x16 orificios, por lo que me resulto mas cómodo dibujar en hoja cuadriculada la disposición de los zócalos y con código de colores las señales que a ésta llegarían, pero antes de eso, debia arreglar el tema de ... ¿como diab... acomodar los zócalos delgados en la placa?
El problema no eran los PICs de 8 pines ni los de 18 pines, el tema es que los PICs mas grandes (los de 28 pines y los 40 pines, son del DIP "grueso", es decir el zócalo debería ser mas ancho.

Entonces, opte por acercar lo suficiente los zócalos delgados para que entre 2 de ellos puedan conectarse los PICs de DIP grueso, como el 16F877. Así fue como lo hice:


Entonces todos los PICs de 28/40 pines irían conectados entre esas hileras. Como se puede ver ninguno de los zócalos tiene una hilera de 20 pines, pero mas abajo muestro el detalle de conexión de todos los PICs!!!

La matriz de 16x16 correspondiente a los orificios de la placa universal para definir la ubicación de las conexiones se muestra a continuación:


La conexión "Desde la placa de componentes", trae todas las señales generadas en la PCB de componentes (ver correspondiente sección). La conexión "Hacia el conector ICSP" es opcional y es una de las modificaciones que planteé mas arriba. Esta ultima, permite darle al programador mas opciones (ver sección ICSP mas abajo).

Como pueden ver, use 1 zócalo DIP de 18 pines, un zócalo DIP delgado de 24 pines y otro delgado de 28. Con esta configuración y como los ordene me aseguro el funcionamiento para todas las familias de PICs de la versión JDM full. Como ya comente podría haber utilizado zócalos de 8, 18, 28 y 40 pines, pero esto es lo que conseguí!!!

Ahora bien, los puntos de colores muestran a donde deben ir soldadas las señales, el trazado de las pistas se los dejo a su criterio, sin embargo, por aquí les dejo un trazado que hice "a mano en papel" y obviamente no es el mas prolijo pero trate de minimizar el uso de jumpers aunque NO pudo evitarse!! (click para mayor claridad)...

Las pistas con estaño están dibujadas con trazos rectos, mientras que las pistas mas finas y curvas son cables de pequeño diámetro. Aunque no lo crean este diseño funciona jeje!!! 

Diseño conector/cable ICSP

Ya una vez finalizada la PCB de zócalos, podemos soldar el conector ICSP. En mi caso use un viejo conector DB9 macho de la entrada de un jockstick de Family Game, como el que se ve en la figura de mas abajo. Por otro lado, aproveche el cable de un jockstick de Family para crear el cable ICSP. Este tiene 5 cables por lo que pueden llevarse las 5 señales a una placa o protoboard en donde estemos trabajando. Para no romper la ficha, debemos usar los pines en las posiciones en la que están soldados y tener esto en cuenta para soldar el conector a la PCB de zócalos. Entonces, si soldamos las señales como se muestra a la izquierda, estas "saldrán" por los correspondientes cables en la tabla de la derecha.


En el extremo de la ficha, podemos soldar en cada cable una espiga para poder conectar fácilmente a la protoboard en caso de efectuar una ICSP. Por otro lado es recomendable etiquetar los cables con cinta mágica o similar para identificarlos rápidamente.

Diseñando placa 2: PCB de componentes

La placa de componentes la efectué con una placa universal de 16x16. El diseño lo tracé en una hoja cuadriculada he aquí el diagrama lo mas simplificado del resultado, que no es el mejor y por lo tanto pueden "descomprimirlo" mas aun, pero en fin lo importante es que funciona!!!

El detalle de las soldaduras está en color negro, y el sentido de los diodos, capacitores y demás está en color blanco:


A esta placa le llegan las conexiones de la ficha DB9 hembra que es la conexión de la placa a la PC. En la siguiente figura se ven los pines que corresponden a cada uno de los puntos blancos que es donde van conectados los cables de dicho conector. Las conexiones en color se refieren a las señales Vpp1, Vpp2, Vdd, Clock, Data y Vss y siguen el código de colores de todas las figuras presentadas mas arriba.Es conveniente para mayor simplicidad a la hora de interconectar la PCB de componentes con la PCB de zócalos, usar un conector de 6 pines (tipo los que se usan en la placa madre de las PCs) si quieren darle mayor flexibilidad al circuito.

Por ultimo, los puntos con rojo se refieren a las conexiones para la llave selectora de Vpp que reemplaza a los potenciómetros (ver 1ra modificación). Como pueden ver hay dos conexiones de 2 pines, estas van conectadas en una misma llave de 4 puntos: 2 de ellos en un juego de puntos y otros 2 en el otro juego, OJO! no deben hacer cortocircuito entre los dos pares de pines!!! Lo que debe hacer la llave "al cerrar" es dejar cortocircuitada a la resistencia de 1k y a la resistencia de 10k por separado (ver esquema).

En esta ultima gráfica, la PCB del lado serigrafia con el detalle de los componentes y su ubicación. Como verán no utilice software de PCB al trabajar con placa universal y por el hecho de haber diseñado en hoja cuadriculada:


El detalle de las conexiones del conector también lo pueden ver en el diagrama inicial. Los conectores en rojo son las salidas para las llave de 4 puntos, los conectores en color son las salidas de las señales para la placa PCB de zócalos como ya comente mas arriba. Es algo comprimido el diseño pero lo importante es que no requiere jumpers, ni cables en la placa, por lo que es mucho mas prolijo que la PCB anterior aun.

En la próxima y ultima entrega, mi programador terminado, su funcionamiento y el software adecuado para trabajar con los PICs!!!
Saludos...!!!

Programador de PICs JDM -parte 1-

Para aquellos amantes de la programación y la electrónica deben tener idea de lo que es programar un PIC!
Si nunca programaste uno, entonces esta es tu oportunidad...

Hagamos algunos comentarios de lo que significa esto de programar...

Programar un PIC es "escribir" o volcar un programa, compilado previamente en algún ordenador, a su memoria Flash. Pero aunque parezca sencillo, necesitamos generar una tensión adecuada "Vpp" o tensión de programación que aplicada a un cierto pin del circuito integrado permitirá escribir el PIC, es como el acceso a ese estado especial del PIC. Decimos estado especial, porque una vez escrito el PIC mantendrá almacenado ese programa en la memoria hasta que vuelva a programarse. Además de esa tensión, tenemos dos señales adicionales: una señal de clock y una señal de datos que constituirán juntos un puerto serial que servirá de comunicación entre el PIC y la PC.

He aquí el problema, porque Vpp o tension de prog. suele ser del orden de los 13.2 V; tension complicada de conseguir en cualquiera de los puertos, ya sea serie o paralelo. Hagamoslo ley: 


Ley de un grabador de PICs:
Vpp grab >=  Vpp req

que indica que la Vpp generada por el grabador debe superar la Vpp requerida por el PIC para que efectivamente se realize la escritura.

Que haremos entonces?...

Cansado ya de renegar con otros programadores que se resistían a cumplir la ley correctamente, hemos optado esta vez por armar algo mucho más eficaz y que realmente funciona para todos los PICs de su clase siempre!. Se trata del programador "JDM" que seguramente lo habrán visto en mas de una pagina web. Luego de haber armado casi 3 programadores he llegado a la conclusión de que este es uno de los más completos y encima mas simples, dado que:
  • Cumple la ley de un grabador (ya casi patentada :p)
  • Utiliza el puerto serie de la PC (DB9).
  • No utiliza fuente externa de alimentación (se alimenta del puerto).
  • No utiliza compuertas (solo resistencias, diodos y simples transistores).
  • Permite grabar una amplia gama de PICs.
Te presento aquí 2 versiones: la JDM lite y la JDM full. Para introducirte en el mundo de los PICs podes construir la versión JDM lite. En cambio con la versión JDM full tenes para programar PIC para rato...!
La versión full permite grabar una mayor gama de PICs como se puede ver en la tabla (aquellos entre paréntesis representan familias de PICs):


Versión Lite

Versión Full

(12C5xx)
(12C67x)
(24Cxx)
24LC01
24LC02
16C61
(16C62x)
16C71
(16C71x)
(16C8x)
16F84
16F84A
(12C5xx)
(12C67x)
(24Cxx)
24LC01
24LC02
16C61
(16C62x)
16C71
(16C71x)
(16C8x)
16F84
16F84A
16F877A
(16F87x)

El esquema del programador es sencillo. Los pines que la mayoría de los PICs necesitan para efectuar la lectura/escritura de su código son: Vdd (tension de alimentación +5V), Data (datos), Clock (pulso de datos), Vpp (tension de programación ~+13.2v), Vss (referencia de tension). Dichas señales son obtenidas directamente desde el puerto serie o bien algunas son sintetizadas en el propio circuito.

Las señales RTS y CTS proporcionan Clock y Data (respectivamente), las señales que sincronizan la escritura/lectura en el microcontrolador, como ya se comento al inicio. La señal GND, no es masa sino que da la referencia de tension Vdd (+5V) necesaria para la alimentación del esquema y del PIC. La tensión de programación necesaria (para algunos PICs es de 13.2V) se obtiene a través de los diodos zener D1 y D5 que entre ambos llevan la tension a un valor aprox. al pin 4 del zócalo de 18 pines. La referencia de tension GND (correp. a los 0V del circuito) es creada en el circuito y como regla general todos los pines que no intervengan en la grabación deberán ir conectados a esta referencia.

Los potenciómetros R4 y R5 permiten seleccionar la máxima tension Vpp la cual es necesaria para ciertos PICs como el caso del 16F84A. Entonces, para ese PIC en particular ambos potenciómetros deberán estar en la posición 1.

En resumen, el siguiente esquema pertenece a la versión JDM lite:


Extendiendo las conexiones de los pines Vpp, Data, Clock, Vdd y Vss a dos zócalos DIP adicionales, uno de 28 pines y otro de 40 pines podemos lograr "pasar" a la versión JDM full.
Simple, no?


En la próxima entrega la idea es publicar mi diseño, el cual tiene algunas mejoras y modificaciones que pueden servirle de referencia.
Saludos!

Fuente diseño original: www.fullcustom.es
Diseño modificado: Adrian D. Mentesana

Etapa ALC para Audio

ALC son las siglas de Automatic Level Control y consiste en un sistema que mantiene el nivel de la señal de audio de acuerdo a un nivel de referencia. Esto previene la saturacion sobre todo si el circuito está integrado en sistemas de grabación. Esto no solo mejora la señal de entrada que va a atacar a una posterior etapa de amplificación, sino que también optimiza el nivel de ruido de la señal y por ende reduce el nivel de distorsión sobre la salida.

Integrar un ALC en nuestro sistema de audio puede traer varias ventajas como ya se enumero, pero principalmente vayamos a inspeccionar un integrado que existe en el mercado y que es capaz de realizar dicha tarea: se trata del TDA 7284 cuya datasheet puede verse en el siguiente link. No nos explayaremos demasiado en esta entrada, solo intentaremos comentar cuales son los pines del IC y como conectarlo a nuestro sistema.

El IC contiene los pines que pueden verse a continuación:
Pero,¿cómo conectaremos el IC al circuito de audio?
El ALC o control automatico de audio debe acoplarse entre la etapa de entrada y la etapa de salida. Las entradas son los pines 6 y 9 y pueden conectarse a estos la señal de algun mp3, salida de un DVD, radio, etc. con la precaucion de acoplar adecuadamente la señal. Para acoplar la señal pueden utilizar una resistencia en serie y un capacitor de bajo valor en paralelo. Puede verse la sugerencia del fabricante a continuacion en la siguiente figura:
Las fuentes marcadas como VIN 1 y VIN 2 son las entradas de audio de las que hablamos.
En cuanto a las salidas, las tendremos en los pines OUT 1 y OUT 2 numerados en los pines 10 y 5 del IC.

Como este circuito fue diseñado pensando en el control automatico de volumen para la grabacion de cintas analogicas (pueden ya imaginarse sus años!!) tiene un pin que permite escoger un nivel predeterminado de señal a nivelar de acuerdo a las especificaciones de la cinta a grabar. Este pin es el pin 1 y en nuestro caso no tiene demasiado sentido implementarlo, si dejenlo conectado a alguno de los dos niveles de tension HI o LO que simboliza a +Vcc o tension de alimentacion o bien tierra o 0 v, respectivamente.
Tambien deben prestar atencion a la rama del pin 7 la cual tiene dos posibles posiciones R (Record o grabar ) o P (Play o Reproducir), no nos compliquemos. Si estamos en R el sistema ALC está activo, si estamos en P el sistema ALC no está activo lo que siginifica que podemos uitlizar ese punto como llave para conectar el control automatico de ganancia o desconectarlo.

Por ultimo, dos cuestiones mas:

-La tension de alimentacion debe rondar los 6 a 12 v de acuerdo al fabricante. Esta se conecta al pin 11.
-El circuito debe intercalarse en nuestra fuente de audio y la entrada al preamplificador o al amplificador de potencia; entonces nos quedaria un esquema asi:

Entrada audio ---> Circuito ALC ---> Preamp. + Ctrl Volumen ---> Amp. potencia.

El circuito entonces en el caso de un mp3, mantendrá el nivel de la señal a la entrada del pre o el amplificador   y de esta manera nos evitaremos esos desagradables altibajos de volumen al pasar de pista en pista ;).

Espero les haya sido útil y pueden investigar mucho mas en la datasheet del fabricante. Este circuito no he tenido la oportunidad de probarlo, no conozco su funcionamiento en vivo no obstante, al que le interese puede implementarlo y comentar sus experiencias por aqui!!! 

Grandes saludos!



Introducción al protocolo ATAPI

Hola electrónicos! 
Hace algún tiempo estuvimos introduciendo un proyecto que consistía en controlar una compactera (CD-ROM) a través de un puerto integrado IDE que utiliza un protocolo ATAPI... 




Pero que es un ATAPI?
Sin preambulos digamos que ATAPI es Advanced Technology Attachment Packet Interface o para nuestro idioma algo así como una "interfaz de paquetes adjuntos de tecnología avanzada" : ( pero se entendió menos que antes... veamos: muchos de uds. deben conocer algún protocolo serie. Estos trabajan enviando palabras de algún número de bits constante con una velocidad de bits dada por alguna señal de clock. En estos tipos de comunicación utilizan solamente 2 o 3 conductores debido al modo que trabajan. En cambio, un protocolo ATAPI utiliza un puerto paralelo en el que se envian bajo la habilitación de algún puerto un paquete de datos que puede ser más de una palabra en una sola transmisión. La ventaja del protocolo ATAPI es la posibilidad de interconectar todos los dispositivos de un sistema complejo como puede ser una computadora. 


Podremos controlar el CDROM a través del puerto IDE (Integrated Drive Electronics) que significa que las funciones vienen integradas en los dispositivos que estos controlan y esto facilita aún más la comunicación del dispositivo.Generalmente se utiliza para conectar esta con la PC o el dispositivo controlador una correa de este tipo:




Pero dejemonos de algunas definiciones complicadas y pasemos a lo que nos interesa...Es importante centrarnos en la definición del protocolo ATAPI para el manejo de CDROMs. El puerto de la compactera o CDROM se ve como en la siguiente imagen:


 
Fuente de la imagen: http://www.elektroda.pl/rtvforum/files-rtvforum/ide_44pin_9389.jpg 

Observemos que tenemos una serie de pines que van desde DA0 hasta DA15, estos conforman el puerto de 16 bits bidireccional paralelo, es decir, los datos entran y salen "todos al mismo tiempo" o de manera concurrente. 
Una palabra de datos entonces va a tener un tamaño de 16 bits y la siguiente forma:


MSB [ D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 ] LSB

Los sistemas CDROM mas modernos ya poseen un puerto IDE mas extendido que posee 4 pines adicionales. Nosotros no los usaremos, ni le encontraremos utilidad por ahora, asi que olvidense de ellos.

Si seguimos inspeccionando el puerto, encontramos 6 pines adicionales que utilizaremos convenientemente para comunicarnos con el dispositivo:

/RESET -->  Reseteo general del puerto ATAPI.
/DIOW  -->  DataInOutWrite --> Habilita la escritura en el puerto de 16 bits.
/DIOR  -->  DataInOutRead  --> Habilita la lectura en el puerto de 16 bits.
 DA2  }
 DA1  }-->  DataAdress --> Estos 3 bits direccionan un dato en base al reg. ATA.
 DA0  }

Tanto el pin RESET, DIOW y DIOR, trabajan con valores lògicos '0' para habilitarse, o con logica negada o negativa. Por ahora no nos interesaran los otros pines, excepto GROUND, los cuales todos deben ponerse a tierra.

Resumiendo entonces diremos que con este conjunto de 16+6=22 pines estamos en condiciones de poder comandar nuestro CDROM a traves de una comunicacion ATAPI.

Pero, ¿còmo podemos comandar nuestra compactera?
        ¿còmo es el protocolo?
Obviamente, tenemos muchisimos interrogantes en nuestra cabeza, pero sentemos algunas bases. 

Registros ATA

Quien programo PICs conoce lo que es un registro y lo entendera mejor. Para todos los demas, digamos que el registro es una palabra de n bits que posee una cierta direccion para acceder a su contenido y poder leerla. Esta palabra generalemente tiene un tamaño fijo de bits, y cada uno de los bits que la componen se llaman flags. Las flags o banderas son bits que se ponen en '1' o 'se levantan' al ocurrir cierto evento. En una operacion matematica, una bandera llamada 'CERO', por ej, podrìa ponerse en '1', al obtener un resultado nulo.

Los registros ATA o Task File Registers que vamos a utilizar son basicamente 9, pero tengan en cuenta que existen muchos màs. No vale la pena ponerse a tocar temas tediosos. Evitaremos en lo posible eso. Estos registros son:
DATA           -->  direccion 0x00
ERROR/FEATURES -->      "     0x01     
SECTORCOUNT    -->      "     0x02
SECTORNUMBER   -->      "     0x03
CYLINDERLOW    -->      "     0x04
CYLINDERHIGH   -->      "     0x05
DRIVEHEAD      -->      "     0x06
STATUS/COMMAND -->      "     0x07

Estos registros tienen la particularidad de poder ser "configurables", es decir, no solo se pueden leer sino que tambien pueden escribirse, para acceder a ciertas configuraciones.
Trabajaremos con un termino que nos facilitara todo las explicaciones que seguiran del protocolo: cualquiera de estos registros pueden estar "apropiados" por la compactera, diremos que los registros estan owned.Cuando un registro es owned no puede modificarse, o sea son solo leibles. Cuando el controlador o compactera "lo suelta" ya es modificable por nosotros... Es importante entender esto, porque sobre estos registros escribiremos para ejecutar comandos, como ya veremos, tales como Play Audio, Stop Audio, Scan Audio, Pause Audio, etc.

Si les parece mucho, es solo el comienzo; si les parece poco, ya siguen las demas entradas demasiado pronto...

Thanks !