Hỏi xin Code DHT11 hien thi LCD

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • buitrongthie
    Thành viên chính thức
    • May 2013
    • 69

    #1

    Hỏi xin Code DHT11 hien thi LCD

    Mình đang muốn sử dụng con DHT11 nhưng code bên box Cảm biến không dùng được. Ai đã dùng con này thì cho mình xin cái code or chỉ mình cách lập trình với.
    CUNG CẤP LINH KIỆN ĐIỆN TỬ. DỤNG CỤ LÀM MẠCH.
    CUNG CẤP LED, MẠCH CÔNG SUẤT.
    CUNG CẤP MODULE LED (TRÁI TIM, CUBE)
    ------------TẠI HẠ LONG------------------
    LIÊN HỆ: 0936524718
  • hohoanganhfu
    Thành viên chính thức
    • Jan 2012
    • 99

    #2
    bạn xem ở dây DHT11 - Cảm Biến Độ Ẩm | Diễn Đàn Vi Điều Khiển

    Comment

    • buitrongthie
      Thành viên chính thức
      • May 2013
      • 69

      #3
      Vấn đề này mình đã giải quyết được rồi + chủ đề post rồi không xoá được với cả chẳng biết sao lại không sửa được nữa nên mình sửa lại để giúp bạn nào cần thì dùng. Sau đay là code và file hex.
      PHP Code:
      Project : Do nhiet do va do am bang DHT11
      Version :  1
      Date    : 11/07/2013
      Author  : Bui Trong Thien
      Company : ThienTrang-TEC
      Comments:
       
       
      Chip type              : ATmega8
      Program type            : Application
      AVR Core Clock frequency: 16,000000 MHz
      Memory model            : Small
      External RAM size      : 0
      Data Stack size        : 256
      *****************************************************/
       
      #include <mega8.h>
       
      #include <delay.h>
      #include <delay.h>
      // Alphanumeric LCD Module functions
      #include <alcd.h>
      #define        DHT_DATA_IN    PINC.2 
      #define        DHT_DATA_OUT    PORTC.2           
      #define        DHT_DDR_DATA    DDRC.2
      #define DDROUT        1
      #define DDRIN        0
      #define DHT_ER      0
      #define DHT_OK      1
      #define DHT_Temp    0
      #define DHT_RH      1
      #define ADC_VREF_TYPE 0xE0
      //----------------------------------------------------------//
      typedef  signed          char int8_t;
      typedef  signed            int int16_t;
      typedef  signed long      int int32_t;
       
      /*    Kieu So Nguyen Khong Dau */
      typedef  unsigned        char uint8_t;
      typedef  unsigned            int  uint16_t;
      typedef  unsigned long    int  uint32_t;
      /*    Kieu So Thuc */
      typedef  float            float32_t;
      //------------------------------------------------------//
      uint8_t DHT_GetTemHumi (uint8_t select);
      uint8_t nhiet=0, am=0;
       
      unsigned char vin;
      //--------------------------------------------------------//
      unsigned char read_adc(unsigned char adc_input)
      {
      ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
      // Delay needed for the stabilization of the ADC input voltage
      delay_us(10);
      // Start the AD conversion
      ADCSRA|=0x40;
      // Wait for the AD conversion to complete
      while ((ADCSRA & 0x10)==0);
      ADCSRA|=0x10;
      return ADCH;
      }
      //_-----------------------------------------------------//  Lay du lieu tu DHT11
      uint8_t DHT_GetTemHumi (uint8_t select)
      {
          uint8_t buffer[5]={0,0,0,0,0};
          uint8_t ii,i,checksum;
         
          DHT_DDR_DATA=DDROUT;  // set la cong ra
          DHT_DATA_OUT=1;
          delay_us(60);
          DHT_DATA_OUT=0;
          delay_ms(25); // it nhat 18ms
          DHT_DATA_OUT=1;
          DHT_DDR_DATA=DDRIN;
          delay_us(60);
          if(DHT_DATA_IN)return DHT_ER ;
          else while(!(DHT_DATA_IN));    //Doi DaTa len 1
          delay_us(60);
          if(!DHT_DATA_IN)return DHT_ER;
          else while((DHT_DATA_IN));    //Doi Data ve 0
          //Bat dau doc du lieu
          for(i=0;i<5;i++)
          {
              for(ii=0;ii<8;ii++)
              {   
              while((!DHT_DATA_IN));//Doi Data len 1
              delay_us(50);
              if(DHT_DATA_IN)
                  {
                  buffer[i]|=(1<<(7-ii));
                  while((DHT_DATA_IN));//Doi Data xuong 0
                  }
              }
          }
          //Tinh toan check sum
          checksum=buffer[0]+buffer[1]+buffer[2]+buffer[3];
          //Kiem tra check sum
          if((checksum)!=buffer[4])return DHT_ER;
          //Lay du lieu
            if (select==DHT_Temp)
            {    //Return the value has been choosen
                  return(buffer[2]);
            }
            else if(select==DHT_RH)
            {
                  return(buffer[0]);
            }
          return DHT_OK;
         
      }
      //--------------------------------------------------------------//
       
      static void nhietdovadoam()
      {
          vin=(read_adc(0)*256)/255; // Nhiet do do bang LM35
          nhiet= DHT_GetTemHumi (DHT_Temp); // Nhiet do do bang DHT11
          am= DHT_GetTemHumi  (DHT_RH);  // Do am do bang DHT11
         
         
              //Nhiet do do bang DHT11
              lcd_gotoxy(0,1);
              lcd_putsf("T =");
              lcd_putchar(48+nhiet/10);
              lcd_putchar(48+nhiet%10);       
              lcd_putchar(0b11011111);        // ki tu do
              lcd_putsf("C");
              // Do am do bang DHT11
             
             
              //Do am do bang DHT11
              lcd_gotoxy(9,1);
              lcd_putsf("H =");
              lcd_putchar(48+am/10);
              lcd_putchar(48+am%10);       
              lcd_putsf("%");
             
              // Nhiet do do bang LM35
             
              lcd_gotoxy(0,0);
              lcd_putsf("Nhiet do: ");
              lcd_putchar(48+vin/10);
              lcd_putchar(48+vin%10);
              lcd_putchar(0b11011111);        // ki tu do
              lcd_putsf("C");
      }
      // Read the 8 most significant bits
      // of the AD conversion result
       
       
      // Declare your global variables here
       
      void main(void)
      {
      // Declare your local variables here
       
       
      PORTB=0x00;
      DDRB=0x00;
       
      PORTC=0x00;
      DDRC=0x00;
       
      PORTD=0x00;
      DDRD=0x00;
       
      TCCR0=0x00;
      TCNT0=0x00;
       
      TCCR1A=0x00;
      TCCR1B=0x00;
      TCNT1H=0x00;
      TCNT1L=0x00;
      ICR1H=0x00;
      ICR1L=0x00;
      OCR1AH=0x00;
      OCR1AL=0x00;
      OCR1BH=0x00;
      OCR1BL=0x00;
       
      ASSR=0x00;
      TCCR2=0x00;
      TCNT2=0x00;
      OCR2=0x00;
       
      // External Interrupt(s) initialization
      // INT0: Off
      // INT1: Off
      MCUCR=0x00;
       
      // Timer(s)/Counter(s) Interrupt(s) initialization
      TIMSK=0x00;
       
      // USART initialization
      // USART disabled
      UCSRB=0x00;
       
       
      ACSR=0x80;
      SFIOR=0x00;
       
       
      ADMUX=ADC_VREF_TYPE & 0xff;
      ADCSRA=0x84;
       
      // SPI initialization
      // SPI disabled
      SPCR=0x00;
       
      // TWI initialization
      // TWI disabled
      TWCR=0x00;
       
      // Alphanumeric LCD initialization
      // Connections specified in the
      // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
      // RS - PORTD Bit 0
      // RD - PORTD Bit 1
      // EN - PORTD Bit 3
      // D4 - PORTD Bit 4
      // D5 - PORTD Bit 5
      // D6 - PORTD Bit 6
      // D7 - PORTD Bit 7
      // Characters/line: 16
      lcd_init(16);
       
      while (1)
            {
            // Place your code here
            nhietdovadoam();
            }
      } 
      
      DHT11.zip
      CUNG CẤP LINH KIỆN ĐIỆN TỬ. DỤNG CỤ LÀM MẠCH.
      CUNG CẤP LED, MẠCH CÔNG SUẤT.
      CUNG CẤP MODULE LED (TRÁI TIM, CUBE)
      ------------TẠI HẠ LONG------------------
      LIÊN HỆ: 0936524718

      Comment

      • daixiem
        Thành viên mới
        • Apr 2014
        • 2

        #4
        bác Buitrongthien oi,em muốn dùng con dht 11 giao tiep với 89S52 mà code khó quá,bác giúp em với!!thanks bác

        Comment

        • vankienemk
          Thành viên mới
          • Aug 2013
          • 10

          #5
          Mình đa hoàn thành 2 dự án DHT11 giao tiếp với 89s52 và DHT11 với atmega8, mình ko biết upfile lên ntn cả nên mn ai cần gửi mail cho mình::
          vankienemk@yahoo.com
          đây là atmega8 với dht11 code https://drive.google.com/file/d/0B2u...ew?usp=sharing

          Comment

          • sunypower
            Thành viên mới
            • Dec 2011
            • 15

            #6
            Nguyên văn bởi buitrongthie Xem bài viết
            .................................................. ...............
            //_-----------------------------------------------------// Lay du lieu tu DHT11
            uint8_t DHT_GetTemHumi (uint8_t select)
            {
            uint8_t buffer[5]={0,0,0,0,0};
            uint8_t ii,i,checksum;

            DHT_DDR_DATA=DDROUT; // set la cong ra
            DHT_DATA_OUT=1;
            delay_us(60);
            DHT_DATA_OUT=0;
            delay_ms(25); // it nhat 18ms
            DHT_DATA_OUT=1;
            DHT_DDR_DATA=DDRIN;
            delay_us(60);
            if(DHT_DATA_IN)return DHT_ER ;
            else while(!(DHT_DATA_IN)); //Doi DaTa len 1
            delay_us(60);
            if(!DHT_DATA_IN)return DHT_ER;
            else while((DHT_DATA_IN)); //Doi Data ve 0
            //Bat dau doc du lieu
            for(i=0;i<5;i++)
            {
            for(ii=0;ii<8;ii++)
            {
            while((!DHT_DATA_IN));//Doi Data len 1
            delay_us(50);
            if(DHT_DATA_IN)
            {
            buffer[i]|=(1<<(7-ii));
            while((DHT_DATA_IN));//Doi Data xuong 0
            }
            }
            }
            //Tinh toan check sum
            checksum=buffer[0]+buffer[1]+buffer[2]+buffer[3];
            //Kiem tra check sum
            if((checksum)!=buffer[4])return DHT_ER;
            //Lay du lieu
            if (select==DHT_Temp)
            { //Return the value has been choosen
            return(buffer[2]);
            }
            else if(select==DHT_RH)
            {
            return(buffer[0]);
            }
            return DHT_OK;

            }
            //--------------------------------------------------------------//

            static void nhietdovadoam()
            {
            vin=(read_adc(0)*256)/255; // Nhiet do do bang LM35
            nhiet= DHT_GetTemHumi (DHT_Temp); // Nhiet do do bang DHT11
            am= DHT_GetTemHumi (DHT_RH); // Do am do bang DHT11


            //Nhiet do do bang DHT11
            lcd_gotoxy(0,1);
            lcd_putsf("T =");
            lcd_putchar(48+nhiet/10);
            lcd_putchar(48+nhiet%10);
            lcd_putchar(0b11011111); // ki tu do
            lcd_putsf("C");
            // Do am do bang DHT11


            //Do am do bang DHT11
            lcd_gotoxy(9,1);
            lcd_putsf("H =");
            lcd_putchar(48+am/10);
            lcd_putchar(48+am%10);
            lcd_putsf("%");

            // Nhiet do do bang LM35

            lcd_gotoxy(0,0);
            lcd_putsf("Nhiet do: ");
            lcd_putchar(48+vin/10);
            lcd_putchar(48+vin%10);
            lcd_putchar(0b11011111); // ki tu do
            lcd_putsf("C");

            }
            }[/PHP]

            [ATTACH]70004[/ATTACH]
            Thanks bài viết của bạn Bùi Trọng Thiên, tuy nhiên, nếu trước phân checksum(kiểm tra lôi) nếu không có lệnh reset cho DHT11 thi các bạn chỉ có thể đọc được dữ liêu của duy nhất hoặc độ ẩm hoặc nhiệt độ. Cụ thể cần thêm vào:
            Code:
            DHT_DDR_DATA=DDROUT; // set la cong ra
            DHT_DATA_OUT=1;
            delay_ms(100);

            Comment

            • vankienemk
              Thành viên mới
              • Aug 2013
              • 10

              #7
              Phần lớn giao tiếp khó là ở chỗ thời gian delay không đúng, các bạn tự tạo một khoảng delay nhất định sau đó kiểm tra trên proteus.

              Comment

              • arong
                Thành viên mới
                • Feb 2013
                • 6

                #8
                cho em hỏi..em cũng sử dụng code trên và kết quả hắn cứ ra giá trị 0 miết..vậy mong chỉ giúp ạ

                Comment

                • quan_hs
                  Thành viên mới
                  • Nov 2020
                  • 1

                  #9
                  mình cũng bị lỗi thế, chỉ thấy kết quả là 0. Có bác nào biết cách fix ko ạ? Cảm ơn!

                  Comment

                  Về tác giả

                  Collapse

                  buitrongthie Tìm hiểu thêm về buitrongthie

                  Bài viết mới nhất

                  Collapse

                  Đang tải...