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.