El conversor adc

19
(c) Domingo Llorente 2010 1 EL módulo conversor A/D

description

convertidor a/d

Transcript of El conversor adc

Page 1: El conversor adc

(c) Domingo Llorente 2010 1

EL módulo conversor A/D

Page 2: El conversor adc

(c) Domingo Llorente 2010 2

Características del conversor A/D

� Ocho entradas de señal analógica. (5 para el 16F876x)

� Resolución de la conversión de 10 bits. (0-1024)

� Distintas fuentes de tensión de referencia seleccionadas por software.

� Capacidad para operar en el modo Sleep.

� Los registros asociados al módulo son:

• PORTA,TRISA,PORTE y TRISE: Definición de pines de entrada

• INTCON,PIE1 y PIR1: Manejo de interrupciones

• ADCON0,ADCON1,ADRESH y ADRESL: Control del conversor

Page 3: El conversor adc

(c) Domingo Llorente 2010 3

Registros asociados al conversor A/D (I)

El registro ADCON0 sirve para:

a) Seleccionar la señal de reloj del conversor, en funcion de Fosc

Nota: Fosc = Frecuencia del oscilador. (*) Dato del datasheet de Microchip para el pic 16F877x

El tiempo empleado en laConversion viene dado porla expresion:

TACQ= TAMP+TC+TCOFF

Tiempo empleado en la conversión ~= 20us(*)

Page 4: El conversor adc

(c) Domingo Llorente 2010 4

Registros asociados al conversor A/D (II)

b) Seleccionar el canal analógico para realizar la conversiónc) Iniciar/parar la conversiónd) Encender/Apagar el conversor

b

c

d

Page 5: El conversor adc

(c) Domingo Llorente 2010 5

Registros asociados al conversor A/D (III)

El registro ADCON1 sirve para:

a) Seleccionar la justificación del resultado de la conversión.ADFM = 1 : Los seis bits más significativos del registro ADRESH se leen como ‘0’.

ADFM = 0 : Los seis bits menos significativos del registro ADRESL le leen como ‘0’

Page 6: El conversor adc

(c) Domingo Llorente 2010 6

Registros asociados al conversor A/D (IV)

b) Configurar las entradas analógicas

Page 7: El conversor adc

(c) Domingo Llorente 2010 7

Interrupción del conversor (I)

Para habilitar la interrupción del conversor hay que:a) Poner a uno los bits GIE y PEIE del registro INTCON

Page 8: El conversor adc

(c) Domingo Llorente 2010 8

Interrupción del conversor (II)

b) Poner a uno el bit ADIE del registro PIE1c) Cada vez que se finalice una conversión se pondrá a uno la bandera ADIF del registro PIR1.

Page 9: El conversor adc

(c) Domingo Llorente 2010 9

Conexión de las entradas analógicas en la placa de ampliación

� Para usar la entrada analógica de RA0 hay que poner el puente JP9 en pos. ANL0.� Para usar la entrada analógica de RA3 hay que poner el puente JP8 en pos. ANL3.

ANL0

ANL3

JP8 JP9

Page 10: El conversor adc

(c) Domingo Llorente 2010 10

Configuración del conversor en CCS (I)

� Para configurar la entrada del conversor se utilizan la función:setup_adc_ports( VALOR );

Donde VALOR puede ser:NO_ANALOG, Ninguna entrada analógicaALL_ANALOGS, Todas las entradas analógicasAN0, Configura RA0 como única entrada analógica

AN0_AN1_AN3, Configura RA0, RA1 y RA3 como entradas analógicas

� Para fijar la señal de reloj utilizada en la conversión se utiliza:setup_adc(ADC_CLOCK_INTERNAL); // Reloj interno para la conv.

Otros valores posibles son:ADC_OFF, Para parar el conversorADC_CLOCK_DIV_32, Utiliza un divisor por 32 de la Fosc.

Nota: La lista completa de valores se puede consultar en el archivo: 16F877A.h

Page 11: El conversor adc

(c) Domingo Llorente 2010 11

Configuración del conversor en CCS (II)

Para leer el valor analógico hay seguir los siguientes pasos:

1º) Fijar el canal a leer:set_adc_channel(0); // Canal AN0 seleccionado

2º) Esperar, al menos 20us:delay_us(20); // Retardo para asegurar la conversión

3º) Guardar el valor leído en una variable de 16 bits:valor_leido=read_adc();

Adicionalmente, si queremos pasar a voltios la lectura obtenida:

voltios=5.0*valor_leido/1024.0;

Nota: No olvidar declarar las variables: int16 valor_leido; float voltios;

Page 12: El conversor adc

(c) Domingo Llorente 2010 12

Ejemplo de programa

Diseñar un programa que esté, constantemente leyendo la entrada analógica ANL0 y mostrando en el LCD de la placa el valor leído y su valor en voltios.

Page 13: El conversor adc

(c) Domingo Llorente 2010 13

Solución en CCS (I)

Comenzamos utilizando elasistente “PIC Wizard”

Luego creamos la carpeta para nuestro proyecto y damos un nombre al archivo con extensión .pjt

Page 14: El conversor adc

(c) Domingo Llorente 2010 14

Solución en CCS (II)

Elegir:Pic: PIC17F877AFrecuencia del oscilador: 4MhzFuses: Crystal osc <=4MhzMemoria de programa: No protegida

Page 15: El conversor adc

(c) Domingo Llorente 2010 15

Solución en CCS (III)

En la pestaña de “Analog” configurar:• Resolución: 1024 (10bits).

• Fuente de reloj parala conversión: Internal

• La entrada analógica: A0

Page 16: El conversor adc

(c) Domingo Llorente 2010 16

Solución en CCS (IV)

En la pestaña “Code” podemos ver el código que se añadirá en nuestro programa.

Page 17: El conversor adc

(c) Domingo Llorente 2010 17

Solución en CCS (V)

El compilador nos genera la siguiente plantilla.

Page 18: El conversor adc

(c) Domingo Llorente 2010 18

Solución:

Page 19: El conversor adc

(c) Domingo Llorente 2010 19

Resumen

Para realizar un programa con la interrupción externa habilitada:

1º.- Antes de la función main(); declarar una varialbe de 16bits.int16 valor_leido;

2º.- En la función main() configurar el conversor:setup_adc_ports( AN0 );setup_adc(ADC_CLOCK_INTERNAL);

3º.- Seleccionar la entrada y hacer la lectura:set_adc_channel(0); // Canal AN0 seleccionadodelay_us(20); // Retardo para asegurar la conversiónvalor_leido=read_adc(); // Lectura del conversor