Está en la página 1de 83

Instituto de Educación Superior

Tecnológico Público
“Andrés A. Cáceres Dorregaray”
Área Académica de Electrónica Industrial
Curso de Capacitación
“Microcontroladores PIC”

Ponente: Juan Luis Merlo Gálvez


¿Qué es un microcontrolador?
Es un chip que permite obtener un circuito
integrado a la medida.
Puede utilizarse en:
- Domótica
- Publicidad
- Control de iluminación
- Robótica, etc.
Diferencia entre microprocesador y
microcontrolador
Sistema basado en microprocesador:
Diferencia entre microprocesador y
microcontrolador
Sistema basado en microcontrolador:
Los microcontroladores PIC
Gama Baja (Base-Line):
Microcontroladores con instrucciones de 12 bits
8, 18 y 28 pines
Ejemplo: Familias PIC12C y PIC16C5X
Gama Media (Mid-Range):
Microcontroladores con instrucciones de 14 bits
8, 18 , 28 y 40 pines
Ejemplo: Familias PIC16 y PIC12F
Gama Alta (High-End):
Microcontroladores con instrucciones de 16 bits
40, 44, 64, 68 , 84 pines
Ejemplo: Familias PIC17 y PIC18
Algunos integrantes de las familias PIC
EL PIC16F628A (Gama media)
Microcontrolador de 8 bits
EL PIC16F62XA
EL PIC16F876A (Gama media)
Microcontrolador de 8 bits
EL PIC16F87XA
Arquitectura de los PIC
Los primeros microcontroladores se basaban en la
arquitectura VON NEWMANN:
- Datos y programa en un solo bloque de memoria
- Acceso más lento
Arquitectura de los PIC

Los microcontroladores PIC tienen arquitectura


Harvard
- Memoria de datos y de programa independientes
- Acceso más rápido
Diagrama en bloques de la Gama Media en general
Diagrama en bloques del PIC16F628A
Memoria RAM de datos de la Gama Media

La arquitectura de la
gama media fue
diseñada para alojar
hasta 4 bancos de
memoria RAM de
128 bytes cada uno:
Total: 512 bytes
Memoria RAM de datos de la Gama Media
Tipo SRAM (RAM estática)

Se direcciona con 9 bits:


29 = 512 direcciones posibles

Hay dos áreas:

SFR: Registros de funciones


especiales
Permiten controlar el núcleo
y los periféricos del
procesador.

GPR: Registros de propósito general


Utilizados libremente por el usuario para almacenar datos.
El PIC16F628A
Memoria de datos:
- Cuenta con 4 bancos
(00 a 11)
- Hay registros en los 3
primeros bancos:
35 registros especiales
(SFR)
224 registros generales
(GPR)
El PIC16F876A

Memoria de datos:
- Cuenta con 4 bancos
(00 a 11)
- Hay registros en los 4
bancos:
53 registros especiales
(SFR)
368 registros generales
(GPR)
Los puertos de E/S del PIC16F628A
Los registros PORTx

Los registros PORTA y


PORTB contienen los datos
que ingresan o salen por las
líneas de E/S del
microcontrolador.
Los puertos de E/S del
PIC16F628A
Los registros TRISx
Los registros TRISA y TRISB
permiten configurar las líneas
de los puertos como entradas o
como salidas:
0  Salida
1  Entrada
Después de un RESET ambos
registros quedan puestos a 1 (es
decir, todas las líneas como
entradas)
Los puertos de E/S del PIC16F628A
Los registros TRISx
Los puertos de E/S del PIC16F628A
Escritura de datos en un puerto

movlw b’00010100’ ; w = 00010100


movwf PORTA ; PORTA = w
Cuando se escriben datos en un puerto de E/S, solo se
transfieren los bits correspondientes a las líneas
configuradas como salidas.
Límites de corriente para los puertos
del PIC16F628A
Osciladores soportados por el PIC16F628A
Existen cuatro modos de oscilador:
1) Oscilador RC:
- Económico
- Poco estable e impreciso
- Inadecuado para comunicaciones
- Dos modos
- Salida de señal por pin 15: fOSC/4
- Pin 15 como E/S normal
- Valores recomendados:
3 kΩ ≤ R ≤ 100 kΩ (VDD ≥ 3V)
10 kΩ ≤ R ≤ 100 kΩ (VDD < 3V)
C ≥ 20 pF
Osciladores soportados por el PIC16F628A
2) Oscilador XT, HS o LP:
- Utiliza cristal o resonador cerámico.
- Altamente preciso y estable.
- XT: cristal o resonador estándar
- HS: alta frecuencia (High Speed)
- LP: baja potencia (Low Power)
Con cristal:
Con resonador cerámico:
Osciladores soportados por el PIC16F628A
3) Oscilador INTOSC:
- Oscilador interno de precisión
- Frecuencia seleccionable mediante el bit OSCF del
registro PCON (8Eh):
- OSCF=1  4 MHz (opción por defecto)
- OSCF=0  48 kHz
- Dos modos de operación:
- Salida de reloj por RA6
RA7 es pin de E/S.
- RA6 y RA7 son pines de E/S
Osciladores soportados por el PIC16F628A
4) Oscilador EC:
- Señal de reloj externa
- Se conecta directamente al pin RA7/OSC1/CLKIN
- RA6 es pin de E/S
Osciladores soportados por el PIC16F876A
Existen cuatro modos de oscilador:
1) Oscilador RC:
- Económico
- Poco estable e impreciso
- Inadecuado para comunicaciones
- Salida de señal por pin 10: fOSC/4

- Valores recomendados:
3 kΩ ≤ R ≤ 100 kΩ
C ≥ 20 pF
Osciladores soportados por el PIC16F876A
2) Oscilador XT, HS o LP:
- Utiliza cristal o resonador cerámico.
- Altamente preciso y estable.
- XT: cristal o resonador estándar
- HS: alta frecuencia (High Speed)
- LP: baja potencia (Low Power)
Con cristal:
Con resonador cerámico:
Osciladores soportados por el PIC16F876A
3) Oscilador EC:
- Señal de reloj externa
- Se conecta directamente al pin OSC1/CLKIN
Memoria de programa del PIC16F628A
Paginación de la memoria en la Gama Media
Memoria de programa del PIC16F876A
Paginación de la memoria en la Gama Media
Memoria de programa del PIC16F628A
Contador de programa (PC): 13 bits
213 = 8192 = 8 K direcciones posibles
En el PIC16F628A solo 2 K direcciones
están implementadas: 0000h – 07FFh
Vector de Reset: 0000h
Después de un RESET el uC ejecuta la
instrucción ubicada en 0000h.
Vector de interrupción: 0004h
Si se produce una interrupción el uC
ejecuta la instrucción ubicada en 0004h.
Palabra de configuración: 2007h
Permite fijar parámetros básicos para el
PIC (oscilador, WDT, etc.). Es área
reservada, accesible solamente al grabar
el programa en el uC.
Memoria de programa del PIC16F876A
Contador de programa (PC): 13 bits
213 = 8192 = 8 K direcciones posibles
En el PIC16F876A están implementadas
las 8 K direcciones: 0000h – 1FFFh
Vector de Reset: 0000h
Después de un RESET el uC ejecuta la
instrucción ubicada en 0000h.
Vector de interrupción: 0004h
Si se produce una interrupción el uC
ejecuta la instrucción ubicada en 0004h.
Palabra de configuración: 2007h
Permite fijar parámetros básicos para el
PIC (oscilador, WDT, etc.). Es área
reservada, accesible solamente al grabar el
programa en el uC.
Ejecución segmentada de las instrucciones
- El oscilador determina velocidad de ejecución (fOSC)
- Frecuencia máxima para la gama media es fmax=20MHZ
- Ciclo de instrucción = 4/fOSC
Cada instrucción (lenguaje máquina) se ejecuta:
 1 ciclo de instrucción
o 4 ciclos de reloj
Instrucciones de salto: 2 ciclos de instrucción
u 8 ciclos de reloj
Ejemplo: Con un cristal de 4 MHz:
fOSC = 4 MHz T = 0.25 µs
Ciclo de instrucción: 4T = 1 µs
 Cada instrucción se ejecuta en 1 µs
 Instrucciones de salto se ejecutan en 2 µs
Temporizador/contador Timer0
- Tiene registro temporizador/contador de 8 bits: TMR0
ubicado en 01h (Banco 0) y 101h (Banco 2).

- Cuenta pulsos del reloj interno (fOSC/4) o pulsos externos


provenientes del pin 3 (RA4/T0CKI).
Temporizador/contador Timer0
- Es programable: se le puede cargar un valor
predeterminado y comienza a contar desde allí hasta
desbordarse.
Temporizador/contador Timer0
- Desbordamiento: paso de 11111111h a 00000000h.
- Al desbordarse pone el flag T0IF a 1 (Registro INTCON)
- Puede producir una interrupción al desbordarse.
Temporizador/contador Timer0
- Se puede extender el tiempo que controla mediante un
divisor de frecuencia.
Módulo temporizador/contador Timer0
Temporizador/contador Timer0
Divisor de frecuencia
- Divide la frecuencia y prolon-
ga el tiempo de conteo de
TMR0, extendiendo el tiempo
que éste puede controlar.
Con TMR0 funciona como pre-divisor y con el WDT como
post-divisor. Los bits PS2:PS0 de OPTION_REG (81h,
181h) definen el factor de división.
Temporizador/contador Timer0
Cálculo de tiempos

Obs: como contador utilizar el complemento a dos del número


El módulo temporizador/contador Timer1
Es un temporizador/contador de 16 bits que cuenta con un
pre-divisor (1:1, 1:2, 1:4, 1:8).
Cuenta con dos registros: TMR1L (0Eh) y TMR1H (0Fh).
El módulo temporizador/contador Timer1
El Timer1 se controla mediante el registro T1CON (10h).
El módulo temporizador Timer2
Es un temporizador de 8 bits que cuenta con un pre-divisor
(1:1, 1:4, 1:16).
Cuenta en el registro TMR2 (11h) y tiene un registro de
período: PR2 (92h).
El módulo temporizador Timer2
TMR2 y PR2 se comparan. La salida del comparador pasa
por un post-divisor (1:1, 1:2, 1:3, …, 1:16).
Cuando coinciden, TMR2 vuelve a 0 y el flag TMR2IF del
registro PIR1 (0Ch) se pone a 1 pudiendo originar una
interrupción. PR2 se pone a FFh después de un RESET.
El módulo temporizador Timer2

El Timer2 se controla mediante el registro T2CON (12h).


Perro Guardián o Watchdog Timer (WDT)
- Es un temporizador de 8 bits que funciona con un
oscilador RC interno independiente del oscilador del
sistema.
- Funciona incluso cuando el reloj del sistema se detiene.
- Si se activa deja pasar un tiempo hasta agotarse (time-out)
- El time-out del WDT ocasiona:
En funcionamiento normal: RESET del sistema.
En modo de reposo (SLEEP): “despierta” al sistema y
éste continúa con la instrucción posterior a SLEEP.
- Se habilita poniendo a 1 el bit 2 de la palabra de
configuración al momento de programar el uC.
Perro Guardián o Watchdog Timer (WDT)
- Período nominal de agotamiento (time-out): 18 ms
- Este período puede extenderse hasta 18 ms x 128 = 2.304 s
- Vigila que el programa no se “cuelgue”
- En funcionamiento normal, el WDT debe “refrescarse”
mediante la instrucción CLRWDT.
Perro Guardián o Watchdog Timer (WDT)
Esquema en bloques
Modo de bajo consumo (SLEEP)

Consumo inferior a 10 μA

Congelamiento de E/S

Oscilador principal detenido


PIC se “apaga” con
instrucción SLEEP WDT se reinicia pero
sigue corriendo
(si está habilitado)

PD# = 0
STATUS
TO# = 1
Modo de bajo consumo (SLEEP)
Activación de MCLR#

Agotamiento de WDT
(si está habilitado)

El PIC “despierta” por Interrupciones habilitadas:


- RB0/INT
- Puerto B
- Por periféricos: Timer1,
Timer2, módulo CCP,
comparadores, Tx/Rx por
USART, escritura en
EEPROM.
Obs.: El WDT se borra al salir el PIC del modo de bajo consumo
Los comparadores analógicos
- Son 2 comparadores de voltaje
cuyas entradas están en los
pines RA0, RA1, RA2 y RA3.
- Después de un RESET estas
líneas están conectadas a los
comparadores.
- Se controlan mediante el regis-
tro CMCON (1Fh).
- Pueden dar origen a una inte-
rrupción por cambio en sus
salidas.
Los comparadores analógicos
Los comparadores analógicos del PIC16F628A
Los comparadores analógicos del PIC16F628A
Los comparadores analógicos
Se puede conectar un voltaje de referencia interno a los
comparadores.
El circuito que produce el voltaje de referencia se controla
con el registro VRCON (9Fh).
Los comparadores analógicos
Cálculo del voltaje de referencia según el valor del bit
VRR y de los bits VR<3:0>.
El módulo CCP (Captura/Comparación/PWM)
Modo de Captura: consiste en capturar el valor del
registro del Timer1 en los registros CCPR1H:CCPR1L
cuando ocurre un evento en RB3/CCP1 (debe
configurarse como entrada). El modo de Captura permite
medir tiempos.
El módulo CCP (Captura/Comparación/PWM)
El módulo CCP se controla con el registro CCP1CON
(17h).
El módulo CCP (Captura/Comparación/PWM)
Comparación: compara constantemente el valor del
registro del Timer1 con el valor del registro CCPR1.
Cuando coinciden provoca acciones definidas en el
registro CCP1CON.
En este modo la salida del módulo CCP es el pin
RB3/CCP1 (debe configurarse como salida).
El módulo CCP (Captura/Comparación/PWM)
PWM: realiza modulación por ancho de pulsos. Genera
una salida pulsante con ciclo de trabajo variable de hasta
10 bits de resolución por RB3/CCP1 (debe configurarse
como salida).
El módulo CCP (Captura/Comparación/PWM)
PWM: Sirve, por ejemplo, para controlar la potencia
entregada a una carga. En esta modalidad utiliza el Timer2.

Cálculo del período PWM:

Cálculo del ciclo de servicio (duty cycle):

Si Ciclo de servicioPWM > PeríodoPWM → RB3/CCP1 = 1


Si Ciclo de servicioPWM = 0 → RB3/CCP1 = 0
El módulo CCP (Captura/Comparación/PWM)
Configuración del modo PWM:
- Fijar períodoPWM en el registro PR2.
- Fijar ciclo de servicioPWM mediante el registro CCPR1L y
los bits CCP1X y CCP1Y del registro CCP1CON.
- Configurar el pin RB3/CCP1 como salida.
- Fijar valor del pre-divisor del Timer2.
- Habilitar Timer2 mediante el bit TMR2ON del registro
T2CON.
- Configurar modo PWM en el registro CCP1CON.
RESET
RESET: cargar PC con 000H y poner registros SFR a
valores predeterminados.
Power-On Reset (POR)
(al conectar la alimentación)

MCLR# en operación normal


MCLR# en modo de bajo
consumo (SLEEP)
Formas de RESET
Time-out del WDT en
operación normal
Time-out del WDT en modo
de bajo consumo(1)
Brown-Out Reset (BOR)
(por caída de la tensión VDD)
(1)
: Los registros no se alteran y el programa continua después de SLEEP
RESET
Después de un RESET los bits TO# (bit 4) y PD# (bit 3)
del registro STATUS y los bits POR# (bit 1) y BOR# (bit 0)
del registro PCON indican la causa que lo produjo:
Programación serial en circuito (ICSP)
- Programación con solo 5
líneas:
VDD y VSS: alimentación
MCLR#: voltaje de
grabación (VPP=12 a 14 V)
RB6: reloj
RB7: datos de programa-
ción
- Se puede programar el uC
en el mismo circuito de
aplicación
Memoria EEPROM de datos
- 128 bytes: 00h a 7Fh
- Se puede leer/escribir en plena operación normal del PIC
- Se utilizan registros FSR para acceder a EEPROM:

88h EECON1
Controlan las operaciones
89h EECON2*

08h EEDATA Dato a escribir o dato leído

09h EEADR Dirección a acceder (00h-7Fh)

(*) EECON2 no es un registro físico. Si se le lee devuelve ceros.


Solo se le usa en el proceso de escritura de EEPROM.
Interrupciones
Son un mecanismo de respuesta a eventos asíncronos, es decir que
ocurren en cualquier momento, interrumpiendo al uC y
“sacándolo” de lo que está haciendo para volver luego.
Interrupciones en el PIC16F628A
Flanco ascendente o descendente en RB0/INT

Cambio de estado en RB7:RB4

Desbordamiento de TMR0

Cambio de estado en comparadores analógicos

Fuentes de Conclusión de transmisión de USART


interrupción
Conclusión de recepción de USART

Captura o comparación en el módulo CCP

Desbordamiento del registro TMR1

Coincidencia de los registros TMR2 y PR2

Conclusión de escritura en EEPROM de datos


Interrupciones en el PIC16F628A

Para que funcionen debe activarse GIE y los bits de habilitación de


las interrupciones que se desea activar. Los indicadores “flags” se
ponen a 1 al ocurrir el evento correspondiente y se produce la
interrupción.
Lógica de interrupciones en el PIC16F628A
Habilitación de interrupciones
Proceso de una interrupción
Ejecución normal del programa
Evento de interrupción

Termina de ejecutar instrucción en curso

Guarda PC+1 en stack


(siguiente instrucción)

Flujo Salto al vector de interrupción


normal (PC = 004h)

Ejecuta rutina de interrupción (en 004h o


volviendo a saltar)

Retorno de interrupción (STACK  PC)

Ejecución normal del programa


El módulo USART
El módulo de transmisión recepción síncrona asíncrona
universal (USART) también conocido como interfaz de
comunicaciones serie (SCI) se utiliza para comunicaciones
seriales en tres modos posibles:
Asíncrono (full duplex)
El módulo USART

Síncrono maestro (half duplex)


El módulo USART

Síncrono esclavo (half duplex)


USART – Generador de tasa de baudios
El generador de tasa de baudios (BRG) controla la
velocidad de transmisión del USART. El registro SPBRG
(99h, Banco 1) controla un temporizador de 8 bits. Al
escribir en SPBRG, el temporizador se resetea.

X: Valor cargado en SPBRG (0 – 255)


USART en modo asíncrono - Transmisión
USART en modo asíncrono - Transmisión
USART en modo asíncrono - Transmisión
Procedimiento:
1) Poner a 1 los bits TRIS<2:1> para hacer entradas los pines
RB1/RX/DT y RB2/TX/CK.
2) Inicializar el registro SPBRG (99h) para fijar la velocidad de
transmisión deseada.
3) Habilitar el puerto serial asíncrono borrando el bit SYNC
(TXSTA<4>) y poniendo a 1 el bit SPEN (RCSTA<7>).
4) Si se desea utilizar interrupciones, poner a 1 el bit TXIE (PIE1<4>).
5) Si se desea transmitir 9 bits, poner a 1 el bit TX9 (TXSTA<6>).
6) Habilitar la transmisión poniendo a 1 el bit TXEN (TXSTA<5>). Si
TXREG está vacío, el bit TXIF (PIR1<4>) se pone a 1.
7) Si se van a transmitir 9 bits, el noveno bit debe cargarse en este
momento en el bit TX9D (TXSTA<0>).
8) Cargar el dato en el registro TXREG (comienza la transmisión).
USART en modo asíncrono – Recepción
USART en modo asíncrono – Recepción
USART en modo asíncrono - Recepción
Procedimiento:
1) Poner a 1 los bits TRIS<2:1> para hacer entradas los pines
RB1/RX/DT y RB2/TX/CK.
2) Inicializar el registro SPBRG (99h) para fijar la velocidad de
transmisión deseada.
3) Habilitar el puerto serial asíncrono borrando el bit SYNC
(TXSTA<4>) y poniendo a 1 el bit SPEN (RCSTA<7>).
4) Si se desea utilizar interrupciones, poner a 1 el bit RCIE (PIE1<5>).
5) Si se va a recibir 9 bits de datos, poner a 1 el bit RX9 (RCSTA<6>).
6) Habilitar la recepción poniendo a 1 el bit CREN (RCSTA<4>).
8) Leer el registro RCSTA (18h) para recuperar el noveno bit (si fuera
necesario) y verificar si hubo algún error durante la recepción.
9) Leer el dato de 8 bits del registro RCREG (1Ah).
10) Si ocurrió un error de recepción, borrar el bit OERR (RCSTA<1>)
borrando el bit CREN (RCSTA<4>).

También podría gustarte