el conversor adc
DESCRIPTION
convertidor a/dTRANSCRIPT
![Page 1: El conversor adc](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/1.jpg)
(c) Domingo Llorente 2010 1
EL módulo conversor A/D
![Page 2: El conversor adc](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/2.jpg)
(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](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/3.jpg)
(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](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/4.jpg)
(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](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/5.jpg)
(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](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/6.jpg)
(c) Domingo Llorente 2010 6
Registros asociados al conversor A/D (IV)
b) Configurar las entradas analógicas
![Page 7: El conversor adc](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/7.jpg)
(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](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/8.jpg)
(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](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/9.jpg)
(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](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/10.jpg)
(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](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/11.jpg)
(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](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/12.jpg)
(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](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/13.jpg)
(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](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/14.jpg)
(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](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/15.jpg)
(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](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/16.jpg)
(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](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/17.jpg)
(c) Domingo Llorente 2010 17
Solución en CCS (V)
El compilador nos genera la siguiente plantilla.
![Page 18: El conversor adc](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/18.jpg)
(c) Domingo Llorente 2010 18
Solución:
![Page 19: El conversor adc](https://reader034.vdocumento.com/reader034/viewer/2022052213/55882fadd8b42ab30e8b471e/html5/thumbnails/19.jpg)
(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