Anda di halaman 1dari 3

Practica de ADC

(Sensores)

El ADC (CONVERTIDOR ANALOGO DIGITAL) es algo muy sencillo aunque tiene varias
instrucciones, pero todas ellas son fáciles de aprender y combinar. Esta es la forma como
podemos leer un sensor de tres pines

La librería del ADC que está incluida en el compilador hecha solo para que trabaje en el puerto
A.
Declaramos las variables globales
float Vleida;// la variable float se utiliza cuando se requieren decimales ej: 4,7876
float Voltaje;// voltaje es una variable float 4,52
float V; // V es una variable float que se utiliza para el calculo

#include <18f4550.h>
#use delay(clock=8000000)
float Vleida;
float Voltaje;
float V;
void main (void)
{
Ahora tenemos que agregar algo nuevo dentro de la función principal, como lo es la función
ADC.
// ADC Functions: SETUP_ADC(), SETUP_ADC_PORTS() (aka SETUP_PORT_A),
// SET_ADC_CHANNEL(), READ_ADC()
// Constants used for SETUP_ADC() are:
#define ADC_OFF 0 // ADC Off
#define ADC_CLOCK_DIV_2 0x100
#define ADC_CLOCK_DIV_4 0x04
#define ADC_CLOCK_DIV_8 0x01
#define ADC_CLOCK_DIV_16 0x05
#define ADC_CLOCK_DIV_32 0x02
#define ADC_CLOCK_DIV_64 0x06
#define ADC_CLOCK_INTERNAL 0x07 // Internal 2-6us

// Constants used in SETUP_ADC_PORTS() are:


#define NO_ANALOGS 0x0F // None
#define ALL_ANALOG 0x00 // A0 A1 A2 A3 A5 E0 E1 E2 B2 B3 B1 B4 B0
#define AN0_TO_AN11 0x03 // A0 A1 A2 A3 A5 E0 E1 E2 B2 B3 B1 B4
#define AN0_TO_AN10 0x04 // A0 A1 A2 A3 A5 E0 E1 E2 B2 B3 B1
#define AN0_TO_AN9 0x05 // A0 A1 A2 A3 A5 E0 E1 E2 B2 B3
#define AN0_TO_AN8 0x06 // A0 A1 A2 A3 A5 E0 E1 E2 B2
#define AN0_TO_AN7 0x07 // A0 A1 A2 A3 A5 E0 E1 E2
#define AN0_TO_AN6 0x08 // A0 A1 A2 A3 A5 E0 E1
#define AN0_TO_AN5 0x09 // A0 A1 A2 A3 A5 E0
#define AN0_TO_AN4 0x0A // A0 A1 A2 A3 A5
#define AN0_TO_AN3 0x0B // A0 A1 A2 A3
#define AN0_TO_AN2 0x0C // A0 A1 A2
#define AN0_TO_AN1 0x0D // A0 A1
#define AN0 0x0E // A0
De lo anterior vamos a utilizar lo siguiente:
SETUP_ADC(ADC_CLOCK_INTERNAL);
SETUP_ADC_PORTS(an0);

Estas funciones de SETUP están disponibles en el microcontrolador.

Nuestro programa va de la siguiente forma


#include <18f4550.h>
#use delay(clock=8000000)
float Vleida;
float Voltaje;
float V;

void main (void)


{

Aquí debemos definir las funciones del ADC que vamos a utilizar
SETUP_ADC(ADC_CLOCK_I NTERNAL);// El setup se utiliza cuando se requiere un hardware
del micro en este caso es el convertidor de análogo a digital especialmente el reloj interno ADC
SETUP_ADC_PORTS (an0); // El setup se utiliza cuando se requiere un hardware del micro en
este caso es el convertidor de análogo a digital donde se le asigna el puerto AN0 por defecto.
while(true)
{
Aquí se escriben las instrucciones
}
}
A continuación explicare las instrucciones utilizadas en el ADC antes de empezar a escribir el
programa:
SET_ADC_CHANNEL(0); // Se asigna un canal para el ADC. En este caso el canal 0 por
utilizar el AN0.
Vleida=READ_ADC(); //Se le asigna una variable float a la lectura del sensor (ADC).
Voltaje=(Vleida*5)/255; // Esta operación significa que la lectura del sensor se multiplica por 5
que corresponden al voltaje de alimentación del microcontrolador y se divide por 8 bit (255)
V=Voltaje; // Se le asigna una variable float a la lectura de voltaje.

Ya tenemos todas las instrucciones y las funciones ADC que se requieren para escribir el
programa.

#include<18f4550.h>
#use delay(clock=8000000)
#include<lcd.c>
float Vleida;
float Voltaje;
float V;

void main (void)


{

SETUP_ADC(ADC_CLOCK_I NTERNAL);
SETUP_ADC_PORTS (an0);

while (true)
{
SET_ADC_CHANNEL(0);
Vleida=READ_ADC();
Voltaje=(Vleida*5)/255;
V=(Voltaje*1);

printf(lcd_putc,"voltios= ""%1.2f",V);
}
}
Nota: Tenga en cuenta que el programa compila pero hay que agregar lineas que hacen falta.

Anda mungkin juga menyukai