El conversor adc

Post on 22-Jun-2015

464 views 7 download

description

convertidor a/d

Transcript of El conversor adc

(c) Domingo Llorente 2010 1

EL módulo conversor A/D

(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

(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(*)

(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

(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’

(c) Domingo Llorente 2010 6

Registros asociados al conversor A/D (IV)

b) Configurar las entradas analógicas

(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

(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.

(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

(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

(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;

(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.

(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

(c) Domingo Llorente 2010 14

Solución en CCS (II)

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

(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

(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.

(c) Domingo Llorente 2010 17

Solución en CCS (V)

El compilador nos genera la siguiente plantilla.

(c) Domingo Llorente 2010 18

Solución:

(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