اطلاعیه

Collapse
No announcement yet.

سوال در مورد LM35

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

    سوال در مورد LM35

    سلام
    به مشکلی برخوردم در ساخت دماسنج با ATMega8. برنامه ای نوشتم برای سنسور LM 35. این برنامه به شکل نرم افزاری مشکلی نداره. اما مدارشو بستم. عدد روی سگمنت نوسان شدیدی داره :angry:.خازن 100n به AREF وصل هست وولتاژ مرجع هم 2.56 ولت هست. هر درجه هم 10mv تغییر ولتاژ داره. دوستان راهنمایی میکنید.
    کلی سرچ کردم اما به جایی نرسیدم. ممنون میشم راهنمایی کنید
    اینم برنامه:
    کد:
    #include <mega8.h>
    #include <delay.h>
    #include <stdlib.h>
    #include <stdio.h>
    int i,a,a1,a2;
    float temp,t;
    unsigned char segment [] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
    
     unsigned char read_adc(unsigned char adc_input)
          {
          ADMUX = adc_input|(0xE0&0xFF);
          ADCSRA = ADCSRA|0x40;
          while ((ADCSRA&0x10)==0);
          ADCSRA = ADCSRA|0x10;
          return ADCH;
          }      
    void main (void)
    {
      temp = 0;
      t=0;
      PORTC = 0x00;
      DDRC = 0x00;
      DDRD = 0xFF;
      DDRB = 0xFF;
      ADMUX = 0xC1;
      ADCSRA = 0x83;
      while (1)
        {  
          for (i=0;i<=199;i++)
          {
            temp = read_adc(1); 
            t=t+temp;
          }    
          t=t/200;
          a=t;        
          a1 = a/10;
          a2 = a%10;
        t=0;
        delay_ms (1);    
        PORTB = 0x08;
        PORTD = segment [a2];
        delay_ms (1);      
        PORTB = 0x04;
        PORTD = segment [a1];   
        }       
    }

    #2
    پاسخ : سوال در مورد LM35

    این عمل واسه سنسور طبیعیه
    باید در گرفتن اطلاعات از سنسور هر دو ثانیه مثلا عمل کنی تا مقدار ثابتی بهت نشون بده این سنسور که هیچ sht75 هم این تغییرات رو داره

    دیدگاه


      #3
      پاسخ : سوال در مورد LM35

      منظورتون از گرفتن اطلاعات همون دستور read_adc رو هر دو ثانیه انجام بده یا اینکه هر دو ثانیه مقدار نهایی محاسبه شده رو نشون بده ؟ با استفاده از وقفه تایمر این کارو انجام بدم خوبه ؟

      دیدگاه


        #4
        پاسخ : سوال در مورد LM35

        منظورتون از گرفتن اطلاعات همون دستور read_adc ه
        آره عزیز
        استفاده از وقفه تایمر این کارو انجام بدم خوبه ؟
        اینم خوب گفتی بهترین روش هم استفاده از تایمر

        دیدگاه


          #5
          پاسخ : سوال در مورد LM35

          برنامرو اینجوری نوشتم الان بهتر شد اما هنوز یه خورده نوسان داره مثلا اینجوری نشون داد آخرین بار. 12.12.13.12.9.10
          اگه هر 10 ثانیه رفرش کنه چطوره ؟
          کد:
          #include <mega8.h>
          #include <delay.h>
          #include <stdlib.h>
          #include <stdio.h>
          int i,a,a1,a2,timer;
          float temp,t;
          unsigned char segment [] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
          
           unsigned char read_adc(unsigned char adc_input)
                {
                ADMUX = adc_input|(0xE0&0xFF);
                ADCSRA = ADCSRA|0x40;
                while ((ADCSRA&0x10)==0);
                ADCSRA = ADCSRA|0x10;
                return ADCH;
                }      
          void main (void)
          {
            temp = 0;
            t=0;
            PORTC = 0x00;
            DDRC = 0x00;
            DDRD = 0xFF;
            DDRB = 0xFF;
            ADMUX = 0xC1;
            ADCSRA = 0x83;
            TIFR = 0x80;
            TIMSK = 0x80; 
            TCCR2 = 0x0A;
            TCNT2=0x00;
            OCR2 = 124;
            #asm("sei") 
            while (1)
              {  
               
              t=0;
              delay_ms (1);    
              PORTB = 0x08;
              PORTD = segment [a2];
              delay_ms (1);      
              PORTB = 0x04;
              PORTD = segment [a1];   
              }  
          }         
          interrupt [TIM2_COMP] void timer2_comp_isr (void)
            {       
            timer++;
            if (timer==5000){
            timer=0;
            for (i=0;i<=199;i++)
                {
                  temp = read_adc(1); 
                  t=t+temp;
                }    
            t=t/200;
            a=t;        
            a1 = a/10;
            a2 = a%10;    }
          }

          دیدگاه


            #6
            پاسخ : سوال در مورد LM35

            این که خیلی بالا پایین میشه
            نیم درجه یک درجه این که 3 درجه اختلاف دمایی داره باد کولری چیزی بهش نمیخوره گیج بزنه سنسور آخه دما خیلی نباید تا این انداازه جابجا بشه البته بعضی وقتها سنسور یک زمان واسه ثابت شدن نیاز داره شاید بالا پایین هم بشه بعد اون تغییرات باید در حد 1 درجه باشه واسه این سنسور اگر سنسور رطوبت بود که اشکالی نداشت
            اگه هر 10 ثانیه رفرش کنه چطوره ؟
            این بستگی به نیاز خودت داره آخه یکجا شما فقط میخوای دمای محیط رو نشون بدی هر 20 ثانیه هم اشکالی نداره ولی یکجا هست که افزایش دما واست مهمه یا کاهش دما که در این صورت شما باید معدل گیری کنی از دمای سنسور در یک بازه زمانی تا بتوانی دما رو اندازه بگیری.

            دیدگاه


              #7
              پاسخ : سوال در مورد LM35

              یه جورایی باد کولر بهش میخوره الان بردمش یه جای دیگه هنوزم یکی دو درجه ای اختلاف داره :angry: سرویسمون کرد رسما سنسوره.

              دیدگاه


                #8
                پاسخ : سوال در مورد LM35

                سلام؛
                چیزی که این مشکل رو در مدار شما ایجاد میکنه نویز هست. قسمتی از این نویز هم توسط عمل مالتی پلکسی که خود میکرو انجام میده (برای نمایش دما روی سگمنت ها) ایجاد میشه. یک خازن تانتالیوم حدود 33 میکرو روی تغذیه میکرو مشکل شما رو برطرف میکنه.

                دیدگاه


                  #9
                  پاسخ : سوال در مورد LM35

                  نوشته اصلی توسط امیر جعفری
                  سلام؛
                  چیزی که این مشکل رو در مدار شما ایجاد میکنه نویز هست. قسمتی از این نویز هم توسط عمل مالتی پلکسی که خود میکرو انجام میده (برای نمایش دما روی سگمنت ها) ایجاد میشه. یک خازن تانتالیوم حدود 33 میکرو روی تغذیه میکرو مشکل شما رو برطرف میکنه.
                  آره نویز که قویا احتمالش هست چون وقتی سنسور رو قطع میکنم هر از چند گاهی 1 درجه یا حتی دو درجه رو هم نشون میده. خازن رو بین VCC و 5 ولت بزنم یا AVCC و 5 ولت؟ و اینکه اگه از مدار پیشنهادی خود دیتا شیت یعنی همون فیلتر LC استفاده کنم چطور میشه ؟

                  دیدگاه


                    #10
                    پاسخ : سوال در مورد LM35

                    شاید جای تعجب باشه ولی من همین مدل رو بدون هیچ فیلتری وصل کردم پشت ساعت ال ای دی با اون همه ال ای دی که در حال روشن و خاموش شدن ولی یک بار هم آخ نگفته
                    ولی اگر این جوری میشه که بدون سنسور بالا پایین میره دیگه راهی جزء نویز گیر نداره ولی مدارت که سطح ولتاژش ثابت هست ؟؟؟

                    دیدگاه


                      #11
                      پاسخ : سوال در مورد LM35

                      نوشته اصلی توسط Reza 0020
                      شاید جای تعجب باشه ولی من همین مدل رو بدون هیچ فیلتری وصل کردم پشت ساعت ال ای دی با اون همه ال ای دی که در حال روشن و خاموش شدن ولی یک بار هم آخ نگفته
                      ولی اگر این جوری میشه که بدون سنسور بالا پایین میره دیگه راهی جزء نویز گیر نداره ولی مدارت که سطح ولتاژش ثابت هست ؟؟؟
                      ولتاژش ثابته . منبع تعذیه هم یه آداپتور 5 ولت سوئیچینگ هست. البته الان اندازه گرفتم ولتاژ سر ADC در حد 0.1 بالا پایین میره.
                      ممکنه سنسور مورد داشته باشه ؟!! :eek:

                      دیدگاه


                        #12
                        پاسخ : سوال در مورد LM35

                        سون سگمنت هارو از مدار جدا کن ببین این تغییرات رو دوباره داری

                        دیدگاه


                          #13
                          پاسخ : سوال در مورد LM35

                          نوشته اصلی توسط Reza 0020
                          سون سگمنت هارو از مدار جدا کن ببین این تغییرات رو دوباره داری
                          آقا سون سگمنتارو جدا که میکنم ولتاژ حدودا 0.3 هست با سگمنت 0.5
                          البته یه چیزیو بگم و سون سگمنت دوتایی آند مشترک هست و چون مالتی پلکس نشده بود. خودم درایوشون کردم. ممکنه از اونا باشه ؟!!

                          دیدگاه


                            #14
                            پاسخ : سوال در مورد LM35

                            نوشته اصلی توسط navid.h
                            آره نویز که قویا احتمالش هست چون وقتی سنسور رو قطع میکنم هر از چند گاهی 1 درجه یا حتی دو درجه رو هم نشون میده. خازن رو بین VCC و 5 ولت بزنم یا AVCC و 5 ولت؟ و اینکه اگه از مدار پیشنهادی خود دیتا شیت یعنی همون فیلتر LC استفاده کنم چطور میشه ؟
                            خازن رو به تغذیه میکرو وصل کن و حتی الامکان سعی کن به میکرو نزدیک باشه. به احتمال غریب به یقین مشکل بر طرف میشه.

                            دیدگاه


                              #15
                              پاسخ : سوال در مورد LM35

                              سلام
                              منم مشکل نوسان عدد رو داشتم و با چند خط برنامه نویسی حل شد . فقط کافی چند بار از سنسورت نمونه بگیری . برای مثال شش بار از سنسورت به فاصله هر یک میلی ثانیه یک بار نمونه بگیر و اگر هر شش نمونه با هم برابر بودند از اون مقدار واسه نمایش دما استفاده بکنید .

                              دیدگاه

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