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