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.

 

 

soy el administrador del sitio web. si tienes alguna duda, no dudes en contactarme

Deja una respuesta

Tu dirección de correo electrónico no será publicada.