Sei sulla pagina 1di 21

PICmicro GAMA MEDIA: PIC16F87X

Conversin A/D
Un sistema de conversin A/D hacer llegar al controlador digital la informacin suministrada por el proceso analgico que se desea controlar. Establece una relacin biunvoca entre el valor de la seal en su entrada y la palabra digital obtenida en su salida. La conversin A/D se fundamenta en la teora de muestreo: Si una seal continua,

S(t) , tiene una banda de frecuencia en la que fm es la mayor frecuencia, dicha seal podr reconstruirse sin distorsin a partir de muestras de la seal tomadas a una frecuencia de valor fs > 2fm
Circuitos de captura y mantenimiento (S/H=Sample and hold): Muestrean la seal analgica (durante un intervalo de tiempo) y mantienen ese valor, generalmente en un condensador, durante el tiempo que dura la transformacin A/D propiamente dicha.

PICmicro GAMA MEDIA: PIC16F87X


Conversin A/D
Tipos de convertidores: Directo, Aproximaciones sucesivas, de simple rampa, de doble rampa, de paso intermedio a frecuencia. Aproximaciones Sucesivas: es el implementado en los PICs, se basa en ir eliminando mitades de tabla hasta quedarse con el valor que ms se aproxima a la tensin analgica a convertir.
Sea u=3,2V 1) Prueba con 1000 (2,5V)

2,5 < 3,2 mitad superior 2) Prueba con 1100 (3,75V) 3,75 > 3,2 mitad inferior 3) Prueba con 1010 (3,125V)

3,125 < 3,2 mitad superior 4) Prueba con 1011 (3,4375V) 3,4375 > 3,2 valor inferior

10

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D
Convierte la seal analgica en un nmero digital de 10 bits. Los 16F876/873 tienen 5 canales (en puerto A) y los 16F877/874 tienen 8 canales (5 en el puerto A y 3 en el puerto E). Tienen tensiones de referencia VREF+ y VREF- seleccionables por software. Pueden ser VDD y VSS o las tensiones aplicadas en los pines RA3 / RA2 . Puede seguir funcionando cuando el PIC est en modo SLEEP ya que dispone de un oscilador RC interno propio. Hay 11 registros asociados a este perifrico. Definicin de pines de entrada y seales aplicadas TRISA PORTA TRISE - PORTE Manejo de interrupciones INTCON PIE1 PIR1 Control del conversor A/D ADCON0 ADCON1 ADRESH - ADRESL 11

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D Estructura Interna

12

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D
Registro ADCON0 (1Fh) [PIC16F87x]

bit 7-6 bit 5-3

ADCS1:ADCS0: Seleccin del reloj para la conversin A/D 00 = fOSC/2 01 = fOSC/8 10 = fOSC/32 CHS2:CHS0: Seleccin del canal de conversin 000 = Canal 0 001 = Canal 1 010 = Canal 2 100 = Canal 4 101 = Canal 5 110 = Canal 6 GO/DONE: Estado de la conversin Si ADON=1: 1 = Conversin en progreso

11 = fRC 011 = Canal 3 111 = Canal 7

bit 2

0 = Conversin finalizada

bit 0

ADON: Bit de encendido del convertidor A/D 1 = Mdulo A/D encendido 0 = Mdulo A/D apagado 13

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D
Registro ADCON1 (9Fh) [PIC16F87x]

bit 7

ADFM: Seleccin de formato del resultado 1 = Ajuste a la derecha 0 = Ajuste a la izquierda PCFG3:PCFG0: Configuracin de las entradas al mdulo A/D

bit 3-0

14

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D
Registro ADCON0 (1Fh) [PIC16F87xA]

bit 7-6

ADCS1:ADCS0: Seleccin del reloj para la conversin A/D junto con ADCS2 que est en ADCON1. 00 = fOSC/2 00 = fOSC/4 01 = fOSC/8 01 = fOSC/16 10 = fOSC/32 10 = fOSC/64 11 = fRC 11 = fRC

ADCS2=0 ADCS2=1

Registro ADCON1 (9Fh) [PIC16F87xA]

bit 6

ADCS2: Seleccin de reloj para conversin A/D junto con ADCS1 y ADCS0.

15

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D
Registro INTCON (0Bh , 8Bh , 10Bh , 18Bh)

bit 7 bit 6

GIE: Habilitacin global de interrupciones PEIE: Habilitacin de interrupciones de perifricos Registro PIE1 (8Ch)

bit 6

ADIE: Habilitacin de la interrupcin del convertidor A/D Registro PIR1 (0Ch)

bit 6

ADIF: Flag de la interrupcin del convertidor A/D 1 = Conversin A/D completada. 0 = Conversin A/D an no completada. 16

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D
Pasos en una conversin A/D

1. Configurar el mdulo A/D. Definir entradas analgicas y tensin de referencia. (ADCON1) Seleccionar el canal de la conversin. (ADCON0) Seleccionar el reloj de la conversin. (ADCON0) Encender el mdulo A/D. (ADCON0) 2. 3. Configurar la interrupcin por conversin A/D. Bajar el flag ADIF. (PIR1). Habilitar la interrupcin del convertidor A/D. (PIE1). Habilitar las interrupciones de los perifricos. (INTCON). Habilitar la mscara global de interrupciones. (INTCON) Esperar a que transcurra el tiempo de adquisicin. Tiempo necesario para capturar el valor analgico a convertir. Los valores tpicos del tiempo de adquisicin son del orden de 20s. 17

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D
4. Comenzar la conversin. Poner a 1 el bit GO/DONE. (ADCON0) No activar este bit a la vez que se enciende el convertidor A/D 5. Esperar a que se complete la conversin A/D. Controlando cundo el bit GO/DONE se pone a 0. Esperando a que llegue la interrupcin del convertidor. 6. Leer el resultado de la conversin. Disponible en los registros ADRESH:ADRESL. Bajar el flagADIF si se estn usando interrupciones. 7. Llevar a cabo la siguiente conversin. Volver al paso 1 2, segn convenga. Espera mnima antes de empezar la siguiente adquisicin: 2TAD (Esta espera no es necesaria en el caso de los PIC16F87xA porque el interruptor de captura se cierra en cuanto se obtiene el resultado). TAD: Tiempo necesario para la conversin de un bit.

18

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D Tiempo de adquisicin: tiempo necesario para cargar el condensador de mantenimiento CHOLD

Mxima impedancia recomendada para la fuente: Rs<10K. En estas condiciones, TACQ 20S Hasta que no acabe la conversin, no empieza otra adquisicin (SS abierto) Esperar TACQ : a) Tras una conversin; b) tras seleccionar un nuevo canal; c) Tras encender el mdulo AD 19

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D
Conversin A/D en el compilador C de CCS Configuracin del mdulo conversor A/D setup_adc (modo); modo: ADC_OFF (ADCON0 ADC_CLOCK_DIV_2 (ADCON0 ADC_CLOCK_DIV_8 (ADCON0 ADC_CLOCK_DIV_32 (ADCON0 ADC_CLOCK_INTERNAL (ADCON0 Definicin de entradas analgicas setup_adc_ports (valor); valor: NO_ANALOGS ALL_ANALOG ANALOG_RA3_REF A_ANALOG A_ANALOG_RA3_REF RA0_RA1_RA3_ANALOG RA0_RA1_ANALOG_RA3_REF

00h) 01h) 41h) 81h) C1h)

(ADCON1 (ADCON1 (ADCON1 (ADCON1 (ADCON1 (ADCON1 (ADCON1

86h) 80h) 81h) 82h) 83h) 84h) 85h) 20

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D
Definicin de entradas analgicas (cont.) setup_adc_ports (valor); valor: ANALOG_RA3_RA2_REF ANALOG_NOT_RE1_RE2 ANALOG_NOT_RE1_RE2_REF_RA3 ANALOG_NOT_RE1_RE2_REF_RA3_RA2 A_ANALOG_RA3_RA2_REF RA0_RA1_ANALOG_RA3_RA2_REF RA0_ANALOG RA0_ANALOG_RA3_RA2_REF Seleccin del canal analgico set_adc_channel (canal); canal: 0 (AN0) 4 (AN4) 1 (AN1 ) 5 (AN5) 2 (AN2) 6 (AN6) 3 (AN3) 7 (AN7) 21

(ADCON1 (ADCON1 (ADCON1 (ADCON1 (ADCON1 (ADCON1 (ADCON1 (ADCON1

88h) 89h) 8Ah) 8Bh) 8Ch) 8Dh) 8Eh) 8Fh)

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D
Lectura del resultado valor = read_adc (); valor: Entero de 16 bits segn la directiva #device adc= empleada. La influencia de dicha directiva se recoge en la siguiente tabla

El fichero 16f876.h incluye como primera directiva #device PIC16F876. Es necesario incluir informacin del tipo de conversor A/D. Por ello los ficheros C que usen este mdulo debern comenzar por: #device 16F876.h #device adc=10

22

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D
setup_adc_ports (A_ANALOG); setup_adc (ADC_CLOCK_INTERNAL); set_adc_channel (3); delay_us (20); valor = read_adc (); setup_adc (ADC_OFF);
W 10000010 Banco 1 ADCON1 W Banco 0 W ADCON0 W W & 00111000 W W | 11000001 ADCON0 W W ADCON0 W W & 11000111 W W | 00011000 ADCON0 W GO/DONE 1 Espera a GO/DONE=0 W ADRESH TEMP W Banco 1 W ADRESL Banco 0 REGL W W TEMP REGH W

W ADCON0 W W & 00111000 ADCON0 W

23

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D Project >> New >> Pic Wizard >> nombre fichero y guardar

24

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D

25

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D

26

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D

ad_fuente.h

27

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D: ejemplo lectura de tensin canal0

LCD1
LM016L

VSS VDD VEE

RS RW E 4 5 6

1 2 3

U1
9 10 1 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/T HV RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18

RV1 BAT1
5

RV1(3) 2 3 4 5 6 7

1k

PIC16F876

1 LSB =

5 1024 5 valor = lectura 1024

COMPILAR (F9) MONTARLO

7 8 9 10 11 12 13 14

D0 D1 D2 D3 D4 D5 D6 D7

28

PICmicro GAMA MEDIA: PIC16F87X


Modulo de Conversin A/D: lectura del valor max/min en canal0

LCD1
LM016L

VSS VDD VEE

RS RW E 4 5 6

1 2 3

U1
9 10 1 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/T HV RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18

RV1 BAT1
5

RV1(3) 2 3 4 5 6 7

1k

PIC16F876

Simular en ISIS

7 8 9 10 11 12 13 14

D0 D1 D2 D3 D4 D5 D6 D7

29

Potrebbero piacerti anche