Sei sulla pagina 1di 68

1

PIC



16F88











CIFP POLITECNICO DE SANTIAGO DE COMPOSTELA


2
PIC16F88. Caractersticas ........................................................... 3
Bits de Configuracin ................................................................. 4
Organizacin 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
Caractersticas: ................................................................. 25
Convertidor A/D ...................................................................... 27
Caractersticas ................................................................ 27
Registros de control ........................................................ 27
Operacin del ADC ................................................................ 28
Configurar el mdulo A/D (secuencia) ................................ 28
Configurar la interrupcin A/D (opcional) ............................ 28
Adquisicin de un dato ..................................................... 28
Tiempos en la conversin A/D ........................................... 30
MODULO CCP CAPTURA /COMPARACIN / PWM (Modulacin de
anchura de pulsos) .................................................................. 31
Mdulo de Captura .................................................................. 31
Configuracin del pin CCP ................................................... 32
Software de Interrupcin .................................................... 33
CCP Preescaler .................................................................. 33
Modo Comparacin .................................................................. 33
Configuracin del pin CCP ................................................... 34
Modo de trabajo del TIMER1 ................................................ 34
Modo especial de disparo .................................................... 34
Ejemplo de manejo del comparador ..................................... 35
Modo de Modulacin de Anchura de Pulsos (PWM) ....................... 35
Periodo PWM ..................................................................... 36
MDULO DE COMUNICACIONES SERIE SNCRONA: MSSP ............. 38
Modo SPI ............................................................................ 38
Modo de trabajo ................................................................ 40
Conexin tpica .................................................................. 41
Modo master ..................................................................... 42
Modo slave ....................................................................... 43
MDULO COMPARADOR ........................................................... 44
Configuracin del comparador ................................................ 45
Operacin del comparador ..................................................... 46
Comparador de referencia ..................................................... 47
3
Seal de referencia externa ................................................ 47
Seal 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 Conexin de las Entradas Analgicas ........... 50
Registros Asociados con el Mdulo Comparador ........................ 51
Mdulo Comparador De Tensin De Referencia ............................ 51
TRANSMISOR RECEPTOR DIRECCIONABLE UNIVERSAL SNCRONO
ASYNCHRONOUS (AUSART) ...................................................... 53
Generador de baudios del AUSART (BRG). ............................. 56
El AUSART en modo asncrono ............................................. 58
Modo sncrono ................................................................... 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. Caractersticas

Osciladores
Osciladores a cristal: LP, XT y HS hasta 20Mhz
Oscilador externo hasta 20Mhz
Oscilador interno: 31Khz 8Mhz
Perifricos
Mdulo PWM/CCP
o CCP (captura/comparador) -> 16 bits
o PWM (modulacin por pulsos) -> 10 bits
ADC 10bits 7 canales
SSP (puerto serie sncrono) -> SPI e I2C
USART
Comparador analgico dual
Caractersticas de bajo consumo (tecnologa nanoWatt)


4







Bits de Configuracin


; Bi t s de Conf i gur aci n ( 15. 0 SPECI AL FEATURES OF THE CPU
; Pagi na 131 del manual PI C16F87- 88 30487c
; _CONFI G1
; _CONFI G2
; Conf i gur at i on Byt e 1 Opt i ons
; _CP_ALL ; Al l Pr ogr amMemor y Pr ot ect ed
; _CP_OFF ; No Code Pr ot ect i on
; _CCP1_RB0 CCP1 f unct i on on RB0
; _CCP1_RB3 CCP1 f unct i on on RB3
; _DEBUG_OFF I n- Ci r cui t Debugger di sabl ed, RB6 and RB7 ar e gener al
pur pose I / O pi ns
; _DEBUG; _ON I n- Ci r cui t Debugger enabl ed, RB6 and RB7 ar e
dedi cat ed t o t he debugger
; _WRT_PROTECT; _OFF ; No pr ogr ammemor y wr i t e pr ot ect i on
; _WRT_PROTECT_256 ; Fi r st 256 pr ogr ammemor y pr ot ect ed
; _WRT_PROTECT_2048 ; Fi r st 2048 pr ogr ammemor y pr ot ect ed
; _WRT_PROTECT_ALL ; Al l of pr ogr ammemor y pr ot ect ed
5
; _CPD_ON Dat a EE Memor y Code Pr ot ect i on Enabl ed
; _CPD_OFF Dat a EE Memor y Code Pr ot ect i on Di sabl ed
; _LVP_ON Low- Vol t age Pr ogr ammi ng Enabl e Enabl ed
; _LVP_OFF Low- Vol t age Pr ogr ammi ng Enabl e Di sabl ed
; _BODEN_ON Br own Out Reset Det ec Enabl ed
; _BODEN_OFF Br own Out Reset Det ec Di sabl ed
; _MCLR_ON Pi n f unct i on i s MCLR
; _MCLR_OFF Pi n f unct i on i s di gi t al I nput , MCLR i nt er nal l y t i ed
t o VDD
; _PWRTE_OFF 72 msec. Ti me Up Del ay Of f
; _PWRTE_ON 72 msec. Ti me Up Del ay On
; _WDT_ON Wat chdog Ti mer Enabl e bi t On
; _WDT_OFF Wat chdog Ti mer Enabl e bi t Of f
; _EXTRC_CLKOUT
; _EXTRC_I O ; Habi l i t a el Cl ock Ext er no -
; _I NTRC_CLKOUT
; _I NTRC_I O ; Habi l i t a el Osci l ador I nt er no - Pi nes RA6 y RA7
act i vados
; _EXTCLK
; _HS_OSC HS osci l l at or
; _XT_OSC XT osci l l at or
; _LP_OSC LP osci l l at or
; Conf i gur at i on Byt e 2 Opt i ons
; _I ESO_ON I nt er nal Ext er nal Swi t chover mode enabl ed
; _I ESO_OFF I nt er nal Ext er nal Swi t chover mode di sabl ed
; _FCMEN_ON Fai l - Saf e Cl ock Moni t or enabl ed
; _FCMEN_OFF Fai l - Saf e Cl ock Moni t or di sabl ed


l i st p=16f 88, r =dec ; especi f i caci ones del mi cr o
#i ncl ude <p16f 88. i nc> ; i ncl usi on de ar chi vos y r egi st r os

__CONFI G _CONFI G1, _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON &
_MCLR_ON & _LVP_ON & _I NTRC_I O
__CONFI G _CONFI G2, _I ESO_OFF & _FCMEN_OFF





Organizacin de la memoria

4K de memoria de programa (FLASH) organizada en 2 pginas
(accesible mediante PCLATH)

6


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




7


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 aplicacin, 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 ningn
efecto, y siempre se lee 1.
4: slo en el dispositivo 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 aplicacin, 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 ningn
efecto, y siempre se lee 1.
4: slo en el dispositivo 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 aplicacin, 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 ningn
efecto, y siempre se lee 1.
4: slo en el dispositivo PIC16F88.



11
Registros de control iguales que PIC16F84




12
























13
Registros de control distintos que PIC16F84



14




15




















EL OSCILADOR

Modos

16



Bloque de oscilador interno
Los dispositivos PIC16F87/88 incluyen un bloque oscilador interno
que genera dos seales de reloj; tambin 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
perodo nominal) de salida. El oscilador INTRC est habilitado por la
seleccin 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 caractersticas se detallan en la Seccin 15.0 "Caractersticas
especiales de la CPU". La fuente de reloj de frecuencia (INTOSC
directo, INTRC directa o INTOSC postscaler) es seleccionado por la
configuracin de los bits IRCF del registro OSCCON.

Nota: A lo largo de estos apuntes, cuando se refiere especficamente a una fuente
de reloj genrico, el trmino "INTRC" tambin 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 mximo de dos pines del oscilador externo, pudiendo
utilizarse estos como entradas/salidas digitales. Estn disponibles dos
configuraciones:
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 fbrica, pero se
puede ajustar en la aplicacin. Esto se realiza configurando el registro
OSCTUNE. La sintonizacin de la sensibilidad es constante a lo largo
del rango de afinacin. El registro OSCTUNE tiene una gama de
sintonizacin 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 ejecucin de cdigo contina durante
este cambio. Las caractersticas 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 perifricos, se vern
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 seleccin 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 estn desactivados (SCS
<1:0> = 00), la fuente de reloj del sistema proviene del oscilador
principal que es seleccionado por los bits de configuracin FOSC2:
FOSC0 de la palabra de configuracin 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). Despus de un reset, SCS <1:0> cambia a '00 '.
Los bits de seleccin 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 configuracin 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.
18











19










TEMPORIZADORES

TMR0 -> igual que en PIC16F84 (8 bits)

WDT -> igual que en PIC16F84 pero con un prescaler exclusivo de
16 bits (adems 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 interrupcin por desbordamiento

TMR2
Temporizador de 8 bits
Prescaler y postscaler
Genera interrupcin por desbordamiento

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
simultneamente
Prescindir de prescaler en TMR0 y usar prescaler de 24 bits
en WDT



21





TMR1


Caractersticas:
Temporizador de 16 bits -> registros TMR1H:TMR1L, con prescaler
1:8
Interrupcin 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 sncrono/asncrono

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
sncrono o asncrono
o Modo contador sncrono (T1SYNC = 0)
Sincroniza el reloj con el reloj interno
En modo sleep se para el reloj
o Modo contador asncrono (T1SYNC = 1)
No sincroniza el reloj
TMR1 sigue contando durante SLEEP => puede
despertar al micro
23






24























25
TMR2

Caractersticas:
Temporizador de 8 bits -> registro TMR2 (cuenta) PR2 (limite)
Prescaler 1:8 y postscaler 1:16
Interrupcin 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 mdulo PWM /
CCP






26








































27
Convertidor A/D

Caractersticas
7 entradas analgicas (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 seleccin de entradas analgicas










28


Operacin del ADC

Configurar el mdulo A/D (secuencia)
Configurar los pines I/O como analgicos/digitales (ANSEL)
Configurar la tensin de referencia (ADCON1)
Seleccionar el canal de entrada A/D (ADCON0)
Seleccionar la fuente de reloj del ADC (ADCON0)
Activar el mdulo A/D (ADCON0)

Configurar la interrupcin A/D (opcional)
ADIF=0, ADIE=1, PEIE=1, GIE=1

Adquisicin de un dato
Fijar la seal GO/DONE = 1 (ADCON0)
Esperar a la interrupcin, o a que GO/DONE se ponga a cero
Leer el dato de ADRESH:ADRESL
Borrar ADIF si se est usando la interrupcin




29




30

Tiempos en la conversin A/D
Tiempo de Adquisicin
Tiempo desde que se selecciona el canal hasta que se puede
lanzar la conversin (Activar GO/DONE)
Tiempo mnimo: TACQ = 19,72s
Tiempo de conversin
Tiempo desde que se inicia la conversin hasta que termina
TC = 9 TAD
TAD es el periodo del reloj de conversin, seleccionable
















31
MODULO CCP CAPTURA /COMPARACIN / PWM
(Modulacin de anchura de pulsos)
Los microcontroladores de 16F88 disponen de un mdulo de Captura/
Comparacin y PWM, el terminal CCP1 puede ser RB0 o RB3 y viene
determinado por el bit 12 (CCPMX) de la palabra de configuracin
CONFIG1. Este modulo tiene un registro de 16 bits que puede
trabajar como:
Registro de captura de 16 bit
Registro de comparacin de 16 bits
Registro de modulacin de anchura de pulsos PWM de 10 bits
En la tabla 1 se muestran los recursos e interacciones del mdulo.
Seguidamente describiremos el funcionamiento del mdulo CCP1.
Mdulo CCP1:El registro de Captura / Comparacin/ PWM (CCPR1) de
16 bits esta formado por dos registros de 8 bits: CCPR1L (byte bajo)
que ocupa la direccin 15h y el CCPR1H (byte alto) que ocupa la
posicin 16h. El registro de control o configuracin del CCP1 es el
CCP1CON que ocupa la direccin 17h. El modo de disparo especial se
genera por la igualdad en la comparacin de CCPR1 con TMR1 y
restablecer el TIMER1 y el CCPR1, funciona como un registro de
perodo, capaz de provocar peridicamente interrupciones.


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

Mdulo 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
configuracin CONFIG1). Un evento puede ser:
Cada flanco descendente
Cada flanco ascendente
Cada 4 flancos ascendentes
Cada 16 flancos ascendentes

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>, adems
si est a " 1 " el bit PIE de CCP1IE<2>, se genera una peticin de
interrupcin. 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 sncrono. Nunca en modo asncrono.
Es recomendable desactivar el mdulo CCP cuando se van a cambiar
las condiciones de funcionamiento en el modo de captura para evitar
que se produzcan falsas interrupciones durante la operacin.
Configuracin del pin CCP
En el modo captura, el pin CCP1 debe configurarse como entrada.
33
Software de Interrupcin
Es recomendable desactivar el mdulo 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 operacin. 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 mdulo CCP est desactivado o
no est en modo de captura, el contador del preescaler se pone a
cero. Cualquier reset tambin pone a cero el preescaler. Cuando se
cambia el preescaler durante una captura, se puede generar una
interrupcin. Puede ocurrir tambin que el contador de preesca-ler no
se encuentre a cero antes de comenzar la primera captura. En las
lneas de programa en ensamblador del ejemplo, se muestra el
mtodo recomendado para modificar el preescaler en el modo de
captura. Este ejemplo tambin pone a cero el contador del preescaler
y no genera una falsa interrupcin.

Ejemplo:

CLRF CCP1CON ;Desactiva el mdulo 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 Comparacin
En el modo de Comparacin 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
34
dependiendo de la configuracin de los bits CCP1M3:CCP1M0
(CCP1CON <3:0>):
Pasa a nivel alto
Pasa a nivel bajo
No cambia su estado pero se produce una interrupcin
Adems cuando se da la coincidencia entre los dos registros el bit
CCP1IF se pone a 1
Configuracin 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
sncrono, nunca en modo asncrono. Modo de Interrupcin por
software cuando se elige el modo de trabajo de Interrupcin por
Software, el pin CCP1 no es afectado. El flag CCPIF se pone a "1" y se
produce una interrupcin de CCP (si se ha habilitado).
Modo especial de disparo
En este modo de disparo el CCP1 pone a "0" el TMR1 y, adems,
inicia una conversin A/D de forma peridica, pudindose realizar una
conversin A/D sin el control del programa de instrucciones. Para que
tenga lugar una conversin A/D peridicamente, se puede cargar en
los registros CCPR1H y CCPR1L el nmero de impulsos a los que una
vez transcurridos, deseamos que se realice una conversin. Como
estos registros se comparan continuamente con los del modulo
temporizador TMR1, cuando ambos sean iguales, comenzar la
conversin. Esta operacin no afecta al flag de interrupcin del
35
temporizador TMRIF (PIR1<0>). Como la igualdad tambin pone a
cero al temporizador, se volver a repetir de nuevo el ciclo. Si slo
nos interesa la interrupcin que ocasionar el mdulo convertidor
cuando finalice la conversin, 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 conversin.
Ejemplo de manejo del comparador
El siguiente programa utiliza el comparador del PIC1688 para realizar
un divisor de frecuencia por dos veces el nmero que se indique en
hexadecimal por el PORTA (RA0:RA5). Para ello se hace contar al
TIMER1 los impulsos que se inyectan por la lnea RB6/T1OSO/T1CKI y
cada vez que se llega al valor indicado por las lneas RA0:RA5, la
lnea RB0 cambia de estado.

Modo de Modulacin de Anchura de Pulsos (PWM)
Con el modo de modulacin de anchura de impulsos se pueden
conseguir impulsos a nivel alto de anchura variable, con el modulo
CCP1 se puede obtener una resolucin de 10 bits para la salida PWM.
Estas seales tienen mucha aplicacin para el control de motores a
travs 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 mdulo 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 comparacin con TMR2,
cuando ambos son iguales el pin se pone a "0" para repetir la
secuencia. Por lo tanto, el tiempo que la seal PWM est a nivel alto
viene dada por el registro CCPR1H y el periodo de la seal por el
registro PR2.
36

Periodo PWM
La salida PWM que se obtiene en el pin CCP1, como puede verse en la
figura 6, la seal tiene un periodo base y sobre l la seal est a nivel
alto durante un tiempo (duty cycle). La frecuencia del PWM es la
inversa del periodo (1/T). La duracin del perodo de la seal
depende del valor que se haya cargado en PR2, de acuerdo con la
siguiente expresin.


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 precisin de 10 bits.
Por su parte, la anchura del impulso a nivel alto viene dada por la
expresin:

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 ledo. Como en todos los mdulos del
microcontrolador, es necesario respetar y mantener cierto orden en la
programacin. El orden seguido para su configuracin 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 operacin PWM.


38


MDULO DE COMUNICACIONES SERIE SNCRONA:
MSSP
El mdulo de comunicaciones serie sncrona (MSSP) es un interface
serie, til para comunicar con otro perifrico o dispositivos. Estos
perifricos pueden ser memorias EEPROMs serie, registros de
desplazamiento, controladores de displays, convertidores A/D,
convertidores D/A, etc. El mdulo de MSSP pueda operar en uno de
estos dos modos:
Serial Peripheral Interface (SPI)
Inter-Integrated Circuit (I2C)
Para el control de este mdulo hay dos registros de configuracin se
trata del registro SSPCON: Registro de control del Puerto Serie
Sncrono (Sync Serial Port Control Register) en la direccin 14h.
Adems se dispone del registro SSPSTAT: Registro de estado del
puerto Serie (Sync Serial Port Status Register) en la direccin 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 sncrona y simultanea.
Para el establecimiento de la comunicacin se utilizan tres hilos de
conexin:
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 Sincronizacin RB4/SCK/SCL
Adicionalmente puede utilizarse un cuarto pin trabajando en modo de
funcionamiento esclavo.
Slave Select (/SS): Seleccin de Esclavo RB5/SS/TX/CK





39
Registro SSPSTAT: Registro de estado del puerto Serie (Direccin 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 estndar (100 KHz y 1MHz)
0=Habilita control (400KHz)
bit 6: CKE: Seleccin 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 direccin
bit 4: P: Bit de Stop (Solo en modo I2C. Ese bit es borrado cuando se
deshabilita el mdulo 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 mdulo
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 informacin Lectura/Escritura (solo en modo I2C)
1=Lectura
0=Escritura
Modo I2C Modo Esclavo
1=Lectura
0=Escritura
Modo I2C Modo Master
1=Transmisin en progreso
0=Transmisin no en progreso
bit 1 UA: Activacin de direccin (slo en modo I2C 10-bits)
1=Indica que es necesario actualizar la direccin en el registro SSPADD
0=No es necesario actualizar la direccin
bit 0 BF: Bit estado de Buffer lleno
Receptor (Modo SPI e I2C)
1=Recepcin completa, SSPBUF est lleno
0=Recepcin no completa, SSPBUF est vaco
Transmisor (Modo I2C)
1=Transmisin en progreso, SSPBUF est lleno (no incluye ACK y bit de Stop)
0=Transmisin completa, SSPBUF est vaco (no incluye ACK y bit de Stop)


40
Modo de trabajo
Al inicializarse el mdulo SPI, se necesita configurar varias
especificaciones de la configuracin. Esto es en los registros SSPSTAT
y SSPCON (SSPCON<5:0> y SSPSTAT<7:6>).
Pudindose seleccionar las distintas modalidades de trabajo:
Modo Master (donde la seal de reloj SCK ser de salida)
Modo Esclavo (donde la seal 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).
Seleccin del flanco del reloj (Transmisin por flanco de bajada
o subida de SCK)
Velocidad de SCK (Solo en modo Master)
Seleccin del modo Esclavo, si trabajamos de esta forma.
En la Figura 1 se muestra el diagrama de bloques del mdulo 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 seal
SCK ser salida
Modo Slave,
donde la lnea
SCK ser
entrada
Polaridad de la
seal 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
41
entrada, que puede ser en la mitad o al final del impulso.
En el modo de recepcin los datos recibidos se introducen en serie en
el registro de desplazamiento SSPSR que, una vez haya recibido el
octavo bit, pasarn al registro SSBUF en paralelo, ponindose 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 recepcin/transmisin ha finalizado. Si durante la
recepcin/transmisin 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 "colisin". 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 recepcin. El registro SSPSR no se puede
leer o escribir directamente, y solo se puede acceder a l a travs del
registro SSPBUF. Por lo tanto, por el registro SSPBUF deben pasar
forzosamente todos los datos tanto en transmisin como en
recepcin. En el ejemplo de la tabla 1, se muestra el proceso de
carga en modo transmisin.

Conexin tpica
En la Figura 2 se muestra la conexin entre dos procesadores, donde
slo uno puede actuar como master cada vez. El circuito que trabaja
como master (Procesador 1) indica la transferencia de datos con la
seal 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 debern programarse con idntica polaridad de
reloj. Los circuitos a conectar por medio de este protocolo pueden
ser dos o ms perifricos o microcontroladores pero, como se ha
comentado, solo uno puede trabajar cada vez como master.



42
Registro SSPCON: Registro de control del puerto Serie (Direccin 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 colisin
1=El registro SSPBUF se ha escrito cuando hay una transmisin en proceso (Se debe borrar
por software)
0=No hay colisin
bit 6: SSPOV: Bit detector de desbordamiento en recepcin
En modo SPI
1=Se recibe un nuevo byte cuando el registro SSPBUF an mantiene los datos anteriores. En
caso de rebose, los datos del registro SSPSR sern falsos, slo puede ocurrir en modo
esclavo. Se deber leer el SSPBUF, an si slo se envan datos, para anular el rebose. En
modo master el bit no se pone a uno ya que en cada nueva recepcin/transmisin 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 an mantiene los datos anteriores. En
modo de transmisin no tiene importancia, en cualquier caso debe borrarse por software.
0=No hay desbordamiento
bit 5: SSPEN: Bit de habilitacin del mdulo 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 debern configurar como entradas o salidas adecuadamente.
bit 4: CKP: Bit de seleccin de polaridad del reloj
En modo SPI
1=Reloj en nivel alto. Transmisin en flancos de bajada, en recepcin de subida
0=Reloj en nivel bajo. Transmisin en flancos de subida, en recepcin 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 mdulo acta como esclavo, la patilla CLK deber configurarse
como entrada para que la seal, presente en la patilla SDI, se vaya
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 mxima (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 seal corresponde al de carga de los bits
recibidos en el registro SSPBUF. En una operacin de SLEEP,cuando
est configurado como master, todos los mdulos de reloj son
detenidos por lo que la transicin recepcin permanecer congelada
hasta que el microcontrolador despierte. Momento en el que el
mdulo reanudar la transmisin o la recepcin. En el modo esclavo,
los desplazamientos sobre el registro son asncronos, 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 interrupcin
correspondiente est habilitada. Un Reset, deshabilita el mdulo
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 seal externa de reloj.
Cuando el ltimo bit ha sido enclavado, el flag de interrupcin 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 mdulo SPI se Resetea y el
bit SSPEN se borra. Es posible realizar transmisiones y recepciones
con slo dos hilos de conexin; en este caso las patillas SDI y SDO
pueden unirse eliminando as la tercera conexin. Cuando la pastilla
SDI necesita operar como receptora, la patilla SDO deber ser
configurada como una nueva entrada, de este modo, se deshabilita la
transmisin por esta ltima y no crea conflictos con los datos de la
SDI.
44

Registros Asociados con una operacin SPI









MDULO COMPARADOR

El mdulo comparador contiene dos comparadores analgicos.
Las entradas de los comparadores estn 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 (seccin 14.0 " Mdulo
comparador de tensin de referencia ") tambin 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.
45
bit 7 C2OUT: Comparator 2 Output bit
Cundo C2INV =0:
1 =C2 VIN+>C2 VIN-
0 =C2 VIN+<C2 VIN
Cundo C2INV =1:
1 =C2 VIN+<C2 VIN-
0 =C2 VIN+>C2 VINbit

6 C1OUT: Comparator 1 Output bit
Cundo C1INV =0:
1 =C1 VIN+>C1 VIN-
0 =C1 VIN+<C1 VIN
Cundo 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
Cundo CM2:CM0 =001:
1 =C1 VIN- connects to RA3
0 =C1 VIN- connects to RA0
Cundo 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



Configuracin del comparador
Hay ocho modos de operacin 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 direccin de los datos se configura para cada modo.
Si el modo del comparador se cambia, el nivel de salida de la
comparador no es vlido el retardo en el modo de cambio se muestra
en Seccin 18.0 de data sheet "Caractersticas elctricas".

Nota: Las interrupciones del comparador deben ser desactivadas durante un
cambio de modo del comparador, sino puede ocurrir una falsa interrupcin.



46

Operacin del comparador
Un nico elemento comparador se muestra en la Figura 13-2, junto
con la relacin entre los niveles de entrada analgica y la salida
digital. Cuando la entrada analgica en V
IN
+ es menos que la
entrada analgica V
IN
-, la salida de la comparador digital es un nivel
bajo. Cuando la entrada analgica en V
IN
+ es mayor que la entrada
analgica V
IN
-, 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.

47
Comparador de referencia
Se pueden utilizar seal de referencia externa o interna dependiendo
del modo de operacin del comparador. La seal analgica presente
en V
IN
-se compara con la seal V
IN
+ y la salida digital del
comparador se ajustar en consecuencia (Figura 13-2).


Seal de referencia externa
Cuando se utiliza voltaje de referencia externo, el mdulo 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 seal de
referencia debe estar entre VSS y VDD y puede ser aplicado a
cualquiera de los pines de la base del comparador.

Seal interna de referencia
El mdulo tambin permite comparar voltaje de referencia generados
internamente para los comparadores. La seccin 14.0 " Mdulo
comparador de voltaje de referencia "contiene una descripcin
detallada del mdulo comparador de voltaje de referencia que ofrece
esta seal. La seal de referencia interna es cuando la comparador se
utiliza en modo CM <2:0> = 010 (Figura 13-1). En este modo, la
tensin interna de referencia se aplica al terminal V
IN
+ de ambos
comparadores.
48

Tiempo de Respuesta del comparador
Tiempo de respuesta es el tiempo mnimo, despus de seleccionar
una nueva tensin de referencia de la fuente de entrada, antes de
que la comparador de salida tenga un nivel vlido. Si la referencia
interna se cambia, el plazo mximo del voltaje interior de referencia
debe ser considerado cuando se utiliza las salidas del comparador.
En caso contrario, el mximo retraso de la comparador debe usarse
(seccin 18.0 "Caractersticas elctricas").

Salidas de los Comparadores
En el comparador los resultados se leen a travs del registro CMCON
Estos bits son de slo lectura. Las salidas del comparador tambin
pueden ser directamente las salidas RA3 y RA4. Cuando estn
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
analgicas se leern como '0 '. Los pines configurado como entradas digitales se
convertirn una entrada analgica, de acuerdo con la especificacin de entrada
del Disparador Schmitt.
2: Los niveles analgicos, sobre todo los definidos como entrada digital, debido al
buffer de entrada consumen ms corriente de la que se especifica

49


Interrupciones del Comparador
La bandera de interrupcin de comparacin 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 informacin 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 interrupcin del comparador. El CMIF debe ponerse a
cero. Tambin se puede escribir un 1 en este registro y se iniciara
un simulacro de interrupcin.
Los bits CMIE (registro PIE2) y PEIE (registro INTCON) deben estar
activados para permitir la interrupcin. Adems, el GIE tambin debe
estar activado. Si alguno de estos bits est a cero, la interrupcin no
est habilitada, aunque el bit CMIF produzca una condicin de
interrupcin.

Nota: Si un cambio en el registro CMCON
(C1OUT o C2OUT) debe ocurrir cuando un
operacin de lectura se est ejecutando (inicio de
el ciclo de Q2), entonces la CMIF (PIR2
registro) de interrupcin no podr obtener pabelln conjunto.

El usuario, en el servicio de rutina de interrupciones, puede borrar la
interrupcin de la siguiente manera:
a) Cualquier lectura o escritura de CMCON pone fin a la condicin de
desajuste.
50
b) Borrando la bandera CMIF.
Un cambio de condicin produce un 1 en CMIF.
La lectura de CMCON pone fin a la condicin 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 comparacin sigue siendo activa y la interrupcin est
funcional, si est habilitada. Esta interrupcin hace que el dispositivo
despierte (wake-up) del modo Sleep. Cada uno de los comparadores
consume ms corriente, como se muestra en las especificaciones del
comparador. Para reducir al mnimo el consumo de energa en el
modo Sleep, es preciso apagar la comparacin, CM <2:0> = 111,
antes de entrar en el modo de espera. Si el dispositivo despierta del
sueo, 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 comparacin, CM <2:0> = 111.

Consideraciones de Conexin de las Entradas Analgicas

Un circuito simplificado para una entrada analgica se muestra en la
figura 13-4. Dado que los pines analgicos estn conectados a una
salida digital, que tiene dos diodos. La entrada analgica, por lo
tanto, debe estar entre VSS y VDD. Si el voltaje de entrada se desva
de este margen en ms de 0,6 V en cualquier direccin, uno de los
diodos conduce y se produce un corto. El mximo de impedancia de
la fuente ha de ser de 10 k recomendado para las fuentes
analgicas. Los componentes externos conectados a la entrada
analgica, tales como un condensador o un diodo Zener, deben de
tener muy poca corriente de fuga.

51
Registros Asociados con el Mdulo Comparador

Mdulo Comparador De Tensin De Referencia

El comparador de voltaje de referencia es un divisor de tensin de 16
resistencias que proporciona una red fija de tensin 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 continuacin.



En la figura 14-1 se muestra, las resistencias del divisor de tensin
que ofrecen dos rangos de valores uno para ahorrar energa cuando
el comparador de referencia no se utiliza. El comparador de
referencia de tensin de alimentacin (tambin denominado CVRSRC)
viene directamente de VDD. Cabe sealar, sin embargo, que la
tensin en la parte superior de la escalera es CVRSRC - VSAT, VSAT
es la saturacin de la tensin de alimentacin del transistor
52
conmutador. Esta referencia slo 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
slo en el PIC16F88). Esto puede ser utilizado como un simple D / A
de la funcin por parte del usuario en caso de utilizar una muy alta
impedancia de carga. El propsito principal de esta funcin es
proporcionar una ruta de prueba para testear la funcin de referencia
del generador.




REGISTROS ASSOCIADOS CON EL COMPARADOR DE VOLTAJE DE REFERENCIA






53
TRANSMISOR RECEPTOR DIRECCIONABLE
UNIVERSAL SNCRONO ASYNCHRONOUS (AUSART)
El mdulo transmisor (AUSART)es otro de los dos puertos serie de los
que dispone esta familia de microcontroladores. Los mdulos de I/O.
(AUSART tambin se conocen como Serial Communications o
interface o SCI). El AUSART puede configurarse como asncrono full
dplex que puede comunicar con los dispositivos perifricos como
terminales de CRT y los ordenadores personales, o puede
configurarse como un sistema sncrono half duplex que puede
comunicar con otros microcontroladores, con dispositivos perifricos
como A/D o D/A circuitos integrados, EEPROMs serie etc.
El USART puede configurarse en los modos siguientes:
Asncrono( Full duplex )
Sncrono-Master (half duplex)
Sncrono-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 mdulo AUSART tambin tiene un multi-procesador con capacidad
de comunicacin, utilizando la direccin de deteccin 9 bits.
54


55

55

55

56
Generador de baudios del AUSART (BRG).
En el protocolo asncrono 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. Adems 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. Segn este bit se obtendr el valor de una
constante K necesaria para determinar la frecuencia de
funcionamiento. Este generador sirve tanto para el modo sncrono
como el asncrono y consiste de un contador/divisor de frecuencia de
8 bits controlado por el registro SPBRG (99H). De tal manera que la
frecuencia de transmisin 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 mdulo AUSART tambin 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
transmisin del mdulo AUSART.
MODO DE FUNCIONAMIENTO DE BAJA POTENCIA
El reloj del sistema se utiliza para generar la tasa de transmisin
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 ejecucin 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 mayora detect el circuito para determinar si un nivel alto o
bajo est presente en el pin RX.


57




58


El AUSART en modo asncrono
Como ya se ha dicho, en este modo de comunicaciones se emplea
una configuracin estndar de un bit de Start, ocho o nueve bits de
datos, y un bit de Stop. Este modo de trabajo se detiene durante la
funcin Sleep. Aunque el AUSART tiene funciones independientes
para la transmisin y recepcin, los formatos de datos y de velocidad
de transmisin es igual para los dos casos. El generador de baudios
produce siempre las seales 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 seleccin del
modo asncrono se realiza poniendo a cero el bit SYNC (TXSTA<4>).
El modulo asncrono del USART se consigue con la combinacin de
importantes elementos:
El generador de baudios
El circuito de muestreo
Transmisor asncrono
Receptor asncrono
EL AUSART TRANSMISIN ASINCRONA
Para realizar una transmisin 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 estn disponibles), en este caso el bit TXIF (PIR1 <4>) se pone a
uno, y se genera una interrupcin si est habilitada (PIE1 <4>).
59
Los pasos necesarios para realizar una transmisin asncrona son los
siguientes:
Inicializar el registro SPBRG con el valor apropiado segn los
clculos realizados. Si se desea el margen alto se pondr a uno
el bit BRGH.
Habilitar el puerto asncrono borrando el bit SYN y poniendo a
uno el SPEN.
Habilitar la interrupcin (si se desea) poniendo a uno el bit
TXIE.
Poner a cero o a uno el bit TX9 (8 9 bits).
Habilitar la transmisin 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 transmisin).
Si se utiliza interrupciones, asegrese de que GIE y PEIE
(Bits 7 y 6) del registro INTCON estn activados.

EL AUSART EN MODO RECEPCIN ASNCRONA
En el modo de recepcin, los datos son recibidos por la patilla
RB2/SDO/RX/DT y se introducen en serie en el registro RSR; despus
de recibir el bit de Stop los datos acumulados en este registro se
cargan en el de datos RCREG (si est vaco). Cuando la transferencia
se ha completado, el bit RCIF (PIR1 <5>) pone a uno. La interrupcin
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 ledo (se "vaca" el registro). Para configurar
el puerto como receptor hay que seguir los siguientes pasos:
Inicializar el registro SPBRG con el valor apropiado segn los
clculos realizados. Si se desea el margen alto se pondr a uno
el bit BRGH.
Habilitar el puerto asncrono borrando el bit SYN y poniendo a
uno el SPEN.
Habilitar la interrupcin (si se desea) poniendo a uno el bit
RCIE.
60
Poner a uno el bit RX9 para habilitar 9 bits de recepcin.
Habilitar la recepcin poniendo a uno el bit CREN.
El flag RCIF subir a uno cuando se complete la recepcin.
Se ocasionar una interrupcin 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 recepcin.
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 sncrono
Este modo de trabajo tiene dos posibles formas de configuracin,
como master y como esclavo. En el modo master la transmisin y
recepcin no tienen lugar al mismo tiempo, cuando se transmite un
dato, la recepcin es inhibida y viceversa. En la transmisin el
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 vaca y se genera una
interrupcin (si est habilitada por el bit TXIE, PIE1<4>. La
transmisin se habilita por el bit TXEN del registro TXSTA<5>, si se
borra durante una transmisin, sta ser abortada y reseteado el
transmisor. Para iniciar una transmisin es necesario seguir los
siguientes pasos:
Inicializar el registro SPBRG con el valor apropiado calculado.
Habilitar el puerto master asncrono colocando a uno los bits
SYN, SPEN y CSRC.
Si se desea emplear la interrupcin, habilitarla poniendo a uno
el bit TXIE.
Si se desea una transmisin de nueve bits, el noveno se cargar
en el bit TX9.
Habilitar la transmisin poniendo a uno el bit TXEN.
Si se ha habilitado la transmisin de 9 bits, el noveno se cargar
en el registro TX9D.
La transmisin se inicia al cargar los datos en el registro
TXREG.

EL AUSART EN MODO MASTER SNCRONO
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 cada del
reloj , si el bit SREN est a uno, slo se recibir una palabra, pero si se
borra el bit CREN la recepcin ser continua. Despus del ltimo
impulso de reloj, el dato recibido en el registro de desplazamiento
RSR ser transferido al RCREG (si est vaco). Una vez haya
terminado la recepcin se origina una interrupcin si sta est
habilitada, RCIE (PIE1 <5>). Los pasos a seguir para iniciar la
recepcin en modo master son las siguientes:
Inicializar el registro SPBRG con el valor apropiado de baudios.
Habilitar el puerto master asncrono colocando a uno los bits SYN,
SPEN y CSRC.
Asegurarse de que los bits CREN y SREN estn borrados.
Si se desea emplear la interrupcin habilitarla poniendo a uno el bit
RCIE.
Si se desean nueve bits poner a uno el bit RX9.
Si slo se desea una recepcin nica, poner a uno el bit SREN; para
recepcin continua poner a uno el bit CREN.
El flag de interrupcin RCIF se pone a uno cuando la recepcin 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 recepcin.
Leer el octavo bit recibido y dar lectura al registro RCREG.
62
Si ha ocurrido un error borrarlo poniendo a cero el bit CREN.


MODO ESCLAVO SNCRONO
Este modo de trabajo difiere del modo master, pues la seal 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 transmisin son idnticas al modo
Master, excepto en el caso del modo Sleep. Si se escriben dos
palabras en el registro TXREG y despus se ejecuta la instruccin
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
enva al TSR y el flag TXIF se pone a uno.
Si est habilitado el bit TXIF la interrupcin despierta al
microcontrolador de modo Sleep y el programa salta a la
direccin del vector de interrupciones (0004 hex.).
63


Control del AUSART conectado al puerto serie del ordenador
Para poder conectar las lneas 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..
Adems del circuito, necesitaremos para comprobar el
funcionamiento un programa de comunicaciones como el
HiperTerminal de Windows y un cable serie en conexin 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 vlido para conectarse con otros ordenadores o
dispositivos. Hay programas de comunicaciones mucho ms potentes
que ste. Sin embargo, HyperTerminal se caracteriza por su facilidad
de uso y su fcil adquisicin 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 > Instalacin
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
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 informacin suficiente para crear en
la carpeta HyperTerminal una nueva conexin, es decir, un lugar de
destino con el que conectarse.
2. Ejecutar el programa Hypertrm para crear una nueva conexin, se
le pregunta el nombre que asignar a la conexin, teclear por
ejemplo "PIC16F88" y elegir un icono con el que se quiera
representar la conexin, figura 12.
3.En la siguiente pantalla Conecta con elegir la opcin Conectar
usando: Directo a Com2, figura 13. Se va a utilizar el puerto serie
Com2 para comunicar el ordenador y el microcontrolador. Tambin 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 continuacin aparece la pantalla de trabajo tal como la mostrada
en la figura 15.
Para conectar el ordenador y el microcontrolador a travs del puerto
serie COM 2, basta con activar la opcin "Llama" (o icono de telfono
colgado) y para desconectar hay que activar opcin "Desconecta" (o
icono de telfono descolgado. Una vez configurada una conexin,
para comenzar la comunicacin simplemente ha de ejecutar el icono
de la conexin previamente configurada tal como se muestra en la
figura 16.


















Figura 10.- Circuito de aplicacin 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/CLKIN
16
RB0/INT/CCP1
6
RB1/SDI/SDA
7
RB2/SDO/RX/DT
8
RB3/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-
1
RA3/AN3/C1OUT/VREF+
2
RA4/AN4/T0CKI/C2OUT
3
RA6/OSC2/CLKOUT
15
RA5/MCLR
4
U1
PIC16F88
ERROR
TXD
3
RXD
2
CTS
8
RTS
7
DSR
6
DTR
4
DCD
1
RI
9
P1
COMPIM
65






CIRCUITO DE VIGILANCIA (WDT)

Para los dispositivos PIC16F87/88, el WDT se ha modificado con
respecto a anteriores dispositivos PIC16. El nuevo cdigo de WDT
es funcionalmente compatible con los anteriores mdulos WDT pero
permite al usuario tener un valor scaler para el TMR0 y WDT al
mismo tiempo. Adems, 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 aadido 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
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 configuracin 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 configuracin de Word 1 se activa, el bit SWDTEN no tiene
ningn 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
funcin 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 sueo + = Reloj del sistema
T1OSC, EXTRC, INTRC, ECIO
Salir del sueo + = Reloj del sistema
XT, HS, LP Resueltos al final de la OST
Borrados al final del
OST
Borrados al final del
OST






67


Nota 1: Si en la palabra de configuracin 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 despus del
retardo PWRT (si est activado). Esto ayuda a asegurar que el
oscilador de cristal o resonador este estabilizado.
El OST slo se requiere para XT, LP y HS y slo en los modos de
Power-on Reset o al despertar del modo Sleep.
68
Interrupciones
El PIC16F87/88 tiene hasta 12 fuentes de interrupcin.

Nota: Las banderas de las interrupciones se activan independientemente de la
situacin de sus bits de activacin correspondiente o el bit GIE.


Lgica de las interrupciones


Salvando los registros STATUS, W y PCLATH en la RAM

MOVWF W_TEMP ; Copi a Wal r egi st r o TEMP
SWAPF STATUS, W ; Swap st at us se guar da en W
CLRF STATUS ; banco 0, i ndependi ent ement e del banco
; act ual , bor r a I RP, RP1, RP0.
MOVWF STATUS_TEMP ; Sal va st at us en el banco cer o
; en el r egi st r o STATUS_TEMP
MOVF PCLATH, W ; Sl o es necesar i o si se ut i l i za page 1
MOVWF PCLATH_TEMP ; Sal va PCLATH en W
CLRF PCLATH ; Pgi na cer o, i ndependi ent ement e de l a
; pgi na act ual
:
: ( I SR) ; ( I nser t e su cdi go aqu )
:
MOVF PCLATH_TEMP, W ; Rest aur a PCLATH
MOVWF PCLATH ; Mueve Wa PCLATH
SWAPF STATUS_TEMP, W ; Swap del r egi st r o STATUS_TEMP en W
; ( banco a su est ado or i gi nal )
MOVWF STATUS ; Mueve Wal r egi st r o STATUS
SWAPF W_TEMP, F ; Swap del r egi st r o W_TEMP
SWAPF W_TEMP, W ; Swap del r egi st r o W_TEMP en W

Potrebbero piacerti anche