Microcontroladores ii en c. tema 4

35
MICROCONTROLADORES II MÓDULO A/D (Convertidor Analógico/Digital) PROF. LUIS ZURITA IUT Cumaná

Transcript of Microcontroladores ii en c. tema 4

MICROCONTROLADORES IIMÓDULO A/D

(Convertidor Analógico/Digital)

PROF. LUIS ZURITA

IUT Cumaná

RESOLUCIÓN

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

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á

CICLOS DE CONVERSIÓN

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

FORMATO DE RESULTADOS

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

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á

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á

A/D en C. Ejercicio 2. Lectura de dos canales.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

A/D en C. Ejercicio 2. Lectura de dos canales.

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á

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

A/D en C. Ejercicio 3. Termómetro con una NTCNTSA0WB203