apuntes pic16f88

68
1 PIC 16F88 CIFP POLITECNICO DE SANTIAGO DE COMPOSTELA

Upload: milasobrino

Post on 27-Dec-2015

35 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Apuntes PIC16F88

1

PIC

16F88

CIFP POLITECNICO DE SANTIAGO DE COMPOSTELA

Page 2: Apuntes PIC16F88

2

PIC16F88. Características ........................................................... 3 Bits de Configuración ................................................................. 4 Organización de la memoria ....................................................... 5 Registros de control iguales que PIC16F84 .................................. 11 Registros de control distintos que PIC16F84 ................................ 13 EL OSCILADOR ....................................................................... 15 

Modos ................................................................................. 15 Bloque de oscilador interno .................................................... 16 

Modos INTRC .................................................................... 16 Registros de control del oscilador .............................................. 17 

Registro OSCTUNE ............................................................. 17 Registro OSCCON .............................................................. 17 

TEMPORIZADORES .................................................................. 19 TMR1 .................................................................................. 21 

Modos de funcionamiento ................................................... 22 TMR2 .................................................................................. 25 

Características: ................................................................. 25 Convertidor A/D ...................................................................... 27 

● Características ................................................................ 27 ● Registros de control ........................................................ 27 

Operación del ADC ................................................................ 28 ● Configurar el módulo A/D (secuencia) ................................ 28 ● Configurar la interrupción A/D (opcional) ............................ 28 ● Adquisición de un dato ..................................................... 28 ● Tiempos en la conversión A/D ........................................... 30 

MODULO CCP CAPTURA /COMPARACIÓN / PWM (Modulación de anchura de pulsos) .................................................................. 31 Módulo de Captura .................................................................. 31 

Configuración del pin CCP ................................................... 32 Software de Interrupción .................................................... 33 CCP Preescaler .................................................................. 33 

Modo Comparación .................................................................. 33 Configuración del pin CCP ................................................... 34 Modo de trabajo del TIMER1 ................................................ 34 Modo especial de disparo .................................................... 34 Ejemplo de manejo del comparador ..................................... 35 

Modo de Modulación de Anchura de Pulsos (PWM) ....................... 35 Periodo PWM ..................................................................... 36 

MÓDULO DE COMUNICACIONES SERIE SÍNCRONA: MSSP ............. 38 Modo SPI ............................................................................ 38 

Modo de trabajo ................................................................ 40 Conexión típica .................................................................. 41 Modo master ..................................................................... 42 Modo slave ....................................................................... 43 

MÓDULO COMPARADOR ........................................................... 44 Configuración del comparador ................................................ 45 Operación del comparador ..................................................... 46 Comparador de referencia ..................................................... 47 

Page 3: Apuntes PIC16F88

3

Señal de referencia externa ................................................ 47 Señal interna de referencia ................................................. 47 Salidas de los Comparadores ............................................... 48 

Interrupciones del Comparador .............................................. 49 El Comparador en el modo SLEEP ........................................... 50 Efectos del Reset .................................................................. 50 Consideraciones de Conexión de las Entradas Analógicas ........... 50 Registros Asociados con el Módulo Comparador ........................ 51 

Módulo Comparador De Tensión De Referencia ............................ 51 TRANSMISOR RECEPTOR DIRECCIONABLE UNIVERSAL SÍNCRONO ASYNCHRONOUS (AUSART) ...................................................... 53 

Generador de baudios del AUSART (BRG). ............................. 56 El AUSART en modo asíncrono ............................................. 58 Modo síncrono ................................................................... 60 Control del AUSART conectado al puerto serie del ordenador ... 63 

CIRCUITO DE VIGILANCIA (WDT) .............................................. 65 WDT Ocilador .................................................................... 65 WDT Control ..................................................................... 66 Bit de estado de PRESCALER/POSTSCALER ............................ 66 

Temporizador de puesta en marcha del oscilador (OST) ............. 67 

PIC16F88. Características – Osciladores

• Osciladores a cristal: LP, XT y HS hasta 20Mhz • Oscilador externo hasta 20Mhz • Oscilador interno: 31Khz – 8Mhz

– Periféricos • Módulo PWM/CCP

o CCP (captura/comparador) -> 16 bits o PWM (modulación por pulsos) -> 10 bits

• ADC 10bits 7 canales • SSP (puerto serie síncrono) -> SPI e I2C • USART • Comparador analógico dual

– Características de bajo consumo (tecnología nanoWatt)

Page 4: Apuntes PIC16F88

4

Bits de Configuración ; Bits de Configuración (15.0 SPECIAL FEATURES OF THE CPU ; Pagina 131 del manual PIC16F87-88 30487c ;_CONFIG1 ;_CONFIG2 ;Configuration Byte 1 Options ;_CP_ALL ;All Program Memory Protected ;_CP_OFF ;No Code Protection ;_CCP1_RB0 CCP1 function on RB0 ;_CCP1_RB3 CCP1 function on RB3 ;_DEBUG_OFF In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins ;_DEBUG;_ON In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger ;_WRT_PROTECT;_OFF ;No program memory write protection ;_WRT_PROTECT_256 ;First 256 program memory protected ;_WRT_PROTECT_2048 ;First 2048 program memory protected ;_WRT_PROTECT_ALL ;All of program memory protected

Page 5: Apuntes PIC16F88

5

;_CPD_ON Data EE Memory Code Protection Enabled ;_CPD_OFF Data EE Memory Code Protection Disabled ;_LVP_ON Low-Voltage Programming Enable Enabled ;_LVP_OFF Low-Voltage Programming Enable Disabled ;_BODEN_ON Brown Out Reset Detec Enabled ;_BODEN_OFF Brown Out Reset Detec Disabled ;_MCLR_ON Pin function is MCLR ;_MCLR_OFF Pin function is digital Input, MCLR internally tied to VDD ;_PWRTE_OFF 72 msec. Time Up Delay Off ;_PWRTE_ON 72 msec. Time Up Delay On ;_WDT_ON Watchdog Timer Enable bit On ;_WDT_OFF Watchdog Timer Enable bit Off ;_EXTRC_CLKOUT ;_EXTRC_IO ;Habilita el Clock Externo - ;_INTRC_CLKOUT ;_INTRC_IO ;Habilita el Oscilador Interno - Pines RA6 y RA7 activados ;_EXTCLK ;_HS_OSC HS oscillator ;_XT_OSC XT oscillator ;_LP_OSC LP oscillator ;Configuration Byte 2 Options ;_IESO_ON Internal External Switchover mode enabled ;_IESO_OFF Internal External Switchover mode disabled ;_FCMEN_ON Fail-Safe Clock Monitor enabled ;_FCMEN_OFF Fail-Safe Clock Monitor disabled list p=16f88, r=dec ;especificaciones del micro #include <p16f88.inc> ; inclusion de archivos y registros __CONFIG _CONFIG1, _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _MCLR_ON & _LVP_ON & _INTRC_IO __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF

Organización de la memoria

● 4K de memoria de programa (FLASH) organizada en 2 páginas (accesible mediante PCLATH)

Page 6: Apuntes PIC16F88

6

● 4 bancos de memoria de datos (RAM) organizada en registros, accesibles mediante RP1/RP2 (status)

Page 7: Apuntes PIC16F88

7

Page 8: Apuntes PIC16F88

8

Leyenda: x = desconocido, u = sin cambios, q = valor que depende de condiciones, - = no implementada, se lee como'0 ', r = reservados. Sombreados son registros sin aplicación, se leen como "0". Nota 1: El byte superior del contador de programa no es directamente accesible. PCLATH es un registro de establecimiento para PC <12:8>, cuyo contenido se traslada a la parte alta del byte de contador de programa. 2: Estos registros se pueden abordar desde cualquier banco. 3: RA5 es una entrada solamente, el estado del bit TRISA5 no tiene ningún efecto, y siempre se lee “1”. 4: sólo en el dispositivo PIC16F88.

Page 9: Apuntes PIC16F88

9

Leyenda: x = desconocido, u = sin cambios, q = valor que depende de condiciones, - = no implementada, se lee como'0 ', r = reservados. Sombreados son registros sin aplicación, se leen como "0". Nota 1: El byte superior del contador de programa no es directamente accesible. PCLATH es un registro de establecimiento para PC <12:8>, cuyo contenido se traslada a la parte alta del byte de contador de programa. 2: Estos registros se pueden abordar desde cualquier banco. 3: RA5 es una entrada solamente, el estado del bit TRISA5 no tiene ningún efecto, y siempre se lee “1”. 4: sólo en el dispositivo PIC16F88.

Page 10: Apuntes PIC16F88

10

Leyenda: x = desconocido, u = sin cambios, q = valor que depende de condiciones, - = no implementada, se lee como'0 ', r = reservados. Sombreados son registros sin aplicación, se leen como "0". Nota 1: El byte superior del contador de programa no es directamente accesible. PCLATH es un registro de establecimiento para PC <12:8>, cuyo contenido se traslada a la parte alta del byte de contador de programa. 2: Estos registros se pueden abordar desde cualquier banco. 3: RA5 es una entrada solamente, el estado del bit TRISA5 no tiene ningún efecto, y siempre se lee “1”. 4: sólo en el dispositivo PIC16F88.

Page 11: Apuntes PIC16F88

11

Registros de control iguales que PIC16F84

Page 12: Apuntes PIC16F88

12

Page 13: Apuntes PIC16F88

13

Registros de control distintos que PIC16F84

Page 14: Apuntes PIC16F88

14

Page 15: Apuntes PIC16F88

15

EL OSCILADOR

Modos

Page 16: Apuntes PIC16F88

16

Bloque de oscilador interno Los dispositivos PIC16F87/88 incluyen un bloque oscilador interno que genera dos señales de reloj; también puede ser utilizado como la fuente de reloj del sistema. Esto puede eliminar la necesidad de utilizar los pines OSC1 y / o OSC2 para el oscilador externo. La salida base (INTOSC) es una fuente de reloj de 8 MHz que puede ser usado directamente como reloj del sistema. Dispone el INTOSC un postscaler que puede proporcionar una serie de seis frecuencias de reloj de 125 kHz a 4 MHz. La otra fuente de reloj es el oscilador interno de RC (INTRC), que proporciona un 31,25 kHz (32 μs de período nominal) de salida. El oscilador INTRC está habilitado por la selección de los INTRC como el reloj del sistema o fuente cuando cualquiera de los siguientes está habilitado: • Power-up Timer • Circuito de vigilancia (Watchdog) • Dos velocidades de arranque • Fail-Safe Reloj monitor Estas características se detallan en la Sección 15.0 "Características especiales de la CPU". La fuente de reloj de frecuencia (INTOSC directo, INTRC directa o INTOSC postscaler) es seleccionado por la configuración de los bits IRCF del registro OSCCON. Nota: A lo largo de estos apuntes, cuando se refiere específicamente a una fuente de reloj genérico, el término "INTRC" también puede ser usado para referirse a los modos de utilizar el reloj interno del oscilador bloque. Esto es independientemente de que la frecuencia real utilizada sea INTOSC (8 MHz), la INTOSC postscaler o INTRC (31,25 kHz).

Modos INTRC Usando el oscilador interno como fuente de reloj se puede eliminar la necesidad de un máximo de dos pines del oscilador externo, pudiendo utilizarse estos como entradas/salidas digitales. Están disponibles dos configuraciones:

Page 17: Apuntes PIC16F88

17

• En modo INTIO1, el pin de salida OSC2 es Fosc / 4, mientras OSC1/RA7 se puede usar como entrada o salida digital. • En el modo INTIO2, tanto RA6 como RA7 se pueden usar para entrada y salida digital.

Registros de control del oscilador

Registro OSCTUNE La salida del oscilador interno ha sido calibrada de fábrica, pero se puede ajustar en la aplicación. Esto se realiza configurando el registro OSCTUNE. La sintonización de la sensibilidad es constante a lo largo del rango de afinación. El registro OSCTUNE tiene una gama de sintonización ± 12,5%. Cuando se modifica el registro OSCTUNE, la INTOSC y las frecuencias INTRC, se inicia el cambio hacia la nueva frecuencia. El reloj INTRC llegará a la nueva frecuencia dentro de los 8 ciclos de reloj (alrededor de 8 * 32 μs = 256 μs); el reloj INTOSC se estabiliza dentro de 1 ms. La ejecución de código continúa durante este cambio. Las características de funcionamiento que dependen de la fuente de frecuencia del reloj de 31,25 kHz INTRC, por ejemplo, como el WDT, Fail-Safe Reloj monitor y los periféricos, se verán afectados por el cambio de frecuencia.

Registro OSCCON El registro OSCCON configura varios aspectos de funcionamiento de control del reloj del sistema. Los bits de selección del reloj del sistema SCS1: SCS0, seleccionan la fuente de reloj que se utiliza cuando el dispositivo está funcionando en el modo power-manager. Cuando los bits están desactivados (SCS <1:0> = 00), la fuente de reloj del sistema proviene del oscilador principal que es seleccionado por los bits de configuración FOSC2: FOSC0 de la palabra de configuración 1. Cuando los bits se configuran de otra manera, la fuente de reloj del sistema está es el Oscilador Timer1 (SCS1: SCS0 = 01) o el oscilador interno (SCS1: SCS0 = 10). Después de un reset, SCS <1:0> cambia a '00 '. Los bits de selección del oscilador interno IRCF2: IRCF0, seleccionan la salida de frecuencia del bloque del oscilador interno que se utiliza para impulsar el reloj del sistema. Las opciones son la fuente INTRC (31,25 kHz), la fuente INTOSC (8 MHz) o una de las seis frecuencias de derivados del Postscaler INTOSC (125 kHz a 4 MHz). Un cambio de la configuración de estos bits tiene un cambio inmediato en la frecuencia de salida del multiplexor. Los bits OSTS y IOFS indican el estado del oscilador principal y la fuente INTOSC; esos bits se ponen a uno cuando sus respectivos osciladores son estables. En particular, OSTS indica que el temporizador del oscilador Start-up ha terminado.

Page 18: Apuntes PIC16F88

18

Page 19: Apuntes PIC16F88

19

TEMPORIZADORES ● TMR0 -> igual que en PIC16F84 (8 bits) ● WDT -> igual que en PIC16F84 pero con un prescaler exclusivo de 16 bits (además del prescaler compartido de 8 bits) ● TMR1 – Temporizador de 16 bits – Puede usarse como reloj secundario en modos de bajo consumo – Puede usarse como reloj de tiempo real (RTC) – Genera interrupción por desbordamiento ● TMR2 – Temporizador de 8 bits – Prescaler y postscaler – Genera interrupción por desbordamiento

Page 20: Apuntes PIC16F88

20

• Iguales que en PIC16F84 • Prescaler de 16 bit en WDT -> permite

o Usar prescaler 16 bit en WDT y prescaler 8 bit en TMR0 simultáneamente

• Prescindir de prescaler en TMR0 y usar prescaler de 24 bits en WDT

Page 21: Apuntes PIC16F88

21

TMR1

● Características: – Temporizador de 16 bits -> registros TMR1H:TMR1L, con prescaler 1:8 – Interrupción en desbordamiento

• Flag TMR1IF (registro PIR1) • Enmascarable con TMR1IE (registro PIE1)

– Modos de funcionamiento o Temporizador (igual que TMR0, pero con 16 bits) o Contador -> funcionamiento síncrono/asíncrono

Page 22: Apuntes PIC16F88

22

Modos de funcionamiento – Modo temporizador

o Se selecciona con TMR1CS = 0 o En este modo el temporizador funciona con FOSC/4

– Modo contador o Se selecciona con TMR1CS = 1 o Puede funcionar con

Reloj externo (pin T1CKI) -> si configuramos T1OSCEN = 1

Reloj interno (con cristal LP) -> si configuramos T1OSCEN = 0

En ambos casos puede configurarse en modo síncrono o asíncrono

o Modo contador síncrono (T1SYNC = 0) Sincroniza el reloj con el reloj interno En modo sleep se para el reloj

o Modo contador asíncrono (T1SYNC = 1) No sincroniza el reloj TMR1 sigue contando durante SLEEP => puede

despertar al micro

Page 23: Apuntes PIC16F88

23

Page 24: Apuntes PIC16F88

24

Page 25: Apuntes PIC16F88

25

TMR2

Características: – Temporizador de 8 bits -> registro TMR2 (cuenta) PR2 (limite) – Prescaler 1:8 y postscaler 1:16 – Interrupción cuando TMR coincide con PR2

o Flag TMR2IF (registro PIR1) o Enmascarable con TMR2IE (registro PIE1) – Se puede usar como base de tiempos para el módulo PWM /

CCP

Page 26: Apuntes PIC16F88

26

Page 27: Apuntes PIC16F88

27

Convertidor A/D

● Características – 7 entradas analógicas (7 canales) – A/D de 10 bits – Referencias positivas (VREF+) y negativas (VREF-) seleccionables – Posibilidad de trabajar en modo sleep usando el oscilador RC interno.

● Registros de control – ADRESH -> parte alta del resultado – ADRESL -> parte baja del resultado – ADCON0 / ADCON1 -> registros de control – ANSEL -> registro de selección de entradas analógicas

Page 28: Apuntes PIC16F88

28

Operación del ADC

● Configurar el módulo A/D (secuencia) – Configurar los pines I/O como analógicos/digitales (ANSEL) – Configurar la tensión de referencia (ADCON1) – Seleccionar el canal de entrada A/D (ADCON0) – Seleccionar la fuente de reloj del ADC (ADCON0) – Activar el módulo A/D (ADCON0)

● Configurar la interrupción A/D (opcional) – ADIF=0, ADIE=1, PEIE=1, GIE=1

● Adquisición de un dato – Fijar la señal GO/DONE = 1 (ADCON0) – Esperar a la interrupción, o a que GO/DONE se ponga a cero – Leer el dato de ADRESH:ADRESL – Borrar ADIF si se está usando la interrupción

Page 29: Apuntes PIC16F88

29

Page 30: Apuntes PIC16F88

30

● Tiempos en la conversión A/D – Tiempo de Adquisición

– Tiempo desde que se selecciona el canal hasta que se puede lanzar la conversión (Activar GO/DONE)

– Tiempo mínimo: TACQ = 19,72μs – Tiempo de conversión

– Tiempo desde que se inicia la conversión hasta que termina – TC = 9 TAD – TAD es el periodo del reloj de conversión, seleccionable

Page 31: Apuntes PIC16F88

31

MODULO CCP CAPTURA /COMPARACIÓN / PWM (Modulación de anchura de pulsos) Los microcontroladores de 16F88 disponen de un módulo de Captura/ Comparación y PWM, el terminal CCP1 puede ser RB0 o RB3 y viene determinado por el bit 12 (CCPMX) de la palabra de configuración CONFIG1. Este modulo tiene un registro de 16 bits que puede trabajar como: ● Registro de captura de 16 bit ● Registro de comparación de 16 bits ● Registro de modulación de anchura de pulsos PWM de 10 bits En la tabla 1 se muestran los recursos e interacciones del módulo. Seguidamente describiremos el funcionamiento del módulo CCP1. Módulo CCP1:El registro de Captura / Comparación/ PWM (CCPR1) de 16 bits esta formado por dos registros de 8 bits: CCPR1L (byte bajo) que ocupa la dirección 15h y el CCPR1H (byte alto) que ocupa la posición 16h. El registro de control o configuración del CCP1 es el CCP1CON que ocupa la dirección 17h. El modo de disparo especial se genera por la igualdad en la comparación de CCPR1 con TMR1 y restablecerá el TIMER1 y el CCPR1, funciona como un registro de período, capaz de provocar periódicamente interrupciones.

El modo de disparo especial se genera por igualdad en la comparación con el TIMER1 lo que provoca que se restablezca el TIMER1 y comience una conversión A/D, si el convertidor A/D está habilitado. Con lo cual se puede realizar la conversiones A/D de forma periódica sin el control del programa de instrucciones.

Módulo de Captura En este modo se captura en CCPR1H:CCPR1L el valor del registro de 16 bits del TMR1 cuando se produce un evento por el pin, RB0 o RB3 (CCP1 determinado con el bit 12 (CCPMX) de la palabra de configuración CONFIG1). Un evento puede ser: ● Cada flanco descendente ● Cada flanco ascendente ● Cada 4 flancos ascendentes ● Cada 16 flancos ascendentes

Page 32: Apuntes PIC16F88

32

Un evento se selecciona por medio de los bits de control CCP1M3:CCP1M0 del registro CCP1CON. Cuando se produce una captura, se pone a " 1 " el flag CCP1IF del registro PIRI <2>, además si está a " 1 " el bit PIE de CCP1IE<2>, se genera una petición de interrupción. El flag CCP1IF debe ponerse a cero por software. Si se produce otra captura antes de leer el registro CCPR1, el valor capturado se perderá. Cuando se trabaja en el modo captura con el CCP1, el TMR1 debe estar configurado para trabajar como temporizador o como contador síncrono. Nunca en modo asíncrono. Es recomendable desactivar el módulo CCP cuando se van a cambiar las condiciones de funcionamiento en el modo de captura para evitar que se produzcan falsas interrupciones durante la operación.

Configuración del pin CCP En el modo captura, el pin CCP1 debe configurarse como entrada.

Page 33: Apuntes PIC16F88

33

Software de Interrupción Es recomendable desactivar el módulo CCP poniendo a cero CCP1IE (PIE1 <2>) cuando se van a cambiar las condiciones de funcionamiento en el modo captura para evitar que se produzcan falsas interrupciones durante la operación. Se debe poner a cero el flag CCP1IF por software.

CCP Preescaler Hay cuatro modos de preescaler, que vienen seleccionados por los bits CCPxM3:CCPxM0. Siempre que el módulo CCP esté desactivado o no esté en modo de captura, el contador del preescaler se pone a cero. Cualquier reset también pone a cero el preescaler. Cuando se cambia el preescaler durante una captura, se puede generar una interrupción. Puede ocurrir también que el contador de preesca-ler no se encuentre a cero antes de comenzar la primera captura. En las líneas de programa en ensamblador del ejemplo, se muestra el método recomendado para modificar el preescaler en el modo de captura. Este ejemplo también pone a cero el contador del preescaler y no genera una falsa interrupción. Ejemplo: CLRF CCP1CON ;Desactiva el módulo CCP MOVLW NEW_CAPT_PS ;Carga el registro W ;con el nuevo preescaler ;Carga el valor en CCP ON MOVWF CCP1CON ;Carga CCP1CON con este valor

Modo Comparación En el modo de Comparación los 16 bits que forman los registros CCPRH-L comparan de forma continua su contenido con el del TMR1. Cuando los dos valores coinciden en el pin CCP1, que debe estar configurado como salida, pueden darse los siguientes eventos

Page 34: Apuntes PIC16F88

34

dependiendo de la configuración de los bits CCP1M3:CCP1M0 (CCP1CON <3:0>): ● Pasa a nivel alto ● Pasa a nivel bajo ● No cambia su estado pero se produce una interrupción Además cuando se da la coincidencia entre los dos registros el bit CCP1IF se pone a 1

Configuración del pin CCP El usuario debe configurar el pin CCP1 como pin de salida.

Modo de trabajo del TIMER1 El Timer1 debe estar trabajando en modo temporizador o contador síncrono, nunca en modo asíncrono. Modo de Interrupción por software cuando se elige el modo de trabajo de Interrupción por Software, el pin CCP1 no es afectado. El flag CCPIF se pone a "1" y se produce una interrupción de CCP (si se ha habilitado).

Modo especial de disparo En este modo de disparo el CCP1 pone a "0" el TMR1 y, además, inicia una conversión A/D de forma periódica, pudiéndose realizar una conversión A/D sin el control del programa de instrucciones. Para que tenga lugar una conversión A/D periódicamente, se puede cargar en los registros CCPR1H y CCPR1L el número de impulsos a los que una vez transcurridos, deseamos que se realice una conversión. Como estos registros se comparan continuamente con los del modulo temporizador TMR1, cuando ambos sean iguales, comenzará la conversión. Esta operación no afecta al flag de interrupción del

Page 35: Apuntes PIC16F88

35

temporizador TMRIF (PIR1<0>). Como la igualdad también pone a cero al temporizador, se volverá a repetir de nuevo el ciclo. Si sólo nos interesa la interrupción que ocasionará el módulo convertidor cuando finalice la conversión, habilitaremos solamente la de éste último, deshabilitando la del comparador, es evidente que no deseamos saber cuando tiene lugar la igualdad entre los registros CCPR1 y TMR1, o lo que es lo mismo, el inicio de la conversión.

Ejemplo de manejo del comparador El siguiente programa utiliza el comparador del PIC1688 para realizar un divisor de frecuencia por dos veces el número que se indique en hexadecimal por el PORTA (RA0:RA5). Para ello se hace contar al TIMER1 los impulsos que se inyectan por la línea RB6/T1OSO/T1CKI y cada vez que se llega al valor indicado por las líneas RA0:RA5, la línea RB0 cambia de estado.

Modo de Modulación de Anchura de Pulsos (PWM) Con el modo de modulación de anchura de impulsos se pueden conseguir impulsos a nivel alto de anchura variable, con el modulo CCP1 se puede obtener una resolución de 10 bits para la salida PWM. Estas señales tienen mucha aplicación para el control de motores a través de un triac u otro tipo de driver para los motores de corriente continua, en el ejemplo hemos utilizado un LM293B. El CCP1 se multiplexa con el lacht del PORTB, por lo que habrá que poner el bit a cero para que trabaje como salida. En la Figura 5 se muestra el diagrama de bloques simplificado del módulo CCP trabajando en modo PWM. Cuando el valor almacenado en el registro PR2 coincide con los ocho bits de mayor peso de TMR2, el pin pasa a valer "1" y se borra el temporizador para iniciar de Nuevo la cuenta. El contenido de menor peso del CCPR1L se pasa al registro de mayor peso CCPR1H y se comienza de nuevo la comparación con TMR2, cuando ambos son iguales el pin se pone a "0" para repetir la secuencia. Por lo tanto, el tiempo que la señal PWM está a nivel alto viene dada por el registro CCPR1H y el periodo de la señal por el registro PR2.

Page 36: Apuntes PIC16F88

36

Periodo PWM La salida PWM que se obtiene en el pin CCP1, como puede verse en la figura 6, la señal tiene un periodo base y sobre él la señal está a nivel alto durante un tiempo (duty cycle). La frecuencia del PWM es la inversa del periodo (1/T). La duración del período de la señal depende del valor que se haya cargado en PR2, de acuerdo con la siguiente expresión.

Cuando el valor TMR2 coincide con el de PR2 suceden tres eventos: ● Se borra el TMR2 (se pone a cero) ● La patilla CCP1 se pone a "1" ● El valor de CCPR1L, que es el que determina la anchura del impulso se carga en CCPR1H El tiempo que la patilla de salida está a nivel alto, que es la anchura del impulso, depende del contenido cargado de CCPR1L y de los bits 5 y 4 del CCP1CON, cuando trabajamos con una precisión de 10 bits. Por su parte, la anchura del impulso a nivel alto viene dada por la expresión:

Page 37: Apuntes PIC16F88

37

El valor de CCPR1L:CCP1CON<5:4> puede cargarse en cualquier momento, puesto que el mismo no se traspasa a CCPR1H y compara hasta que coincidan PR2 con TMR2. En el modo PWM el registro CCPR1L solo puede ser leído. Como en todos los módulos del microcontrolador, es necesario respetar y mantener cierto orden en la programación. El orden seguido para su configuración será: ● Colocar en PR2 el periodo calculado ● Colocar en los registros CCPR1L y en los bit <5:4> de CCP1CON los valores calculados ● Programar como salida el bits CCP1. ● Poner el valor del preescaler del TMR2 y habilitar el temporizador (T2CON). ● Configurar el CCP1 para una operación PWM.

Page 38: Apuntes PIC16F88

38

MÓDULO DE COMUNICACIONES SERIE SÍNCRONA: MSSP El módulo de comunicaciones serie síncrona (MSSP) es un interface serie, útil para comunicar con otro periférico o dispositivos. Estos periféricos pueden ser memorias EEPROMs serie, registros de desplazamiento, controladores de displays, convertidores A/D, convertidores D/A, etc. El módulo de MSSP pueda operar en uno de estos dos modos:

• Serial Peripheral Interface (SPI) • Inter-Integrated Circuit (I2C)

Para el control de este módulo hay dos registros de configuración se trata del registro SSPCON: Registro de control del Puerto Serie Síncrono (Sync Serial Port Control Register) en la dirección 14h. Además se dispone del registro SSPSTAT: Registro de estado del puerto Serie (Sync Serial Port Status Register) en la dirección 94h, que seguidamente se describen.

Modo SPI Este modo permite la transferencia de datos de 8 bits en serie, que pueden ser transmitidos y recibidos de forma síncrona y simultanea. Para el establecimiento de la comunicación se utilizan tres hilos de conexión:

• Serial Data Out (SDO): Salida de datos Serie RB2/SDO/RX/DT • Serial Data In (SDI); Entrada de datos Serie RB1/SDI/SDA • Serial Clock (SCK), Reloj de Sincronización RB4/SCK/SCL

Adicionalmente puede utilizarse un cuarto pin trabajando en modo de funcionamiento esclavo.

• Slave Select (/SS): Selección de Esclavo RB5/SS/TX/CK

Page 39: Apuntes PIC16F88

39

Registro SSPSTAT: Registro de estado del puerto Serie (Dirección 94h) R/W-0 R/W-0 R-0 R-0 R-0 R-0 R-0 R-0

SMP CKE D/#A P S R/#W UA BF Bit 7 Bit 0 bit 7: SMP: Fase de datos de entrada SPI Modo Master SPI 1 = Muestra datos de entrada al final del tiempo de salida 0 = Muestra datos de entrada a la mitad del tiempo de salida Modo esclavo SPI SMP debe ser borrado cuando SPI se emplea en modo esclavo Modo I2C Master o Esclavo 1= Deshabilita control de variaciones para velocidad estándar (100 KHz y 1MHz) 0= Habilita control (400KHz) bit 6: CKE: Selección del flanco de reloj SPI SI CKP = 0 1= Dato transmitido en flanco ascendente de SCK 0= Dato transmitido en flanco descendente de SCK SI CKP = 1 1= Dato transmitido en flanco descendente de SCK 0= Dato transmitido en flanco ascendente de SCK Modo I2C Master o Esclavo 1= Niveles de entrada de acuerdo a SMBUS 0= Niveles de entrada conforme a I2C bit 5: D/#A: Bit Datos/Direcciones (solo en modo I2C) 1= Indica el último byte recibido o transmitido es un dato 0= Indica que el último byte recibido o transmitido es una dirección bit 4: P: Bit de Stop (Solo en modo I2C. Ese bit es borrado cuando se deshabilita el módulo SSP, o cuando el último bit Start es detectado, SSPEN es borrado) 1= Indica que se ha detectado un bit de Stop (este bit es "0" en RESET) 0= Bit de Stop no detectado. bit 3: S: Bit de Start (Solo en modo I2C. Este bit es borrado cuando se deshabilita el módulo SSP, o cuando el bit último bit Start es detectado, SSPEN es borrado) 1= Indica que se ha detectado un bit de Start (este bit es "0" en RESET) 0= Bit de Start no detectado Bit 2: R/#W: Bit de información Lectura/Escritura (solo en modo I2C) 1= Lectura 0= Escritura Modo I2C Modo Esclavo 1= Lectura 0= Escritura Modo I2C Modo Master 1= Transmisión en progreso 0= Transmisión no en progreso bit 1 UA: Activación de dirección (sólo en modo I2C 10-bits) 1= Indica que es necesario actualizar la dirección en el registro SSPADD 0= No es necesario actualizar la dirección bit 0 BF: Bit estado de Buffer lleno Receptor (Modo SPI e I2C) 1= Recepción completa, SSPBUF está lleno 0= Recepción no completa, SSPBUF está vacío Transmisor (Modo I2C) 1= Transmisión en progreso, SSPBUF está lleno (no incluye ACK y bit de Stop) 0= Transmisión completa, SSPBUF está vacío (no incluye ACK y bit de Stop)

Page 40: Apuntes PIC16F88

40

Modo de trabajo Al inicializarse el módulo SPI, se necesita configurar varias especificaciones de la configuración. Esto es en los registros SSPSTAT y SSPCON (SSPCON<5:0> y SSPSTAT<7:6>). Pudiéndose seleccionar las distintas modalidades de trabajo:

• Modo Master (donde la señal de reloj SCK será de salida) • Modo Esclavo (donde la señal de reloj SCK será de entrada) • Polaridad del Reloj: (Cambio de estado por flanco ascendente o

descendente de SCK, y su estado de inactivad) • Fase de datos de entrada (es decir, debemos de precisar el

momento en el que se toma la muestra del dato de entrada, que puede ser en la mitad o al final del impulso).

• Selección del flanco del reloj (Transmisión por flanco de bajada o subida de SCK)

• Velocidad de SCK (Solo en modo Master) • Selección del modo Esclavo, si trabajamos de esta forma.

En la Figura 1 se muestra el diagrama de bloques del módulo SSP, donde pueden apreciarse los cuatro pines que intervienen en las comunicaciones. Para habilitar el puerto serie, deben configurarse adecuadamente los bits del registro SSPCON <5:0> y los bit SMP y CKE del registro SSPSTAT <7:6>. Cuando se inicializa el modo SPI es necesario especificar en el registro SSPCON las diferentes opciones de trabajo:

• Modo Master,

donde la señal SCK será salida

• Modo Slave, donde la línea SCK será entrada

• Polaridad de la señal de reloj, flanco ascendente o descendente.

• Velocidad del SCK, evidentemente solo en el modo master.

• Definir el momento en el que se va a tomar la muestra del dato de

Page 41: Apuntes PIC16F88

41

entrada, que puede ser en la mitad o al final del impulso. En el modo de recepción los datos recibidos se introducen en serie en el registro de desplazamiento SSPSR que, una vez haya recibido el octavo bit, pasarán al registro SSBUF en paralelo, poniéndose en ese momento los bits BF (SSPSTAT <0>) y SSPIF (PIR1 <3>) a uno, indicando el primero de ellos que el buffer está lleno y el segundo para indicar que la recepción/transmisión ha finalizado. Si durante la recepción/transmisión se intenta escribir en el registro SSPBUF, la escritura será ignorada y el bit WCOL (SSPCON<7>) se pone a uno para indicar que ha habido "colisión". El bit BF se pone a cero, cuando se procede a leer el registro SSPBUF, lo cual debe realizarse antes de que tenga lugar una nueva recepción. El registro SSPSR no se puede leer o escribir directamente, y solo se puede acceder a él a través del registro SSPBUF. Por lo tanto, por el registro SSPBUF deben pasar forzosamente todos los datos tanto en transmisión como en recepción. En el ejemplo de la tabla 1, se muestra el proceso de carga en modo transmisión.

Conexión típica En la Figura 2 se muestra la conexión entre dos procesadores, donde sólo uno puede actuar como master cada vez. El circuito que trabaja como master (Procesador 1) indica la transferencia de datos con la señal de reloj. Cada bit es desplazado en el registro por cada flanco programado de reloj; en el flanco opuesto es enclavado en el latch. Los dos procesadores deberán programarse con idéntica polaridad de reloj. Los circuitos a conectar por medio de este protocolo pueden ser dos o más periféricos o microcontroladores pero, como se ha comentado, solo uno puede trabajar cada vez como master.

Page 42: Apuntes PIC16F88

42

Registro SSPCON: Registro de control del puerto Serie (Dirección 14h) R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 bit 7 bit 0 Bit 7: WCOL: Bit detector de colisión 1= El registro SSPBUF se ha escrito cuando hay una transmisión en proceso (Se debe borrar por software) 0= No hay colisión bit 6: SSPOV: Bit detector de desbordamiento en recepción En modo SPI 1= Se recibe un nuevo byte cuando el registro SSPBUF aún mantiene los datos anteriores. En caso de rebose, los datos del registro SSPSR serán falsos, sólo puede ocurrir en modo esclavo. Se deberá leer el SSPBUF, aún si sólo se envían datos, para anular el rebose. En modo master el bit no se pone a uno ya que en cada nueva recepción/transmisión es inicializado por la escritura del registro SSPBUF. 0= No hay desbordamiento. En modo I2C 1= Se recibe un nuevo byte cuando el registro SSPBUF aún mantiene los datos anteriores. En modo de transmisión no tiene importancia, en cualquier caso debe borrarse por software. 0= No hay desbordamiento bit 5: SSPEN: Bit de habilitación del módulo SSP (Synchronous Serial Port) En modo SPI 1= Habilita puerto serie y configura SCK, SDO y SDI como patillas del puerto serie. 0= Deshabilita el puerto serie y configura estas patillas como puerto de Entrada/Salida.. En modo I2C 1= Habilita el puerto serie y configura SDA y SCL como patillas del puerto serie 0= Deshabilita el puerto serie y configura estas patillas como puerto de Entrada/Salida. En ambos casos, se deberán configurar como entradas o salidas adecuadamente. bit 4: CKP: Bit de selección de polaridad del reloj En modo SPI 1= Reloj en nivel alto. Transmisión en flancos de bajada, en recepción de subida 0= Reloj en nivel bajo. Transmisión en flancos de subida, en recepción por flancos de bajada. En modo I2C Esclavo (En este modo no se usa como master) Control de desbloqueo de SCK 1= Habilita reloj 0= Mantiene reloj en estado bajo.

Modo master Cuando el microcontrolador se configura como Master, los datos son transmitidos/recibidos cada vez que se escribe en el registro SSPBU. Si el módulo actúa como esclavo, la patilla CLK deberá configurarse como entrada para que la señal, presente en la patilla SDI, se vaya

Page 43: Apuntes PIC16F88

43

desplazando en el registro SSPSR por cada pulso de reloj recibido. El rango programable para el reloj con los bits SSPM3:SSPM0 es de FOSC/4, FOSC/16, FOSC/64 y Timer2 (Salida/2). Esto permite a una frecuencia de reloj máxima (a 20 MHz) de bits de 5MHz. La Figura 3 muestra el cronograma en modo Master. Cuando CKE =1, el dato de SDO es valido si es anterior a un flanco de reloj en SDO. El cambio en la entrada en el ejemplo es en el flanco de reloj de SCK. El cambio en el ejemplo de entrada se depende del estado del bit SMP. El tiempo de la señal corresponde al de carga de los bits recibidos en el registro SSPBUF. En una operación de SLEEP,cuando está configurado como master, todos los módulos de reloj son detenidos por lo que la transición recepción permanecerá congelada hasta que el microcontrolador despierte. Momento en el que el módulo reanudará la transmisión o la recepción. En el modo esclavo, los desplazamientos sobre el registro son asíncronos, lo que permite seguir transmitiendo o recibiendo datos estando el procesador en estado Sleep. El microcontrolador despertará del SLEEP cuando los ocho bits se hayan recibido y, como es obvio, si la interrupción correspondiente está habilitada. Un Reset, deshabilita el módulo MSSP, por lo que si se produce durante una transferencia ésta se dará por finalizada.

Modo slave Como ya se ha comentado, en este modo de trabajo los datos son transmitidos o recibidos con el control de la señal externa de reloj. Cuando el último bit ha sido enclavado, el flag de interrupción SSPIF (PIR<3>) se pondrá a uno. En este caso, como la fuente de reloj es externa, la patilla SCK deberá programarse como entrada. El pin #SS permite sincronizar el modo esclavo. Cuando este modo es habilitado (SSPCON<3:0> = 0110) el pin #SSP se comporta como una entrada, por lo que habrá que programarla como tal (TRISA< 5> =1). Forzando esta patilla a nivel alto, el módulo SPI se Resetea y el bit SSPEN se borra. Es posible realizar transmisiones y recepciones con sólo dos hilos de conexión; en este caso las patillas SDI y SDO pueden unirse eliminando así la tercera conexión. Cuando la pastilla SDI necesita operar como receptora, la patilla SDO deberá ser configurada como una nueva entrada, de este modo, se deshabilita la transmisión por esta última y no crea conflictos con los datos de la SDI.

Page 44: Apuntes PIC16F88

44

Registros Asociados con una operación SPI

MÓDULO COMPARADOR

El módulo comparador contiene dos comparadores analógicos. Las entradas de los comparadores están multiplexados con los pines RA0 a RA3, mientras que las salidas son multiplexados por los pines RA3 y RA4. El on-chip de voltaje de referencia (sección 14.0 " Módulo comparador de tensión de referencia ") también puede ser un aporte para el comparador. El registro CMCON (Registro 13-1) controla los multiplexores de entrada y salida del comparador. Un diagrama de bloque de las distintas configuraciones de comparador se muestra en la Figura 13-1.

Page 45: Apuntes PIC16F88

45

bit 7 C2OUT: Comparator 2 Output bit Cuándo C2INV = 0: 1 = C2 VIN+ > C2 VIN- 0 = C2 VIN+ < C2 VIN Cuándo C2INV = 1: 1 = C2 VIN+ < C2 VIN- 0 = C2 VIN+ > C2 VINbit

6 C1OUT: Comparator 1 Output bit Cuándo C1INV = 0: 1 = C1 VIN+ > C1 VIN- 0 = C1 VIN+ < C1 VIN Cuándo C1INV = 1: 1 = C1 VIN+ < C1 VIN- 0 = C1 VIN+ > C1 VINbit

5 C2INV: Comparator 2 Output Inversion bit 1 = C2 output inverted 0 = C2 output not inverted

bit 4 C1INV: Comparator 1 Output Inversion bit 1 = C1 output inverted 0 = C1 output not inverted

bit 3 CIS: Comparator Input Switch bit Cuándo CM2:CM0 = 001: 1 = C1 VIN- connects to RA3 0 = C1 VIN- connects to RA0 Cuándo CM2:CM0 = 010: 1 = C1 VIN- connects to RA3 C2 VIN- connects to RA2 0 = C1 VIN- connects to RA0

C2 VIN- connects to RA1

bit 2-0 CM<2:0>: Comparator Mode bits

Configuración del comparador Hay ocho modos de operación para los comparadores. El registro CMCON se utiliza para seleccionar estos modos. La figura 13-1 muestra los ocho modos posibles. El registro TRISA para el tratamiento de la dirección de los datos se configura para cada modo. Si el modo del comparador se cambia, el nivel de salida de la comparador no es válido el retardo en el modo de cambio se muestra en Sección 18.0 de data sheet "Características eléctricas". Nota: Las interrupciones del comparador deben ser desactivadas durante un cambio de modo del comparador, sino puede ocurrir una falsa interrupción.

Page 46: Apuntes PIC16F88

46

Operación del comparador Un único elemento comparador se muestra en la Figura 13-2, junto con la relación entre los niveles de entrada analógica y la salida digital. Cuando la entrada analógica en VIN + es menos que la entrada analógica VIN-, la salida de la comparador digital es un nivel bajo. Cuando la entrada analógica en VIN + es mayor que la entrada analógica VIN-, la salida digital del comparador es un nivel alto. Las zonas sombreadas de la salida de la comparador en la figura 13-2 representan la incertidumbre debido a las compensaciones de entrada y el tiempo de respuesta.

Page 47: Apuntes PIC16F88

47

Comparador de referencia Se pueden utilizar señal de referencia externa o interna dependiendo del modo de operación del comparador. La señal analógica presente en VIN-se compara con la señal VIN + y la salida digital del comparador se ajustará en consecuencia (Figura 13-2).

Señal de referencia externa Cuando se utiliza voltaje de referencia externo, el módulo de comparador puede ser configurado para que el comparador opere de la misma, o de diferentes fuentes referencia. Sin embargo, el umbral del detector de aplicaciones requiere la misma referencia. La señal de referencia debe estar entre VSS y VDD y puede ser aplicado a cualquiera de los pines de la base del comparador.

Señal interna de referencia El módulo también permite comparar voltaje de referencia generados internamente para los comparadores. La sección 14.0 " Módulo comparador de voltaje de referencia "contiene una descripción detallada del módulo comparador de voltaje de referencia que ofrece esta señal. La señal de referencia interna es cuando la comparador se utiliza en modo CM <2:0> = 010 (Figura 13-1). En este modo, la tensión interna de referencia se aplica al terminal VIN + de ambos comparadores.

Page 48: Apuntes PIC16F88

48

Tiempo de Respuesta del comparador Tiempo de respuesta es el tiempo mínimo, después de seleccionar una nueva tensión de referencia de la fuente de entrada, antes de que la comparador de salida tenga un nivel válido. Si la referencia interna se cambia, el plazo máximo del voltaje interior de referencia debe ser considerado cuando se utiliza las salidas del comparador. En caso contrario, el máximo retraso de la comparador debe usarse (sección 18.0 "Características eléctricas").

Salidas de los Comparadores En el comparador los resultados se leen a través del registro CMCON Estos bits son de sólo lectura. Las salidas del comparador también pueden ser directamente las salidas RA3 y RA4. Cuando están activados los multiplexores, la salida de los pines RA3 y RA4 cambiará y la salida de cada pin no estará sincronizada con la salida del comparador. La incertidumbre de cada uno de los elementos del comparador está relacionada con la entrada de voltaje y compensa el tiempo de respuesta que figura en las especificaciones. La figura 13-3 muestra el diagrama de bloques de la salida del comparador. En este modo se activan los pines RA3 y RA4 como salidas en el registro TRISA. La polaridad de la salida del comparador se puede cambiar utilizando los bits C2INV y C1INV (CMCON <5:4>). Nota 1: Al leer el registro del puerto, todos los pines configurados como entradas analógicas se leerán como '0 '. Los pines configurado como entradas digitales se convertirán una entrada analógica, de acuerdo con la especificación de entrada del Disparador Schmitt. 2: Los niveles analógicos, sobre todo los definidos como entrada digital, debido al buffer de entrada consumen más corriente de la que se especifica

Page 49: Apuntes PIC16F88

49

Interrupciones del Comparador La bandera de interrupción de comparación se pone a “1” cada vez que se produce un cambio en el valor de salida de cualquiera de los comparadores. Es necesario leer la información acerca del estado de los bits de salida por software leyendo desde CMCON <7:6>, para determinar el cambio que se produjo. El CMIF bit (registro PIR2) es la bandera de interrupción del comparador. El CMIF debe ponerse a cero. También se puede escribir un “1” en este registro y se iniciaría un simulacro de interrupción. Los bits CMIE (registro PIE2) y PEIE (registro INTCON) deben estar activados para permitir la interrupción. Además, el GIE también debe estar activado. Si alguno de estos bits está a cero, la interrupción no está habilitada, aunque el bit CMIF produzca una condición de interrupción. Nota: Si un cambio en el registro CMCON (C1OUT o C2OUT) debe ocurrir cuando un operación de lectura se está ejecutando (inicio de el ciclo de Q2), entonces la CMIF (PIR2 registro) de interrupción no podrá obtener pabellón conjunto. El usuario, en el servicio de rutina de interrupciones, puede borrar la interrupción de la siguiente manera: a) Cualquier lectura o escritura de CMCON pone fin a la condición de desajuste.

Page 50: Apuntes PIC16F88

50

b) Borrando la bandera CMIF. Un cambio de condición produce un “1” en CMIF. La lectura de CMCON pone fin a la condición de desajuste y permite borrar la bandera CMIF.

El Comparador en el modo SLEEP Cuando el comparador se activa y el dispositivo se pone en modo de espera, la comparación sigue siendo activa y la interrupción está funcional, si está habilitada. Esta interrupción hace que el dispositivo despierte (wake-up) del modo Sleep. Cada uno de los comparadores consume más corriente, como se muestra en las especificaciones del comparador. Para reducir al mínimo el consumo de energía en el modo Sleep, es preciso apagar la comparación, CM <2:0> = 111, antes de entrar en el modo de espera. Si el dispositivo despierta del sueño, el contenido del registro CMCON no se ve afectado.

Efectos del Reset Al resetear el dispositivo en el registro CMCON se desactiva el modo de comparación, CM <2:0> = 111.

Consideraciones de Conexión de las Entradas Analógicas Un circuito simplificado para una entrada analógica se muestra en la figura 13-4. Dado que los pines analógicos están conectados a una salida digital, que tiene dos diodos. La entrada analógica, por lo tanto, debe estar entre VSS y VDD. Si el voltaje de entrada se desvía de este margen en más de 0,6 V en cualquier dirección, uno de los diodos conduce y se produce un “corto”. El máximo de impedancia de la fuente ha de ser de 10 kΩ recomendado para las fuentes analógicas. Los componentes externos conectados a la entrada analógica, tales como un condensador o un diodo Zener, deben de tener muy poca corriente de fuga.

Page 51: Apuntes PIC16F88

51

Registros Asociados con el Módulo Comparador

Módulo Comparador De Tensión De Referencia El comparador de voltaje de referencia es un divisor de tensión de 16 resistencias que proporciona una red fija de tensión de referencia cuando el comparador está configurado en modo “010”. Un registro programable controla las funciones del generador referencia. Los bits del registro CVRCON son los representados a continuación.

En la figura 14-1 se muestra, las resistencias del divisor de tensión que ofrecen dos rangos de valores uno para ahorrar energía cuando el comparador de referencia no se utiliza. El comparador de referencia de tensión de alimentación (también denominado CVRSRC) viene directamente de VDD. Cabe señalar, sin embargo, que la tensión en la parte superior de la escalera es CVRSRC - VSAT, VSAT es la saturación de la tensión de alimentación del transistor

Page 52: Apuntes PIC16F88

52

conmutador. Esta referencia sólo será precisa con los valores de CVRSRC y VSAT. La salida del generador de referencia puede ser conectado a la clavija RA2/AN2/CVREF/VREF- (VREF- es disponible sólo en el PIC16F88). Esto puede ser utilizado como un simple D / A de la función por parte del usuario en caso de utilizar una muy alta impedancia de carga. El propósito principal de esta función es proporcionar una ruta de prueba para testear la función de referencia del generador.

REGISTROS ASSOCIADOS CON EL COMPARADOR DE VOLTAJE DE REFERENCIA

Page 53: Apuntes PIC16F88

53

TRANSMISOR RECEPTOR DIRECCIONABLE UNIVERSAL SÍNCRONO ASYNCHRONOUS (AUSART) El módulo transmisor (AUSART)es otro de los dos puertos serie de los que dispone esta familia de microcontroladores. Los módulos de I/O. (AUSART también se conocen como Serial Communications o interface o SCI). El AUSART puede configurarse como asíncrono full dúplex que puede comunicar con los dispositivos periféricos como terminales de CRT y los ordenadores personales, o puede configurarse como un sistema síncrono half duplex que puede comunicar con otros microcontroladores, con dispositivos periféricos como A/D o D/A circuitos integrados, EEPROMs serie etc. El USART puede configurarse en los modos siguientes:

• Asíncrono( Full duplex ) • Síncrono-Master (half duplex) • Síncrono-Slave (half duplex)

Poniendo a “1” el bit SPEN (RCSTA <7>) y los bits TRISB <5,2> se disponen como salida y entrada respectivamente, con el fin de configurar los pines RB5/SS/TX/CK y RB2/SDO/RX/DT, como AUSART. El módulo AUSART también tiene un multi-procesador con capacidad de comunicación, utilizando la dirección de detección 9 bits.

Page 54: Apuntes PIC16F88

54

Page 55: Apuntes PIC16F88

55

55

55

Page 56: Apuntes PIC16F88

56

Generador de baudios del AUSART (BRG). En el protocolo asíncrono RS-232 la frecuencia en baudios a la que se realiza la transferencia se debe efectuar a un valor normalizado: 330, 600,1.200, 2400, 4800, 9600, 19.200, 38.400, etc. Para generar esta frecuencia, el USART dispone de un generador de frecuencia en Baudios, BRG, cuyo valor se controla por el contenido del registro SPBRG. Además del valor X cargado en el registro SPBRG. La frecuencia en baudios del generador depende del bit BRGH (TXSTA<2>). Si BRGH=0 se trabaja a baja velocidad y si BRGH=1 se trabaja a alta velocidad. Según este bit se obtendrá el valor de una constante K necesaria para determinar la frecuencia de funcionamiento. Este generador sirve tanto para el modo síncrono como el asíncrono y consiste de un contador/divisor de frecuencia de 8 bits controlado por el registro SPBRG (99H). De tal manera que la frecuencia de transmisión se calcula de acuerdo a la siguiente tabla:

AUSART Y FUNCIONAMIENTO INTRC El PIC16F87/88 tiene un INTRC de 8 MHz que se puede utilizar como reloj del sistema, eliminando así la necesidad de componentes externos para proporcionar la fuente de reloj.Cuando el INTRC utiliza el reloj del sistema, el módulo AUSART también utilizará el INTRC como su sistema de reloj. La tabla 11-1 muestra algunos de las frecuencias INTRC que se pueden utilizar para generar la velocidad de transmisión del módulo AUSART. MODO DE FUNCIONAMIENTO DE BAJA POTENCIA El reloj del sistema se utiliza para generar la tasa de transmisión deseada, sin embargo, cuando un modo de bajo consumo es introducido, el reloj fuente de baja potencia puede ejercer su actividad a diferentes frecuencias que en la ejecución de plena potencia. En el modo de Sleep, sin relojes presentes. Esto puede requerir que el valor en SPBRG sea ajustado. MUESTREO Los datos sobre el pin RB2/SDO/RX/DT se muestrean tres veces por si una mayoría detectó el circuito para determinar si un nivel alto o bajo está presente en el pin RX.

Page 57: Apuntes PIC16F88

57

Page 58: Apuntes PIC16F88

58

El AUSART en modo asíncrono Como ya se ha dicho, en este modo de comunicaciones se emplea una configuración estándar de un bit de Start, ocho o nueve bits de datos, y un bit de Stop. Este modo de trabajo se detiene durante la función Sleep. Aunque el AUSART tiene funciones independientes para la transmisión y recepción, los formatos de datos y de velocidad de transmisión es igual para los dos casos. El generador de baudios produce siempre las señales de reloj x16 ó x64 dependiendo de BRGH (TXSTA<2>) para el desplazamiento de los bits. El bit de paridad no está soportado por el hardware, pero se puede implementar por software empleando para ello el noveno bit de datos. La selección del modo asíncrono se realiza poniendo a cero el bit SYNC (TXSTA<4>). El modulo asíncrono del USART se consigue con la combinación de importantes elementos:

• El generador de baudios • El circuito de muestreo • Transmisor asíncrono • Receptor asíncrono

EL AUSART TRANSMISIÓN ASINCRONA Para realizar una transmisión de datos, el registro de desplazamiento TSR obtiene los datos del registro (buffer) de lectura/escritura TXREG. El registro de desplazamiento TSR no carga el bit de Stop hasta que se hayan transmitido los datos cargados. Una vez que se haya enviado este bit, el registro será cargado con los nuevos datos (si están disponibles), en este caso el bit TXIF (PIR1 <4>) se pone a uno, y se genera una interrupción si está habilitada (PIE1 <4>).

Page 59: Apuntes PIC16F88

59

Los pasos necesarios para realizar una transmisión asíncrona son los siguientes:

• Inicializar el registro SPBRG con el valor apropiado según los cálculos realizados. Si se desea el margen alto se pondrá a uno el bit BRGH.

• Habilitar el puerto asíncrono borrando el bit SYN y poniendo a uno el SPEN.

• Habilitar la interrupción (si se desea) poniendo a uno el bit TXIE.

• Poner a cero o a uno el bit TX9 (8 ó 9 bits). • Habilitar la transmisión poniendo a uno el bit TXEN, el cual

pondrá a uno el bit TXIF. • Si se han seleccionado 9 bits se deben poner el noveno en el bit

TX9D. • Cargar el dato en el registro TXREG (comenzar la transmisión). • Si se utiliza interrupciones, asegúrese de que GIE y PEIE • (Bits 7 y 6) del registro INTCON están activados.

EL AUSART EN MODO RECEPCIÓN ASÍNCRONA En el modo de recepción, los datos son recibidos por la patilla RB2/SDO/RX/DT y se introducen en serie en el registro RSR; después de recibir el bit de Stop los datos acumulados en este registro se cargan en el de datos RCREG (si está vacío). Cuando la transferencia se ha completado, el bit RCIF (PIR1 <5>) pone a uno. La interrupción puede habilitarse o deshabilitarse colocando a uno o a cero, respectivamente, el bit RCIE (PIE1 <5>). El bit RCIF se borra cuando el registro RCREG se ha leído (se "vacía" el registro). Para configurar el puerto como receptor hay que seguir los siguientes pasos:

• Inicializar el registro SPBRG con el valor apropiado según los cálculos realizados. Si se desea el margen alto se pondrá a uno el bit BRGH.

• Habilitar el puerto asíncrono borrando el bit SYN y poniendo a uno el SPEN.

• Habilitar la interrupción (si se desea) poniendo a uno el bit RCIE.

Page 60: Apuntes PIC16F88

60

• Poner a uno el bit RX9 para habilitar 9 bits de recepción. • Habilitar la recepción poniendo a uno el bit CREN. • El flag RCIF subirá a uno cuando se complete la recepción. • Se ocasionará una interrupción si está habilitado el bit RCIE. • Leer el registro RCSTA, cargar el noveno bit (si está habilitado)

y comprobar si ha ocurrido un error durante la recepción. • Leer el octavo bit recibido y dar lectura al registro RCREG para

conocer si el dispositivo se ha direccionado. • Si ha ocurrido un error borrarlo poniendo a cero el bit CREN. • Si se utiliza interrupciones, active los bits GIE y PEIE (Bits 7 y

6) del registro INTCON. Si el dispositivo ha sido direccionado, borrar el bit ADDEN para permitir que los datos puedan leerse del buffer receptor.

Modo síncrono Este modo de trabajo tiene dos posibles formas de configuración, como master y como esclavo. En el modo master la transmisión y recepción no tienen lugar al mismo tiempo, cuando se transmite un dato, la recepción es inhibida y viceversa. En la transmisión el

Page 61: Apuntes PIC16F88

61

registro de desplazamiento, TSR (Transmit Shift Register), obtiene los datos del registro de lectura/escritura TXREG, pero éste no se carga hasta que el último bit de la anterior carga no haya sido transmitido; cuando esto suceda el TSR se vuelve a cargar con el nuevo dato del registro TXREG (si está disponible) éste se vacía y se genera una interrupción (si está habilitada por el bit TXIE, PIE1<4>. La transmisión se habilita por el bit TXEN del registro TXSTA<5>, si se borra durante una transmisión, ésta será abortada y reseteado el transmisor. Para iniciar una transmisión es necesario seguir los siguientes pasos:

• Inicializar el registro SPBRG con el valor apropiado calculado. • Habilitar el puerto master asíncrono colocando a uno los bits

SYN, SPEN y CSRC. • Si se desea emplear la interrupción, habilitarla poniendo a uno

el bit TXIE. • Si se desea una transmisión de nueve bits, el noveno se cargar

en el bit TX9. • Habilitar la transmisión poniendo a uno el bit TXEN. • Si se ha habilitado la transmisión de 9 bits, el noveno se cargar

en el registro TX9D. • La transmisión se inicia al cargar los datos en el registro

TXREG. EL AUSART EN MODO MASTER SÍNCRONO Para seleccionar el modo receptor master hay que poner a uno el bit SREN (RCSTA<5> o habilitar el CREN (RCSTA<4>). El dato es tomado de la patilla RB2/SDO/RX/DT por cada flanco de caída del reloj , si el bit SREN está a uno, sólo se recibir una palabra, pero si se borra el bit CREN la recepción ser continua. Después del último impulso de reloj, el dato recibido en el registro de desplazamiento RSR será transferido al RCREG (si está vacío). Una vez haya terminado la recepción se origina una interrupción si ésta está habilitada, RCIE (PIE1 <5>). Los pasos a seguir para iniciar la recepción en modo master son las siguientes: �Inicializar el registro SPBRG con el valor apropiado de baudios. �Habilitar el puerto master asíncrono colocando a uno los bits SYN, SPEN y CSRC. �Asegurarse de que los bits CREN y SREN están borrados. �Si se desea emplear la interrupción habilitarla poniendo a uno el bit RCIE. �Si se desean nueve bits poner a uno el bit RX9. �Si sólo se desea una recepción única, poner a uno el bit SREN; para recepción continua poner a uno el bit CREN. �El flag de interrupción RCIF se pone a uno cuando la recepción haya finalizado si está habilitada por el bit RCIE. �Leer el registro RCSTA y cargar el noveno bit (si está habilitado) y comprobar si ha ocurrido un error durante la recepción. �Leer el octavo bit recibido y dar lectura al registro RCREG.

Page 62: Apuntes PIC16F88

62

�Si ha ocurrido un error borrarlo poniendo a cero el bit CREN.

MODO ESCLAVO SÍNCRONO Este modo de trabajo difiere del modo master, pues la señal de reloj de desplazamientos es proporcionada externamente por la patilla RB5/SS/TX/CK en lugar de ser generada internamente, esto permite que se puedan transferir o recibir datos cuando el dispositivo está en el modo Sleep. Las operaciones de transmisión son idénticas al modo Master, excepto en el caso del modo Sleep. Si se escriben dos palabras en el registro TXREG y después se ejecuta la instrucción Sleep, ocurrirá lo siguiente:

• La primera palabra será inmediatamente transferida al registro TSR y transmitida.

• La segunda palabra permanece en el registro TXREG. • El bit TXIF no se pondrá a uno. • Cuando la primera palabra haya salido del registro TSR, la

segunda palabra, que permanece en el registro TXREG, se envía al TSR y el flag TXIF se pone a uno.

• Si está habilitado el bit TXIF la interrupción despierta al microcontrolador de modo Sleep y el programa salta a la dirección del vector de interrupciones (0004 hex.).

Page 63: Apuntes PIC16F88

63

Control del AUSART conectado al puerto serie del ordenador Para poder conectar las líneas del PIC16F88 que entrega niveles TTL con el puerto serie RS-232 que son compatibles, es necesario utilizar un circuito interface que traduzca los datos del microcontrolador al puerto serie del ordenador y viceversa, nosotros hemos utilizado un MAX232. El circuito utilizado es el que se muestra en la Figura 10.. Además del circuito, necesitaremos para comprobar el funcionamiento un programa de comunicaciones como el HiperTerminal de Windows y un cable serie en conexión de MODEM nulo, que deberá de conectarse tal y como se muestra en la Figura 11. EL HyperTerminal es un programa general de comunicaciones de Windows, que resulta válido para conectarse con otros ordenadores o dispositivos. Hay programas de comunicaciones mucho más potentes que éste. Sin embargo, HyperTerminal se caracteriza por su facilidad de uso y su fácil adquisición ya que viene integrado dentro de Windows. Puede ocurrir que el programa HyperTerminal no esté cargado, para ello hay que seguir el mismo procedimiento que para cualquier otro programa de Windows, ejecutando en el siguiente orden: Panel de Control > Agregar o Quitar programas > Instalación de Windows > Comunicaciones y activar la casilla correspondiente a HyperTerminal. Para ejecutar HyperTerminal hay que seguir los siguientes pasos: 1. Activar Inicio > Programas > Accesorios > Comunicaciones y seleccionar HyperTerminal. Se advierte que no se trata de un

Page 64: Apuntes PIC16F88

64

programa, sino de una carpeta cuyo contenido es un único programa denominada Hypertrm. Cada vez que se ejecuta el programa Hypertrm se le pide al usuario la información suficiente para crear en la carpeta HyperTerminal una nueva conexión, es decir, un lugar de destino con el que conectarse. 2. Ejecutar el programa Hypertrm para crear una nueva conexión, se le pregunta el nombre que asignará a la conexión, teclear por ejemplo "PIC16F88" y elegir un icono con el que se quiera representar la conexión, figura 12. 3.En la siguiente pantalla Conecta con elegir la opción Conectar usando: Directo a Com2, figura 13. Se va a utilizar el puerto serie Com2 para comunicar el ordenador y el microcontrolador. También se puede elegir el COM1. 4. Aparece una pantalla con las Propiedades de COM. Seleccionar las apropiadas para el sistema utilizado. Para nuestros ejemplos utilizamos las opciones que se muestran en la figura 14. 5. A continuación aparece la pantalla de trabajo tal como la mostrada en la figura 15. Para conectar el ordenador y el microcontrolador a través del puerto serie COM 2, basta con activar la opción "Llama" (o icono de teléfono colgado) y para desconectar hay que activar opción "Desconecta" (o icono de teléfono descolgado. Una vez configurada una conexión, para comenzar la comunicación simplemente ha de ejecutar el icono de la conexión previamente configurada tal como se muestra en la figura 16.

Figura 10.- Circuito de aplicación para comprobar el funcionamiento del AUSARTdel PIC16F88 y el puerto serie del ordenador.

RXD

RTS TXD

CTS

VT1

VTERM

X1 4Mhz

C1

1nF C2

1nF

R9 10k

RA7/OSC1/CLKIN16

RB0/INT/CCP1 6RB1/SDI/SDA 7

RB2/SDO/RX/DT 8RB3/CCP1 9

RB4/SCK/SCL 10 RB5/SS/TX/CK 11

RB6/AN5/T1OSO/T1CKI 12 RB7/AN6/T1OSI 13

RA0/AN0 17 RA1/AN1 18

RA2/AN2/CVREF/VREF- 1RA3/AN3/C1OUT/VREF+ 2RA4/AN4/T0CKI/C2OUT 3

RA6/OSC2/CLKOUT15 RA5/MCLR4

U1

PIC16F88

ERROR

TXD3

RXD2

CTS8

RTS7

DSR6

DTR4

DCD1

RI9

P1

COMPIM

Page 65: Apuntes PIC16F88

65

CIRCUITO DE VIGILANCIA (WDT)

Para los dispositivos PIC16F87/88, el WDT se ha modificado con respecto a anteriores dispositivos PIC16. El nuevo código de WDT es funcionalmente compatible con los anteriores módulos WDT pero permite al usuario tener un valor scaler para el TMR0 y WDT al mismo tiempo. Además, el tiempo de espera del WDT puede extenderse a 268 segundos, usando el prescaler con el postscaler cuando el PSA está ajustado a "1".

WDT Oscilador El WDT deriva de la base de tiempo a partir de INTRC 31,25 kHz. El valor de WDTCON es' --- 0 1000 'en todos las formas de Reseteo. Esto da una base de tiempo nominal de 16,38 ms, que es compatible con la base de tiempo generada con las anteriores versiones de microcontroladores PIC16. Nota: Cuando esta activo el OST, el WDT se mantiene en Reset porque el oscilador del WDT es utilizado por el OST para realizar el retardo del oscilador. Cuando el OST termina el WDT comienza el contaje (si está activado). Se ha añadido un nuevo prescaler a la ruta de acceso entre la RC interna y el multiplexor utilizado para seleccionar el camino para el WDT. Este prescaler es de 16 bits y pueden ser programado para

Page 66: Apuntes PIC16F88

66

dividir la red RC interna de 32 a 65536, dando un margen para la base de tiempo de 1 ms a 2.097s.

WDT Control El bit WDTEN se encuentra en la configuración de Word 1 y cuando este bit está activado, la WDT se ejecuta de forma continua. El bit SWDTEN está en el registro WDTCON. Cuando el bit WDTEN en el registro de configuración de Word 1 se activa, el bit SWDTEN no tiene ningún efecto. Si WDTEN es cero, entonces el bit SWDTEN puede ser usado para activar y desactivar la WDT. Los bits PSA y PS <2:0> (registro OPTION_REG) tienen la misma función que en las versiones anteriores de la familia de microcontroladores PIC16.

Bit de estado de PRESCALER/POSTSCALER Condiciones Prescaler Postscaler (PSA = 1)

WDTEN = 0

Borrado

Borrado Comando CLRWDT Oscilador no detectado Salir del sueño + = Reloj del sistema T1OSC, EXTRC, INTRC, ECIO Salir del sueño + = Reloj del sistema XT, HS, LP Resueltos al final de la OST

Borrados al final del OST

Borrados al final del OST

Page 67: Apuntes PIC16F88

67

Nota 1: Si en la palabra de configuración el bit WDTEN = 1, entonces WDT está siempre activado, independientemente del bit SWDTEN. Si el bit WDTEN = 0, entonces es posible activar / desactivar WDT con el bit SWDTEN.

Temporizador de puesta en marcha del oscilador (OST)

El temporizador de puesta en marcha del oscilador (OST) ofrece a 1024 ciclos del oscilador (OSC1 entrada) inmediatamente después del retardo PWRT (si está activado). Esto ayuda a asegurar que el oscilador de cristal o resonador este estabilizado. El OST sólo se requiere para XT, LP y HS y sólo en los modos de Power-on Reset o al despertar del modo Sleep.

Page 68: Apuntes PIC16F88

68

Interrupciones El PIC16F87/88 tiene hasta 12 fuentes de interrupción. Nota: Las banderas de las interrupciones se activan independientemente de la situación de sus bits de activación correspondiente o el bit GIE.

Lógica de las interrupciones

Salvando los registros STATUS, W y PCLATH en la RAM MOVWF W_TEMP ; Copia W al registro TEMP SWAPF STATUS,W ; Swap status se guarda en W CLRF STATUS ; banco 0, independientemente del banco

; actual, borra IRP,RP1,RP0. MOVWF STATUS_TEMP ; Salva status en el banco cero

; en el registro STATUS_TEMP MOVF PCLATH,W ; Sólo es necesario si se utiliza page 1 MOVWF PCLATH_TEMP ; Salva PCLATH en W CLRF PCLATH ; Página cero, independientemente de la

; página actual : :(ISR) ;(Inserte su código aquí) : MOVF PCLATH_TEMP,W ; Restaura PCLATH MOVWF PCLATH ; Mueve W a PCLATH SWAPF STATUS_TEMP,W ; Swap del registro STATUS_TEMP en W

;(banco a su estado original) MOVWF STATUS ; Mueve W al registro STATUS SWAPF W_TEMP,F ; Swap del registro W_TEMP SWAPF W_TEMP,W ; Swap del registro W_TEMP en W