EL módulo conversor A/D

Anuncio
EL módulo conversor A/D
(c) Domingo Llorente 2010
1
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
2
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
El tiempo empleado en la
Conversion viene dado por
la expresion:
TACQ= TAMP+TC+TCOFF
Tiempo empleado en la
conversión ~= 20us
(*)
Nota: Fosc = Frecuencia del oscilador.
(*) Dato del datasheet de Microchip para el pic 16F877x
(c) Domingo Llorente 2010
3
Registros asociados al conversor A/D (II)
b) Seleccionar el canal analógico para realizar la conversión
c) Iniciar/parar la conversión
d) Encender/Apagar el conversor
b
c
d
(c) Domingo Llorente 2010
4
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
5
Registros asociados al conversor A/D (IV)
b) Configurar las entradas analógicas
(c) Domingo Llorente 2010
6
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
7
Interrupción del conversor (II)
b) Poner a uno el bit ADIE del registro PIE1
c) Cada vez que se finalice una conversión se pondrá a uno la
bandera ADIF del registro PIR1.
(c) Domingo Llorente 2010
8
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.
JP8 JP9
ANL0
ANL3
(c) Domingo Llorente 2010
9
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ógica
ALL_ANALOGS, Todas las entradas analógicas
AN0, 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 conversor
ADC_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
10
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
11
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
12
Solución en CCS (I)
Comenzamos utilizando el
asistente “PIC Wizard”
Luego creamos la carpeta para
nuestro proyecto y damos un
nombre al archivo con extensión .pjt
(c) Domingo Llorente 2010
13
Solución en CCS (II)
Elegir:
Pic: PIC17F877A
Frecuencia del oscilador: 4Mhz
Fuses: Crystal osc <=4Mhz
Memoria de programa: No protegida
(c) Domingo Llorente 2010
14
Solución en CCS (III)
En la pestaña de “Analog” configurar:
• Resolución: 1024 (10bits).
• Fuente de reloj para
la conversión: Internal
• La entrada analógica: A0
(c) Domingo Llorente 2010
15
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
16
Solución en CCS (V)
El compilador nos genera la siguiente plantilla.
(c) Domingo Llorente 2010
17
Solución:
(c) Domingo Llorente 2010
18
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 seleccionado
delay_us(20);
// Retardo para asegurar la conversión
valor_leido=read_adc(); // Lectura del conversor
(c) Domingo Llorente 2010
19
Descargar