Construya y Programe su Propio Controlador PIC Para Diseñar Equipos Electrónicos

En la actualidad es muy fácil construir productos electrónicos con bajo costo, espacio reducido y con características multifuncionales; de hecho, son muchos los circuitos decodificadores de señales de TV construidos con pequeños controladores programables integrados que contienen programas sencillos. En este artículo, explicaremos cómo se programa un PIC con la ayuda de una computadora, sin que para ello se necesiten complicados circuitos adicionales. También daremos las direcciones de Internet para recabar información sobre la forma de "leer" el programa contenido en un PIC y la forma de obtener prestaciones especiales.


Como Programar un PIC Codificadores y Decodificadores, Sistemas de seguridad, Control de Robots, etc.

por Ing. Horacio Daniel Vallejo

En la creación y diseño de un nuevo producto electrónico, la tendencia actual es tratar de respetar los términos descriptivos "bajos costos", "ultra-compacto" y "multifuncional". Lograr un producto con todas estas características era sumamente difícil. Afortunadamente, en los últimos años, diseñar un producto con esos atributos se ha tornado más fácil gracias al desarrollo de dispositivos programables como la familia de microcontroladores PIC de Tecnologías Microchip. En la actualidad es muy fácil construir productos electrónicos con bajo costo, espacio reducido y con características multifuncionales; de hecho, son muchos los circuitos decodificadores de señales de TV construidos con pequeños controladores programables integrados que contienen programas sencillos. En este artículo, explicaremos cómo se programa un PIC con la ayuda de una computadora, sin que para ello se necesiten complicados circuitos adicionales. También daremos las direcciones de Internet para recabar información sobre la forma de "leer" el programa contenido en un PIC y la forma de obtener prestaciones especiales. Se necesita un dispositivo de programación para incorporar el software de los chips que venimos describiendo desde hace varios números (nos referimos a los PICs). El costo de un dispositivo de estas características suele ser muy alto, razón por la cual el lector le "huye" al diseño de sistemas electrónicos con estos componentes. Obviamente, el programador PIC presentado en esta nota necesita algunos componentes accesorios para ser construido pero resulta una solución ideal para quienes poseen computadora o puedan emplear la de un amigo o técnico conocido. El rasgo más importante de esta unidad es que no necesita partes especializadas y es un circuito muy simple.
Luego de armado se lo conecta al port (puerto) de la impresora de cualquier PC (el puerto no necesita ser bi-direccional), y ejecutar un software (programa) para iniciar la programación de los microcontroladores. Haremos referencia a la serie PIC 16F84, 16F83 y 16C84, por ser componentes de bajo costo que se consiguen con facilidad y porque la información que aquí damos fue redactada a partir del "websitie" de Microchip Inc., empresa fabricante de estos componentes.
Cabe aclarar que en las páginas de Internet de Microchip Inc. puede encontrar toda la información necesaria para el diseño y construcción de circuitos a partir de microcontroladores PIC de la serie 16XXX
Un PIC, como la mayoría de los microcontroladores, es una computadora pequeña con CPU, ROM, RAM y circuitos I/O (de entrada y salida) en un solo chip.
Los Microcontroladores constituyen el segmento de mayor crecimiento en la industria electrónica (existen PICs en decodificadores de señales de TV por cable, relojes, microondas, equipos de música, lavarropas, etc.).
Se puede considerar el microcontrolador como un circuito integrado que puede ser "personalizado" si se escribe un programa en lenguaje de máquina (assembly). Dicho de otra manera, cargando el programa en el área ROM del microcontrolador, obtendremos un circuito integrado específico para nuestras necesidades. Algunas veces el programa está diseñado para ser algo más que un oscilador o una llave lógica, pero lo importante es que el PIC realizará exactamente lo que usted le indique.
La familia PIC de la empresa Microchip Inc. es muy simple de operar, es de bajo costo y gran parte del software utilizado para crear el código de programa necesario para la programación del PIC está disponible en el website de Microchip, cuya dirección es la siguiente:

www.microchip.com

En la figura 1 damos una muestra de la pantalla que hemos obtenido al navegar por Internet.
De los tipos de PICs disponibles, los más fáciles para trabajar, según el resultado de mi búsqueda (vea la figura 2) son el 16F83, el 16F84 y el 16C84. Estos modelos particulares son los que soporta nuestro programador.
Cuestan menos de $10 cada uno, y su ROM es eléctricamente borrable, de modo que no necesita una luz ultravioleta para borrar y reprogramar los dispositivos.
El 16F84 es el más empleado, tiene 68 bytes de RAM y 1.024 palabras de memoria de programa.
La memoria de programa es un EEPROM tipo flash, que puede ser reescrito más de un millón de veces. Cualquier información almacenada será preservada por más de cuarenta años, sin alimentación alguna o señal de refresco.
El 16C84 es muy similar, pero utiliza un tipo de EEPROM más viejo.
El 16F83 puede ser considerado "el hermano menor", ya que tiene sólo la mitad de memoria; aunque tiene a su favor que es el de costo más bajo costo.
Estos PICs no requieren cristales de cuarzo o resonadores para los circuitos de reloj. Emplea un resistor o un capacitador para fijar la frecuencia de oscilación.
La tensión de alimentación para el 16F84 puede ser de 4 a 6V pero existe una versión de este integrado que puede operar inclusive, con 2V.
Tiene 13 pines de entrada/salida, cada uno de los cuales puede ser configurado individualmente para que sea una salida o una entrada


Cómo Programar un PIC de Microchip Inc.

Programar los chips PIC mencionados es muy sencillo.

1º) Se debe aplicar 5V a la pata 14 (con la pata 5 conectada a tierra).
2º) Eleve la tensión de la pata 4 a 12V).
3º) Coloque los datos en la pata 13; dichos datos serán enviados a la ROM de a un bit por vez en concordancia con la señal de reloj. Los datos serán enviados al conector 13 y en el momento de ser grabado, se eleva la tensión de la pata 12 a 5V durante al menos 0,1µs antes de ser bajado de nuevo a nivel tierra.

Los datos que se dirigen al chip contienen comandos que especifican los numerosos pasos del proceso de programación y los datos que serán guardados en la ROM del chip.

Para verificar que el PIC ha sido programado correctamente, compruebe que el PIC también pueda enviar los datos contenidos hacia el exterior a través de la pata 13.
Para aquellos que estén interesados en conocer los detalles técnicos completos de la programación de los chips PIC, las especificaciones para la programación y su verificación, pueden encontrarlos en el Website de Microchip.
El diagrama esquemático del Programador para PIC que menciona la empresa fabricante, se muestra en la figura 3.

El circuito está diseñado para adaptarse al port de la impresora de cualquier PC.
En la figura 4 mostramos el circuito con el cual hemos realizado varios diseños; empleamos como computadora una AT 486 con 4MB de RAM y disco rígido de 120MB (también realizamos las pruebas en otra compatible con Pentium 2 de 266MHz y 64MB de RAM).
Los datos de programación y las señales de sincronismo se aplican al PIC a través de R2 y R3. Los diodos D1, D2 y el resistor R1 dejan que el pin 13 del PIC pueda ser utilizado como una entrada para la programación y una salida para la verificación (recuerde que una misma pata de I/O puede ser empleado tanto como entrada o salida). Cuando la pata 17 del conector en el port de la impresora está en estado alto, la PC puede leer los datos desde la pata 13 del PIC a través de la pata 11 del conector de la impresora. De este modo, R1 y D2 se encargan de detener la señal de datos.
Cuando la pata 11 del conector de la impresora está bajo, D1 conduce. El ánodo de D2 es bajado a tierra para bloquear la señal de datos. El chip PIC estará libre para recibir datos desde la pata 14 del port de la impresora. La conexión que crea D1 entre las patas 11 y 17 del conector de la impresora permite que el software de programación detecte si el programador está conectado al port de la impresora.
Los capacitores C1 y C2 eliminan el ruido que pueden producir los cables que llevan la corriente DC. La tensión necesaria para que se produzca la programación es comandada por Q1 a través del pin 2 del port de la impresora. Se requieren dos suministros de tensión para poner en marcha el Programador PIC; 5V para la pata 14 y 12V para la pata 4.
Estas tensiones pueden ser tomadas desde la misma PC o desde una fuente externa. La tensión a aplicar en la pata 4 debe estar comprendida entre 12V y 14V. Asegúrese de que la línea de 12V tenga realmente 12V como mínimo.

 

 

 

 

 

 

 

 

Si desea emplear fuentes externas puede utilizar el esquema de suministro de tensión mostrado en la figura 5.


El circuito del programador es tan simple que puede ser construido fácilmente en una pequeña placa de circuito impreso con uso de técnicas de construcción estandarizadas.
El montaje por separado del conector del cable hace que el Programador PIC sea más fácil de utilizar, simplemente se lo conecta al port de la impresora de la PC con un multicable de 30 cm de largo.


Programación del PIC

La manera más fácil de aprender a utilizar el Programador PIC es escribir un programa simple e incorporarlo a un chip. Este modo de aprender las características del programador, también le brindará la oportunidad de verificar su hardware y software.


Programación de un circuito secuencial

Veamos cómo programar un circuito que enciende un LED después de otro, en secuencias sucesivas. Este circuito podría hacerlo con un oscilador y un CD4017.
Si embargo, también podemos hacer el circuito con un PIC, tal como se muestra en la figura 6.


Si bien este circuito puede costar más caro que un circuito digital tradicional, es más pequeño y no necesita tanto espacio físico para contener todos sus componentes.
De todos modos, hay otro argumento para utilizar el PIC en una tarea de estas características: su inteligencia. Se pueden generar diferentes modelos o seleccionar múltiples modelos con la adición de un simple mecanismo interruptor. Con componentes discretos, el circuito debiera ser descartado y rediseñado para adaptarse a este tipo de cambios. Con un PIC, sólo es cuestión de modificar el programa, borrar el PIC y reprogramarlo. Para programar un PIC desde una PC hace falta un programa y conocer el set de instrucciones de microcontrolador, pero no se asuste, esto no es difícil.

 

 

 

 

 

 

En Saber 115, dimos un ejemplo en que empleamos programas de fácil acceso en nuestro mercado, con este artículo le daremos la forma de obtenerlo en forma GRATUITA.
Para hacer que nuestro controlador prenda leds en secuencia, deberá programar que todas las patas I/o sean de salida y hacer que cada una de estas patas tenga un estado alto en forma secuencial, con un período que podemos fijar nosotros.
De esta manera, el programa, escrito en lenguaje Assembly PIC, se muestra en la Tabla 1.

;Código Assembly para microcontrolador PIC16F84 como
;circuito secuencial.

;Encendido de Leds en secuencia rotativa.

;Con una frecuencia de 75kHz, cada led permanecerá
;encendido durante 0,5segundos.

; Configuración de la CPU
; (se trata de un 16F84 con oscilador RC
; y grabado con tensión positiva durante
; el pulso en estado alto)

procesor 16f84
include <p16f84.inc>
_config _RC_osc & _WDT_OFF & _PWRTE_ON

; serán variables las dos direcciones de memoria

J equ H'1F' ; J = dirección hexa 1F
K equ H"1E ; K = dirección hexa 1E

;Programa

org 0 ; comienzo en la dirección 0

; Elijo al Port B como salida y la inicializo

movlw B'00000000' ; w:= 00000000 binario
tris PORTB ;portB ctrl register := w
movlw B'00000001' ; w:= 00000001 binario
movwf PORTB ; port B itself ;= w

; Rote el bit del port B hacia la izquierda

mloop: rif PORTB,f

; Espere un tiempo para ejecutar nuevamente la subrutina o loop

movlw d'50' ; w = 50 en decimal
movwf J ; J := w
jloop: movwf K ; K := w
kloop decfsz kKf ;K = K-1, salte si K = 0
goto kloop
decfsz J,f ;J = J-1, salte si J = 0
goto jloop

;lo hacemos nuevamente
goto mloop

end

La parte más importante de cualquier programa es la documentación. Si deja notas en el programa, recordará qué es lo que estaba intentando hacer cuando revise el programa, la vez siguiente. En el programa, estas notas aparecen en cualquier renglón que se inicie con punto y coma. Estos renglones serán ignorados por el software, mediante un montador que convierte el texto del programa en números binarios que el PIC reconoce como instrucciones.
Las primeras tres instrucciones:

processor, 16f84
include <p16f84.inc>L
_config,

son instrucciones para el técnico. La primera instrucción le indica al técnico que utilice las instrucciones del 16F84. La segunda le indica que debe incluir un conjunto de constantes predeterminadas en un archivo llamado p16F84.INC. Finalmente, la tercera establece varios bits de configuración en el PIC para activar o desactivar determinadas características del hardware.

En este ejemplo, el chip utilizará su oscilador RC, su WDT (cronómetro "vigilante") será desactivado y el PWRTE (reloj automático de reseteado) será activado. De este modo, el PIC “rebooteará” (se pondrá en marcha) con cualquier tensión que se le aplique, pero no “rebooteará” automáticamente muchas veces por segundo.

Es importante darle uso a la instrucción _config en todos los programas utilizados con el Programador PIC. El programa del técnico no realizará la programación real, sólo creará un archivo con los números que serán transferidos al chip PIC como un segundo paso.

Las dos instrucciones equ reservan espacio de memoria en el RAM de los PICs para dos variables, que se llamarán "J" y "K". El proceso es similar a estipular variables en BASIC, con la diferencia de que se deben determinar las ubicaciones físicas de RAM que se utilizarán. En este caso, las ubicaciones (en una numeración hexadecimal) son 1E y 1F. Estas ubicaciones serán utilizadas para almacenar calculadores que registren la cantidad de veces que una subrutina (loop) ha sido repetida.

La instrucción org le indica al montador que el programa se inicia en la ubicación 0 de la memoria de programa y que el programa real será el próximo.
La primera instrucción real del PIC es una instrucción movlw que borra el contenido del registro W. Ese número es luego copiado en el registrador de control TRIS para el Port B y establece que las patas 6 a13 (que son manejadas por el Port B) sean terminales de salida en vez de serlo de entrada.

Si hubiese querido que todas fuesen entradas debiera haber copiado en el port B la palabra "11111111"
Volviendo a nuestro programa, seguidamente se introduce el número binario 00000001 en el registrador W y lo copia al Port B. Esta acción enciende el LED conectado a la pata 6, dado que ahora, el terminal Pata o pin 6, que es de salida, tiene un nivel "1", es decir, un nivel alto. Pero antes de que tenga tiempo de visualizar la llegada del pulso al LED, el programa ejecutará una instrucción rlf que rota los contenidos del Port B a la izquierda y cambia los datos a 000000-10. Esta acción encenderá el segundo LED conectado al conector 7. La repetición de la instrucción producirá 00000100, luego 00001000, y así sucesivamente, esto hará que los diferentes leds se enciendan en secuencia.

Entre rotaciones, el programa necesita esperar 1/2 segundo aproximadamente, de modo que la acción no es tan rápida como para que no se la pueda apreciar. Esa es la causa por la cual aparece en el programa una subrutina de demora. El programa almacena el número decimal 50 en las ubicaciones de memoria "J" y "K", utilizando la instrucción decfsz para la cuenta regresiva de 50 a 0.
Las instrucciones condicionales del PIC son inusuales, y el descfsz no es una excepción. Esta instrucción significa: "Decrementar y omitir la instrucción siguiente si la variable es igual a cero".
Normalmente, el resultado no es cero y la parte "ir a" de la instrucción no es omitida. De tal modo, la subrutina (loop) se ejecuta repetidamente hasta que K llega a cero.
El programa real utiliza dos loops (subrutina), una incrustada dentro de la otra.
Finalmente, ir a mloop envía la ejecución al comienzo del programa. La instrucción end no es una instrucción para el microcontrolador (CPU); sólo le indica al montador que el programa ha finalizado.
El 16F84 tiene 35 instrucciones CPU diferentes. Como puede ver a partir del programa simple que hemos creado, no debe dominarlas a todas para escribir programas útiles.

 

Cómo se Construye un decodificador con PIC

Ahora mire que fácil sería construir una llave electrónica con PIC que se active luego de un cierto tiempo, o cuando se recibe alguna señal. Habría que programar una pata I/O como entrada y otra como salida, luego el programa debiera reconocer una señal presente en la pata fijada como entrada y luego de un tiempo activar la salida que se encargaría de poner en marcha un circuito. ¿Le suena conocido?, esto es lo que hemos analizado en la edición anterior de Saber Electrónica cuando estudiamos los decodificadores de las señales de TV por cable.
Por lo tanto, si sabe cómo es una señal codificada y obtiene el set de instrucciones del PIC de Internet, no tendrá inconvenientes en construir un programa para su PIC, con el objeto de decodificar señales de TV.
Seguramente Ud. se preguntará, ¿Por qué no doy el programa?, muy sencillo, considero que debo darle las herramientas para que aprenda y no inducirlo a que "arme decodificadores con fines comerciales".


Cómo obtener un Programa para "programar" nuestro PIC

En el Website de Microchip podrá encontrar hojas de datos, notas de aplicación y, lo mejor de todo, el MPLAB, un programa de desarrollo para recopilar y verificar programas PIC. El mismo está diseñado para ser ejecutado bajo Windows.
Particularmente, obtuve el programa de la dirección:

http//www.microchip.com/10/Tools/MPLAB/index.htm

Cuando acceda a esta dirección, verá que el programa precisa de 6 disquetes y Ud. debe bajar cada uno de ellos a su computadora.; luego deberá descomprimir los archivos y comenzar la instalación (en total pesa unos 8MB).
Una vez hecho esto el mismo programa le da toda la información necesaria para conseguir su propósito. Una muestra de su pantalla, se ve en la figura 7.

No debe asustarse si nunca manejó una PC, el programa le indica todo lo que debe hacer; y lo mejor, es GRATIS.

El software MPLAB le permitirá editar programas en lenguaje Assembly (también llamados códigos de fuente), compilarlos en un código de objeto y luego analizar el código binario resultante para ver qué acción realizará el microcontrolador. De este modo, podrá localizar los errores lógicos en su programación antes de ejecutar cualquier código en el hardware.

El uso del software de Microchip está muy bien documentado en las páginas de Internet. Obviamente, detallar su uso, nos llevaría varias ediciones. Usaremos el MPLAB para crear un archivo de código de objeto del texto de código de fuente que tipiamos en la Tabla 1.
Prepárese para recibir mensajes de error cuando compile el programa. El MPASM se quejará moderadamente de que no utilizará la instrucción tris. Microchip le ha restado importancia a esta instrucción y algunos procesadores PIC del futuro podrían no registrarla. Desde la perspectiva del software, uno de los mejores rasgos del PIC es su llamada compatibilidad de código de fuente. Si su diseño supera los recursos de chips con los cuales inició el programa, podrá utilizar otro chip con mayores recursos sin necesidad de reescribir el programa desde el principio. Para nuestros propósitos, la utilización de la instrucción tris en el 16C84, 16F84 y 16F83 trabaja de modo aceptable. Además, la vía alternativa de configurar el Puerto B para la salida es mucho más complicada.

 

Otro programa más sencillo para "programar" nuestro PIC se denomina NOPPP y puede obtenerlo de la dirección:

ftp://ftp.gernsback.com/pub/ EN/noppp.zip

del Website de Gernsback. Este programa MS-DOS se ejecuta bajo Windows3.x o Windows 95. De cualquier modo, si ejecuta el programa bajo Windows 3.1, trabajará mejor si lo ejecuta bajo la aplicación de "pantalla completa" que si lo hace en una ventana.
El timing es esencial para los pulsos de programación y las aplicaciones DOS de pantalla completa toman el control total de la computadora.
Si por alguna razón tiene dificultades en ejecutar el programa NOPPP bajo Windows 3.1, intente salir a un entorno DOS y ejecútelo desde allí. También puede ejecutar el programa bajo OS/2; si lo hace, asegúrese de configurar el HW_TIMER en "on" en las configuraciones DOS para el programa.
Para hacer la programación, el primer paso es conectar el Programador PIC al port de la impresora de la PC e iniciar el programa NOPPP sin ninguna tensión conectada al programador. Si la línea de 5V está conectada a tierra, el software no podrá detectar el diodo D1, y asumirá que el programador no está conectado al port de la impresora.
Si todo se encuentra en orden, debería ver una pantalla similar a la que se muestra en la figura 8.

El menú de opciones es auto-explicativo. En general, debería cargar un archivo de código de objeto (con una extensión .HEX en el nombre de archivo) en la memoria, seleccionar el tipo de PIC que programará, programar el software y luego verificar que el código fue correctamente programado en el chip. También podrá borrar un PIC que ya ha sido programado para reutilizar o actualizar la programación.

 

 

 

 

 

 

Una advertencia: nunca inserte o remueva un PIC de un programador mientras la tensión enviada al programador se encuentra activada. Cuando programe un PIC, el software le indicará qué acciones debe ejcutar y cuándo realizarlas. Dado que el software del programador requiere un timing engañoso, fue escrito para ejecutarse como un programa DOS.

Recuerde que los pulsos de medición para la programación del PIC tienen que durar por lo menos 0,1µs. En la práctica, son lo suficientemente largos como para superar cualquier señal de "rebotes" en los cables. De todos modos, no deben ser demasiado largos, para que no tornen extremadamente lento el proceso de programación. También es importante que el tiempo del pulso no dependa de la velocidad de la CPU de la computadora. El software fue escrito especialmente para ser ejecutado en cualquier IBM compatible, desde una 4.77-MHz XT a las últimas Pentium.

Cabe aclarar una vez más que para programar o leeer un PIC se debe tener la correspondiente hoja de datos, para saber en qué pata se introducen los datos y cómo se realiza el proceso de programación, también es necesario conocer el set de instrucciones del microcontolador y saber "pasar al papel" las ideas que uno tenga en la mente para realizar las diferentes programaciones.

Quienes tengan dificultad para "bajar programas de escrituras de PICs", presentando el cupón adjunto en la sección del Lector, podrán retirar de esta editorial, sin cargo, un disquete que contiene material explicativo.

Hosted by www.Geocities.ws

1