MICROCONTROLADORES

CONVERSOR ADC DE 8 BITS PARA EL PIC PIC16F887.

Un conversor analógico digital(ADC): Convierte una señal analógica a digital.

Una señal análoga: Es una señal que es continua; en la que es variable su amplitud y periodo en función del tiempo. Esta puede tomar valores infinitos dentro de un tiempo determinado. 

Una señal discreta: Son aquellas que pueden tomar valores finitos dentro de un intervalo de tiempo. 

El microcontrolador PIC16F887 tiene 14 canales análogos los cuales son: AN0, AN1, AN2, AN3, AN4, AN5, AN6, AN7, AN8, AN9, AN10, AN12 y AN13; que están distribuidos en los puertos A, B y E.

Conversor ADC de 8 bits: Cuando la resolución es de 8 bits, la señal digitalizada trabaja entre 0-255. Con 8 bits el mayor número binario que puede tener es :

La resolución: Es el voltaje necesario (señal analógica) para lograr en la salida(señal digital), que se presente 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, para conseguir una conversión máxima. 

Ejemplo:

  • La resolución: 5v/255=19,6mv/paso. 
  • 255*(5v/255): 5v

El 19,6mv/paso, indica los pasos análogos que hay que dar para producir un incremento de un bit en la salida digital. 

Para determinar en todo momento a qué número digital aproximado corresponde la señal análoga de entrada, se utiliza la siguiente expresión:

V_entrada/Resolución.

Ejemplo:  

Si la señal análoga es 2,5v, el número digital aproximado es:

                                         2,5v/19,6mv= 127,55 bits

Si la señal análoga es 5v,  el número digital aproximado es: 

                                                 5v/19,6mv=255bits

 

Funciones del programa 

#INCLUDE <16F887.h>: La librería que se va a trabajar es del pic16F887.

#USE DELAY(CLOCK=4000000): Se configura la frecuencia del reloj del sistema a 4MHZ.

#FUSES XT, NOPROTECT,NOWDT:  Son los fusibles de configuración. En donde:

#FUSES XT: Se habilita el oscilador del sistema. 

#FUSES NOPROTECT: Se desactiva la protección contra lectura de la FLASH.

#FUSES NOWDT: Se desactiva Watch Dog Timer.

#device adc=8: Indica la cantidad de bits que usará el conversor, en este caso, el conversor es de 8 bits. 

#BYTE PORTC=0X07: Define la variable PORTC y se sitúa en la dirección 0X07  de la memoria RAM. 

#BYTE TRISC=0X87: Define la variable TRISC que se sitúa en la dirección 0X87 de la memoria RAM. 

TRISC=0: Indica que el puerto C se configura como salida digital. 

INT8 q: El campo que se define como una variable entera de 8 bits.

setup_adc_ports(PIN_A0): Permite configurar los pines  análogos o digitales de la conversión ADC.

setup_adc(ADC_CLOCK_INTERNAL): Configura el reloj interno utilizado en la conversión. 

set_adc_channel(0): Configura el canal a leer. En el programa se utiliza el canal AN0.

read_adc: Lee el valor digital del conversor análogo a digital. 

 

Materiales:

  • Un PIC16F887.
  • Un potenciómetro de un 1k. 
  • Ocho resistencias de un 220Ω.
  • Ocho leds rojos.
  • Un voltímetro. 

 

Explicación del circuito:

La señal análoga varía con el potenciómetro de 0V a 5V. Mediante los leds se visualiza el valor digital entre 0 a 255.

Diagrama esquemático.

CIRCUITO ADC 8 BITS
Fig 1. Circuito Conversor ADC de 8 Bits con PIC16F887
Video Explicativo.

Código fuente.
#INCLUDE <16F887.h>  //Librería del pic 16f887
#device adc=8;    //Selecciona la cantidad de bits con que se trabajará, en este caso con el conversor de 8 bits
#FUSES NOWDT,XT,NOPROTECT   //Configuración del microcontrolador
#USE DELAY(CLOCK=4000000)   //Configuración del reloj interno

#BYTE PORTC=0X07  //Definir los registros que esta en la dirección 0x07 y 0x87 de la memoría RAM
#BYTE TRISC=0X87

void main(){

TRISC=0;      //Configuración como salidas digitales 
INT8 q;

setup_adc_ports(PIN_A0); //Configura los pines como análogos o digitales. En este caso A0 es configurado como análogo. A0,A1 Y A3 son analógos el resto digital
setup_adc(ADC_CLOCK_INTERNAL);//Configuración del reloj interno o la señal de reloj utilizado para la conversión 

for(;;){

set_adc_channel(0);  //Seleccionar el canal, en este caso, se selecciona AN0
delay_us(20);        //Un retardo para esperar que haga la conversión 
q=read_adc();        //Lee el número de la conversión A/D y lo guarda en q
PORTC=q;            //Lo que hay en q lo guarda en el puerto c
delay_ms(50);       //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. Los campos obligatorios están marcados con *