Thông báo

Collapse
No announcement yet.

Hỏi xin Code DHT11 hien thi LCD

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • 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

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

    Comment


    • #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=0am=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
          
      nhietDHT_GetTemHumi (DHT_Temp); // Nhiet do do bang DHT11
          
      amDHT_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


      • #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


        • #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


          • #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


            • #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


              • #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


                • #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...
                  X