DHT11 CCS C

Başlatan veliusta, 10 Haziran 2013, 21:47:26

veliusta

Elimde 1.5$'lık DHT11 Sensörü var.İnternet'te CCS C'de örnek uygulama bulmadım. ama PBP ve C18 yazılmış örnekler buldum.

Aşağıda bir tane CCS C ile yapılmış uygulama buldum ama ondada derleme yapakarken 1 hata veriyor.  "  dht_dat = leer_dht_dat(); // capturando datos "  Şu kısmını kabul etmiyor. Yardımcı olur musunuz?

#include <16F84A.h>
#FUSES NOWDT                    //desactiva el wath dog
#FUSES XT                       //Crystal  <= 4mhz
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading

#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];

#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_B5,rcv=PIN_B4,BITS=8,PARITY=N)

byte leer_dht_dat(){
   byte i = 0;
   byte result=0;
   for (i=0; i< 8; i++) {
      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)));
   }
   return result;
}

void iniciar(){
   dht_io=0;
   delay_ms(1);
   OUTPUT_HIGH(dht11);
}

void leer_dht(){
   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;   
      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 = 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

void main(){
   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);
}


Not: Daha önce bu konu ile ilgili yardım isteyenler olmuş.O kişiyede mesaj attım ama oda yapamamış.Elinde kaldığını söylüyor.
https://www.picproje.org/index.php?topic=43074.0
https://www.picproje.org/index.php?topic=43027.0
https://www.picproje.org/index.php?topic=43010.0
https://www.picproje.org/index.php?topic=38958.0

Eğer yapılmış bir uygulama filan paylaşılırsa bir çok kişi için faydalı olacağını umuyorum. :)

Burak B

"... a healthy dose of paranoia leads to better systems." Jack Ganssle

veliusta

#2
Alıntı yapılan: ByteMaster - 10 Haziran 2013, 21:50:55
Bu linkte aradığın şeyi bulabilirsin.

Allah razı olsun hocam. Diğer uygulamar çok işime yarayacak. Sayende pic projelerimi gerçekleştirebilecem. ;D

ordaki uygulamalardaki LCD bağlantısı nasıl olacak? EXLCD.c nin içine girdim bi D portu yazmış Bi #define use_portb_lcd demiş.

PIC18F4520 için LCD bağlantısını gösterebilir misiniz?

Burak B

Armut piş ağzıma düş ne kadar sevindin öyle. Komisyon isteyeceğim biraz daha sevinirsen ! Bundan sonrasını kendin halletsen çok iyi olur bence. Bu kadar hazırcılık biraz fazla gibime geliyor. :)
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

veliusta

Alıntı yapılan: ByteMaster - 11 Haziran 2013, 09:23:15
Armut piş ağzıma düş ne kadar sevindin öyle. Komisyon isteyeceğim biraz daha sevinirsen ! Bundan sonrasını kendin halletsen çok iyi olur bence. Bu kadar hazırcılık biraz fazla gibime geliyor. :)

Hazırcı değilim.Öğrenci değilim.Sadece öğrenmek için buradayım ama internette anlatan uygulama veya ccs konu anlatım hiç bulamıyorum. Hepsi temel şeyleri göstermişler bırakmışlar. Daha fazla uygulama veya videolu anlatım biliyormusunuz, Teknikders ve recepçelikkaya dışında? İngilizce'de olabilir.

Murat Mert

Alıntı yapılan: veliusta - 10 Haziran 2013, 22:29:27
Allah razı olsun hocam. Diğer uygulamar çok işime yarayacak. Sayende pic projelerimi gerçekleştirebilecem. ;D

ordaki uygulamalardaki LCD bağlantısı nasıl olacak? EXLCD.c nin içine girdim bi D portu yazmış Bi #define use_portb_lcd demiş.

PIC18F4520 için LCD bağlantısını gösterebilir misiniz?

S.A.
Expkits lcd port uçları kite göre Portb dir.
mert07

veliusta

Alıntı yapılan: mert07 - 13 Haziran 2013, 11:48:42
S.A.
Expkits lcd port uçları kite göre Portb dir.

A.S   ?

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

veliusta

Alıntı yapılan: mehmet - 13 Haziran 2013, 16:14:30
http://www.expkits.com/pub/EX8/EX8_CCS.rar
18F4520_LCD.hex



Teşekkürler Mehmet hocam. Bacak uçlarını nasıl bulduğunuzu öğretirmisiniz?

Burak B

#9
struct lcd_pin_map {      // This structure is overlayed
   int    data       : 4;        // be pin B0. /* Burası B0-B3*/
   int    rs           : 1;        // B4
   int    enable   : 1;        // B5
   int    rw          : 1;        // Kullanılmıyor
   int    en          : 1;        // Kullanılmıyor
} lcd;


Bu veri tipi bir bit bloğu. Yani bir integer ver tipinin 2 byte olduğunu söylersek.
4 bit Data
1 bit RS
1 bit EN
1 bit RW
şeklinde bunu B portuna yazdığında port yapısını daha rahat anlamana imkan sağlar.

Kod daha da sadeleştirilebilir. Genel bir yazım kuralına göre kabaca kodlandığı söylenebilir. Yoksa 1 bytelık bir char veri tipini de kullanabilirdi. Sonuçta LCD 6 bit kullanılıyor. Büyük ihtimalle mevcut LCD kodunu donanıma uyacak şekilde modifiye etmiş programcı arkadaş.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

mehmet

Alıntı yapılan: veliusta - 14 Haziran 2013, 21:42:08
Teşekkürler Mehmet hocam. Bacak uçlarını nasıl bulduğunuzu öğretirmisiniz?
Estağfurullah...

Expkit dokümanlarında bağlantı
şeması var. Oraya bakıp çizdim
bunu...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr