Micro Control Adores PICs II-Luis Urdaneta

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 80

Sistemas de

µControladores
Diseño
Programación
Simulación

Por Luis D. Urdaneta G.


Ejemplo de tabla de consulta
(Lookup Table)

2
Tablas de Consulta
Conversión desde binario a 7-segmentos (Cátodo común)

3
Programa 1

Programa 1

Escribir un programa que:

1. Almacene a partir del registro f:0x30, los códigos 7


segmentos de los dígitos hexadecimales.

2. Presente los dígitos en el LED 0 del simulador PIC Simulator


Ide.

4
Programa 1

5
Programa 1

6
Programa 1

7
Programa 1

8
Programa 1

9
Programa 1

10
Programa 1

Simulación con
PROTEUS

11
PROGRAMA 1
Programa 1

C1 U1
16 17
OSC1/CLKIN RA0
15 18
OSC2/CLKOUT RA1
22pF 1
RA2
X1 4
MCLR RA3
2
4Mhz 3
C2 RA4/T0CKI RN1
6 1 16
RB0/INT
R2 RB1
7 2 15
22pF 8.2k 8 3 14
RB2
9 4 13
RB3
10 5 12
RB4
11 6 11
RB5
12 7 10
RB6
13 8 9
RB7
+5V
PIC16F84A 220 R1 Q1
2N3906
10k

+5V
12
Programa 1

• Los circuitos siguientes corresponden a 7 ejemplos de


presentación en indicadores incandescentes multiplexa-
dos.

• Los ejemplos contienen el código y pueden encontrarse


en la literatura de apoyo entregada al inicio del curso.

13
Programa 1

14
Programa 1

15
Programa 1

16
Programa 1

17
Programa 1

18
Programa 1

19
Programa 1

20
Rutinas de Retardo

Rutinas de Retardo
Problema:
En un punto del código se requiere un tiempo de espera de Tx
segundos.

Solución:
Escribir un código o rutina de retardo que tenga un tiempo de
ejecución igual a Tx.

Desventaja:
El procesador estará ocupado durante el tiempo Tx.

21
Rutinas de Retardo

Ciclo Básico de retardo


… Ciclos de Instrucción
movlw N 1
movwf cont 1
rep decfsz cont,f 1/2
goto rep 2

TR   1  1  ( N  1)  3  2  Tci
TR   3  N  1  Tci  s

Los dos ciclos primeros corresponden a la carga del valor N en el


contador. El lazo se ejecutará N veces. Los primeros (N-1) pasos
serán de 3 ciclos cada uno y el último paso será de 2 ciclos, cuando
el contador llegue a 0. 22
Rutinas de Retardo

Para un cristal externo de 4 MHz


4
TR   3  N  1  
4 MHz
TR   3  N  1   s

Td max  766  s

23
Rutinas de Retardo

Cálculo de N
TR  1
N 
3

24
Rutinas de Retardo

Para generar un retardo de 50 µs  N = 16.33

Seleccionando N=16 se obtiene un tiempo de 49 µs.

Para lograr el retardo deseado:


… Ciclos de Instrucción
movlw N 1
movwf cont 1
esp decfsz cont,f 1/2
goto esp 2
nop 1

TR   1  1  ( N  1)  3  2  1  s
TR   3  N  2   s
25
Rutinas de Retardo
Para generar un pulso en alto de 50 µs en la línea 0 del puerto b:
cont equ 0xc
bsf status,rp0
bcf trisb,0
bcf status,rp0 CICLOS
bcf portb,0 ; Salida a 0 al inicio
movlw n
movwf cont
bsf portb,0 ; Pulso a nivel alto
en1decfsz cont ; Contador – 1 y probar si llegó a 0 1/2
goto en1 ; Contador difiere de cero, esperar 2
bcf portb,0 ; Contador es 0. Fin de pulso 1

TR   ( N  1)  3  2  1  s  3  N  s
26
Rutinas de Retardo

Cálculo de N
50
N   16.66
3

Seleccionando N=17, se obtiene un ancho de pulso de 51 µs y


con N= 16, de 48 µs.

27
Rutinas de Retardo
Solución:
Usar instrucciones nop para ajustar el retardo:
CICLOS
cont equ 0xc
bsf status,rp0
bcf trisb,0
bcf status,rp0
bcf portb,0
movlw n
movwf cont
bsf portb,0
en1 decfsz cont ; 1/2
goto en1 ; 2
nop ; 1
nop ; 1
bcf portb,0 ; 1

TR   ( N  1)  3  2  1  1  1  s  (3 16  2)  s  50  s
28
Rutinas de Retardo
Retardos de mayor duración
Para retardos de mayor duración debe usarse más de un
contador.

29
Rutinas de Retardo


movlw M
movwf cont1
rep1 movlw N
movwf cont2
rep2 decfsz cont2,f
goto rep2
decfsz cont1,f
goto rep1

30
Rutinas de Retardo

TR   2  ( M  1)  (T  3)  T  2  s

T  3N  1

TR   (3N  4)  M  1  s (1)

TR  1
M , seleccionando N=255
3N  4

TR  1
M TR  770  s (2)
769

TR max  196096  s
31
Rutinas de Retardo

Se desea un retardo de 20 ms. Usando la ecuación 2, se obtiene


para M el valor: 26.007. Se usa M = 26.0 y de acuerdo con la
ecuación 2 debe obtenerse un retardo de 19.995 ms. Esté valor
se verificó usando un simulador. El resultado de redondear M
es que se produce un error de 0.025 %.

Para un tiempo de 56 ms, se obtiene M = 71.52 y se usa 72.0. El


retardo obtenido es de 55.369 ms con error de 0.67 %.

No es obligatorio usar la ecuación 2 (N=255). Los valores de N y


M se pueden ajustar simultáneamente y usar la ecuación 1 para
calcular el retardo resultante. Por ejemplo N =3 y M=5 generan
un retardo de 66 µs exactos.

32
Rutinas de Retardo

Si el retardo que se requiere es


mayor que el tiempo máximo
obtenible con dos contadores,
deben usarse tres registros co-
mo contadores.

33
Rutinas de Retardo

34
Rutinas de Retardo

movlw L
movwf cont1
rep1 movlw M
movwf cont2
rep2 movlw N
movwf cont3
rep3 decfsz cont3
goto rep3
decfsz cont2
goto rep2
decfsz reg1
goto rep1

35
Rutinas de Retardo

TR   2  ( L  1)  (T  3)  T  2  s

T  (3N  4)  M

TR   2  ( L  1)  ((3N  4)  M )  4)  (3 N  4)  M  3  s

Seleccionando N = M = 255

TR   ( L  1)  (196099)  196100   s

TR  1
L TR  196100  s (3)
196099

TR max  50.005 s
36
Rutinas de Retardo

Para un retardo de 20 s, la ecuación 3 responde que L = 101.99.


Usando L = 102, el simulador reporta un retardo de 20.002 s
(20.002099 s con la ecuación). El error es de 0.01 %.

Para presentar los dígitos binarios en el LED del problema 1, se


requiere un retardo de 1.0 s. M=5.099 se aproxima a 5.0,
obteniéndose un tiempo de 0.980496 s y error de 1.95 %.

Observe que si usa:


L=M=64 y N = 80,
el retardo será de 0.99969 s con un error de 0.031 %

37
La Memoria del PIC16F84A

La Palabra de Configuración

Ocupa la posición 0x2007 de la memoria de programa y no se


puede tener acceso a esta posición durante la ejecución de
programa.

Sirve para configurar ciertas funciones del µCtrl durante el


proceso de grabación del programa en la FLASH:

38
La Memoria del PIC16F84A

La Palabra de Configuración

39
La Memoria del PIC16F84A

40
La Memoria del PIC16F84A

La Memoria de Datos
Está dividida en dos áreas:
Área de SRAM:
Contiene 22 Registros de Funciones Especiales (SFR) para el
control del microcontrolador y 68 Registros de Propósito
General (GPR) para almacenamiento temporal de datos.
Área de EEPROM:
64 bytes para datos permanentes

41
La Memoria del PIC16F84A

La Memoria de Datos SRAM

Los registros están organizados en dos bloques o páginas de


128 bytes cada uno. En los primeros 12 bytes de cada bloque
residen los registros SFR:

11 SFR en el rango 0x00-0x0B Bloque 0

11 SFR en el rango 0x80-0x8B Bloque 1

68 GPR en el rango 0x0C-0x4F Bloque 0

En el bloque 1 no existen GPR. Las direcciones 0xC y 0x8C


apuntan al mismo GPR en el banco 0.

42
La Memoria del PIC16F84A

Las instrucciones del pic16F84 pueden emitir direcciones de


7 bits, lo cual hace posible el acceso a un espacio de 128
bytes de la memoria de datos entre las direcciones 0x00 y
0x7F. El circuito integrado sólo incorpora los primeros 80
bytes (0x00-0x4F).

A toda la memoria de datos se puede tener acceso por medio


de direccionamiento directo o indirecto (con el FSR). En el
primer caso el bit RP0 del registro STATUS selecciona el
bloque correspondiente.
En direccionamiento indirecto el bit extra de la dirección lo
provee el bit 7 del registro FSR sin importar cual banco esté
seleccionado.

43
La Memoria del PIC16F84A

44
La Memoria del PIC16F84A

45
La Memoria del PIC16F84A

46
La Memoria del PIC16F84A

La Memoria de Datos EEPROM

Con capacidad de 64 bytes, permite almacenar datos que


deben ser permanentes, como canales programados en un
televisor o la configuración de calibración de un instrumento
de medida.

No forma parte de la memoria principal del µCtrl. Las


direcciones se suministran usando el registro SFR EEADR
(0x09) y los datos se leen o escriben por medio del registro
SFR EEDATA (0x08).

47
La Memoria del PIC16F84A

El proceso de lectura de la EEPROM es simple. Pero el de


escritura es más complejo. Para escribir datos en la EEPROM
se requieren tiempos de algunos milisegundos (usualmente
10 ms) y debe cumplirse una secuencia determinada para
escribir cada byte que involucra la manipulación de bits de
control para el inicio del ciclo de escritura y para la detección
de la culminación del mismo. Los registro FSR asociados a la
operación de la EEPROM son:

EECON1 (0x88) Registro 1 para Control de la EEPROM


EECON2 (0x89) Registro 2 para Control de la EEPROM
1

EEADR (0x09) Registro de Direcciones de la


EEPROM
EEDATA (0x08) Registro de Datos de la EEPROM

1
No es un registro físico
48
La Memoria del PIC16F84A

49
La Memoria del PIC16F84A

Lectura de la EEPROM

1. La dirección de la posición a leer es cargada en EEADR.

2. El bit 0 (RD) de EECON1 es puesto a 1 para iniciar el ciclo


de lectura.

El dato seleccionado es copiado en EEDATA y puede ser leído


por la siguiente instrucción. El dato se mantiene en EEDATA
hasta la próxima lectura o hasta cuando sea modificado por
una operación de escritura.

50
La Memoria del PIC16F84A

El siguiente código lee la dirección dir de la EEPROM.

bcf STATUS,RP0 ; banco 0


movlw dir ;dirección al acumulador
movwf EEADR ; copiar W a EEADR
bsf STATUS,RP0 ; banco 1
bsf EECON1,RD ; iniciar lectura
bcf STATUS,RP0 ; banco 0
movf EEDATA,W ; dato en el acumulador

51
La Memoria del PIC16F84A

Escritura de la EEPROM

1. La dirección se carga en EEARD y el dato en EEDATA.

2. Se habilita la escritura en EEPROM poniendo a 1 el bit 2


(WREN) del FSR EECON1.

3. Se envía el byte 0x55 seguido del byte 0xAA al registro


EECON2.

4. El bit 1 (WR) de EECON1 se pone a 1 para iniciar el ciclo


de escritura.

52
La Memoria del PIC16F84A

El siguiente código escribe el byte dato en la dirección dir de la


EEPROM.

bcf STATUS,RP0 ; banco 0


movlw dir
movwf EEADR ; se copia dirección a EEADR
movlw dato ;
movwf EEDATA ; se carga el dato en EEDATA
bsf STATUS,RP0 ; banco 1
bsf EECON1,WREN ; se habilita la escritura
movlw 0x55
movwf EECON2 ; se escribe 0x55 en EECON2
movlw 0xAA
movwf EECON2 ; se escribe 0xAA en EECON2
bsf EECON1,WR ; se inicia ciclo de escritura
53
La Memoria del PIC16F84A

El bit WREN debe ser borrado por el programa y debe


mantenerse en cero todo el tiempo, excepto cuando se
actualice la EEPROM. El bit WR no puede ser puesto a 1, a
menos que WREN esté en 1.

Al final del ciclo de escritura, WR pasa a 0 y el bit bandera de


interrupción de escritura completada EEIF (bit 4 de EECON1)
pasa a 1 y se genera una interrupción, si está habilitada.

Para detectar el final de una operación de escritura (esto es


crítico) en EEPROM, el código puede consultar el estado de
EEIF o habilitar la interrupción correspondiente.

54
La Memoria del PIC16F84A

Es recomendable que durante la secuencia de escritura en EEPROM


las interrupciones sean deshabilitadas usando el FSR INTCON. Se
exceptúa la interrupción disparada por la culminación de un ciclo de
escritura en EEPROM, la cual se habilita con un bit de INTCON.

El fabricante de memorias EEPROM especifica un número máximo de


ciclos de escritura/borrado que el dispositivo puede soportar. En
ciertas aplicaciones donde la EEPROM puede llegar a funcionar en
sus límites de operación, conviene verificar que la escritura de los
datos se ha realizado correctamente.

Para probar que el dato en W ha sido escrito correctamente, se lee la


EEPROM y el valor en W se substrae del contenido del FSR EEDATA.
Si no ocurrió error en la escritura, la bandera Z se pondrá en 1.

55
Consideraciones de
Tiempo e Información de
Nivel bajo

56
Reloj del PIC16F84A

El Generador de Reloj
Los PIC de la serie 16 operan con una señal de reloj de
frecuencia precisa suministrada por un oscilador
realizado con un inversor operando linealmente. Para
usar el generador interno se conecta un cristal, un
resonador o una red RC en los terminales OSC1-OSC2
del dispositivo.

El reloj externo se aplica a la entrada OSC1, con el


terminal OSC2 desconectado o a tierra. En cualquier
caso la frecuencia con la cual se ejecutan las
instrucciones es ¼ de la frecuencia del oscilador
maestro. 57
Reloj del PIC16F84A

Tipos de Oscilador
Los PIC de la serie 16 pueden operar en 4 modos de
oscilador. Usando los bits FOSC1 y FOSC0 de la palabra
de configuración, puede seleccionarse uno de estos
modos.
MODO BITS: FOSC1-0 FRECUENCIA
LP 00 Baja Potencia: cristales por debajo de 200
KHz. Por ejemplo 32.768 KHz.
XT 01 Para cristales o resonadores de hasta 4 MHz
HS 10 Alta Velocidad: Para cristales y resonadores
sobre 4 MHz
RC 11 Red RC Externa para disminuir costos.
58
Reloj del PIC16F84A

Potencia vs Frecuencia

59
Reloj del PIC16F84A

Usando el Generador de Reloj Interno

CRISTAL/RESONADOR RED RC

60
Reloj del PIC16F84A

Valores de los capacitadores en OSC1 y OSC2

61
Reloj del PIC16F84A

Usando un Reloj Externo

62
Reloj del PIC16F84A

Frecuencia de Reloj y de Instrucción

63
El Ciclo de Instrucción PIC16F84A

El Ciclo de Instrucción

T1: PC=PC+1 y se carga en el bus de direcciones de programa.


T4: La instrucción se carga en el registro de instrucciones.

La decodificación/ejecución de la instrucción se realiza en el


siguiente ciclo T1-T4.

64
El Ciclo de Instrucción PIC16F84A

Procesamiento en Línea (Pipeline)

TCY0: se busca movlw 55h. (se ejecuta la instrucción anterior)


TCY1: se ejecuta movlw 55h y se lee movwf portb.
TCY2: se ejecuta movwf portb y se busca call sub_1
TCY3: se ejecuta call sub_1 y se lee bsf porta,bit3
TCY4: Sólo se lee la primera instrucción de la subrutina SUB_1.
TCY5: Se ejecuta la primera instrucción de la subrutina SUB_1 y se lee SUB-1+1.

65
El Ciclo de Instrucción PIC16F84A

Todas las instrucciones se ejecutan en un ciclo de


instrucción, exceptuando:
goto k
call k
return
retlw k
retfie
decfsz f cuando se ejecuta el salto
incfsz f “
btfss b “
btfsc b “ ,
las cuales requieren 2 ciclos de instrucción para
ejecutarse
66
El Sistema de Reset del PIC16F84A

El Sistema de Reset
La secuencia de inicio permite llevar al µControlador a un
estado conocido con condiciones de operación apropiadas.
Luego de conectar la energía al PIC, se requiere, que antes de
iniciar la ejecución del programa de aplicación:

1. La tensión de alimentación y la salida del oscilador de reloj


se estabilicen.

2. El contador de programa se cargue con 0 y que el chip sea


configurado de cierta manera, manipulando algunos de los
FSR que controlan la operación del PIC. Por ejemplo los
bits RPI, RP1 y RP0 del registro STATUS son borrados,
seleccionándose al inicio el banco 0 de la memoria de
datos.
67
El Sistema de Reset del PIC16F84A

Si se mantiene el terminal MCLR


del PIC16F84A en nivel bajo duran
te al menos 2 µs (¿100 ns?), el
dispositivo entra en el estado de
RESET y sólo sale de éste una vez
que le entrada MCLR haya retorna-
do a nivel alto.
68
El Sistema de Reset del PIC16F84A

Estado de los FSRs después de un RESET

69
El Sistema de Reset del PIC16F84A

Circuitos de RESET Automático

70
El Sistema de Reset del PIC16F84A

Circuito de RESET Interno


Un mecanismo de RESET interno distingue diferentes tipos de
RESET :

71
El Sistema de Reset del PIC16F84A

72
El Sistema de Reset del PIC16F84A

En t0 la energía es aplicada y VDD se incrementa expo-


nencialmente hacia +5 V. Si la velocidad inicial de subida es
mayor que 0.05 V/ms, cuando VDD alcance algún valor de
voltaje entre 1.5 V- 2.1 V, se genera una señal interna de
RESET la cual dispara la siguiente secuencia de eventos:

1. Un temporizador de encendido (PWRT: Power Up Timer)


genera un retardo fijo TPWRT igual a 72 ms aplicando la
salida de un oscilador interno a un contador de 10 bits.
Esto permite que la fuente de poder se estabilice.
Este retardo puede suprimirse poniendo a 1 el bit: PWRTE
de la palabra de configuración.

73
El Sistema de Reset del PIC16F84A

2. Al finalizar TPWRT, un retardo TOST (Oscillator Start Up


Timer) con una duración de 1024 ciclos del reloj maestro
es realizado, siempre y cuando se estén usando modos
de cristal del oscilador. Este tiempo es generado por un
contador de 10 bits impulsado por el reloj principal del
µCtrl y garantiza que el oscilador principal se ha
estabilizado y funciona correctamente antes de iniciar la
ejecución del programa. Este temporizador es habilitado
automática-mente excepto para el modo RC del oscilador.
Este temporizador también se inicia cuando el proce-
sador despierta desde el modo SLEEP y cumple la misma
función.

74
El Sistema de Reset del PIC16F84A

75
El Sistema de Reset del PIC16F84A

El Sistema de Reset

76
El Sistema de Reset del PIC16F84A

Secuencia de RESET durante el encendido. RESET externo no esta conectado a VDD

77
El Sistema de Reset del PIC16F84A

Secuencia de RESET durante el encendido. RESET externo no esta conectado a VDD

78
El Sistema de Reset del PIC16F84A

Secuencia de RESET durante el encendido. RESET externo conectado a VDD

79
El Sistema de Reset del PIC16F84A

Secuencia de RESET durante el encendido. RESET externo conectado a VDD. Tiempo de subida lento.

80

También podría gustarte