Curso de Microcontroladores PIC16F87X

CURSO DE MICROCONTROLADORES PIC16F87X Fernando Remiro Domínguez Profesor de Sistemas Electrónicos IES. Juan de la Cierv

Views 81 Downloads 5 File size 8MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

CURSO DE MICROCONTROLADORES PIC16F87X

Fernando Remiro Domínguez Profesor de Sistemas Electrónicos IES. Juan de la Cierva www.terra.es/personal/fremiro

NOVEDADES

Equipos de desarrollo para trabajar con la familia de microcontroladores PIC16F87X.

72

RESISTOR

omenzamos este nuevo curso después de la aceptación que han teniendo los anteriores relacionados con el mundo de los microcontroladores PIC. En esta Revista se han publicado con anterioridad el “Curso de aplicaciones con microcontroladores PIC” basado en el microcontrolador PIC 16F84, escrito por el Dr. Eugenio Martín Cuenca, (revistas nº 161 a 171), y el “Curso de programación de Microcontroladores PIC: El MPLAB”, escrito por el profesor Fernando Remiro Domínguez (revistas nº 179-187). En el número 189 hemos publicado un “Módulo de aprendizaje sobre microcontroladores PIC” diseñado por el profesor Juan de Dios Calle, sobre el que se podrán realizar las prácticas que se diseñaremos para este curso. No obstante, iremos planteando a lo largo de este curso, la realización practica de herramientas de fácil desarrollo y bajo coste, para hacer verdaderamente práctico este curso. De todas

C

formas se recomienda a los lectores que vayan a seguir este curso que consigan el software MPLAB que se puede bajar de la web de Arizona Microchip www.microchip.com, así mismo, se necesitará un programador para los microcontroladores, es valido cualquiera de los publicados en esta Revista, pero como ya hemos dicho a lo largo del curso plantearemos alguno de bajo costo. Esperamos que os guste el curso y lo disfrutéis. El corazón de los Microcontroladores PIC16F87X

La mejor forma de comenzar a estudiar un microcontrolador, en este caso una familia de microcontroladores es la de ver sus características más relevantes, y es justamente lo que vamos a hacer en las siguientes líneas: Principales Características

Enumeramos las prestaciones y dispositivos especiales que rodean a los PIC16F87X..

✦ Procesador de arquitectura RISC avanzada ✦ Juego de solo 35 instrucciones de 14 bits de longitud. Todas ellas se ejecutan en un ciclo de instrucción, menos las de salto que tardan dos. ✦ Hasta 8K palabras de 14 bits para la Memoria de Programa, tipo FLASH en los modelos 16F876 y 16F877 y 4KB de memoria para los PIC 16F873 y 16F874. ✦ Hasta 368 Bytes de memoria de Datos RAM. ✦ Hasta 256 Bytes de memoria de Datos EEPROM. ✦ Pines de salida compatibles para el PIC 16C73/74/76/77. ✦ Hasta 14 fuentes de interrupción internas y externas. ✦ Pila de 8 niveles. ✦ Modos de direccionamiento directo e indirecto. ✦ Power-on Reset (POP). ✦ Temporizador Power-on (POP) y Oscilador Temporizador Start-Up (OST). ✦ Perro Guardián (WDT). ✦ Código de protección programable. ✦ Debugger In-Circuit ✦ Modo SLEEP de bajo consumo. ✦ Programación serie en circuito con dos pines. ✦ Solo necesita 5V para programarlo en este modo. ✦ Voltaje de alimentación comprendido entre 2 y 5,5 V. ✦ Bajo consumo: < 2 mA valor para 5 V y 4 Mhz 20 µA para 3V y 32 Mhz CCPR1H clrf TMR1L ;0--> TMR1L clrf TMR1H ;0--> TMR1H bsf T1CON,TMR1ON;TMR1 en ON BUCLE movf PORTA,W andlw b'00011111' ;Lee las entradas RA4-RA0 movwf CCPR1L ;Ajusta la parte baja del valor a comparar goto BUCLE ;***************************************************************************** ORG 0x1F00 bcf PCLATH,4 bcf PCLATH,3 ;Selecciona la página 0 goto INICIO ;Salto a la dirección de INICIO del programa ;***************************************************************************** end ocho bits de mayor peso de TMR2, el pin pasa a valer "1" y se borra el temporizador para iniciar de nuevo la cuenta. El contenido de menor peso del CCPR1L se pasa al registro

de mayor peso CCPR1H y se comienza de nuevo la comparación con TMR2, cuando ambos son iguales el pin se pone a "0" para repetir la secuencia.

Por lo tanto, el tiempo que la señal PWM está a nivel alto viene dada por el registro CCPR1H y el periodo de la señal por el registro PR2.

56-83 MICROCONTROLADORES

14/8/03 13:26

Página 61

R9 10K

R8 10K

R7 10K

R5 10K

R6 10K

R4 10K

Vcc= 5V

R1 10K Reset

R2 100

PIC16F876 MCLR RA0 RA1 RA2 RA3 RA4 RA5 Vss

RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

Diodo LED R3 330

RA5

RA4

RA3

RA2

RA1

RA0

C1 27 pF

XT 4Mhz

OSC1 OSC2/CKOUT

VDD

Vcc=5V

VSS C2 27 pF RC0 RC1 RC2 RC3

Entrada de Impulsos

Figura 4.- Circuito para la comprobación del programa Compara_1.asm CCP1CON

Registreo de Periodos CCPR1L

CCPR1H(Slave)

Comparador

R

Q RC2/CCP1

TMR2

(Nota1)

S TRISC

Comparador Borra Timer, patilla CCP1 y Latch D.C. PR2

Nota 1.- Los 8 bits del TMR2 se concatenan con los 2 bits Q del reloj interno o con los 2 bits del preescaler para crear una base de tiempos de 10 bits

Figura 5.-Diagrama de bloques del módulo CCP trabajando en modo PWM. Periodo PWM La salida PWM que se obtiene en el pin RC2/CCP1, como puede verse en la figura 6, la señal tiene un periodo base y sobre el la señal está a nivel alto durante un tiempo (duty cycle). La frecuencia del

PWM es la inversa del periodo (1/T). La duración del período de la señal depende del valor que se haya cargado en PR2, de acuerdo con la siguiente expresión. Cuando el valor TMR2 coincide con el de PR2 suceden tres eventos:

RC7 RC6 RC5 RC4

Se borra el TMR2 ( se pone a cero) ● La patilla RC2/CCP1 se pone a "1" ● El valor de CCPR1L, que es el que determina la anchura del impulso se carga en CCPR1H El tiempo que la patilla de salida está a nivel alto, que es la anchura del impulso, depende del contenido cargado de CCPR1L y de los bits 5 y 4 del CCP1CON, cuando trabajamos con una precisión de 10 bits. Por su parte, la anchura del impulso a nivel alto viene dada por la expresión: El valor de CCPR1L: CCP1CON puede cargarse en cualquier momento, puesto que el mismo no se traspasa a CCPR1H y compara hasta que coincidan PR2 con TMR2. En el modo PWM el registro CCPR1L solo puede ser leído. Como en todos los módulos del microcontrolador, en necesario respetar y mantener cierto orden en la programación. El orden seguido para su configuración será: ●

Colocar en PR2 el periodo calculado Colocar en los registros CCPR1L y en los bit de CCP1CON los valores calculados ● Programar como salida el bits TRISC. ● Poner el valor del preescaler del TMR2 y habilitar el temporizador (T2CON). ● Configurar el CCP1 para una operación PWM. ● ●

56-83 MICROCONTROLADORES

14/8/03 13:26

Página 62

Figura 8.- Organigrama del programa PWM1.asm Periodo (PR2)

CCPR1H Duty Cycle TMR2=PR2 TMR2=Duty Cycle TMR2=PR2

Figura 6.- Impulsos de salida donde se controla el tiempo que está a nivel alto la señal EJEMPLO DE MANJO DEL MODULO PWM El programa PWM1.asm genera una señal PWM por la patilla RC2/CCP1 que corresponde con el pin 13 del PIC16F876. La anchura del impulso se determina por la constante ANCHURA y el periodo de la señal por la constante PERIODO, que pueden ser modificadas por el usuario. Para comprobar los resultados es necesario un osciloscopio conectado entre la patilla RC2 y masa. Pero para los que no dispongan de un osciloscopio pueden comprobar el resultado de la señal PWM sobre un motor de corriente continua utilizando el circuito de la figura 7,

en la que puede verse que la salida RC2 se ha conectado a la patilla de inhibición del circuito L293B, por lo que el valor medio de la señal que le llega al motor dependerá del valor de la anchura del impulso, variando en el programa este valor el motor debe ir más deprisa o más despacio e incluso pararse. El organigrama del programa es el que se muestra en la figura 8. El programa puede modificarse fácilmente para que el valor del PORTA pase a ser el valor de la constante PERIODO y así variar la velocidad del motor con los interruptores de entrada.

R9 10K

R8 10K

R7 10K

R5 10K

R6 10K

R4 10K

Vcc= 5V

MOTOR

R1 10K Reset

R2 100

+Vcc

PIC16F876 1 2 EN1

MCLR RA0 RA1 RA2 RA3 RA4 RA5 Vss

RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

RA5

RA4

RA3

RA1

RA0

RA2

XT 4Mhz

4

3 OUT1 4 GND 5 GND 6

OUT4 14 GND 13 GND 12

11

OUT3

OUT2 VDD VSS

C2 27 pF RC0 RC1 RC2 RC3

IN4

1

OSC1 OSC2/CKOUT

L293B

IN1

C1 27 pF

RC7 RC6 RC5 RC4

Figura 7.- Circuito para la comprobación de la señal PWM generada por el microcontrolador

Vcc=5V

2 2

7 IN2 8 VS +Vcc

16 15

3

IN3 10 EN2 9

56-83 MICROCONTROLADORES

14/8/03 13:26

Página 63

;*********************************************************************************** ************************ ; Programa PWM1.ASM ; Este programa emplea al módulo CCP1 con salida de señal por la línea RC2/CCP1. La señal ; de salida tiene un periodo determinado pora la constante "Periodo" y una anchura de la ; señal a nivel alto determinada por la constante "Anchura" . ; Revisión : 0.0 Programa para PIC16F87X ; Velocidad del Reloj: 4 MHz Reloj Instrucción: 1 MHz =1 ìs ; Perro Guardián :deshabilitado Tipo de Reloj : XT ; Protección del código : OFF ;*********************************************************************************** ********************** List p=16F876 ;Tipo de procesador include "P16F876.INC" ;Definiciones de registros internos PERIODO equ .200 ;Periodo de 200 ìs ANCHURA equ .50 ;Anchura 50 ìs ; org 0x00 ;Vector de Reset ; goto INICIO org 0x05 ;*********************************************************************************** ********************** ; Programa principal ;*********************************************************************************** ********************** INICIO clrf PORTA clrf PORTB clrf PORTC ;Borra salidas bsf STATUS,RP0 ;Selecciona banco 1 movlw b'00000110' movwf ADCON1 ;Puerta A E/S digitales clrf TRISB ;Puerta B se configura como salida movlw b'11111011' movwf TRISC ;RC2 salida movlw PERIODO-1 movwf PR2 ;Carga el registro de periodos bcf STATUS,RP0 ;Selecciona banco 0 movlw b'00000001' ;hace girar el motor en sentido horario movwf PORTB movlw ANCHURA movwf CCPR1L ;Carga la anchura del pulso ;Módulo CCP1 en el modo PWM con salida de señal por RC2/CCP1 movlw b'00001100' movwf CCP1CON movlw b'00000100' movwf T2CON ;T2 en On BUCLE goto BUCLE ;Bucle infinito ;*********************************************************************************** ********************** ORG 0x1F00 bcf PCLATH,4 bcf PCLATH,3 ;Selecciona la página 0 goto INICIO ;*********************************************************************************** ********************** end

Registros Asociados al PWM y al TMR2 Direcc ión 0Bh,8Bh 10Bh,18Bh 0Ch 0Bh 87h 11h 92h 12h 15h 16h 17 h

Nombre

Bit 7

Bit 6

Bit 5

Bit 4

INTCON PIR1 PIE1 TRISC TMR2 PR2 T2CON CCPR1L CCPR1H CCP1CON

GIE PEIE TOIE INTE PSPIF(1) ADIF RCIF TXIF PSPIE(1) ADIE RCIE TXIE Registro de configuración del PORT C Módulo Del registro Timer2

Bit 3 TOIF SSPIF SSPIE

Bit 2

Bit 1

Bit 0

Valor en POR,BOR

RBIE INTE RBIF 0000 000x CCP1IF TMR2IF TMR1IF 0000 0000 CCP1IE TMR2IE TMR1IE 0000 0000 1111 1111 0000 0000 1111 1111 --TOUTPS3 TOUPS2 TOUPS1 TOUPS0 TMR2ON T2CKPS1 T2CKPS0 -000 000 Registro de byte de menor peso del módulo de captura / comparación / PWM xxxx xxxx Registro de byte de mayor peso del módulo de captura / comparación / PWM xxxx xxxx ----CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000

Valor en el resto de Reset 0000 000u 0000 0000 0000 0000 1111 1111 0000 0000 1111 1111 -000 0000 uuuu uuuu uuuu uuuu --00 0000

Leyenda x = desconocido, u = inalterado; - = no implementado se lee como ‘0’. Las celdas sombreadas no son usadas por el TIMER2 Nota 1: Los bits PSP no están implementados para el PIC16F873/876, mantener estos bits a cero.

MICROCONTROLADORES

56-63 MICROCONTROLADORES

56

RESISTOR

28/10/04 14:20

Página 56

CURSO DE MICROCONTROLADORES PIC16F87X (...y VIII) Fernando Remiro Domínguez Profesor de Sistemas Electrónicos IES. Juan de la Cierva www.terra.es/personal/fremiro MODULO CONVERTIDOR ANALÓGICO/DIGITAL (A/D) La familia de microcontroladores PIC16F87X, disponen de un módulo de conversión Analógico/Digital que tiene de cinco entradas para los dispositivos de 28 pines y ocho para los otros dispositivos de la familia.

A través de la entrada analógica se aplica la señal analógica a un condensador de captura y retención (sample and hold) que después se introduce en el convertidor. El convertidor A/D que es de aproximaciones sucesiva da como resultado una palabra de 10 bits.

El módulo del convertidor A/D puede seleccionar como tensión de referencia la interna, es decir entre VDD y masa o bien una externa que se introduzca entre RA3/AN3/ VREF+ y RA2/AN2/VREF-. Cuando se selecciona la tensión de referencia externa, hay que tener en

Registro ADCON0 (dirección 1Fh) R/W-0 ADCS1 Bit 7 bit 7-6: 00 01 10 11

R/W-0 ADCS0

R/W-0 CHS2

R/W-0 CHS1

R/W-0 CHS0

R/W-0 G0/#DONE

U-0 ---

R/W-0 ADON Bit 0

ADCS1:ADCS0: bit de selección de reloj para el Convertidor A/D Fosc/2 Fosc /8 Fosc/32 FRC (Procede del oscilador RC interno)

bit 5-3: CH2:CH0: bit de selección del canal analógico 000 = Canal 0, (RA0/AN0) 001 = Canal 1, (RA1/AN1) 010 = Canal 2, (RA2/AN2) 011 = Canal 3, (RA3/AN3) 100 = Canal 4, (RA4/AN4) 101 = Canal 5, (RA5/AN5); los PIC16F87X de 28 pines no tienen este canal 110 = Canal 6, (RA6/AN6); los PIC16F87X de 28 pines no tienen este canal 111 = Canal 7, (RA7/AN7),, los PIC 1 6F87X de 28 pines no tienen este canal bit 2:

GO/#DONE. bit de estado de la conversión A/D Si ADON=1 1= La conversión A/D está en marcha (mientras está a 1 se está realizando la conversión) 0 = La conversión ha finalizado. (el bit se pone a cero automáticamente por hardware cuando la conversión A/D finaliza) el resultado de la conversión aparece en ADRESH: ADRESL bit 1:

No implementado: Se lee como "0"

bit 0: ADON: bit de puesta en marcha 1 = El convertidor A/D está operativo 0 = El convertidor A/D está apagado y no consume corriente.

56-63 MICROCONTROLADORES

28/10/04 14:20

Página 57

Registro ADCON1 (dirección 9Fh)

bit 7:

U-0 ---

R/W-0 ---

U-0 ---

R/W-0 PCFG3

R/W-0 PCFG2

R/W-0 PCFG1

R/W-0 PCFG0 Bit 0

ADFM: Selecciona el formato del resultado de la conversión A/D (ver figura 5) 1 = Pone en el registro ARDESH los seis bit de mayor peso a "0" (alineación a la derecha). 0 = pone los 6 bit de menor peso del registro ADRESL a "0" (alineación a la izquierda). Por lo tanto los 16 bits que forman el registro ARDESH-ARDESL con ADFM=1 tiene los 6 bit de mayor peso a cero y con ADFM=0 los 6 bit de menor peso están a cero

bit 6-4: No implementados: Se leen como cero bit 3-0: PCFG3:PCFG0: bits de configuración de los canales de entrada del convertidor A/D. Se utilizan para configurar las patillas como E/S digital o como entrada analógica de acuerdo con la siguiente tabla:

Tabla 1

PCFG3: PCFG0

AN7(1)

AN6(1)

AN5(1)

AN4 RA5

AN3 RA3

AN2 RA2

AN1 RA1

AN0 RA0V

VREF+

VREF-

RE2 RE1 RE0 0000 A A A A A A A A VDD VSS 0001 A A A A VREF+ A A A RA3 VSS 0010 D D D A A A A A VDD VSS 0011 D D D A VREF+ A A A RA3 VSS 0100 D D D D A D A A VDD VSS 0101 D D D D VREF+ D A A RA3 VSS 011X D D D D D D D D VDD VSS 1000 A A A A VREF+ VREF- A A RA3 RA2 1001 D D A A A A A A RA3 VSS 1010 D D A A VREF+ A A A RA3 VSS 1011 D D A A VREF+ VREF- A A RA3 RA2 1100 D D D A VREF+ VREF- A A RA3 RA2 1101 D D D D VREF+ VREF- A A RA3 RA2 1110 D D D D D D D A VDD VSS 1111 D D D D VREF+ VREF- D A RA3 RA2 A= Entrada Analógica; D = E/S Digital; (1) Estos canales no están disponibles para los dispositivos de cuenta que existen algunas limitaciones; la máxima tensión aplicada a la patilla VREF+ (RA3/AN3) podrá ser de VDD+0,3V y la mínima de VDD2,5V. En cuanto a la tensión VREF(RA2/AN2) la mínima tensión será VSS-0,3V y la máxima VREF+ - 2V, así por ejemplo, si la tensión de alimentación es de 5V, la tensión en RA3/AN3 no podrá exceder de 5V. Por lo que la máxima tensión en la VREF- será de 3V. Siempre se ha de cumplir que VREF+ - VREF - ≤2V. El convertidor A/D tiene como característica especial el ser capaz de seguir trabajando mientras el dispositivo esté en el modo SEEP. Para ello el oscilador interno RC debe conectarse al conversor A/D. El módulo conversor A/D tiene asociados cuatro registros:

● ADRESH

: Parte alta del resultado de la conversión ● ADRESL : Parte baja del resultado de la conversión ● ADCON0: Registro de Control 0 ● ADCON1, Registro de Control 1 En esta página se muestra el registro ADCON0 de configuración del funcionamiento del convertidor y en la página anterior el ADCON1 que es el registro de configuración de los pines del puerto. Los pines del PORTA pueden configurarse como entradas analógicas (RA, también puede ser entrada de tensión de referencia) o como E/S digital. Los registros ADRESH: ADRESL contienen los 10 bits resultado de la conversión A/D. Cuando se completa la conversión A/D, el resultado se guarda en los registros

CHAN/ REFS 8/0 7/1 5/0 4/1 3/0 2/1 0/0 6/2 6/0 5/1 4/2 3/2 2/2 1/0 _

ADRESH:ADRESL y se pone a cero el bit GO/DONE y el flag de fin de conversión ADIF (PIR1) se pone a 1. El diagrama de bloques del módulo conversar A/D es el de la Figura 1. Después de que el conversor A/D se ha configurado como se desea utilizar, la selección del canal debe realizarse antes de hacer la adquisición. Los canales de entrada analógica deben tener los correspondientes bits del registro TRIS seleccionados como entradas. Para realizar una conversión A/D deben seguirse los siguientes pasos: 1. Configurar el módulo conversor A/D ● Configurar los pines que actúan como entradas analógicas, las señales que harán de tensión de referencia la que trabajarán como E/S digitales (ADDCON1).

MICROCONTROLADORES

U-0 ADFM Bit 7

57

RESISTOR

56-63 MICROCONTROLADORES

28/10/04 14:20

Página 58

Seleccionar el canal de entrada. A/D (ADCON0). ● Seleccionar la fuente de la señal de reloj para la conversión A/D (ADCON0). ● Activar el módulo de conversión A/D (ADCON0) 2. Activar si, se desea, la interrupción. del módulo conversor A/D ● Poner a cero el bit ADIF ● Poner a uno el bit ADIE ● Poner a uno los bits habilitadores GIE y PEIE 3. Esperar el tiempo requerido para la adquisición 4. Inicio de la conversión ● Poner a 1 el bit GO/#DONE (ADCON0) 5. Tiempo de espera para terminar la conversión A/D que puede detectarse por: ● Exploración de bit GO/#DONE , que al finalizar la conversión toma el valor "0" ● Esperar que se produzca una interrupción si se ha programado al finalizar la conversión. ●

CHS2:CHS0

MICROCONTROLADORES

111

CONVERTIDOR A/D

VAIN Tensión de entrada VDD

110 101 100 011 010 001 000

VREF+

PCFG3:PCFG0

VSS PCFG3:PCFG0

(*) No exisnten en los dispositivos de 28 pines

Figura 1.- Diagrama de bloques del convertidor A/D

RE2/AN7(*) RE1/AN6(*) RE0/AN4(*) RA5/AN4 RA3/AN3/REF+ RA2/AN2/REFRA1/AN1 RA0/AN0

58

RESISTOR

Figura 2.- Diagrama de flujos que deberá seguir el programa para realizar una conversión A/D

56-63 MICROCONTROLADORES

28/10/04 14:20

Página 59

VDD Conmutador de muestreo RAx

VT=0.6V

SS

RIC