Caracteristicas Del Pic 16f628a
Caracteristicas Del Pic 16f628a
Caracteristicas Del Pic 16f628a
utilizaré en este sitio) será el 16F628 (16F628a), que como ya se mencionó anteriormente
presenta algunas ventajas que lo hacen superior (desde el punto de vista de un principiante) a
otros PIC.
Antes que otra cosa es necesario ver algo de “teoría” sobre el PIC, sin embargo aquí
solamente mencionaré las características principales, para información más detallada es
recomendable consultar la hoja de datos proporcionada por Microchip.
Características principales
PORTA: RA0-RA7:
PORTB: RB0-RB7:
Otros pines
Puertos
Los PIC16F628/648A cuentan con dos puertos PORTA y PORTB, algunos pines de
estos puertos de entrada/salida son multiplexados con una función alternativa de los
periféricos del dispositivo. Cuando un periférico es activado el pin no puede ser usado
para propósitos generales de e/s.
El PUERTO A es un puerto de entrada de 8 bits. Todos los pines, excepto RA5, pueden
ser configurados como entrada o salida con la respectiva configuración del registro
TRISA. El pin RA4 esta multiplexado con la entrada de reloj T0CKI y como salida se
comporta como colecto abierto, por lo tanto debemos poner una resistencia Pull-up a
Vdd. El pin RA5 es un disparador Schmitt solo de entrada y no cuenta con
controladores de salida, según la configuración puede ser usado como Mclr (Reset
externo), y además sirve también para entrar en el modo de programación cuando se
aplica una tensión igual a Vpp (13,4V mínimo). Los demás pines del puerto trabajan de
entrada como disparador de Schmitt Trigger y como salida lógica CMOS. Los pines
RA0-RA3 sirven de entrada para el comparador analógico.
Otros pines
VDD: Pin de alimentación positiva. De 2 a 5,5 Vcc VSS: Pin de alimentación negativa.
Se conecta a tierra o a 0 Vcc MCLR: Master Clear (Reset). Si el nivel lógico de este
terminal es bajo (0 Vcc), el microcontrolador permanece inactivo. Este Reset se controla
mediante la palabra de configuración del PIC OSC1/CLKIN: Entrada de oscilador
externo OSC2/CLKOUT: Salida del oscilador. Dependiendo de cómo se configure
puede proporcionar una salida de reloj por medio de este pin
Organización de la memoria.
El PIC16F628 posee un contador de programa de 13 bits, capaz de direccionar un
espacio de memoria de 8Kx14. Sin embargo, únicamente los primeros 2Kx14, desde
0000h hasta 07FFh, están implementados. Los vectores de reset e interrupción están en
las direcciones 0000h y 0004h, respectivamente. La pila (stack) es de 8 niveles, lo cual
significa que puede soportar hasta 8 direcciones de retorno de subrutina.
Interrupciones:
Registros utilizados:
INTCON: Registro de lectura y escritura que contiene varios bits de señalización y
habilitación para el desbordamiento del TMR0, cambio sobre el puerto RB e
interrupción externa en la patilla RB0/INT.
0. RBIF: Indicador de interrupción por cambio de estado RB4-RB7
1. INTF: Indicador de interrupción externa
2. T0IF: Indicador de interrupción por desbordamiento de Timer 0
3. RBIE: Habilitación de interrupción por cambio de estado RB4-RB7
4. INTE: Habilitación de interrupción externa
5. T0IE: Habilitación de interrupción por desbordamiento de Timer 0
6. PEIE: Habilitación de interrupción de periféricos
7. GIE: Habilitación general de interrupciones
PIR1: El registro PIR1 contiene los bits de señalización individual de las interrupciones
de periféricos
0. TMR1IF: Indicador de interrupción por desbordamiento de Timer 1
1. TMR2IF: Indicador de interrupción por desbordamiento de Timer 2
2. CCP1IF: Indicador de interrupción del módulo de Captura/Comparación.
a) Modo Comparador: Coincidencia entre TMR1 y CCP1
b) Modo Captura: Ha ocurrido una captura de TMR1
3. No Implementado.
4. TXIF: Indicador de interrupción de fin de transmisión USART
5. RCIF: Indicador de interrupción de llegada de datos USART
6. CMIF: Indicador de interrupción por cambio de estado de alguna de las salidas de
los comparadores.
7. EEIF: Indicador de interrupción de fin de escritura eeprom interna.
PIE1: Registro que posee los bits de habilitación individual para las interrupciones de
periféricos. El bit PEIE del registro INTCON debe ser 1 para permitir la habilitación de
cualquier interrupción de periférico.
0. TMR1IE: Habilitación de interrupción por desbordamiento de Timer 1
1. TMR2IE: Habilitación de interrupción por desbordamiento de Timer 2
2. CCP1IE: Habilitación de interrupción del módulo de Captura/Comparación/PWM.
3. No Implementado.
4. TXIE: Habilitación de interrupción de fin de transmisión USART
5. RCIE: Habilitación de interrupción de llegada de datos USART
6. CMIE: Habilitación de interrupción por cambio de estado de alguna de las salidas de
los comparadores.
7. EEIE: Habilitación de interrupción de fin de escritura eeprom interna.
Lógica de Interrupciones:
Suky:
Palabra de Configuración
Los PIC16F628A/648A han sido construidos con características tales que se pueden
configurar para funcionar en modos de operación que no necesitan componentes
externos tales como el circuito de reloj o de reset. Esto implica que es necesario
configurar su modo de operación a través de una palabra de configuración.
La palabra de configuración se encuentra mapeada en la dirección 2007h de la memoria
de programa y solo puede ser accesada durante la programación de dispositivo.
CP1:CP0:Bits de protección de código
Los bits 13-10 encargados de proteger la memoria de programa.
CPD: Bit de protección para código de datos
1 = Protección deshabilitada de la memoria de datos.
0 = Protección habilitada en la memoria de datos.
LVP: Habilitación de la programación por voltaje bajo
1 = LVP habilitado, la terminal RB4/PGM tiene tal función.
0 = LCP: deshabilitado, RB4/PGM es una terminal I/O.
BODEN: Bit de reset por voltaje de alimentación bajo
1 = Reset por BOD habilitado
0 = Reset por BOD deshabilitado
MCLRE: Habilitacion del terminal de reset
1 = Terminal de reset en RA5.
0 = MCLR conectado internamente a Vdd, RA5 es un pin I/O.
PWRTEN : Bit de habilitación de temporizador al energizar
1 = PWRT habilitado.
0 = PWRT deshabilitado.
WDTEN: Bits de habilitación de Watch-Dog
1 = WDT habilitado
0 = WDT deshabilitado.
FOSC2:FOSC1:FOSC0: Bits de selección del tipo de oscilador
Suky:
El Módulo del Timer 0.
Idéntico al del PIC16F84.
Modo temporizador
En este modo el Timer se incrementa (si no se considera preescalador) en cada ciclo de
instrucción (a la frecuencia Fosc/4). Este modo se selecciona limpiando el bit TMR1CS
(T1CON<1>).
El preescalador que se puede intercalar entre el reloj Fosc/4 y el registro TMR1 puede
tener sólo uno de 4 valores: 1/1, 1/2, 1/4 y 1/8.
En este caso la temporización de calcula:
Temporización = Ciclo de instrucción. (65536-TMR1) .Divisor de Frecuencia
Vemos que la máxima temporización posible es con TMR1 = 0, y Divisor de Frecuencia
en 8, lográndose unos 524.3 ms aprox.
Modo contador
El Timer 1 también puede operar como contador, en este último caso, la entrada a
contar se toma de la patita externa RB6/T1OSO/T1CKI.
Configuraciones:
El Timer 1 posee un bit para habilitación / deshabilitación, este es el bit TMR1ON
(T1CON<0>) y habilita en alto.
Además, el Timer 1 posee una entrada interna de RESET, el cual puede ser activado por
uno cualquiera de los módulos CCP que.
A continuación se describe el principal registro relacionado con el Timer 1 y todos sus
bits, excepto los que tienen que ver con el modo contador:
Registro T1CON (10h)
bits 5:4
T1CKPS1:T1CKPS0.- Bits de selección del valor del divisor de frecuencia del
preescalador:
1 1 = divisor 1/8
1 0 = divisor 1/4
0 1 = divisor 1/2
0 0 = divisor 1/1
bit 1
TMR1CS.- Bit de selección de la fuente de reloj
1 = Modo contador (fuente de reloj: patita RC0/T1OSO/T1CKI)
0 = Modo Temporizador (fuente de reloj Fosc/4)
bit 0
TMR1ON.- Bit de habilitación / deshabilitación del Timer 1:
1 = habilita Timer 1
0 = Deshabilita Timer 1
ConfigPIC traé una herramienta adicional que nos ayuda a seleccionar el preescaler y
valor inicial del Timer para obtener una temporización deseada:
Suky:
Para ejemplificar haremos un simple ejemplo donde lo utilizamos como temporizador.
Se hará titilar un led conectado al PIN RB0 cada 300 ms. Como se puede ver es idéntico
al ejemplo realizado para Timer 0 del PIC16F84A, solo que en este caso no
necesitaremos un registro adicional para lograr la demora deseada.
Hardware:
Código
GeSHi (asm):
; **** Encabezado ****
list p=16f628A ; list directive to define processor
#include <p16f628A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON &
_INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_ON
;**** Definiciones para el ensamblador ****
#DEFINE Led PORTB,0 ; Led ubicado en Puerto B, bit 0.-
;//////////////////////////////////////////
;**** Inicio del Micro ****
Reset
org 0x00 ; Aquí comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
;**** Vector de Interrupcion ****
org 0x04 ; Atiendo Interrupcion.-
goto ISR
; **** Programa Principal ****
;**** Configuracion de puertos ***
org 0x05 ; Origen del código de programa.-
Inicio
bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.-
movlw b'11111110' ; RB0 como salida.-
movwf TRISB
bcf STATUS,RP0 ; Banco 0.-
movlw b'00110001' ; Se selecciona TMR1, preescaler de 1/8, modo temporizador.-
movwf T1CON
bcf Led ; El Led comienza apagado.-
movlw 0x6D ; Cargamos 28036 en TMR1 para lograr 300ms.-
movwf TMR1H ; Byte alto de TMR1.-
movlw 0x84
movwf TMR1L ; Byte bajo de TMR1.-
bsf STATUS,RP0 ; Banco 1.-
bsf PIE1,TMR1IE ; Activar interrupción por TMR1.
bsf INTCON,GIE ; Habilitacion general de interrupciones.-
bsf INTCON,PEIE ; Habilitacion de Interrupcion por perifericos.-
bcf STATUS,RP0 ; Banco 0.-
;**** Control de Led ****
Bucle
nop ; Aqui el micro puede ejecutar cualquier otra tarea
goto Bucle ; sin necesidad de utilizar tiempo en un bucle de demora.-
;**** Rutina de servicio de Interrupcion ****
;**** Interrupcion por TMR1 ****
ISR
btfss PIR1,TMR1IF ; Consultamos si es por TMR1.-
retfie ; No, salimos de interrupcion.-
btfss Led ; Si, Controlamos Led. Si esta apagado, prendo y viseversa.-
goto Prendo_led
bcf Led ; Apago Led.-
Actualizo_TMR1 ; Actualizo TMR1 para obtener una temporizacion de 300 ms.-
movlw 0x6D ; Cargamos 28036 en TMR1.-
movwf TMR1H ; Byte alto de TMR1.-
movlw 0x84
movwf TMR1L ; Byte bajo de TMR1.-
goto Fin_ISR ; Restauro valores.-
Prendo_led
bsf Led ; Prendo Led.-
goto Actualizo_TMR1
Fin_ISR
bcf PIR1,TMR1IF ; Borro bandera de control de Interrupcion.-
retfie ; Salimos de interrupción.-
;..........................................
end
PIC16F628A/648A
Haré una introducción a los micros y realizare ejemplos para los módulos que no trae el
PIC16F84A.
Características principales
Conjunto reducido de instrucciones (RISC). Solamente 35 instrucciones que aprender a utilizar
Oscilador interno de 4MHz Opera con una frecuencia de reloj externa de hasta 20 MHz (ciclo
de máquina de 200 ns) Memoria de programa: 2048 locaciones de 14 bits Memoria de datos:
Memoria RAM de 224 bytes (8 bits por registro) Memoria EEPROM: 128 bytes (8 bits por
registro) Stack de 8 niveles 16 Terminales de I/O que soportan corrientes de hasta 25 mA 3
Temporizadores Módulo de comunicación serie (UsartMódulo CCP
(captura/comparación/PWM)2 Comparadores analógicos, una referencia de voltaje
programableNota: Los módulos descriptos para el PIC16F628A son idénticos a los del
PIC16F648A, lo único que varía entre ellos son las siguientes características:
Memoria de programa: PIC16F648A-4096 locaciones de 14 bits Memoria de datos:
PIC16F648A-Memoria RAM de 256 bytes (8 bits por registro) Memoria EEPROM: PIC16F648A-
256 bytes (8 bits por registro)
De aquí en adelante me refiero al PIC16F628A pero los ejemplos son aplicables al PIC16F648A
haciendo el cambio de encabezado:
Código
GeSHi (asm):
; **** Encabezado ****
list p=16f648A ; list directive to define processor
#include <p16f648A.inc> ; processor specific variable definitions
Diagramas de pines del PIC16F628A
Características del PIC16F628A:
Tipos de osciladores