Vous êtes sur la page 1sur 30

MICROCONTROLADORES II

MDULO A/D MDULO A/D


(Convertidor Analgico/Digital)
TEMA 4
PROF. LUIS ZURITA
RESOLUCIN
Prof. Luis Zurita Microcontroladores II
VOLTAJES DE REFERENCIA EXTERNOS
El convertidor A/D puede seleccionar como tensin de
referencia la interna VDD y Tierra.
Para referencias externas, se introducen por:
RA3/AN3/VREF+ y RA2/AN2/VREF-
Las siguientes limitaciones aplican:
El mximo voltaje aplicado a VREF+ (RA3/AN3) ser El mximo voltaje aplicado a VREF+ (RA3/AN3) ser
VDD+0,3V y el mnimo VDD-2,5V.
Sobre el voltaje aplicado a VREF- (RA2/AN2) la
mnima tensin ser VSS-0,3V y la mxima (VREF+) -
2V.
Por ejemplo, si la tensin de alimentacin es de 5V, la
tensin en RA3/AN3 no podr exceder de 5V. Por lo
que el mximo voltaje en VREF- ser de 3V.
Prof. Luis Zurita Microcontroladores II
REGISTROS RELACIONADOS AL MDULO A/D
ADCON0: Registro de control 0. (Banco 0).
ADCON1: Registro de control 1. (Banco 1).
ADRESH: Guarda la parte alta del Resultado de ADRESH: Guarda la parte alta del Resultado de
la conversin. (Banco 0).
ADRESL: Guarda la parte baja del Resultado de
la conversin. (Banco 1).
Prof. Luis Zurita Microcontroladores II
Seleccin del reloj de conversin A/D
El tiempo de conversin A/D por bit se define como
TAD. La conversin A/D requiere mnimo 12TAD por
10-bits de conversin.
La fuente del reloj de conversin A/D es seleccionado
por software, mediante los bits ADCON0 <7:6>. Las
cuatro opciones posibles para TAD son:
ADCS 1:0 PERODO
0 0 2TOSC
0 1 8TOSC
1 0 32TOSC
1 1 RC interno (2-6 s)
Prof. Luis Zurita Microcontroladores II
Tiempo de adquisicin (T
ACQ
)
Es el tiempo necesario para que se cargue el
condensador de retencin interno, con la tensin de
entrada. Este proceso de carga del condensador
depende de distintos factores, entre otros, la
impedancia de la fuente de tensin de entrada (el
fabricante recomienda que se site por debajo de 10 fabricante recomienda que se site por debajo de 10
kohm.
El tiempo de adquisicin dentro de los mrgenes
tpicos es de aproximadamente 20s.
La adquisicin no comienza hasta que no acabe la
conversin. Por lo que se debe esperar un T
ACQ
tras
una conversin , para seleccionar un nuevo canal o
luego de encender el mdulo AD.
Prof. Luis Zurita Microcontroladores II
Tiempo de conversin (T
AD
)
Es el tiempo necesario para obtener el valor digital
de la tensin analgica de entrada. Este tiempo
depende de la fuente de reloj que se seleccione para
la conversin.
Prof. Luis Zurita Microcontroladores II
Para un control adecuado de conversiones A/D, el reloj
de conversin A/D (TAD) deben ser seleccionados para
asegurar un tiempo mnimo TAD de 1,6 s.
La siguiente tabla muestra los tiempos de TAD derivada
de las frecuencias de funcionamiento del dispositivo y de
la fuente de reloj A/D de reloj seleccionado.
Prof. Luis Zurita Microcontroladores II
CICLOS DE CONVERSIN
Prof. Luis Zurita Microcontroladores II
FORMATO DE RESULTADOS
Prof. Luis Zurita Microcontroladores II
Prof. Luis Zurita Microcontroladores II
Prof. Luis Zurita Microcontroladores II
Prof. Luis Zurita Microcontroladores II
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 configuracin del mdulo
A/D correspondiente a los bits 7:6 del ADCON0.
setup_adc(modo); ADCON0(1Fh)
ADC_OFF 00000000 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: definicin de las entradas analgicas
correspondiente a los bits 3:0 del ADCON1. Prof. Luis Zurita Microcontroladores II
PCFG3
PCFG0
AN7
RE2
AN6
RE1
AN5
RE0
AN4
RA5
AN3
RA3
AN2
RA2
AN1
RA1
AN0
RA0
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 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: seleccin del canal analgico correspondiente a
los 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
valor= read_adc();
Lectura del resultado donde valor es un entero de 16
bits, segn la directiva #DEVICE ADC= empleada. Esta
directiva trabaja segn 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
Por ejemplo, el fichero 16F877.h incluye como
primera directiva #device PIC16F877. Para incluir la
informacin del tipo de conversor A/D se debe
aadir #device adc=10.
READ_ADC() admite tres modos de funcionamiento:
A/D en C
READ_ADC() admite tres modos de funcionamiento:
ADC_START_AND_READ Si no se indica nada es la opcin por
defecto.
Permite iniciar y leer el convertidor.
ADC_START_ONLY Slo inicia la conversin.
ADC_READ_ONLY Slo lee los registros del convertidor.
Prof. Luis Zurita Microcontroladores II
En el siguiente ejercicio, se
medir un canal analgico
que ingresa por RA0 y se
muestra su valor en digital y
en voltaje en una pantalla
LCD.
#include <16f877a.h>
#device ADC=10
#fuses
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;
A/D en C. Ejercicio 1. Lectura de un canal.
#fuses
XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use fast_IO(c)
#include <lcd.c>
int16 valor=0;
float p;
void main(){
p=0.004883*valor;
lcd_gotoxy(1,1);
printf(lcd_putc,"\fA/DValor=%4LU\n",valor);
printf(lcd_putc,"Voltaje=%g",p);
}
}
Prof. Luis Zurita Microcontroladores II
A/D en C. Ejercicio 1. Lectura de un canal.
Prof. Luis Zurita Microcontroladores II
En el siguiente ejercicio, se medirn dos canales
analgicos (RA0 y RA1), el primero ser el valor de
una variable que se desea medir y el segundo ser el
set point.
Si la variable est por encima del set point se activa un
A/D en C. Ejercicio 2. Lectura de dos canales.
Si la variable est por encima del set point se activa un
led rojo. En caso contrario se activa un led verde.
Prof. Luis Zurita Microcontroladores II
#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;
A/D en C. Ejercicio 2. Lectura de dos canales.
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);
Prof. Luis Zurita Microcontroladores II
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;
A/D en C. Ejercicio 2. Lectura de dos canales.
Continuacin.
psp=0.004883*setpoint;
printf(lcd_putc,"SPOINT=%g\n",psp);
if(p>=psp){
output_high(PIN_C0);
output_low(PIN_C1);}
else{
output_low(PIN_C0);
output_high(PIN_C1);
}
delay_ms(50);
}
}
Prof. Luis Zurita Microcontroladores II
A/D en C. Ejercicio 2. Lectura de dos canales.
Prof. Luis Zurita Microcontroladores II
En este ejercicio se plantea disear un
termmetro basado en una NTC modelo
NTCSA0WB203, con una beta de 4050 y una
resistencia a 25C de 20 k.
A/D en C. Ejercicio 3. Termmetro con una NTC
NTSA0WB203
Estas caractersticas se pueden ajustar as como
la temperatura a medir en el men de edicin del
componente.
Prof. Luis Zurita Microcontroladores II
Modificacin de los valores de la NTC en
Proteus
Cambiar por 25C
Prof. Luis Zurita Microcontroladores II
La NTC se linealiza mediante una resistencia R1 de 10
k, el valor de la tensin de la NTC(VT) se puede
obtener mediante las siguientes ecuaciones
(temperatura en k):
A/D en C. Ejercicio 3. Termmetro con una NTC
NTSA0WB203
Prof. Luis Zurita Microcontroladores II
#include "16f877.h"
#device adc=10
#fuses XT,NOWDT
#use delay(clock=4000000)
#include <math.h> //Se incluye para los clculos matemticos
#include <lcd.c>
A/D en C. Ejercicio 3. Termmetro con una NTC
NTSA0WB203
void main() {
float tv,tr,temp,y; //Variables de ecuacin
int16 value;
lcd_init();
setup_adc_ports(ALL_ANALOG);
setup_adc( ADC_CLOCK_INTERNAL );
set_adc_channel( 0 );
delay_us(10);
Prof. Luis Zurita Microcontroladores II
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));
A/D en C. Ejercicio 3. Termmetro con una NTC
NTSA0WB203
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);
}
}
Prof. Luis Zurita Microcontroladores II
A/D en C. Ejercicio 3. Termmetro con una NTC
NTSA0WB203
Prof. Luis Zurita Microcontroladores II

Vous aimerez peut-être aussi