Microcontroladores PIC

Transcripción

Microcontroladores PIC
Periféricos adicionales. El
16F88
1.
2.
3.
4.
5.
Introducción
Puerto serie asíncrono
Puerto serie síncrono
Convertidores A/D
Temporizadores (CCP)
El 16F88
• 4K de Flash
• 368 bytes de RAM
• Puertos serie
•
•
•
•
• Síncrono (SSP)
• Asíncrono (USART)
Conv A/D
Comparador analógico
Timers de 8 y 16 bits
PWM.
Arquitectura
Memoria de programa
• 4k de memoria de
programa
• Dos páginas, de 2k
• Pag. 0, de 0000h a 07FFh
• Pág. 1, de 0800h a 0FFFh
• Si se accede a
direcciones superiores,
se produce una lectura
de las inferiores
Memoria de datos
• 368 bytes de
RAM, en cuatro
bancos:
•
•
•
•
Banco
Banco
Banco
Banco
0:
1:
2:
3:
020h -07Fh
0A0h-0EFh
110h-16Fh
190h-1EFh
• Algunos registros
aparecen en los 4
bancos (INDF)
USART. Comunicación serie
asíncrona
•
•
También conocido como AUSART o SCI
Full duplex asíncrono, o half duplex
síncrono
Comunicación serie
asíncrona
• No hay señal de sincronismo
• Ambos dispositivos tienen que funcionar a
la misma velocidad (protocolo)
• Cabeceras:
Norma RS-232
• Capa física:
• +3V/+15V (0) y -3/15V(1)
• Transmite primero el
LSB
• En pausa se queda a
1
• Conexión Null
Modem
• Entre dos equipos
• TX-RX cruzados
• Igual para las líneas
de control
UART del PIC. Registros
• INTCON: GIE, PEIE deshabilita las Ints
• PIR1, PIE1: Bits TXIF, RCIF, TXIE,RCIE (flags y
habilitación de las ints.)
• TXREG, RCREG: Registros de datos del
transmisor/recept
• TXSTA, RCSTA: configuración del rx y tx.
• SPBRG: Generador de baudios
UART del PIC. Transmisión
•TSR se carga cuando se transmite el bit de STOP anterior.
•Cuando TSR se carga, TXIF se pone a 1. Se pone a 0 cuando
se carga nuevo dato en TXREG.
•TRMT se pone a 1 cuando TSR se ha desplazado entero. No
genera interrupción. No se puede escribir.
•TSR no está mapeado en memoria.
Registro de transmisión TXSTA
Procedimiento de transmisión
1. Inicializar SBPRG para la tasa en baudios. Si
hace falta, poner BRGH=1
2. Habilitar comunicación asíncrona. SPEN=1
SYNC=0
3. Habilitar las interrupciones si hacen falta.
TXIE=1. Asegurarse que GIE=1 y PEIE=1 en
INTCON
4. Si hacen falta 9 bits, poner TX9=1
5. Habilitar transmisión. TXEN=1. TXIF se
pondrá a 1
6. Si TX9=1 poner noveno bit en TX9D
Recepción
Registro de recepción RCSTA
Procedimiento de recepción
1. Inicializar SBPRG para la tasa en baudios. Si
hace falta, poner BRGH=1
2. Habilitar comunicación asíncrona. SPEN=1
SYNC=0
3. Habilitar las interrupciones si hacen falta.
RCIE=1. Asegurarse que GIE=1 y PEIE=1 en
INTCON
4. Si hacen falta 9 bits, poner RX9=1
5. Habilitar recepción. CREN=1. RCIF se
pondrá a 1 cuando se reciba un dato
6. Si RX9=1 leer noveno bit en RX9D
7. Leer el dato en RCREG
8. Si ha habido error, limpiar el flag poniendo
CREN=0
Configuración velocidad
BRGH=0
BRGH=1
El estándar RS-232
Conexionado RS-232
Señal
TX
RX
RTS
CTS
DTR
DSR
DCD
IR
FG
SG
Función
Transmisión dato
Recepción dato
Request to Send
Clear to Send
Data Terminal Ready
Data Set Ready
Data Carrier Detect
Ring indicator
Frame Ground
Signal Ground
DB-9
2
3
4
5
20
6
8
22
1
7
DB-25
3
2
7
8
4
6
1
9
5
Dirección
DTE->DCE
DCE->DTE
DTE->DCE
DCE->DTE
DTE->DCE
DCE->DTE
DCE->DTE
DCE->DTE
Común
Común
Drivers RS-232
Drivers RS-232
El estándar RS-422
El estándar RS-485
RS-485
Comunicación serie síncrona
•
•
•
•
Synchronous Serial Port (SSP) para
comunicación con otros
microcontroladores o dispositivos
EEPROMs serie, convertidores, drivers de
display, ...
Los pines deben tener la orientación
correcta en TRIS
Dos modos:
–
–
SPI (Serial Peripheral Interface)
I2C (Inter-integrated circuits)
SPI
•
Pins afectados
–
–
–
–
•
SDO Serial data out
SDI Serial data input
SCK Serial clock
/SS Slave select
Configuración
–
–
–
–
Maestro/esclavo
Polaridad de SCK
Flanco activo de SCK
Modo de selección de esclavo
SPI. Esquema general
Múltiples esclavos
SPI en el PIC
• 4 pines implicados
• SDI, entrada de datos
• SDO, salida de datos
• SCK, reloj (E si master, S si
Slave)
• SS: slave select (si slave)
• Un reg. de
desplazamiento para la
lectura y escritura
Registros para el SPI en el PIC
• INTCON: GIE, PEIE deshabilita las Ints
• PIR, PIE: Bit SSPIF, SSPIE (flag y habilitación de la
int.)
• TRISB: fija las direcciones de los pines.
• SSPBUF (buffer de E/S)
• SSPCON, SSPSTAT: estado y configuración del
puerto
Registro SSPSTAT
•SMP Muestreo SDI
• 0 en medio del tiempo de
bit
• 1 al final del tiempo de bit
• Esclavo: no afecta
•CKE Flanco de reloj
• Junto con CKP, fijan cuándo
cambia SDO
• 0 ocioso->activo
• 1 activo->ocioso
•D/A, P, S, R/W, UA (solo
para I2C)
•BF Buffer lleno
• 0 SSPBUF vacío
• 1 SSPBUF lleno
Registro SSPCON
•WCOL Colisión en
escritura
• 1 Se escribió en SSPBUF
mientras se transmitía
(poner a 0 por software)
•SSPOV Desbordamiento
recepción
• 1 Se recibió un byte antes
de leer SSPREG. El dato
anterior se ha perdido.
•SSPEN Habilita SSP
• 0 SSP deshabilitado
• 1 SSP habilitado
•CKP Polaridad reloj
•0 ocioso a nivel alto
•1 ocioso a nivel bajo
•SSPM<3:0> Selección
modo
• 00xx Maestro,
• SSPM<2:0> seleccionan
frecuencia de reloj:
•
•
•
•
00:OSC/4
01:OSC/16
10:OSC/64
11: TMR2 /2
• 0100 Esclavo, /SS
habilitado
• 0101 Esclavo, /SS no se usa
Cronogramas. Maestro
Cronogramas. Esclavo
CKE=0
CKE=1
Usos del SPI en el Pic16f88
• Conexión de periféricos externos de alta
velocidad
• Comunicación con otros PIC
• Ampliación del número de pines de e/s con un
registro de desplazamiento
I2C
SCL: Reloj (generado por el maestro)
SDA: Dato (bidireccional)
Masa común
Todas las salidas a drenador abierto
Comunicación half-duplex
Inicio/fin de transmisión
Selección del esclavo
Ejemplo de transmisión M->S
ACK=0 seguir
transmitiendo
Bloqueo de SCL
forzando un 0
ACK=1 no
transmitir más
Ejemplo de transmisión S->M
Selección
de esclavo
Fin de
transmisión
Nuevo
inicio
I2C en el PIC
• 2 pines implicados
• SDA (datos, bidir.)
• SCL (reloj)
• Funciona en modo slave
• Lectura y escritura
• Dirección de 7 ó 10 bits
• Por software, master
Registros para el I2C en el PIC
• INTCON: GIE, PEIE deshabilita las Ints
• PIR, PIE: Bit SSPIF, SSPIE (flag y habilitación de la int.)
• TRISB: fija las direcciones de los pines.
• SSPBUF (buffer de E/S)
• SSPADD: Dirección del PIC en modo I2C slave
• SSPCON, SSPSTAT: estado y configuración del puerto
Registro SSPSTAT para el I2C
•SMP Debe mantenerse a 0 •R/W: indica si el último
acceso fue lectura o
•CKE no afecta
escritura
•UA: actualizar dirección (1)
•D/A: Indica si lo recibido
(para accesos en 10 bits)
fue dato (1) o fue dirección
•BF Buffer lleno
(0)
•P: Detección del bit de
stop
•S: Detección de bit de
Start
• 0 SSPBUF vacío
• 1 SSPBUF lleno
Registro SSPCON
•SSPOV Desbordamiento
recepción
• 1 Se recibió un byte antes
de leer SSPREG. El dato
anterior se ha perdido.
•SSPEN Habilita SSP
• 0 SSP deshabilitado
• 1 SSP habilitado
•CKP Hold del reloj
• 0 Reloj habilitado
• 1 Reloj mantenido en
espera
•SSPM<3:0> Selección
modo
• 0110: I2C Slave, 7-bit addr.
• 0111: I2C Slave, 10-bit
addr.
• 1011: master (soft…)
• 1110: I2C Slave, 7-bit e
ints. De start y stop
• 1111: I2C Slave, 10-bit e
ints. De start y stop
Recepción I2C en PIC (7bit)
•Se recibe la dirección -> se manda ACK, y se activan BF
y SSPIF
•Se borra la flag SSPIF y BF leyendo el registro de datos
•Se recibe un dato que se almacena en SSPBUF ->Se
manda ACK y se activan de nuevo BF y SSPIF.
•Si no se lee el registro ni se borra SSPIF, al acabar el
ciclo se da un /ACK y se acaba la recepción
Recepción I2C en PIC (10 bit)
•Se recibe la parte alta de la dirección -> se manda ACK, y se
activan BF, UA y SSPIF.
•Se escribe el byte bajo de la dirección en SSPADD-> se borra UA y
se suelta el reloj. Se lee el SSPBUF para borrar el BF.
•Se recibe la parte baja de la dirección (SSPIF, BF y UA ==1)
•Se escribe en SSPADD la parte alta (para la siguiente
transferencia)
•Se lee SSPBUFF y se borra la SSPIF
•Se recibe el dato ya normalmente
Usos del canal I2C del
PIC16f88
• Comunicaciones desde un sistema de
control
• Leer / escribir memorias I2C externas
– Como Master: por software.
• Conexión de periféricos I2C
– (mismo problema)
Entradas Analógicas
• 7 pines de entrada analógica, 1 de ellos
también salida
• 1 convertidor A/D con 7 entradas
• 2 comparadores analógicos
• 1 generador de tensión de referencia
programable
Conversión A/D
• Transformar una tensión analógica en un
número
• Características:
ffffh
–
–
–
–
Precisión: nº de bits usado
Velocidad de muestreo
Linealidad
0000h
Rango de entrada
Vref-
Conversión A/D en el 16F88
• Convertidor A/D de 10 bits, por
aproximaciones sucesivas
• Hasta 7 entradas analógicas
• Tensiones de referencia internas o externas
Registros implicados
• Control de la interrupción (GIE, PEIE, ADIF, ADIE)
• 2 registros de datos (ADRESH, ADRESL)
• 3 registros de configuración (ADCON0, ADCON1,
ANSEL)
• Control de los puertos A y B
ADCON0
• ADCS1,0: selección de velocidad
– 00: Fosc/2
– 01: Fosc/8
– 10: Fosc/32
– 11: FRC
• CHS2..0: Selección del canal
• GO/DONE:
– Para arrancar, lo pongo a 1
– Cuando acaba, se pone a 0
• ADON: Enciende el Conv A/D
ADCON1
• ADFM: Formato del
resultado
– 0: Justif. A la Dcha
– 1: justif. A la izqda
ADCS2: Divide por 2 el
reloj
• VCFG1-0: tensiones de
referencia:
– VREF+ puede ser VDD o Pin
A3
– VREF- puede ser VSS o Pin
A2
ANSEL
• Indica qué pines del micro serán I/O analógicas
(1) o digitales (0)
• Aparte de este registro, habrá que configurar
TRISA y TRISB correctamente. Si no, se leerá
VOH, VOL
– Todos los pines analógicos son de Entrada, menos RA2, que
puede ser entrada o salida
Velocidad de conversión
• Debido al muestreo, la velocidad de la
conversión está limitada.
– Rs debe ser < 10k
• Hay que elegir ADCS2..0 de acuerdo con una
tabla:
Proceso de la conversión
• Se inicia al escribir GO/DONE=1
• Se aísla el condensador de hold y comienza la
conversión
• Tras 11 ciclos de TAD acaba la conversión:
– se cargan los registros ADRESH:ADRESL
– se borra el bit GO/DONE
– Se activa el flag ADIF
• Se reconecta el condensador, para muestrear la
entrada.
Usos del convertidor A/D
• Sistemas de control con entradas
analógicas (termostatos, control de
iluminación)
• Consignas de control variables (control de
volumen)
• Medida de magnitudes para representación
(polímetros, termómetros digitales, etc)
• Al ser un microcontrolador de muy poca
capacidad, el procesamiento de señales
analógicas no es muy habitual
– Valores de 10 bits y aritmética de 8 bits
Comparadores analógicos
• Dos comparadores analógicos
• Entradas externas o referencia interna
• Salida 0 ó 1 dependiendo del signo de la
comparación
Registros implicados
• INTCON: GIE, PEIE, como siempre…
• PIR2, PIE2: flag y máscara de la interrupción de
comparación
• CMCON: control (y estado) de los comparadores
• CVRCON: control de la tensión de referencia interna
• TRISA, PORTA: Control del puerto A (pines A0..A4)
CMCON
• C2OUT: Salida del comparador 2.
– 1 si V+>V-, si C2INV=0;
– 0 si V+>V-, si C2INV=1;
• C1 OUT: salida del comparador 1.
– 1 si V+>V-, si C2INV=0;
– 0 si V+>V-, si C2INV=1;
• C2INV, C1INV: cambian el signo de los
comparadores
• CIS: Selector de entrada de los comparadores. En
conjunción con CM2..0 indica cómo funcionan los
comparadores.
CM2..0: Modos de los
comparadores
• 000: reset
• 111. Apagados
• 100: independientes,
cada uno sus dos
entradas
• 010: Multiplexados: Vref
común, y las 4 entradas
multiplexadas
• 011: referencia común,
salida de C1 en RA3
• 100:Referencia común,
salida de C1 en RA3 y
C2 en RA4
• 101: C1 off, C2 on
• 010: 3 entradas, una
multiplexada.
Usos de los comparadores
• Evitar la digitalización en casos de
controles todo-nada de variables
analógicas
• PWM (pulse width modulation) analógicos
clásicos
• Generación de alarmas e interrupciones
dependiendo de valores analógicos
(niveles, temperaturas, corriente…)
Referencia de tensión
• Genera una tensión fija para usar en los
comparadores
• Puede salir también, por RA2
Registros implicados
• CVRCON: Registro de control del generador de
referencia
• CMCON: CM2..CM0 indican si se usa o no la
VREF
CVRCON
• CVREN: Enciende (1) o
apaga el módulo
• CVROE: habilita (1) la salida
de Vref hacia el pin RA2
• CVRR: Rango de tensiones:
fija la referencia junto con
CVR3:CVR0
– Si CVRR=1: VREF= VDD·CVR/24
– Si CVRR=0: VREF= VDD·(CVR/32
+ 1/4)
Usos de la tensión de
referencia
• Servir para los comparadores analógicos
• Referencia externa para otros elementos
• Salida analógica de baja resolución (DAC
de 4 bits)
Temporización en el 16f88
•
•
•
•
•
Tres timers, 2 de 8 bits y 1 de 16 bits
Múltiples bases de tiempo para cada uno
Posibilidad de preescalado
Generación de interrupciones
Funcionamiento como
–
–
–
–
Temporizador
Input Capture
Output compare
PWM
Timer 0
• Timer de 8 bits
• Se puede leer y escribir
• Reloj interno (timer) o externo (contador) con selección de
flanco
• Preescalador, compartido con WDT
• Interrupción de overflow (módulo fijo, en principio)
Registros implicados
• INTCON: GIE, PEIE, como siempre
• TMR0: registro del timer. Se puede escribir
y leer
• OPTION_REG: Control del timer0, entre
otras cosas
OPTION_REG
• TOCS: Selección del reloj (0:
interno, 1: externo)
• TOSE: Flanco del reloj externo
(0: subida, 1: bajada)
• PSA: asignación del
preescalador (0: timer0, 1:
WDT)
• PS2:0 valor del preescalador
Usos del Timer0
• Temporizador de 8 bits:
– Con el reloj interno (Fosc/4), puedo contar
• Con el preescalador a 256, hasta 65536 (64k)
• Con el preescalador a 1, hasta a 512
– Para usar un módulo distinto de 256, precargar el
contador en la interrupción de desbordamiento
• Contador de pulsos externos:
–
–
–
–
Usando el reloj externo.
Seleccionamos el flanco (subida o bajada)
Cuántas veces se ha producido.
Si queremos interrupción cuando se den N pulsos,
precargar el contador con 256-N
Timer 1
• Temporizador de 16 bits
• Puede usarse como timer, contador, o como base
para el módulo CCP
• Puede usarse como RTC con un oscilador
independiente
• Selección de reloj
• Preescalador propio
Registros implicados
• INTCON: GIE, PEIE
• PIR1, PIE1: bits TMR1IF, TMR1IE
• TRM1H:TMR1L: Registros del contador de
16 bits
• T1CON: registro de control del timer1
T1CON
Usos del Timer1
• Temporizador de 16 bits
– Si Fosc=20MHz, puedo contar hasta a 0.1048s
– Precargar los registros TMR1H:L para módulo distinto de
64k
• Poner a 0 TMR1L
• Escribir TMR1H
• Escribir TMR1L
• Contador de pulsos
– Posibilidad de sincronizarlos con el reloj interno
• Oscilador para RTI
– Usando un oscilador de 32.768Hz (32k)
– Cada desbordamiento es 2s (sin preescalado)
• Inicializando TMR1H=0x80, el periodo queda en 1s
Timer 2
•
•
•
•
Timer de 8 bits, frecuencia fija
Preescaler y postscaler
Módulo variable (registro PR2)
Puede usarse para el PWM del CCP y para
el SSP
Registros implicados
•
•
•
•
•
INTCON: GIE, PEIE.
PIR1, PIE1: bits TMR2IF y TMR2IE
TMR2: registro del timer2.
T2CON: Registro de control del Timer2
PR2: periodo del timer2
T2CON
• TOUTPS3:0: post-scaler. Indica cuántas
veces tiene que llegar a PR2 el contador
para que genere la interrupción (de 1 a 16)
• TMR2ON: enciende (1) el timer2
• T2CKPS1:0 preescaler del reloj de T2:
– 00: sin preescaler
– 01: dividido por 4
– 10, 11: dividido por 16
Usos del timer2
• Temporizador de 8 bits
–
–
–
–
Sólo una frecuencia de reloj (Fosc/4)
Sólo 3 valores de preescaler
16 postscalers
Módulo variable usando el registro PR2
• Cualquier valor de tiempo entre 0.4µs y 13.1ms
• Generador de sincronismo para el SSP
• Generación del PWM en el módulo CCP
Módulo CCP
• Tres modos distintos de
funcionamiento
– 16-bit Input Capture
– 16 bit Output Compare
– 10 bit PWM
• Hace uso de los timer 1 (IC,
OC) y 2 (PWM)
Registros implicados
• Control de las interrupciones (GIE,PEIE, TMR1IF,
CCP1IF)
• Control de las líneas del puerto B
• Control de los timer 1 y 2, según corresponda
• Control del módulo (CCPR1H:L y CCP1CON
Registro CCP1CON
• CCP1X:CCP1Y: LSB del ciclo del PWM. No se usan en los
otros modos
• CCP1M: Modo de funcionamiento
CCP1M Funcionamiento
00
01
01
01
01
00
00
01
10
11
Módulo CCP apagado
Modo IC, flanco de bajada
Modo IC, flanco de subida
Modo IC, cada 4 flancos de subida
Modo IC, cada 16 flancos de subida
10 00
10 01
10 10
Modo OC, enciende CCP1
Modo OC, apaga CCP1
Modo OC, sólo genera interrupción
10 11
11 xx
Modo OC, disparo del canal AD
Modo PWM
Modo IC
• Cuando se produce la condición deseada, se
copia el timer1 en CCPR1.
• EL pin CCP1 debe ser de entrada
– Pin CCP1 es B0 ó B3, dependiendo del bit de configuración
CCPMX
• Cada vez, además se activa el CCP1IF.
Usos del Input Capture
• Medir el ancho de un pulso
– Programar el IC para que se active con flanco de
bajada
– Cuando se dispare la interrupción, almacenar el valor
del T1
– Reprogramar para flanco de subida
– Cuando se vuelva a disparar, leer el nuevo valor y
calcular la diferencia
– Contar los desbordamientos de T1 por si acaso
• Línea de interrupción por flanco
seleccionable
Modo OC
• Se programa un valor en CCPR1H:L
• Cuando T1 llega a CCPR1, se actúa:
– Activar el pin CCP1 a nivel alto o bajo (configurable)
– Lanzar una interrupción al micro
– Disparo de evento especial:
• Lanza la conversión A/D (si está activo el A/D)
• Resetea el Timer1 (pero no activa la interrupción del T1)
Usos del Output Compare
• Timer de módulo variable
– Programar en CCPR1 el módulo deseado
– Configurar el CCP en modo Interrupción (1010), y activo la
interrupción CCP1IE
– Cuando se produzca la interrupción, resetear el T1
• Activación temporizada de un pin de salida
– Programar en CCPR1 el tiempo, desde el valor actual, en que se
quiere que se dispare el pin
– Configurar el CCP en modo activar pin (1000 ó 1001)
• PWM manual de 16 bits
– Programar CCP en modo interrupción (1010), y activo la
interrupción CCP1IE
– Programar T1 activando la interrupción TMR1IE
– Cuando desborde T1, enciendo el pin CCP y programo en
CCPR1 el Ton
• Si necesito un módulo distinto de 216, preprogramo TMR1H:L
– En la interrupción de CCP1IE, apago el pin CCP
Modo PWM
• Se usa el Timer 2 (8 bits), pero como contador de 10 bits
– Periodo: [(PR2)+1)]·4·Tosc(prescaler de T2)
• El TON se escribe en el registro CCPRL (8 bits), más los bits
CCP1X:Y del CCPCON (LSB’s)
– TON=[CCPRL:CCP1X:CCP1Y]·Tosc·(prescaler de T2)
• En función de PR2, varía la resolución del PWM:
Modo PWM
• Cuando TMR2 iguala a PR2 (fin de ciclo):
– Se borra TMR2
– Se enciende el pin CCP1
– Se copia CCPR1L a CCPR1H (doble latch)
• Cuando TMR2 iguala a CCPRH1:
– Se apaga el pin CCP1
Usos del PWM
• Generación de una salida analógica
• Control de sistemas de velocidad variable
• 10 bits para aprovechar los 10 bits del
convertidor A/D

Documentos relacionados