Está en la página 1de 4

#include "xc.

h"

#include <stdio.h>

#include "config.h"

#include "reloj.h"

#include "xlcd.h"

#include <libpic30.h>

#include <p33FJ12MC202.h>

#include <math.h>

char adc_vector[4] = "";

char adc_vector1[4] = "";

int adc_result = 0;

int adc_humedad = 0;

float vm = 0;

float rntc = 0;

float temperaturaK = 0;

float temperaturaC = 0;

float adc_float = 0;

float rAux = 50000;

float vcc = 3.5;

float humedad =0;

float beta = 3904; //Beta de 50Kohm para NTC

float temp0 = 298.0; //Temp en grados Kelvin(0)

float r0 = 50000; //RNTC cuando la temp. es 0

void adc1 (void);

int main (void)


{

adc1();// Llama función para inicializar el ADC

AD1CON1bits.ADON = 1;

XLCDInit();//Inicializa LCD

WriteCmdXLCD(CLEAR_XLCD); //Limpia la pantalla

XLCDgotoXY(0,0);

putrsXLCD("PROYECTO");

XLCDgotoXY(1,0);

putrsXLCD("DSPIC33FJ12MC202");

__delay_ms(3000);

WriteCmdXLCD(CLEAR_XLCD);

XLCDgotoXY(1,0);

putrsXLCD("HUM:");

XLCDgotoXY(0,0);

putrsXLCD("TEM: ");

while(1)

AD1CON1bits.SAMP = 1;// Bit para habilitar muestreo

__delay_ms(500);

AD1CON1bits.SAMP = 0;// Retiene el muestreo

while(!AD1CON1bits.DONE); // Esperar a que se haya realizado la convercion

AD1CON1bits.DONE = 0;

adc_result = ADCBUF0;

adc_humedad = ADCBUF1;

vm = (float)adc_result*3.5/4096; //0 ~ 4095 (palabra de 12 bits

humedad=(float)adc_result*100/4096;

rntc = rAux/((vcc/vm)-1);

temperaturaK = beta/(log(rntc/r0)+(beta/temp0));
temperaturaC = temperaturaK - 273.15;

__delay_ms(10);

sprintf(adc_vector,"%.2f",temperaturaC);

XLCDgotoXY(0,6);

putrsXLCD(adc_vector);

XLCDgotoXY(0,12);

putrsXLCD("C");

sprintf(adc_vector1,"%.2f",humedad);

XLCDgotoXY(1,12);

putrsXLCD("%");

XLCDgotoXY(1,6);

putrsXLCD(adc_vector1);

return 0;

void adc1 (void)

TRISA = 0x0003;

// Entrada analógica RA0

AD1PCFGL = 0xFFFC;

// Todas entradas analógicas *Solo se necesita la primera

AD1CON1bits.AD12B=1;

// 1=12 bits resolución y muestreo secuencial de los canales

AD1CON1bits.ASAM=0;

// El muestreo inicia cuando bit SAMP=1 *muestreo manual


AD1CON1bits.SSRC=0;

// Termina el muestreo e inicia la conversión

AD1CHS0bits.CH0NA =0;

// La entrada negativa será Vss

AD1CHS0bits.CH0SA =0;

// Entrada sera por AN0

AD1CON2bits.CSCNA =0;

// Muestreo secuencial (scan) deshabilitado

AD1CON2bits.VCFG =0;

// Referencia para la conversión: Referencia

// positiva=AVdd , AVss

AD1CON2bits.BUFM =0;

// Configurado como buffer de 16 palabras

AD1CON2bits.SMPI =0;

// Después de la conversión se genera la interrupción

AD1CON2bits.ALTS =0;

// Solo muestra un Canal

AD1CON3bits.ADRC =0;

// Reloj del ADC es derivado del sistema

AD1CON3bits.ADCS =21;

// Tiempo de conversión.

También podría gustarte