Documente Academic
Documente Profesional
Documente Cultură
PRÁCTICA Nº 5
CONVERSOR ANÁLOGO DIGITAL (ADC)
1. DEFINICION
Como su propio nombre lo dice, el conversor ADC, lo que hace es convertir una señal analógica
en digital.
Pasa por los siguientes procesos:
Estos vendrían a ser los procesos más básicos que se tiene que realizar para convertir una señal
analógica a una digital, ya que puede haber otros procesos más.
Existen diferentes tipos de conversores y asi mismo bajo diferentes principios, uno de los más
empleados es el de “aproximaciones sucesivas”
El convertidor de aproximaciones sucesivas se utiliza en aplicaciones donde se necesitan altas
velocidades de conversión. Se basa en realizar sucesivas comparaciones de forma ascendente o
descendente hasta encontrar un valor digital que iguale la tensión entregada por el conversor
D/A y la tensión de entrada.
2. CARACTERISTICAS
Número de bits (n): Rango de conversión usado por el ADC. Puede ser 8 o 10 bits,
definido por el programador
Tensión de referencia (Vref): Es el voltaje base por la cual toma como punto de
referencia el módulo ADC para poder hacer sus conversiones, puede ser valor absoluto
de “0 – Vref ” o en un margen de “ -Vref a +Vref.”
Ing. Javier Tarqui Valeriano
TECNOLÓGICO PUERTO DE MEJILLONES MICROCONTROLADORES I
CARRERA: ELECTRÓNICA 33-400
Error de conversión: Bits erróneos generados por una mala conversión, la cual se
origina por una alta velocidad o una mala configuración del módulo.
Por ejemplo, si tenemos que la lectura es de 256 LSB, entonces la tensión analógica será:
#device adc=n → (esta librería inicializa al conversor donde “n” es el número de bits)
setup_adc_ports(valor) → (en “valor” se selecciona el puerto de entrada, por donde
ingresa la señal analógica a convertir), para esto basarse en la tabla
setup_adc(modo) → (en modo se coloca el reloj seleccionado de acuerdo a la tabla)
set_adc_channel(canal) → (selecciona el canal de conversión)
valor=read_adc() → Lectura del resultado y almacenado en valor, que viene a ser
un numero entero dependiendo de la directiva #DEVICE ADC= empleada.
Para la aplicación de las anteriores sentencias se presentan en la siguiente una tabla de los cuales
de acuerdo al programa se debe elegir un valor
La siguiente tabla está muy relacionada con la tabla siguiente, ya que de acuerdo a lo
seleccionado en “valor” de la instrucción del AD, se puede observar la función que
desempeña cada terminal, asi por ejemplo en nuestro programa seleccionaremos AN0, en la
dirección 1110, los voltajes de referencia son VDD=5 y VSS=0
Ing. Javier Tarqui Valeriano
TECNOLÓGICO PUERTO DE MEJILLONES MICROCONTROLADORES I
CARRERA: ELECTRÓNICA 33-400
MODULO ADC EN C
En el compilador para manejar el conversor AD, las instrucciones empleadas son las siguientes:
setup_adc_ports(valor)
En la tabla se muestran todos los pines de izquierda a derecha, donde A significa analógico y
D digital, a la derecha se observa que de acuerdo a la dirección, en “valor” se puede
seleccionar ya sea AN0, AN1 u otro, según lo deseado. Esta selección se hace con relación a
la tabla superior de acuerdo al programa
Instrucción: “setup_adc(modo)”
Esta sentencia está en relación con la fuente de selección del reloj (por lo general nosotros
seleccionamos 20 MHz). La tabla que se muestra está en relación con la subsiguiente, donde
ADC_CLOCK_DIV_2 es para 2T que equivale a 100 ns, entonces dependiendo de nuestros
requerimientos, se dispone la sentencia deseada. En nuestro programa seleccionamos reloj
interno porque los otros son muy pequeños para el muestreo
Instrucción “set_adc_channel(canal)”
Esta instrucción habilita el canal que se usa (en nuestro programa se usará el 0)
Instrucción: valor=read_adc()
Esta sentencia lee el resultado y almacena su valor leido, que puede ser un numero entero
dependiendo de la directiva #DEVICE ADC empleada.
Comúnmente los conversores se emplean para relacionar el mundo físico con el de los
procesadores inteligentes, para el efecto es necesario emplear sensores.
Estos son algunos sensores cuya salida es en voltios, la cual podemos hacer uso del
módulo AD del PIC para poder digitalizar y controlar esta señal.
150 °C = 4230 mV
-55 °C = -2180 mV1
6. MATERIALES
- Microcontrolador PIC 6f877a
- Resistencias, capacitores y oscilador de cristal que son parte del circuito del
microcontrolador
- Resistencias de protección de 330 Ω
- LCD de 2x16
- Sensor de temperatura LM35
7. DESARROLLO DE LA PRÁCTICA
PROGRAMA 1.
PROGRAMA
#include <16f877a.h>
#device adc=10 //sentencia para definir al conversor de 10 bits
#fuses hs,nowdt
#use delay(clock=20M)
#define lcd_data_port getenv("sfr:portb")
#define lcd_rs_pin pin_b0 //se configura que el pin bo del micro para el pin rs del LCD
#define lcd_rw_pin pin_b1 //se configura que el pin b1 para el pin rw del LCD
#define lcd_enable_pin pin_b2 //se configura pin b2 para enable del LCD
#include <lcd.c>
void main()
{
int16 q; //variable del adc
float p; //variable del voltaje
setup_adc_ports(an0); /selecciona el puerto a realizar la conversion
setup_adc(adc_clock_internal); //selecciona el reloj de conversion
lcd_init();
while(true)
{
Medidor de temperatura
Descripción: el estudiante debe implementar el programa y circuito donde se realiza:
- Se configura el LCD para que se lea la temperatura que el sensor LM35 sensa y se
despliegue por su pantalla
- El LM35 se coloca a la entrada analógica A1 del PIC
- Su conversor será de 8 bits
- Para variar la temperatura puede usar un cautin u otro que caliente al sensor
- La conversión de análogo a digital para que la operación se realice a digital y se lea en
grados centígrados viene dado por la operación:
El programa siguiente es para que se tome como una base para su programa a desarrollar
#include <16f877a.h>
#device adc=10 //sentencia para definir al conversor de 10 bits
#fuses hs,nowdt
#use delay(clock=40M)
#include <lcd.c> //libreria para utilizer LCD por el Puerto D
void main()
{
float temper,medicion;
lcd_init(); //inicializa LCD
lcd_putc(“Termometro\n”); //muestra texto
lcd_putc(“con LM35”);
delay_ms(2000);
lcd_putc(“\f”); //limpia pantalla
lcd_putc(“Temperatura\n”); //muestra texto
lcd_putc(“actual”); //muestra texto
delay_ms(1000);
lcd_gotoxy(14,2);
lcd putc(ºC);
while(true)
{
lcd_gotoxy(8,2);
lcd_putc(“”); //limpia ese sector de pantalla
lcd_gotoxy(8,2); //acomoda cursor
setup_adc(adc_clock_internal); //selecciona el reloj de conversion
setup_adc_ports(all_analog);
set_adc_channel(0); //selecciona el canal de la entrada analógica A0
delay_us(20);
medicion=read_adc(); //realiza conversion AD
setup_adc(adc_off); //apaga ADC
temper=medición*(0.48875); //pasa binario a ºC
printf(lcd_putc,"%02.1f",temper); //xxx.x ºC
delay_ms(1000);
}
}
8. INFORME
Una vez concluida la práctica el o los estudiantes deben presentar en la siguiente clase el
informe de la práctica, que contenga los siguientes puntos:
Plano o layout del circuito con empleando un software especializado como el software
“fritzing” u otro
Listado del programa del PIC – C Compiler
Observaciones y conclusiones
Hoja de calculo
HOJA DE LABORATORIO