اطلاعیه

Collapse
No announcement yet.

مشکل در نمایش یک سطر در ال سی دی (DHT22)

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در نمایش یک سطر در ال سی دی (DHT22)

    با سلام بر مهندسین
    این پروژه برای سنسور dht22 هست! که مشکل در نمایش دما و رطوبت داره!!
    در سطر اول lcd باید مقدار دما به سانتی گراد یعنی حرف c باید کنار عدد باشد و در سطر دوم باید مقدار رطوبیت به درصد را نشان بدهد !! الان مشکل اش این هست که سطر اول یعنی دما نشان نمی دهد و سطر دوم یعنی رطوبت نشان میدهد!! کسی می داند علت اش از چی هست؟

    کد:
    Project : 
    Version : 
    Date  : 05/30/2015
    Author : 
    Company : 
    Comments: 
     
    Chip type        : ATmega8A
    Program type      : Application
    AVR Core Clock frequency: 8.000000 MHz
    Memory model      : Small
    External RAM size    : 0
    Data Stack size     : 256
    *******************************************************/
    // DHT22 humidity and Temprature sensor & USART Project
    #include <mega8.h>
    #include <delay.h>
    #include <stdio.h>
    #include <alcd.h>
    #include "DHT22.h"
     
    void main(void)
    {
    float temperature,humidity;
    char str[10],str2[10],temp[10],hum[10];
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: Off
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x06;
    UBRRH=0x00;
    UBRRL=0x33;
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    lcd_init(16);
     
       lcd_gotoxy(0,0);//انتخاب سطر اول،برای ثابت ماند ارور روی ال سی دی
       lcd_putsf("please wait..");  //متن مورد نظر شما
       delay_ms(3000);  // سه ثانیه تاخیر 
       lcd_clear();    //دستور پاک سازی ال سی دی
    while (1)
       { 
       if(dht22_read(&temperature,&humidity) == 0) 
        {
        lcd_gotoxy(0,0);//انتخاب سطر اول،برای ثابت ماند ارور روی ال سی دی
        lcd_putsf("DHT22 ERROR ");
        }
       else    
        {
         ftoa(temperature,1,temp);
        //sprintf(str,"Temp=%s",buff);
        //putsf("Temp ="); 
        //puts(str);         
        ftoa(humidity,1,hum); 
        sprintf(str,"Temp=%s C",temp);
        sprintf(str2,"Hum=%s %%",hum);
        //putsf("Hum ="); 
        lcd_gotoxy(0,0); //انتخاب سطر اول ال سی دی
        lcd_puts(str);  //نمایش دما
        lcd_gotoxy(0,1); //انتخاب سر دوم ال سی دی
        lcd_puts(str2); //نمایش رطوبت   
        }      
       delay_ms(2000);  //مدت زمان تاخیر برای خواندن مجدد سنسور
       }    
    }
    سپاس

    #2
    پاسخ : مشکل در نمایش یک سطر درlcd

    واسه نشون دادن عدد اعشاری باید رقم صحیح و اعشارشو مشخص کنید...داخل تابع sprintf به جای s از f استفاده کنید...
    مثلا اگه عدد دو رقمی و یک رقم اعشار داره اینجور بذارید:
    کد:
    %2.1f
    تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

    www.intelart.ir


    ساخت کنترلر دما PID فازي با AVR [آموزشی]

    دیدگاه


      #3
      پاسخ : مشکل در نمایش یک سطر درlcd

      نوشته اصلی توسط Mahdi.Faani
      واسه نشون دادن عدد اعشاری باید رقم صحیح و اعشارشو مشخص کنید...داخل تابع sprintf به جای s از f استفاده کنید...
      مثلا اگه عدد دو رقمی و یک رقم اعشار داره اینجور بذارید:
      کد:
      %2.1f
      ممنون دوست عزیز: من زیاد به برنامه نویسی میکرو مسلط نیستم!! الان منظور شما کدام خط هست؟ به جای کدام s من f بگذارم؟ مشکل الان توی نمایش ندادن سطر اول که برای دما هست : می باشد.



      سپاس

      دیدگاه


        #4
        پاسخ : مشکل در نمایش یک سطر درlcd

        سلام بر شما

        این کد رو امتحان کنید،ببینید چه نتیجه ی می گیرید .. (ببینید رطوبت و دما نمایش داده میشه)

        [code=c]/************************************************** *****
        Project :
        Version :
        Date : 05/30/2015
        Author :
        Company :
        Comments:

        Chip type : ATmega8A
        Program type : Application
        AVR Core Clock frequency: 8.000000 MHz
        Memory model : Small
        External RAM size : 0
        Data Stack size : 256
        ************************************************** *****/
        // DHT22 humidity and Temprature sensor & USART Project
        #include <mega8.h>
        #include <delay.h>
        #include <stdio.h>
        #include <alcd.h>
        #include "DHT22.h"

        void main(void)
        {
        float temperature,humidity;
        char str[10],str2[10],temp[10],hum[10];
        // USART initialization
        // Communication Parameters: 8 Data, 1 Stop, No Parity
        // USART Receiver: Off
        // USART Transmitter: On
        // USART Mode: Asynchronous
        // USART Baud Rate: 9600
        UCSRA=0x00;
        UCSRB=0x08;
        UCSRC=0x06;
        UBRRH=0x00;
        UBRRL=0x33;
        // Analog Comparator initialization
        // Analog Comparator: Off
        // Analog Comparator Input Capture by Timer/Counter 1: Off
        ACSR=0x80;
        SFIOR=0x00;
        lcd_init(16);
        while (1)
        {
        if(dht22_read(&temperature,&humidity) == 0)
        {
        lcd_gotoxy(0,0);//انتخاب سطر اول،برای ثابت ماند ارور روی ال سی دی
        lcd_putsf("DHT22 ERROR "
        }
        else
        {
        ftoa(temperature,1,temp);
        //sprintf(str,"Temp=%s",buff);
        //putsf("Temp ="
        //puts(str);
        ftoa(humidity,1,hum);
        sprintf(str,"Temp=%s C",temp);
        sprintf(str2,"Hum=%s %%",hum);
        //putsf("Hum ="
        lcd_gotoxy(0,0); //انتخاب سطر اول ال سی دی
        lcd_puts(str); //نمایش دما
        lcd_gotoxy(0,1); //انتخاب سر دوم ال سی دی
        lcd_puts(str2); //نمایش رطوبت
        }
        delay_ms(2000); //مدت زمان تاخیر برای خواندن مجدد سنسور
        }
        }

        [/code]

        دیدگاه


          #5
          پاسخ : مشکل در نمایش یک سطر درlcd

          ممنون دوست عزیز: باز دما نشان نمیده!!! نتیجه توی عکس مشخص هست!!



          سپاس

          دیدگاه


            #6
            پاسخ : مشکل در نمایش یک سطر درlcd

            [code=cpp] sprintf(str,"Temp=%s C",temp);
            sprintf(str2,"Hum=%s %%",hum);[/code]

            این دوتا خط رو اینجور تغییر بدید:

            [code=c] sprintf(str,"Temp=%2.1f C",temp);
            sprintf(str2,"Hum=%2.1f %%",hum);[/code]
            تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

            www.intelart.ir


            ساخت کنترلر دما PID فازي با AVR [آموزشی]

            دیدگاه


              #7
              پاسخ : مشکل در نمایش یک سطر درlcd

              نوشته اصلی توسط Mahdi.Faani
              [code=cpp] sprintf(str,"Temp=%s C",temp);
              sprintf(str2,"Hum=%s %%",hum);[/code]

              این دوتا خط رو اینجور تغییر بدید:

              [code=c] sprintf(str,"Temp=%2.1f C",temp);
              sprintf(str2,"Hum=%2.1f %%",hum);[/code]
              ممنون دوست عزیز: ولی باز مشکل داره: این دفعه کلا به هم ریختند! نتیجه کد شما عکس زیر شد!


              دیدگاه


                #8
                پاسخ : مشکل در نمایش یک سطر درlcd

                من یادم رفت بپرسم.اگه با کدویژن کار میکنید این کار رو هم انجام بدید:

                اینطوری میتونید تعداد عدد صحیح و اعشار رو هم بهش بگید.
                تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                www.intelart.ir


                ساخت کنترلر دما PID فازي با AVR [آموزشی]

                دیدگاه


                  #9
                  پاسخ : پاسخ : مشکل در نمایش یک سطر درlcd

                  نوشته اصلی توسط Mahdi.Faani
                  من یادم رفت بپرسم.اگه با کدویژن کار میکنید این کار رو هم انجام بدید:
                  اینطوری میتونید تعداد عدد صحیح و اعشار رو هم بهش بگید.
                  ممنون دوست عزیز: ولی باز نشد!! تنظیمات شما را انجام دادم و بعد کامپایل کردم !! نتیجه این شد!!

                  دیدگاه


                    #10
                    پاسخ : مشکل در نمایش یک سطر درlcd

                    ای بابا...خب ولش کن! :redface: :redface: :rolleyes:
                    من کاری ک خودم میکنمو گفتم...چون اینجوری امکاناتش بیشتر بود.خب اگه راه افتاد ک هیچی دیگه...
                    تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                    www.intelart.ir


                    ساخت کنترلر دما PID فازي با AVR [آموزشی]

                    دیدگاه


                      #11
                      پاسخ : مشکل در نمایش یک سطر درlcd

                      نوشته اصلی توسط Mahdi.Faani
                      ای بابا...خب ولش کن! :redface: :redface: :rolleyes:
                      من کاری ک خودم میکنمو گفتم...چون اینجوری امکاناتش بیشتر بود.خب اگه راه افتاد ک هیچی دیگه...
                      الان مشکل از دما هست!! طبق کد زیر خط اول که دما هست مشکل داره و خط دوم برای رطوبت هست که که با درصد نشان میدهد! مشکل نداره!! هر چی هست از خط اول هست که ارور رویش می افتد!

                      کد:
                       sprintf(str,"Temp=%s C",temp);
                          sprintf(str2,"Hum=%s %%",hum);
                      سپاس

                      دیدگاه


                        #12
                        پاسخ : مشکل در نمایش یک سطر درlcd

                        سلام بر شما

                        این کد رو بزارید،احتمال زیاد مشکلتون برطرف میشه...

                        [code=c]/************************************************** *****
                        Project :
                        Version :
                        Date : 05/30/2015
                        Author :
                        Company :
                        Comments:

                        Chip type : ATmega8A
                        Program type : Application
                        AVR Core Clock frequency: 8.000000 MHz
                        Memory model : Small
                        External RAM size : 0
                        Data Stack size : 256
                        ************************************************** *****/
                        // DHT22 humidity and Temprature sensor & USART Project
                        #include <mega8.h>
                        #include <delay.h>
                        #include <stdio.h>
                        #include <alcd.h>
                        #include "DHT22.h"

                        void main(void)
                        {
                        float temperature,humidity;
                        char str[10],str2[10],temp[10],hum[10];
                        // USART initialization
                        // Communication Parameters: 8 Data, 1 Stop, No Parity
                        // USART Receiver: Off
                        // USART Transmitter: On
                        // USART Mode: Asynchronous
                        // USART Baud Rate: 9600
                        UCSRA=0x00;
                        UCSRB=0x08;
                        UCSRC=0x06;
                        UBRRH=0x00;
                        UBRRL=0x33;
                        // Analog Comparator initialization
                        // Analog Comparator: Off
                        // Analog Comparator Input Capture by Timer/Counter 1: Off
                        ACSR=0x80;
                        SFIOR=0x00;
                        lcd_init(16);
                        lcd_gotoxy(0,0);//انتخاب سطر اول،برای ثابت ماند ارور روی ال سی دی
                        lcd_putsf("please wait.." //متن مورد نظر شما
                        delay_ms(3000); // سه ثانیه تاخیر
                        lcd_clear(); //دستور پاک سازی ال سی دی
                        while (1)
                        {
                        if(dht22_read(&temperature,&humidity) == 0)
                        {
                        lcd_gotoxy(0,0);//انتخاب سطر اول،برای ثابت ماند ارور روی ال سی دی
                        lcd_putsf("DHT22 ERROR "
                        }
                        else
                        {
                        ftoa(temperature,1,temp);
                        //sprintf(str,"Temp=%s",buff);
                        //putsf("Temp ="
                        //puts(str);
                        ftoa(humidity,1,hum);
                        sprintf(str,"Temp=%s C",temp);
                        sprintf(str2,"Hum=%s %%",hum);
                        //putsf("Hum ="
                        lcd_clear();
                        lcd_gotoxy(0,0); //انتخاب سطر اول ال سی دی
                        lcd_puts(str); //نمایش دما
                        lcd_gotoxy(0,1); //انتخاب سر دوم ال سی دی
                        lcd_puts(str2); //نمایش رطوبت
                        }
                        delay_ms(2000); //مدت زمان تاخیر برای خواندن مجدد سنسور
                        }
                        }

                        [/code]

                        دیدگاه


                          #13
                          پاسخ : مشکل در نمایش یک سطر درlcd

                          ممنون دوست عزیز: باز هم دما نشان نمیده !! مشکل از سخت افزار که نیست !! احتمال زیاد مشکل از کد هست !!
                          نتیجه باز این شد!!



                          سپاس

                          دیدگاه


                            #14
                            پاسخ : مشکل در نمایش یک سطر درlcd

                            ببینید اونی ک من گذاشتم همیشه جواب میده و همیشه هم همونو استفاده میکنم...احتمالا ی جایی ایراد داره...
                            تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                            www.intelart.ir


                            ساخت کنترلر دما PID فازي با AVR [آموزشی]

                            دیدگاه


                              #15
                              پاسخ : مشکل در نمایش یک سطر درlcd

                              ممنون دوست عزیز:
                              یعنی مشکل از چی میتونه باشد؟ من قسمت دما اش را تغییر دادم ببینید ایا درست هست؟ البته باز کار نکرد!

                              کد:
                               if(dht22_read(&temperature,&humidity) == 0) 
                                  {
                                  lcd_gotoxy(0,0);//انتخاب سطر اول،برای ثابت ماند ارور روی ال سی دی
                                  lcd_putsf("DHT22 ERROR ");
                                  }
                                 else    
                                  {      
                                  
                                   lcd_gotoxy(0,0);
                                   lcd_putsf("temp:");
                                   lcd_gotoxy(6,0);
                                   ftoa(temperature,1,temp); 
                                   lcd_puts(temp); 
                                   
                                  ftoa(humidity,1,hum);
                                  sprintf(str2,"Hum=%s %%",hum);
                                   lcd_clear();  
                                  lcd_gotoxy(0,1); //انتخاب سر دوم ال سی دی
                                  lcd_puts(str2); //نمایش رطوبت 
                                  }   
                                 delay_ms(2000);  //مدت زمان تاخیر برای خواندن مجدد سنسور
                                 }

                              دیدگاه

                              لطفا صبر کنید...
                              X