اطلاعیه

Collapse
No announcement yet.

دقت سنسور

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

    دقت سنسور

    دوستان سلام
    از سنسور lm35 تو یه ترموستات دست ساز استفاده کردم
    سنسور بین دو درجه همش بالا پایین میشه!
    وقتی دیفرنشیال رو یک درجه میذارم، همش قطع و وصل میشه!

    #2
    پاسخ : دقت سنسور

    نوشته اصلی توسط ho3in54
    دوستان سلام
    از سنسور lm35 تو یه ترموستات دست ساز استفاده کردم
    سنسور بین دو درجه همش بالا پایین میشه!
    وقتی دیفرنشیال رو یک درجه میذارم، همش قطع و وصل میشه!
    سلام
    امری عادیه ... و باید با یکسری روشها از کنارش بگذری ...
    1. یکی از روشها اینه که یک تاخیر بین اون نمونه گیری انجام بدی ...
    2. میانگین بگیر
    3. برو توی مد خواب (ADC Noise Reduction)
    4. فیلتر های پایین گذر بگذار
    و ...
    موفق باشید
    [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
    معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
    معرفی نرم افزار Codewizard PWM
    با من بیشتر آشنا شوید

    دیدگاه


      #3
      پاسخ : دقت سنسور

      تو برنامه نوشتم که بعد از 100 بار خوندن برنامه بیاد دما رو از سنسور بخونه، بعد 8 بار که خوند جمع کنه، تقسیم بر8 کنه، بریزه تو یه دایم دیگه اونم 8 بار که شد جمع کنه تقسیم 8 کنه، بعد ضرب 10 و دوباره تقسیم 10 کنه!

      میشه مود خواب رو برام بذارید!!!
      ممنون!!

      دیدگاه


        #4
        پاسخ : دقت سنسور

        نوشته اصلی توسط ho3in54
        تو برنامه نوشتم که بعد از 100 بار خوندن برنامه بیاد دما رو از سنسور بخونه، بعد 8 بار که خوند جمع کنه، تقسیم بر8 کنه، بریزه تو یه دایم دیگه اونم 8 بار که شد جمع کنه تقسیم 8 کنه، بعد ضرب 10 و دوباره تقسیم 10 کنه!

        میشه مود خواب رو برام بذارید!!!
        ممنون!!
        کد:
        /*****************************************************
        This program was produced by the
        CodeWizardAVR V2.05.3 Standard
        Automatic Program Generator
        © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
        http://www.hpinfotech.com
        
        Project :
        Version :
        Date  : 3/5/2014
        Author : Saman.َAsadi
        Chip type        : ATmega16
        Program type      : Application
        AVR Core Clock frequency: 8.000000 MHz
        Memory model      : Small
        External RAM size    : 0
        Data Stack size     : 256
        *****************************************************/
        
        #include <mega16.h>
        #include <delay.h>
        #include <alcd.h>
        
        #define ADC_VREF_TYPE 0xC0
        #define   lcd       lcd_putsf
        #define   cls       lcd_clear()
        #define   lcds      lcd_puts
        #define   lcdc      lcd_putchar
        #define   locate     lcd_gotoxy
        
        unsigned int adc_data;
        // ADC interrupt service routine
        interrupt [ADC_INT] void adc_isr(void)
        {
          // Read the AD conversion result
          adc_data=ADCW;
        }
        
        // Read the AD conversion result
        // with noise canceling
        unsigned int read_adc(unsigned char adc_input)
        {
          ADMUX=adc_input | ADC_VREF_TYPE;
          // Delay needed for the stabilization of the ADC input voltage
          delay_us(10);
          #asm
            in  r30,mcucr
            cbr r30,__sm_mask
            sbr r30,__se_bit | __sm_adc_noise_red
            out mcucr,r30
            sleep
            cbr r30,__se_bit
            out mcucr,r30
          #endasm
          return adc_data;
        }
        void lcdf(float x , int z)
        {
          int a,b=0;
          unsigned long int c;
          char y;
          float d;
          long e;
          x=x+0.00001;
          c=x;
          d=x;
          for(a=0;a<100;a++)
          {
            if(c==0)break;
            c=c/10;
            if(b==0)b++;
            else b*=10;
          }
          if(b==0)lcd("0");
          for(a=b;a>0;a/=10)
          {
           c=x/(float)a;
           x=x-((float)c*(float)a);
           y=c+48;
           lcdc(y);
          }
          x=d;
          e=x;
          x=x-e;
          for(a=0;a<z;a++)x=x*10;
          if(x<1)
          {  lcd("  ");
            return;
          }
          e=d;
          d=d-e;
          if(d>0)
          {
            lcd(".");
            for(a=0;a<z;a++)
            {  d*=10;
              b=d;
              y=b+48;
              lcdc(y);
              d=d-b;
            }
          }
        }
        
        void main(void)
        {  unsigned int a=0;
          {
            // Declare your local variables here
            // ADC initialization
            // ADC Clock frequency: 62.500 kHz
            // ADC Voltage Reference: Int., cap. on AREF
            // ADC Auto Trigger Source: ADC Stopped
            ADMUX=ADC_VREF_TYPE;
            ADCSRA=0x8F;
            // Alphanumeric LCD initialization
            // Connections are specified in the
            // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
            // RS - PORTB Bit 0
            // RD - PORTB Bit 1
            // EN - PORTB Bit 2
            // D4 - PORTB Bit 4
            // D5 - PORTB Bit 5
            // D6 - PORTB Bit 6
            // D7 - PORTB Bit 7
            // Characters/line: 16
            lcd_init(16);
            // Global enable interrupts
            #asm("sei")
          }
          cls;
          lcd("temp=");
          while (1)
          {  a++;
            locate(5,0);
            lcdf(((float)read_adc(0)/4)-0.25,2);
            lcd("  ");
            delay_ms(300);
          }
        }
        این هم کد
        اگر با کدویژن کار میکنید این تنظیمات را انجام دهید.

        این هم سورس کد + شبیه سازی در proteus 7.10
        http://s5.picofile.com/file/8115820118/1.zip.html
        یه توضیح مختصری درباره این برنامه بدم
        یه زیر برنامه نوشتم برای راحتی نشان دادن متغیر اعشاری به نام ()lcdf
        ورودی اول متغیرتون که اعشاری هست قرار میدید و ورودی دوم هم تعداد اعشار
        در این شبیه سازی 0.25 درجه بیشتر نشان میدهد که این خطا را داخل زیربرنامه منهای 0.25 اعمال کردم که خودتون میتونید بعدا حذفش کنید .
        موفق باشید
        [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
        معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
        معرفی نرم افزار Codewizard PWM
        با من بیشتر آشنا شوید

        دیدگاه


          #5
          پاسخ : دقت سنسور

          اقا شرمنده
          میشه برنامه رو تو بسکام بگید!!

          دیدگاه


            #6
            پاسخ : دقت سنسور

            نوشته اصلی توسط ho3in54
            اقا شرمنده
            میشه برنامه رو تو بسکام بگید!!
            خیلی وقته که بسکام رو بوسیدم و گذاشتمش کنار !!!
            اگر دوستان بتونن راهنماییتون کنن ممنون میشم :applause:
            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
            معرفی نرم افزار Codewizard PWM
            با من بیشتر آشنا شوید

            دیدگاه


              #7
              پاسخ : دقت سنسور

              ممنون از کمکت!

              دیدگاه

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