COMO REEMPLAZAR UN PIC 16F84 POR UN PIC 16F627

El PIC 16F84 fue el primer microcontrolador de MICROCHIP en ser fabricado con tecnología FLASH. Esto aceleró y economizó el proceso de desarrollo. Hoy este microcontrolador está obsoleto y es reemplazado por otros modelos de mejores prestaciones y menor costo. En este artículo se describe el reemplazo por un PIC 16F627/8, el cual fue diseñado para un uso intermedio entre el PIC 16F84 y los PIC 16F877.

CONSIDERACIONES PREVIAS AL REEMPLAZO

Los microcontroladores de MICROCHIP han sido diseñados para que el programador pueda trasladar un programa de una familia de microcontroladores a otra compatible, sin demasiados cambios. Sin embargo, hay que tener en cuenta que algunos registros y banderas cambian de lugar y es necesario redefinir los valores de las constantes EQU. La forma más sencilla de modificar un programa es utilizar los archivos include que preparó MICROCHIP con todos los registros, constantes y banderas. Aprovechando estas definiciones y la forma estructurada de programación, el cambio de familia de microcontrolador no es crítica.

 
LA MEMORIA DE DATOS
En algunos casos los registros especiales cambian de ubicación y en otros cambian de banco. Por ello es necesario un estudio completo del programa para verificar que la introducción de código adicional para cambiar de banco no afecte al funcionamiento. Hay que tener en cuenta que los bits de cambio de banco IRP y RP1 no pueden utilizarse para uso general y deben mantenerse en 0.

Otro problema que se presenta es que el PIC16F84 posee 68 bytes de registros de uso general, que son accesibles desde cualquier banco. Esto representa un problema porque la serie 16F627/8 tiene 256 bytes de RAM repartido en cuatro bancos. Cualquier acceso del programa a los registros desde el banco 1 debe ser modificado para que acceda solamente al banco 0 mediante el agregado de instrucciones bcf RP0 y bsf RP0.

Los registros de uso general deben reubicarse a partir de la dirección 20h y en el caso de que no se pueda agregar código para el cambio de bancos, pueden aprovecharse los últimos 16 registros, los cuales están mapeados de manera que puedan accederse desde cualquier banco. El resto de los registros de funciones especiales que corresponden a módulos periféricos (CCP1, USART, Comparador, TIMER 1 y 2) pueden ser utilizados, pero no es aconsejable ya que pueden generar interrupciones o funcionamiento errático del programa.

 
LA MEMORIA DE PROGRAMA
El PIC 16F627/8 posee hasta 4 Kbyte de 14 bits de ancho, el cual reemplaza perfectamente al PIC16F84 que posee sólo 1 Kbyte. No es necesario ninguna adaptación al programa y puede utilizarse toda la memoria para expandir el programa o las tablas.
 
LA COMPATIBILIDAD PIN A PIN
Como vemos en la figura 1, el PIC16F627/8 es compatible pin a pin con el PIC16F84, al cual se le agregaron funciones específicas extra, de manera de aumentar sus prestaciones. De esta manera se reubica en el puerto B las funciones especiales que tradicionalmente se ubicaban en el puerto C. Lo mismo ocurre en el puerto A, donde se ubican las entradas analógicas del módulo Comparador y Ref. Interna. Por ello tenemos disponible en un microcontrolador de 18 pines el módulo CCP1, Comparador interno, y Puerto Serie Asincrónico. Otra mejora para el aumento de E/S es la posibilidad de utilizar reset y osciladores internos, liberando los pines MCLR, CLKIN y CLKOUT para uso general.

Para ser compatibles con el PIC16F84 se deben desactivar las funciones secundarias que se han agregado a los Puertos y pines de sincronización (MCLR y CLK). En el caso del Puerto A se deben agregar dos líneas de código al programa para apagar el módulo Comparador y permitir el uso de E/S digitales. El módulo referencia de voltaje se deshabilita durante el reset sin causar problemas. No es estrictamente necesario agregar las dos líneas de código, ya que el módulo comparador se desactiva durante el reset, pero las entradas quedan configuradas como analógicas y pueden consumir corriente extra. (Ver tabla 1).

El Puerto B no requiere de configuraciones extra porque los módulos periféricos asociados con el Puerto B se deshabilitan durante el reset. Estos periféricos no consumen corriente extra ni generan interrupciones cuando están apagados.

Los pines MCLR , CLKIN y CLKOUT se configuran desde los fusibles de configuración. Hay que tener en cuenta que se realizaron algunos cambios en los fusibles de configuración entre la serie PIC16F62X y la serie PIC16F62XA, por lo que se aconseja utilizar el código de configuración que se describe en el archivo include, como se muestra a continuación.

__config _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _BOREN_OFF & _MCLRE_OFF & _LVP_OFF &_CPD_OFF

Esto permite utilizar cualquier microcontrolador sin preocuparse por la ubicación y la función de los fusibles. Para ser compatible con el PIC16F84 se deben agregar los códigos en negrita para desconectar las funciones especiales que son incompatibles. También debe tenerse en cuenta que hay cuatro modos de circuito oscilador compatibles con el PIC16F84, los cuales son XT, LP, HS y RC modo externo, siendo el resto incompatibles.

 
INTERRUPCIONES
El PIC16F627/8 posee 10 fuentes de interrupción contra las 4 fuentes de interrupción del PIC 16F84. Esto obliga a cambiar de lugar el máscara de habilitación EEIE y la bandera de interrupción EEIF del módulo EEPROM y reubicarlas en los registros PIE1 y PIR1 junto a las demás fuentes de interrupción. En lugar de la máscara de habilitación EEIE se ubica la máscara de habilitación de interrupciones periféricas PEIE que habilita la interrupción de los módulos periféricos.

Para ser compatible con el PIC16F84, se recomienda agregar la línea de código en gris durante el cambio al banco 1 cuando se configura la dirección de datos de los puertos. Esta instrucción no es estrictamente necesaria y puede reemplazarse por bcf PEIE si no utilizamos el módulo EEPROM, pero es aconsejable utilizarla para evitar falsas interrupciones por el disparo de algún periférico no compatible con el PIC16F84. Ver Tabla 2.

 
EL MODULO EEPROM
Este módulo trabaja igual que en la versión del PIC16F84, pero en este caso se cambian de ubicación algunos registros y banderas, por lo que la rutina de escritura y lectura debe reorganizarse y cambiar de lugar las instrucciones BSF RP0 y BCF RP0. Las rutinas de lectura y escritura EEPROM son más simples debido a que los registros EEADR, EECON1, EECON2 y EEDATA que se ubican todos en el banco 1, siendo necesario un sólo cambio de banco en toda la rutina. Tener en cuenta que se necesita habilitar la máscara de interrupciones periféricas PEIE.

En la tabla 3, vemos el mapa de registros del PIC 16F627/8.

 
Autor: Esteban Boresnitzan
FIGURA 1
 
TABLA 1
 
TABLA 2
 
TABLA 3