LIBRERIA:
//----------------------------------------------------------//
#define dht11 PIN_B0
#bit dht_io = 0x86.0 // este es el bit 0 del tris b para ponerlo como entrada o salida
#byte puerto_b = 0x06
byte dht_dat[5]; // Creo un array de tipo byte de 5 ya que asi en el programa principal podemos mostrar cada dato
//individualmente sin necesidad de punteros
//los datos obtenidos son en este orden:
//dato 0= parte entera de la humedad
//dato1= parte decimal de la humedad
//dato2= parte entera de la temeperatura
//dato3= parte decimal de la temperatura
//dato4= dato de comprobacion para saber si la captura es correcta
//#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_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
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("<dht11 start condition 1 not met");
return;
}
delay_us(80);
dht_in=input(dht11);
if(!dht_in)
{
GlobalErr=2;
printf("<dht11 start condition 2 not met");
return;
}
delay_us(80);
for (i=0; i<5; i++)
{
dht_dat [i]= 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("DHT11 checksum error");
}
dht_dat[0]=dht_dat[0]+5;
dht_dat[2]=dht_dat[2]+2;
// por ajustar segun caracteristicas +- 5%
//printf("Current humdity = ");
//printf("%d",dht_dat[0]+5);
//printf(".");
//printf("%d",dht_dat[1]+50);
//printf(" RH ");
//printf("temperature = ");
//printf("%d",dht_dat[2]+2); // por ajustar segun caracteristicas +- 2ºC
//printf(".");
//printf("%d",dht_dat[3]+50);
//
//printf("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)));
}
//end of "for.."
return result;
}
//---------------------------------------------------------
a continuacion voy a poner un ejemplo hecho con el PIC16F84A pero puede utilizarse para cualquier PIC
EJEMPLO:
//--------------------------------------------------------------------------------
#include <16F84A.h>
#include <dht11.h> //esta es la libreria creada por mi
#FUSES NOWDT //desactiva el wath dog
#FUSES XT //Crystal <= 4mhz
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_B5,rcv=PIN_B4,BITS=8,PARITY=N)
void main()
{
//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
// TODO: USER CODE!!
delay_ms(5000);
printf("iniciando..\n");
do
{
delay_ms(10);
iniciar();
leer_dht();
printf("Humedad = ");
printf("%d",dht_dat[0]);
delay_ms(20);
printf(",");
printf("%d ",dht_dat[1]);
delay_ms(20);
printf("Temperatura = ");
printf("%d ",dht_dat[2]);
delay_ms(20);
printf(",");
printf("%d ",dht_dat[3]);
delay_ms(20);
printf("\n...terminado..\n");
delay_ms(2000);
}while(true);
}
//-------------------------------------------------------
Link http://www.todopic.com.ar/foros/index.php?topic=35680.0
//----------------------------------------------------------//
#define dht11 PIN_B0
#bit dht_io = 0x86.0 // este es el bit 0 del tris b para ponerlo como entrada o salida
#byte puerto_b = 0x06
byte dht_dat[5]; // Creo un array de tipo byte de 5 ya que asi en el programa principal podemos mostrar cada dato
//individualmente sin necesidad de punteros
//los datos obtenidos son en este orden:
//dato 0= parte entera de la humedad
//dato1= parte decimal de la humedad
//dato2= parte entera de la temeperatura
//dato3= parte decimal de la temperatura
//dato4= dato de comprobacion para saber si la captura es correcta
//#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_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
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("<dht11 start condition 1 not met");
return;
}
delay_us(80);
dht_in=input(dht11);
if(!dht_in)
{
GlobalErr=2;
printf("<dht11 start condition 2 not met");
return;
}
delay_us(80);
for (i=0; i<5; i++)
{
dht_dat [i]= 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("DHT11 checksum error");
}
dht_dat[0]=dht_dat[0]+5;
dht_dat[2]=dht_dat[2]+2;
// por ajustar segun caracteristicas +- 5%
//printf("Current humdity = ");
//printf("%d",dht_dat[0]+5);
//printf(".");
//printf("%d",dht_dat[1]+50);
//printf(" RH ");
//printf("temperature = ");
//printf("%d",dht_dat[2]+2); // por ajustar segun caracteristicas +- 2ºC
//printf(".");
//printf("%d",dht_dat[3]+50);
//
//printf("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)));
}
//end of "for.."
return result;
}
//---------------------------------------------------------
a continuacion voy a poner un ejemplo hecho con el PIC16F84A pero puede utilizarse para cualquier PIC
EJEMPLO:
//--------------------------------------------------------------------------------
#include <16F84A.h>
#include <dht11.h> //esta es la libreria creada por mi
#FUSES NOWDT //desactiva el wath dog
#FUSES XT //Crystal <= 4mhz
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_B5,rcv=PIN_B4,BITS=8,PARITY=N)
void main()
{
//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
// TODO: USER CODE!!
delay_ms(5000);
printf("iniciando..\n");
do
{
delay_ms(10);
iniciar();
leer_dht();
printf("Humedad = ");
printf("%d",dht_dat[0]);
delay_ms(20);
printf(",");
printf("%d ",dht_dat[1]);
delay_ms(20);
printf("Temperatura = ");
printf("%d ",dht_dat[2]);
delay_ms(20);
printf(",");
printf("%d ",dht_dat[3]);
delay_ms(20);
printf("\n...terminado..\n");
delay_ms(2000);
}while(true);
}
//-------------------------------------------------------
Link http://www.todopic.com.ar/foros/index.php?topic=35680.0
ไม่มีความคิดเห็น:
แสดงความคิดเห็น