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