Upload
luis-zurita
View
3.153
Download
4
Embed Size (px)
Citation preview
VOLTAJES DE REFERENCIA EXTERNOS
• El convertidor A/D puede seleccionar como tensión dereferencia la interna VDD y Tierra.
• Para referencias externas, se introducen por:
• RA3/AN3/VREF+ y RA2/AN2/VREF-
• Las siguientes limitaciones aplican:
– El máximo voltaje aplicado a VREF+ (RA3/AN3) seráVDD+0,3V y el mínimo VDD-2,5V.
– Sobre el voltaje aplicado a VREF- (RA2/AN2) lamínima tensión será VSS-0,3V y la máxima (VREF+) -2V.
– Por ejemplo, si la tensión de alimentación es de 5V, latensión en RA3/AN3 no podrá exceder de 5V. Por loque el máximo voltaje en VREF- será de 3V.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
REGISTROS RELACIONADOS AL MÓDULO A/D
• ADCON0: Registro de control 0. (Banco 0).
• ADCON1: Registro de control 1. (Banco 1).
• ADRESH: Guarda la parte alta del Resultado dela conversión. (Banco 0).
• ADRESL: Guarda la parte baja del Resultado dela conversión. (Banco 1).
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
• Selección del reloj de conversión A/DEl tiempo de conversión A/D por bit se define comoTAD. La conversión A/D requiere mínimo 12TAD por10-bits de conversión.
• La fuente del reloj de conversión A/D es seleccionadopor software, mediante los bits ADCON0 <7:6>. Lascuatro opciones posibles para TAD son:
ADCS 1:0 PERÍODO
0 0 2TOSC
0 1 8TOSC
1 0 32TOSC
1 1 RC interno (2-6 μs)
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
Tiempo de adquisición (TACQ)
• Es el tiempo necesario para que se cargue elcondensador de retención interno, con la tensión deentrada. Este proceso de carga del condensadordepende de distintos factores, entre otros, laimpedancia de la fuente de tensión de entrada (elfabricante recomienda que se sitúe por debajo de 10kohm.
• El tiempo de adquisición dentro de los márgenestípicos es de aproximadamente 20μs.
• La adquisición no comienza hasta que no acabe laconversión. Por lo que se debe esperar un TACQ trasuna conversión , para seleccionar un nuevo canal oluego de encender el módulo AD.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
Tiempo de conversión (TAD)
• Es el tiempo necesario para obtener el valor digitalde la tensión analógica de entrada. Este tiempodepende de la fuente de reloj que se seleccione parala conversión.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
• Para un control adecuado de conversiones A/D, el relojde conversión A/D (TAD) deben ser seleccionados paraasegurar un tiempo mínimo TAD de 1,6 μs.•La siguiente tabla muestra los tiempos de TAD derivadade las frecuencias de funcionamiento del dispositivo y dela fuente de reloj A/D de reloj seleccionado.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
PASOS PARA REALIZAR UNA CONVERSIÓN
1. Configurar el módulo conversor A/D
· Configurar los pines que actúan como entradasanalógicas, las señales que harán de tensión dereferencia y las que trabajarán como E/S digitales.(ADCON1).
· Seleccionar el canal de entrada. A/D (ADCON0).
· Seleccionar la fuente de la señal de reloj para laconversión A/D (ADON0).
· Activar el módulo de conversión A/D (ADCON0)
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
PASOS PARA REALIZAR UNA CONVERSIÓN
2. Activar si, se desea, la interrupción. del móduloconversor A/D:
· Poner a cero el bit ADIF
· Poner a uno el bit ADIE
· Poner a uno los bits habilitadores GIE y PEIE
3. Esperar el tiempo requerido para la adquisición.
4. Inicio de la conversión:
· Poner a 1 el bit GO/#DONE (ADCON0)
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
PASOS PARA REALIZAR UNA CONVERSIÓN
5. Tiempo de espera para terminar la conversión A/Dque puede detectarse Por:
· Exploración de bit GO/DONE# , que al finalizar laconversión toma el valor “0”
· Esperar que se produzca una interrupción si se haprogramado al finalizar la conversión.
· Aunque no se autorice la interrupción el flag ADIF sepone a “ 1 “ al finalizar la interrupción.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
PASOS PARA REALIZAR UNA CONVERSIÓN
6. Leer el par de registros ADRESH:ADRESL donde seencuentran los 10 bits que resultan de la conversióny poner a cero el flag ADIF.
7. Para una nueva conversión volver a los pasos 1 y 2, eltiempo de conversión por bit está definido por TAD,se exige un mínimo de 2*TAD para realizar una nuevaconversión.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
A/D en C• En el compilador C las funciones para manejar el
convertidor A/D son las siguientes:setup_adc(modo);
Donde modo, determina la configuración del móduloA/D correspondiente a los bits 7:6 del ADCON0.
setup_adc(modo); ADCON0(1Fh)
ADC_OFF 00000000
ADC_CLOCK_INTERNAL 11000000
ADC_CLOCK_DIV_2 00000000
ADC_CLOCK_DIV_8 01000000
ADC_CLOCK_DIV_32 10000000
setup_adc_ports(valor);Valor: definición de las entradas analógicas
correspondiente a los bits 3:0 del ADCON1.Prof. Luis Zurita Microcontroladores II
IUT Cumaná
PCFG3PCFG0
AN7RE2
AN6RE1
AN5RE0
AN4RA5
AN3RA3
AN2RA2
AN1RA1
AN0RA0
setup_adc_ports(valor);
0000 A A A A A A A A ALL_ANALOG
0001 A A A A VREF+ A A A AN0_AN1_AN2_AN4_AN5_AN6_AN7_VSS_VREF
0010 D D D A A A A A AN0_AN1_AN2_AN3_AN4
0011 D D D A VREF+ A A A AN0_AN1_AN2_AN4_VSS_VREF
0100 D D D D A D A A AN0_AN1_AN3
0101 D D D D VREF+ D A A AN0_AN1_VSS_VREF
011X D D D D D D D D NO_ANALOGS
1000 A A A A VREF+ VREF- A A AN0_AN1_AN4_AN5_AN6_AN7_VREF_VREF
1001 D D A A A A A A AN0_AN1_AN2_AN3_AN4_AN5
1010 D D A A VREF+ A A A AN0_AN1_AN2_AN4_AN5_VSS_VREF
1011 D D A A VREF+ VREF- A A AN0_AN1_AN4_AN5_VREF_VREF
1100 D D D A VREF+ VREF- A A A_ANALOG_RA3_RA2_REF
1101 D D D D VREF+ VREF- A A AN0_AN1_VREF_VREF
1110 D D D D D D D A AN0
1111 D D D D VREF+ VREF- D A AN0_VREF_VREF
set_adc_channel(canal)
Canal: selección del canal analógico correspondiente alos bits 5:3 del ADCON0.
A/D en C
0(AN0) 1(AN1) 2(AN2) 3(AN3)
4(AN4) 5(AN5) 6(AN6) 7(AN7)
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
valor= read_adc();
Lectura del resultado donde valor es un enterio de 16bits, según la directiva #DEVICE ADC= empleada. Estadirectiva trabaja según la tabla:
A/D en C
DEVICE 8 bit 10 bit 11 bit 16 bit
ADC=8 00-FF 00-FF 00-FF 00-FF
ADC=10 x 0-3FF x x
ADC=11 x x 0-7FF x
ADC=16 0-FF00 0-FFC0 0-FFE0 0-FFFF
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
• Por ejemplo, el fichero 16F877.h incluye comoprimera directiva #device PIC16F877. Para incluir lainformación del tipo de conversor A/D se debeañadir #device adc=10.
READ_ADC() admite tres modos de funcionamiento:
A/D en C
ADC_START_AND_READ Si no se indica nada es la opción pordefecto.Permite iniciar y leer el convertidor.
ADC_START_ONLY Sólo inicia la conversión.
ADC_READ_ONLY Sólo lee los registros del convertidor.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
En el siguiente ejercicio, semedirá un canal analógicoque ingresa por RA0 y semuestra su valor en digital yen voltaje en una pantallaLCD.
#include <16f877a.h>#device ADC=10#fuses
XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)#use fast_IO(c)#include <lcd.c>int16 valor=0;float p;
void main()
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);lcd_init();while(TRUE)set_adc_channel(0);delay_ms(100);valor=read_adc();p=0.004883*valor;lcd_gotoxy(1,1);
printf(lcd_putc,"\fA/DValor=%4LU\n",valor);
printf(lcd_putc,"Voltaje=%g",p);
A/D en C. Ejercicio 1. Lectura de un canal.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
En el siguiente ejercicio, se medirán dos canalesanalógicos (RA0 y RA1), el primero será el valor deuna variable que se desea medir y el segundo será elset point.
Si la variable está por encima del set point se activa unled rojo. En caso contrario se activa un led verde.
A/D en C. Ejercicio 2. Lectura de dos canales.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
#include <16f877.h>#device ADC=10#fuses XT,NOWDT,NOPROTECT,NOLVP#use delay(clock=4000000)#use fast_IO(C)#include <lcd.c>int16 valor=0;long setpoint=0;float p;float psp;
void main()set_tris_c(0);setup_adc(ADC_CLOCK_INTERNAL);setup_adc_ports(ALL_ANALOG);lcd_init();output_C(0);
A/D en C. Ejercicio 2. Lectura de dos canales.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
while (TRUE)set_adc_channel(0);delay_ms(10);valor=read_adc();p=0.004883*valor;printf(lcd_putc,"\fSENSOR=%g\n",p);set_adc_channel(1);delay_ms(10);setpoint=read_adc();psp=0.004883*setpoint;printf(lcd_putc,"SPOINT=%g\n",psp);if(p>=psp)
output_high(PIN_C0);output_low(PIN_C1);
elseoutput_low(PIN_C0);output_high(PIN_C1);
delay_ms(50);
A/D en C. Ejercicio 2. Lectura de dos canales.Continuación.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
En este ejercicio se plantea diseñar untermómetro basado en una NTC modeloNTCSA0WB203, con una beta de 4050 y unaresistencia a 25°C de 20 kΩ.
Estas características se pueden ajustar así comola temperatura a medir en el menú de edición delcomponente.
A/D en C. Ejercicio 3. Termómetro con una NTCNTSA0WB203
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
Modificación de los valores de la NTC enProteus
Cambiar por 25°C
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
La NTC se linealiza mediante una resistencia R1 de 10kΩ, el valor de la tensión de la NTC(VT) se puedeobtener mediante las siguientes ecuaciones(temperatura en °k):
A/D en C. Ejercicio 3. Termómetro con una NTCNTSA0WB203
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
#include "16f877.h"#device adc=10#fuses XT,NOWDT#use delay(clock=4000000)#include <math.h> //Se incluye para los cálculos matemáticos#include <lcd.c>
void main() float tv,tr,temp,y; //Variables de ecuaciónint16 value;lcd_init();setup_port_a( ALL_ANALOG );setup_adc( ADC_CLOCK_INTERNAL );set_adc_channel( 0 );delay_us(10);
A/D en C. Ejercicio 3. Termómetro con una NTCNTSA0WB203
Prof. Luis Zurita Microcontroladores II
IUT Cumaná
while(true)
value = Read_ADC();
tv = 5.0 * value / 1024.0;
tr = tv * 10000.0 / (5.0 - tv);
A = log(tr/20000.0);
y = (1.0/298.15) + (A *(1.0/4050.0));
temp=1.0/y;
temp = temp -273.15;
printf(lcd_putc,"\fTEMPERATURA\n");
printf(lcd_putc,"\nT = %04.2fC", temp);
A/D en C. Ejercicio 3. Termómetro con una NTCNTSA0WB203
Prof. Luis Zurita Microcontroladores II
IUT Cumaná