Autor Tema: PROYECTO DE DHT11 PARA MICROCONTROLADOR 16F877A  (Leído 1701 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado os_paz

  • PIC10
  • *
  • Mensajes: 4
PROYECTO DE DHT11 PARA MICROCONTROLADOR 16F877A
« en: 03 de Diciembre de 2015, 18:54:53 »
Hola Amigos, me encuentro realizando un proyecto y para mejorar el funcionamiento del micro obte por el sensor dht11, he encontrado algunas librerias en el foro y tratando de compilar en PIC C, pero tengo un error al final. si alguien me puede correjir o ayudar seria fabuloso !
gracias
//////////////////////////
#include <16f877a.h>           //PIC utilizado
#device adc=10
#fuses NOWDT,NOPROTECT,NOLVP,NODEBUG,//USBDIV//,PLL5,CPUDIV1,VREGEN,HSPLL,<< esos FUSES no los encotraba el compilador
#use delay(clock=8M)/
#include <lcd.c>
 //LIBRERIA PARA EL SENSOR DE HUMEDAD DHT11 Y DHT 22
 //Realizada por Juan Pedro Ortiz Canos Nº de colegiado 10910
#define dht11 PIN_A2
#bit dht_io = 0x85.2 // este es el bit 0 del tris b para ponerlo como entrada o salida
#byte puerto_b = 0x05
   
byte dht_dat[5]; // array de datos para el sensor
#use rs232(baud=9600,xmit=PIN_B7,rcv=PIN_B6,bits=8,parity=N,FORCE_SW) // conexion rs232 por si acaso alguien la necesita
void iniciar_dht();//para iniciar el sensor
void leer_dht();//para comenzar la captura de datos el sensor
byte leer_dht_dat();//funcion de captura de datos del sensor
void mostrar_dht();// mostrar datos
//--------------------------------funcion inicializar
void iniciar_dht()
{
dht_io=0;
delay_ms(1);
OUTPUT_HIGH(dht11);
}
//----------------------funcion de leer el dht-------------
void leer_dht()
{
//------- variables
byte GlobalErr=0;
byte dht_in;
byte i;
byte dht_check_sum;
//-----------------
dht_io=0; // configurar el pin como salida
OUTPUT_HIGH(dht11);
OUTPUT_LOW(dht11);
delay_ms(18);// retardo indicado por el fabricante
OUTPUT_HIGH(dht11);
delay_us(22);// entre 22 y 28 us
dht_io=1;// configurar el pin como entrada//arriva
delay_us(5);// retardo indicado por el fabricante esta entre los 22 y 28 us
dht_in=input(dht11);
if(dht_in)
 {
  GlobalErr=1;
  printf(lcd_putc,"<dht11 start condition 1 not met");
  return;
 }
 delay_us(80);
 dht_in=input(dht11);
 if(!dht_in)
 {
  GlobalErr=2;
  printf(lcd_putc,"<dht11 start condition 2 not met");
  return;
 }
  delay_us(80);
  for (i=0; i<5; i++)
  {
    dht_dat = leer_dht_dat(); // capturando datos
  }
 
  dht_io=0;// configura el puerto como salida

OUTPUT_HIGH(dht11);

dht_check_sum = dht_dat[0]+dht_dat[1]+dht_dat[2]+dht_dat[3]; // comprobacion si la lectura es correcta
if(dht_dat[4]!=dht_check_sum)
{
 GlobalErr=3;
 printf(lcd_putc,"DHT11 Error de medida");
 
}

// por ajustar segun caracteristicas +- 5%
printf(lcd_putc,"Current humdity = ");
printf(lcd_putc,"%d",dht_dat[0]+5);
printf(lcd_putc,".");
printf(lcd_putc,"%d",dht_dat[1]+50);
printf(lcd_putc," RH  ");
printf(lcd_putc,"temperature = ");
printf(lcd_putc,"%d",dht_dat[2]+2); // por ajustar segun caracteristicas +- 2ºC
printf(lcd_putc,".");
printf(lcd_putc,"%d",dht_dat[3]+50);

printf(lcd_putc,"C \n ");
delay_ms(2000);



}// fin de funcion leer dht

//------------------------funcion recoger bits del dht
byte leer_dht_dat()
{
byte i = 0;
 byte result=0;
 for (i=0; i< 8; i++) {
 //We enter this during the first start bit (low for 50uS) of the byte
 //Next: wait until pin goes high
  while(input(dht11)==0);
  delay_us(30);
  if (input(dht11)==1)//Was: if(PINC & _BV(dht_PIN))
  {
  result |=(1<<(7-i));
  }
  while (input(dht11)==1);
 //Was: while((PINC&_BV(dht_PIN)));  //condition always FALSE PIC   
 }
 //end of  "for.."// UNDEINED IDENTIFIER END
 return result;
}
 
 
 
Hola, estudiante de Ingeniera en Electricidad y Electrónica.
Saludos

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re:PROYECTO DE DHT11 PARA MICROCONTROLADOR 16F877A
« Respuesta #1 en: 03 de Diciembre de 2015, 22:49:11 »
y la función Main ¿?¿?  :D
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek


 

anything