Modos de funcionamiento del PIC
Hay cuatro modos, según el tipo de oscilador externo que utilice:
¿Por qué se dice que el PIC tiene función multiplexor?
Se dice que tiene función de multiplexor ya que las patillas RA4 y RB0 multiplexan otras funciones.
¿Qué significa que el PIC actúa en modo drenador abierto?
Significa que no tiene una resistencia de polarización ( RA4 está en drenador abierto) y con ello se consigue el estado de alta impedancia.
Frecuencia de funcionamiento.
Es un parámetro fundamental a la hora de establecer la velocidad de ejecución de instrucciones y el consumo de energía.
Por ejemplo si un PIC funciona a 10 Mhz le corresponde un ciclo de instrucción de 400 nseg., ya que cada instrucción tarda en ejecutarse 4 periodos de reloj. Todas las instrucciones se realizan en un ciclo ( 4 periodos) excepto los de salto que tardan el doble ( 8 periodos).
Pipe-Line o Segmentación:
Realización en paralelo de las 2 fases que comprenden una instrucción: Búsqueda y ejecución.
Arquitectura de Harvard.
Ortogonalidad:
Cualquier instrucción puede utilizar cualquier elemento de la arquitectura como fuente o destino.
Memoria de programa.
Esta organizada por palabras de 14 bits y es del tipo Flash para el 16F84. Tiene un tamañote 1 Kbytes. Es de solo lectura y únicamente se ejecutara el código contenido en ella. El vector RESET se encuentra en 0000h y el de interrupciones en 0004h, por lo que la memoria de usuario se extiende desde la dirección 0005h.
PCLATH:
Registro que permite acceder de forma indirecta a la parte alta del contador de programas en algunas instrucciones.
¿Qué es una pila?
Es una zona aislada de las memorias de programa y datos. Es de tipo LIFO, tiene 8 niveles de profundidad y proporciona 8 subrutinas anidadas.
Memoria de datos RAM (direccionamiento)
Se constituye como una RAM de tipo estático donde residen los registros de propósito específico (SFR) y los de propósito general (GPR). Está dividido físicamente en dos Bancos independientes ( 0 y 1) de 128 bytes cada uno.
En los PIC 16X84 solo se encuentran implementadas las 80 primeras posiciones de cada banco, los 12 primeros están reservados a los registros de propósito específico ( encargados del control del procesador y sus recursos).
Los 68 restantes son de propósito general ( operativos los del banco 0, los del banco 1 están mapeados con los anteriores). La 07H y 87H no son operativos. Tras un RESET se accede automáticamente al banco 0 (RP=0).
Modos de direccionamiento:
Hay tres modos:
El registro ESTADO:
Ocupa la dirección 03H de ambos bancos de la memoria RAM (03h y 83h).
Tiene tres misiones:
TMR0:
Temporizador/Contador de 8 bits:
Para poder utilizar una función u otra se utiliza el OPTION-REG.
El divisor de frecuencia con el TMR0 actúa como pre-divisor.
Temporizador = 4. Tosc ( 256 – ValorTMR0 )*( Rango del Divisor)
Está en la dirección 01H del banco 0.
WatchDog (WDT):
Es otro temporizador del PIC. Vigila que el programa no se quede colgado, comprobando cada cierto tiempo que se ejecuta con normalidad. Si falla resetea el sistema.
Registro OPTION-REG
Controla TMR y divisor de frecuencia. 81h de memoria de datos.
Resistencia Pull-up:
Resistencia a la cual se le permite conectarse a todas las líneas de la puerta B, con un elevado valor con el positivo de la alimentación.
Para poder hacer esto hay que programar en OPTION el bit RBPU# = 0, afectando la conexión de la resistencia a todas las líneas.
Con un reset todas las líneas quedan configuradas con entradas y se desactivan las resistencias de pull-up.
Puerta A:
Las Líneas RA3-RA0 admiten niveles de entrada TTL, y salidas CMOS. La Línea RA4/TOCK1 dispone de un circuito Trigger-Schmitt que proporciona inmunidad al ruido y la salida tiene drenador abierto.
Puertas RB7-RB4:
Se pueden programar para que cuando actúen como entradas generen una interrupción si alguna de ellas cambia su estado lógico. RB6 se utiliza para la grabación serie de la memoria del programa.
Configurar RA0-RA3 como entradas y RB4 como salidas.
Bsf STATUS, 5
Movlw b’01111’
Movwf PORTA
Movlw b’0001000’
Movwf PORTB
Tras un RESET, ¿Qué valor toman los TRIS?
Quedan a 1, lo que implica que las puertas quedan configuradas como entradas.
La palabra Configuración:
Posición reservada de la memoria de programa situada en el 2007h y accesible únicamente del proceso de grabación.
EEPROM DE DATOS:
Tiene 64 bytes. No esta mapeada, por lo que hay que utilizar 4 registros de propósito especifico.
¿Qué es el vector interrupción?
Cuando se genera una interrupción se salva la dirección actual del PIC en la pila, y se carga el PIC con una dirección, con el valor 0009h, que es el vector interrupción.
La llamadla vector de interrupción da paso a un trozo de código denominado Rutina de Servicio de Interrupción (RSI).
En RSI, ¿porque se pone RETFIE en vez de RETURN?
El bit GIE, de activación global de interrupciones, se borra automáticamente cuando se reconoce una interrupción para evitar que se produzca otra cuando se atiende a la inicial. Al retornar de la interrupción el bit GIE se vuelve a activar.
Interrupciones:
Desviación de flujo de control del programa del programa originados asincronamente por diversos sucesos que no se hallan bajo la suspensión de las instrucciones.
Hay 4 causas:
Fases de una interrupción:
Proceso de lectura :
Se coloca la dirección en EEADR y RD = 1 en EECON1. EL dato estará disponible en EEDATA en el siguiente ciclo.
Proceso de escritura:
Comienza cargando en EEADR la dirección de la posición a escribir y a EEDATA el valor a grabar. Al acabar WR pasa a 0 automáticamente y EEIF se pone a 1 ( luego habrá que ponerlo a 0 mediante SW). Se utiliza el registro EECON2 para escribir.
Registro de Control de Interrupciones (INTCON).
Acciones de RESET:
Causas de RESET:
Reset por falta en la alimentación ( Brown Out)
Cuando el voltaje de alimentación Vdd desciende por debajo del valor mínimo, si llegar a cero, y luego se recupera, se produce un fallo en la alimentación. En este caso es preciso provocar un Reset, colocando un circuito externo de protección.
Modo reposo o bajo consumo.
Para entrar en modo reposo hay que ejecutar la instrucción SLEEP, entonces el sistema parece como si se congelase, requiriendo el suministro de energía mínimo.
La pantalla TOCK1 se conecta a Vdd o a tierra para eliminar la entrada de impulsos externos al TMR0. Como se detiene el oscilador principal que genera los impulsos Tosc, se para TMR0.
Las patillas de E/S se mantienen como estaban. Excepto los que no están conectados a nada que se debe conectar a Vdd o tierra para evitar fugas de corriente. MCLR# debe conectarse a nivel alto. PD# y TO# pasan a 0 y 1.
Se sale de 3 formas:
PWRT:
Activa una salida al cabo de cierto tiempo tras la conexión a la alimentación. Solo valida si el bit PWRT = 0.
OST (temporizador):
Proporciona un retardo de 1024*TOSC. Sirve para asegurar que el cuarzo o resonador cerámico empleados en XT, LP o HS esté estabilizado y en marcha. Empieza a funcionar cuando termina PWRT.
Salto:
No se conoce cual será la siguiente instrucción hasta que se realice la ejecución. Se sustituye la fase de búsqueda por un ciclo vacío, para lo que tarda dos ciclos.
Su tamaño es de 13 bits y funciona como un buffer circular ( El valor obtenido en la novena recuperación es igual al valor que se obtuvo en la primera).
¿Cuántos ciclos tiene la instrucción movlw?¿Por que?
Tiene un ciclo, ya que es una instrucción para operaciones inmediatas.
INCF :
Incremento en el contenido de f. Si d = 0, el resultado se almacena en w, si d = 1 se almacena en f.
Modulo CCP:
Los PIC16C77 disponen de dos CCP1 y CCP2, y se controlan con los registros CCP1COM y CCP2COM. Realizan 3 funciones:
Son módulos de captura/comparación/modulación de anchura de impulsos.
Un programa consta de 100 instrucciones, 10 de ellas de salto. Si se trabaja a 4MHz y un prescaler de 1/8. ¿Cuanto tiempo tarda en ejecutarse?
Al ser 10 de ellas de salto, son equivalentes a 20 al ser dobles. Con lo cual son 110 instrucciones.
Para 7 ciclos. ¿Que valor hay que cargar en TMR0?
Según el esquema del TMR0, con que valores configuraremos el OPTION-REG?. F=1MHz, TMR0=256, t= 0,8 mseg
Preescaler = 122,7 = 128.
Tosc = 0
PSA = 0, PS0 = 0, PS1 = 1, y PS2 = 1.
En un PIC16x84 que trabaja a 1Mhz se conecta un diodo led a la línea RB7 de la Puerta B. Se desea hacer parpadear al led cada 8,2 mseg.
Para medir 8,2 mseg se emplea TMR0 al que asignamos 128 de preescaler.
TMRO =