Teoría Sistemas Electrónicos Digitales

Enviado por Javi y clasificado en Electrónica

Escrito el en español con un tamaño de 168,95 KB

Modos de funcionamiento del PIC

Hay cuatro modos, según el tipo de oscilador externo que utilice:

  • RC: Es de bajo coste. Tiene una estabilidad mediocre y está formado por una resistencia y un condensador. Depende de los valores de R y C.
  • HS: Alta velocidad (4 – 10 Mhz.). Su base es un cristal de cuarzo o un resonador cerámico.
  • XT: Alcanza menores frecuencias de resonancia que HS (ambos son de la misma resonancia), proporcionando mayor exactitud en la duración de sus periodos.
  • LP: Es de cuarzo o cerámico, proporciona bajo consumo, pero trabaja a baja frecuencia ( 35-200 Khz.).

¿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.

  • RA4 multiplexa otra función expresada por TOCKI, que sirve para recibir una frecuencia externa que alimenta al temporizador TMR0.
  • RB0 multiplexa la función de entrada de interrupciones externas.

9k=

¿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.

  • Q1: Incremento del contador de programa.
  • Q2-Q3: Descodificación y ejecución de la instrucción.
  • Q4: Se busca el código de la instrucción siguiente y se carga en el registro de instrucciones.

Arquitectura de Harvard.

  • Acceso de forma independiente y simultánea a la memoria de datos y a la de programa.
  • Longitud de palabra y tamaño más adecuado en los buses.
  • Manejo intensivo del banco de registros.

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:

  • Inmediato: Una instrucción en el programa utiliza un dato inmediato, su valor lo contiene su código OP y en tiempo de ejecución dicho dato se carga en el registro w para su posterior procesamiento.
  • Directo: El operando que utilicé la instrucción en curso se referencia mediante su dirección, que viene incluida en el código de operación de la instrucción concretamente en los 7 bits de menos peso.
  • Indirecto: Se usa cuando se utiliza como operando en una instrucción el registro INDF o en la lectura/escritura de EEPROM.

El registro ESTADO:

Ocupa la dirección 03H de ambos bancos de la memoria RAM (03h y 83h).

Tiene tres misiones:

  • Avisar de las incidencias del resultado de operar con la ALU.
  • Indicar el estado de reset y sleep.
  • Seleccionar el banco de memoria RAM a acceder.

2Q==

  • C: 1 (Hay acarreo) ó 0 (No).
  • DC: 1 (Acarreo en el 4º bit tras una suma) ó 0 (No).
  • Z: 1 (Resultado es 0) ó 0 (No).
  • PD: 1 (Chip activo) ó 0 (Chip dormido).
  • TO: 1 (Tras conectar Vdd o ejecutar o Sleep) ó 0 (Desborda WDT).
  • RP1-RP0: 00 (Banco 0) ó 01 (Banco 1).
  • IRP: Selección de banco indirecto (No se usa).

TMR0:

Temporizador/Contador de 8 bits:

  • Contador de sucesos  externos, que están representados por los impulsos que se aplican a la patilla RA4/TOCK1. Al llegar a FFh se desborda con el siguiente impulso, lo señaliza o/y provoca una excepción.
  • Temporizador, cuando se carga un valor en el registro que implementa el recurso se incrementa cada ciclo de instrucción hasta que se desborda y avisa igual que el contador.

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.

2Q==

  • RBPU: 1 (Desactiva) ó 0 (Salida Pull-Up de B activa).
  • INTEDG: 1 (Interrupción por flanco ascendente) ó 0 (Descendente).
  • TOCS: 1 (Impulso de reloj procedente de RA4/TOCK1) ó 0 (Impulso de reloj interno CLKout).
  • TOSE: 1 (Descendente) ó 0 (Ascendente).
  • PSA: 1 (Preescala a WDT) ó 0 (Preescala a TMR0).
  • PS2, PS1 y PS0: Selección del rango.

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.

Z

  • CP : 1 (memoria de programa no protegida) ó 0 (No se puede leer ni sobrescribir). Si se pasa de 0 a 1 se borra completamente la EEPROM.
  • PWRTE : 1 (Desactivo) ó 0 (Activación de “power-up”).
  • WDTE : 1 (WDT Activado) ó 0 (Desactivado).
  • FOSC1-FOSC0 : 1-1 (RC), 1-0 (HS), 0-1 (XT) ó 0-0 (LP).

EEPROM DE DATOS:

Tiene 64 bytes. No esta mapeada, por lo que hay que utilizar 4 registros de propósito especifico.

9k=

  • EEDATA : Almacena valores que se leen o escriben.
  • EEADR : Carga la dirección a acceder.
  • EECON1 y EECON2 : Controlan las operaciones.

Z

  • EEIF : 1 (fin de escritura con éxito se pone a 0 por sw) ó 0 (no ha finalizado con éxito).
  • WRERR : 1 (error de escritura) ó 0 (Correcto).
  • WREN : 1 (Permite escritura) ó 0 ( No).
  • WR : 1 (Inicio de ciclos escritura) ó 0 (fin de ciclo).
  • RD : 1 (Inicio ciclo de lectura) ó 0 (Fin).

¿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:

  • Activación de la patilla RB0/INT. Se pone INTF = 1 y si INTE = 1 se autoriza el desarrollo.
  • Desbordamiento del TMR0. Pasa de FFh a OOh, TOIF se pone a uno. Si TOIE = 1 y GIE = 1 se produce la excepción. T = 4.Tosc.Prescalar(256-N10)
  • Cambio en las líneas RB7-RB1. Cuando hay un cambio en alguna de las entradas, se activa RBIF y si los permisos están activos se produce.
  • Finalización de la escritura de EEPROM de datos.

Fases de una interrupción:

  • Activación de posible causa. Su señalizador, el bit de permiso y GIE = 1.
  • GIE pasa a 0 para evitar otra interrupción.
  • El valor actual del PIC se guarda en la Pila.
  • Se carga el vector de interrupción
  • Se explora el valor de los señalizadotes para ver la causa.
  • Se bifurca la rutina según la causa.
  • Se borran los señalizadotes por su SW.
  • Al llegar a RETURN se carga el valor de la pila y GIE = 1.

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).

9k=

  • GIE à 0 (Prohíbe interrupciones) ó 1 (Permite).
  • EEIE à 0 (Prohíbe escritura EEPROM) ó 1 (Permite).
  • TOIE à 0 ( No TMRO ) ó 1 ( Si ).
  • INTF à 0 ( No se ha activado RB0/INN ) ó 1 (Si).
  • INTE à 0 (No activación RBO/INT ) ó 1 (Si ).
  • RBIE à 0 (No cambio a RB7-RB4 ) ó 1 (Si).
  • TOIF à 0  (TMR0 no desborda ) ó 1 (Si).
  • RBIF à 0 (No hay cambio) ó 1 ( Si ).

Acciones de RESET:

  • Cargar el PIC con el valor 000H (vector de Reset).
  • Poner el estado de los bits de los registros especificados con un valor conocido.

Causas de RESET:

  • Conexión a la alimentación (Power On Reset).
  • Activación de la patilla MCLR# (Norma o Reposo).
  • Desbordamiento del WDT (Normal o Reposo).

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:

  • Activación externa de MCLR# para provocar un RESET.
  • Desbordamiento de WDT, si quedó operativo.
  • Generación de una interrupción (excepto con TMR0).

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.

9k=

INCF :

Incremento en el contenido de f. Si d = 0, el resultado se almacena en w, si d = 1 se almacena en f.

2Q==

Modulo CCP:

Los PIC16C77 disponen de dos CCP1 y CCP2, y se controlan con los registros CCP1COM y CCP2COM. Realizan 3 funciones:

  • Capturar información de 16 bit procedentes del TMR1.
  • Comparar el valor del registro con el TMR1.
  • Modular o controlar el intervalo de tiempo en el que oscila de 1 a 0 la patilla del microcontrolador.

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

2Q==

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 =

Entradas relacionadas: