Microcontroladores: Conversión ADC de 10 bits.
Conversor ADC de 10 bits: Un conversor análogo a digital, es un sistema que permite convertir señales analógicas en señales digitales.
Una señal análoga: Es una señal continua que puede tomar cualquier valor en un intervalo de tiempo.
Una señal digital: Es una señal discreta, que puede tomar un número finito de valores en un determinado tiempo.
Ejemplo de una señal análoga y una señal digital.
El pic16F887, contiene un módulo convertidor ADC(análogo a digital), que proporciona una resolución de 10 bits. Además, tiene 14 canales de entrada(AN0, AN1, AN2, AN3, AN4, AN5, AN6,AN7,AN8,AN9, AN10, AN11,AN12,AN13).
Conversor ADC de 10 bits: Cuando la resolución es de 10 bits, la señal digitalizada trabaja entre 0-1023. Con 10 bits el mayor número binario que puede tener es:
¿Cómo se calcula la resolución?
La resolución, es el voltaje necesario para lograr en la salida un cambio de bits.
N: El número de bits que tiene el conversor ADC.
Vin: Voltaje que hay que poner a la entrada del conversor ADC.
Ejemplo: La resolución: 5v/1023=4,8mv/paso.
Para determinar qué número digital aproximado corresponde la señal de entrada, se utiliza la siguiente expresión: Ventrada/Resolución
Por ejemplo:
Si la señal análoga es 2V, el número digital aproximado es:
- 2v/4,8mv= 416,6 bits
Funciones del programa
#include <16f887.h>: Es la librería para el microcontrolador pic16F887.
#device adc=10: Función que indica el conversor a utilizar, en este caso es el conversor de 10 bits.
#use delay(clock=4000000): Permite configurar o activar la frecuencia del sistema a 4MHZ.
#fuses XT,NOWDT: Son los que permiten la configuración del microcontrolador.
#fuses XT: Activa el oscilador del sistema.
#fuses NOWDT: Se deshabilita el Watch Dog Timer..
#define use_portb_lcd TRUE: Se utiliza para configurar los pines del puerto D.
#include <lcd. c>: Librería que se utiliza para el manejo de la pantalla lcd.
int16 q: El campo “q” que se define como un dato tipo entero de 16 bits.
float lectura: El campo lectura se define como un dato tipo flotante.
lcd_init(): Función que permite inicializar la pantalla lcd.
setup_adc_ports(PIN_A0): Permite configurar los pines análogos o digitales de la conversión ADC. En este caso, se configura el PIN_A0 como análogo.
setup_adc(ADC_CLOCK_INTERNAL): Configura el reloj interno de la conversión ADC.
set_adc_channel(0): Configura el canal a leer, es decir, con el que se va a trabajar. En el programa se utiliza el canal AN0.
read_adc(): Lee el valor digital del conversor análogo a digital.
read_adc(): Lee el valor digital del conversor análogo a digital.
lectura: 5.0*q/1024.0: Esta fórmula es para convertir el valor almacenado(q) de la conversión ADC en voltaje.
lcd_gotoxy(x,y): Función que indica la ubicación del cursor en la posición “x” y “y”.
printf(lcd_putc,”Voltaje=%1.2vf”,lectura): Muestra el texto y el valor de temperatura en este caso.
Materiales:
- Una pantalla LCD.
- Un pic16F887.
- Un potenciómetro de un 1k.
- Un voltímetro.
Explicación del circuito:
Se lee una entrada analógica y se muestra en la pantalla LCD de la placa el valor leído en voltios.
CIRCUITO.
Programa: Conversión ADC de 10 Bits.
#include <16f887.h> //La librería que se utiliza para el pic16f887
#device adc=10 //Permite poner la cantidad de bits según el conversor a usar, en este caso son de 10bits
#use delay (clock=4000000) //Configuración del reloj
#fuses XT,NOWDT //La configuración del microcontrolador
#define use_portb_lcd TRUE
#include <lcd.c>
void main(){
int16 q;
float lectura;
lcd_init(); //Inicializa la pantalla lcd
setup_adc_ports(PIN_A0); //Define los pines como analógos o digitales. En este caso es analógo.
setup_adc(ADC_CLOCK_INTERNAL); //Configura el reloj interno de la conversión
for(;;){
set_adc_channel(0); //Selecciona el canal a trabajar, en este caso se trabaja con el canal AN0
delay_us(20); //Retardo
q=read_adc(); //Guarda en q el valor leído de la conversión A/D
lectura=5.0*q/1024.0;
lcd_gotoxy(1,1); //Indica la posición del texto de la primera línea
printf(lcd_putc,"Voltaje= %1.2fv", lectura); //Va a mostrar el valor y el texto
delay_ms(1000); //Retardo
}
}
CONTENIDOS MÁS RELEVANTES.