martes, 25 de marzo de 2008

La odisea de programar un PIC: SMT1

Hace unos días me dirigí a una tienda de electrónica de mi localidad para comprar un programador de PICs. Mi intención era adquirir un TE20, por su precio y compatibilidad con todos los modelos de PIC. Lo más parecido que pude encontrar fue un clon del TE20 llamado SMT1, así que pagué 15€ por él y me lo llevé a casa. Y pensar que no me construí un programador casero para ahorrarme problemas...

Nada más introducir "SMT1" en Google aparecen decenas de foros con mensajes de gente a la que el susodicho programador les da problemas. Ni ICProg ni WinPIC800 traen un perfil de configuración específico para el SMT1, aunque el WinPIC800 si lo trae para el TE20, por lo que debería funcionar a la primera. Y digo debería porque me ha llevado casi 5 horas hacerlo funcionar bien, y tan sólo lo he conseguido en ICProg.

Como en ninguno de los foros que he mencionado antes se da una solución al problema voy a comentaros la configuración precisa que a mi me ha funcionado:

Usaremos ICProg versión 1.06A.
En configuración de hardware (F3) seleccionamos "JDM Programmer", "Windows API", "I/O delay 20 ms" y el puerto serie al que tengais conectado el programador, normalmente "COM1" o "COM2". Todo lo demás hay que dejarlo en blanco. Aceptamos para volver a la pantalla principal de ICProg y seleccionamos el dispositivo que vayamos a programar. Yo he probado con éxito el PIC12F629 y el PIC16F628A.

Configuramos el puerto serie correctamente.
Todas mis pruebas las he hecho bajo WinXP, así que si alguien usa un S.O. distinto tendrá que hacer estos ajustes de otra forma. En concreto los que useis WinNT/2000 tendreis que instalar un driver específico para ICProg que podéis descargar de la página oficial del programa. Aclarado esto entramos en "Panel de control", icono "Sistema", pestaña "Hardware", botón "Administrador de dispositivos". En el árbol de dispositivos buscamos "Puertos (COM & LPT)" y hacemos doble click sobre el puerto serie que estemos usando. Vamos a la pestaña "Configuración del puerto" y, de arriba a abajo, introducimos los valores "1200", "8", "Ninguno", "1" y "Ninguno". A continuación pulsamos "Opciones avanzadas" y deshabilitamos la casilla "Usar búferes FIFO". Aceptamos los cambios y cerramos el panel de control.

Insertamos el PIC en su zócalo.
Esto SIEMPRE hay que hacerlo con el programador desconectado del ordenador. Recordad que los integrados se insertan de modo que la patilla 1 quede en el extremo que tiene una muesca. Si vais a programar PICs de 8 patas insertadlos en un extremo del zócalo de 18 patas, ya que el de 8 está configurado para programar memorias EEPROM. Ahora sí, conectamos el programador al PC. Si la conexión con el puerto serie es correcta y el PIC está bien puesto la luz roja del SMT1 debería encenderse.

Volvemos a ICProg.
Abrimos el fichero hex que contiene el código a programar (Ctrl+O), y pulsamos el botón "Program All" (F5). Si todo ha ido bien ICProg muestra el mensaje de confirmación "Verification succesful".

Cosas a tener en cuenta si el invento sigue dando problemas:

Cerrar todas las aplicaciones a excepción de ICProg.
He comprobado que con algunos programas P2P trabajando en segundo plano se producen muchos fallos en la comunicación.

Usar un PC de sobremesa.
En algunos portátiles los puertos serie están "recortados" para ahorrar batería y no dan la corriente necesaria para programar.

Jugar con la configuración del puerto en Windows.
Por lo general se recomienda una velocidad inferior a 9600 baudios, es cuestión de ir probando. También se puede configurar el control de flujo a "Xon/Xoff".

Usar "Direct I/O" en lugar de "Windows API".
A mi se me cuelga el ICProg cuando lo intento, pero he leído que hay a quien le funciona.

Variar el valor de "I/O delay".
Cuanto más alto sea este parámetro más lento será el proceso de programación pero también menos propenso a errores de comunicación.

Repasar la colocación del PIC dentro del zócalo.
Recordad que el pin 1 va en el lado que tiene la muesca y que para los PICs de 8 patas se usa un extremo del zócalo de 18. Podeis probar con más de un PIC por si se diera la improbable circunstancia de que tengais uno defectuoso.

Desconectar y reconectar el programador al PC.
He notado que a veces se producen muchos fallos seguidos y se solucionan de esta forma. Puede que sea por el puerto o por el software... Misterios de la informática.

Comprar / fabricar otro programador.
Si sólo vais a usar PICs de 8 patas hay esquemas circulando por la red en los que con tan sólo 3 resistencias y un transistor tendreis el apaño hecho. Yo mismo he construido uno de este tipo, comunmente conocido como el "Cutre Programador", y funciona mucho mejor que el dichoso SMT1. Para los más manitas circula incluso el esquema de un programador genérico para PICs USB, que al ser USB se puede usar sin problemas en un portátil.

Espero que estos consejos os hayan servido de ayuda, ¡Suerte y buena programación!

7 comentarios:

Anónimo dijo...

oh my god!!! que cantidad de frikerios. Supongo que el articulo estara muy bien pq no me he enterado de nada.

LA TERE

PD: MUERTE A LAS AUTOESCUELAS

Anónimo dijo...

Reconócelo, la entrada del blog es muy interesante, pero el anuncio a bombo y platillo es genial! Deberías postearlo! Anunciado en TV!

Mnnn, si no recuerdo mal aun tengo tres o cuatro Z80s por ahí, y algunos chips de memoria. Seguro que con un PIC como controlador de IO y memoria se puede hacer algo interesante... :p

Frontier dijo...

Pues me interesa mucho eso de los Z80. ¿De donde los has sacado?

Anónimo dijo...

pues de mi spectrum y mi cpc, que llevaban conectores y no iban soldados, igual que la RAM. el de la megadrive creo que sí, tendría que mirarlo

pero vamos, que casi cualquier trasto antiguo lleva uno. el tal Federico Faggin los vendió como churros. ya me lo imagino en la flagoneta por las calles: er setaoshentaaaaa, iogaaaa!

lo peor es que no me extrañaría que sigan vendiéndolo :p

Anónimo dijo...

Con tu articulo he visto la luz. En cuanto he configurado el puerto serie como tu bien indicas, el SMT1 ha empezado a andar, lo sorprendente es que lo ha echo tanto para icprog como para winpic800. Thanks.. eternamente agradecido. :>

Frontier dijo...

Me alegro de que te haya servido :)

A mi con winpic800 no me funciona haga lo que haga... Misterios de la informática...

Anónimo dijo...

MUCGISIMAS GRACIAS , SIN ESTE ARTICULO NO LO HUBIESE LOGRADO JAMAS

MUCHAS GRACIAS.

Noticias anteriores