ENTENDIENDO ICPROG www.ic-prog.com Autor: José Antonio Casas email: [email protected] Icprog es un software de libre distribución con el que podremos programar gran cantidad de dispositivos como microcontroladores PIC, Scenix, memorias I2C, SPI... etc. Soporta una número de programadores bastante amplio, dependiendo del programador que estemos usando podremos grabar algunos dispositivos o no. En este tutorial nos centraremos en el clásico programador JDM. Es un programador serie muy fácil de montar ( tenéis una variante de este programador en www.easybots.com ) con el que podremos programar gran cantidad de dispositivos, entre ellos se encuentran los microcontroladores PIC, concretamente la serie 16F8XX. Lo primero que debemos hacer al iniciar por primera vez ICPROG es escoger el programador que queremos usar, en nuestro caso JDM . Escogeremos convenientemente el puerto serie al que conectaremos el programador y si nuestro JDM es normalito no hará falta marcar ninguna casilla en el apartado “comunicación”. El apartado “retardo” lo usaremos si vemos que nuestro programador a veces “falla”. En ocasiones incrementando un poco el retardo I/O conseguiremos que el programador falle menos o no falle. Una vez configurado el Hardware pasaremos a escoger el integrado que queremos programar. Lo escogeremos dentro de una lista que podremos desplegar en el apartado “Ajustes” en el menú superior. Para nuestro ejemplo escogeremos el PIC16F877. Una vez hallamos hecho esto nos aparecerá una pantalla con el código de programa y en la parte izquierda nos aparecerá una barra como la de la figura de abajo. Será muy importante que entendamos que indican cada una de las casillas que forman esa tabla. Cada una de las casillas nos permitirá cambiar algún parámetro de los FUSES del PIC. Los FUSES son unos parámetros del PIC que le permitirán cambiar su configuración interna antes de que el microcontrolador arranque. Por ejemplo, si escogemos un reloj HS, el circuito interno de oscilación que el PIC usará será diferente que si escogemos un reloj RC. Así pues los FUSES son parámetros de configuración del PIC que necesitamos grabar correctamente para que el funcionamiento sea el esperado y que dependerán de la disposición Hardware con la que esté conectado el PIC en el circuito en el que se encuentre. WDT: Esta casilla nos permite activar o desactivar el WatchDOGSu funcionamiento es sumamente sencillo. Simplemente es un registro que debemos borrar cada cierto tiempo. Si pasa un tiempo X y ese registro no ha sido borrado, el pic se resetea, así de sencillo. La instrucción para borrar el registro es CLRWDT. Esto se usa como sistema de protección ante un posible cuelgue del PIC. OSCILADOR: Este fuse se refiere al modo de oscilación que va a usar el Pic. Los modos posibles son los siguientes: RC: Se basa en un montaje con una resistencia y un condensador (Resistor Capacitor). La velocidad a la que oscile el pic dependerá de los valores del condensador y de la resistencia. En el dataheet del PIC tenéis los valores. En este modo el PIC no puede funcionar a frecuencias altas, es decir, de orden de Mhz. XT: Se suele usar este modo de oscilación cuando usamos oscilador con cristal de cuarzo pero a baja velocidad. Por ejemplo 4 Mhz. HS: Para cuando necesitemos aplicaciones de "alta velocidad"(más de 4 Mhz ). Se basa también en un cristal de cuarzo, como el XT LP: "Low Power" En este modo de oscilación el pic consume menos a costa de bajar su frecuencia de oscilación a unos 200Khz. Al igual que el XT y el HS, necesitaremos de un cristal de cuarzo y unos condensadores. PWRT: Si activamos este FUSE, lo que conseguimos es que se se genere un retardo en la inicialización del Pic. Esto se usa para que la tensión se estabilice, por lo que se recomienda su uso. LVP: (Low Voltage Programming ) Si activamos este fuse, el PIC entenderá que lo vamos a programar mediante el LVP. Es una manera de programarlo que no requiere usar los 12V en la patilla de reset. Para más detalles podéis consultar el datasheet. Es muy importante desactivarlo si no lo vamos a usar. DEBUGGER: Inicializa el PIC en modo DEBUG. Algunos programadores soportan esta prestación y podemos hacer un debug en tiempo real con programas como el MPLAB. CP: El Code Protection. O dicho de otro modo, una garantía de que el código que escribamos en el PIC no pueda ser leido por otra persona, para que no nos lo copien, modifiquen, etc. Esto no impide que el PIC funcione como siempre, ni que no se pueda sobreescribir su contenido. Lo único que nos impide es leerlo. Uso de las pestañas BUFFER Las pestañas buffer nos permiten tener diferentes ventanas de código de programa para agilizarnos la tarea de programación. Si tenemos que grabar diferentes programas o comparar los programas grabados en el PIC con alguno que nosotros tengamos en el PC. Por ejemplo, si nos encontramos dentro de la pestaña 1, podremos cargar un programa para grabar . Una vez grabado, podemos pinchar en la pestaña 2 y allí leer el programa que hay en el PIC (atajo de teclado: F8). El programa leido se quedará dentro de la pestaña 2, ahora podríamos comparar el contenido de las dos ventanas y así sabríamos si lo que acabamos de grabar en el PIC se ha grabado correctamente, para ello, dentro de la pestaña “Buffer” del menú superior escogeremos “comparar” y allí seleccionaremos el buffer con el que queremos comparar ( buffer 1 en nuestro caso ). Si el contenido de los dos buffers es diferente, el programa nos empezará a indicar las posiciones de memoria que son distintas. Sin lugar a dudas, esto no es bueno, ya que el código que acabamos de leer debería ser el mismo que el código que hemos grabado. El error 0000h El error 0000h ocurre cuando tras una verificación ICPROG comprueba que la posición de memoria 0000h del código que queremos programar no coincide con la posición 0000h ( la posición inicial ) de la memoria del PIC. Por tanto el PIC no se ha grabado bien . Cuando el PIC no se graba bien, lo suele hacer desde un principio, otras veces solo se graban mal algunas direcciones concretas, entonces al verificar ICPROG nos dirá que en un dirección determinada ( por ejemplo: 00F4Ch ) ha habido un error. Si ello ocurre intentaremos grabar de nuevo, si sigue sin funcionar intentaremos cambiar el retardo del programador en el apartado “Ajustes Hardware” ( atajo de teclado F3 ). Si ello tampoco da resultado reiniciaremos la máquina y volveremos a intentar. Si así tampoco intentaremos la grabación con otro PIC. Si el programador todavía no funciona probaremos en otro ordenador. Y si así tampoco entonces nos preguntaremos si el programador ha funcionado alguna vez. Si ha funcionado alguna vez entonces yo ya no sabría que hacer. En caso contrario, si nunca lo hemos utilizado sería conveniente medir con un multímetro los voltajes que hay en las patillas asociadas al programador, para ello haremos lo siguiente. Iniciaremos una programación con un programa cualesquiera, mediremos en la patilla de VDD y allí tendrá que haber +5V, en caso contrario repasaremos el circuito porque algo está mal. Si todo ha ido bien mediremos en la patilla de RESET, allí tendrán que aparecer unos 12V. Luego en las patillas de DATA y CLK aparecerán unos voltajes de unos 3V. En verdad allí habrá un tren de pulsos por donde fluye la información, pero si medimos con el multímetro en modo DC éste nos dará el valor medio de voltaje presente en ese punto. Si llegados a este punto todavía no hemos resuelto el problema estaría bien preguntar a alguien que hubiese montado ese mismo programador. Si esa persona no nos puede ayudar entonces lo mejor será montar otro programador o comprarse uno hecho ( esto ya cuando estemos desesperados ☺ )