اطلاعیه

Collapse
No announcement yet.

افزایش دقت واحد adc میکرو avr

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

    افزایش دقت واحد adc میکرو avr

    سلام دوستان.
    من میخوام با استفاده از adc میکرو atmega8 خروجی یک سنسور دمای lm35 رو انجام بدم.
    ولتاژ مرجع رو همون ولتاژ داخلی میکرو یعنی همون 2.56 ولت قرار دادم. ولی خیلی نویزش زیاده دما یکی دو درجه بالا و پایین میپره.
    خروجی سنسور ثابته ولی این ولتاژ مرجع میکرو که نوسان داره، نمودونم چیکارش کنم.
    هر کاری میکنم که ولتاژش ثابت بشه اما فایده نداره حتی خازنم جواب نمیده! :cry2:
    کسی میتونه کمک کنه؟
    تو را دانش و دين نمايد درست در رستگاري ببايدت جست
    وگر دل نخواهي كه باشي نژند نخواهي كه دائم بوي مستمند
    به گفتار پيغمبرت راه جوي دل از تيرگي ها بدين آب شوي

    #2
    پاسخ : افزایش دقت واحد adc میکرو avr

    چرا ولتاژ مرجع رو ولتاژ مرجع داخلی میکرو گرفتی :surprised:
    AREF برای اینکار بهتره ضمنا اون مداری که تو دیتاشیت میکرو گذاشته صفحه 205 رو هم ببند برای کاهش نویز خوبه و اگه از خازن هم استفاده کنی دیگه جواب میده
    خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
    [hr]

    دیدگاه


      #3
      پاسخ : افزایش دقت واحد adc میکرو avr

      سلام. من برنامه رو نوشتم و کمپایلش کردم. اما کار نکرد. :cry2:
      تو پروتوس کار میکنه ولی تو عمل نه! oo:
      فقط میدون که مشکل اینه که در حالت noise canceler میکرو از حالت sleep خارج نمیشه! :cry2:
      میشه مشکل از فیوز بیت هاش باشه؟
      تو را دانش و دين نمايد درست در رستگاري ببايدت جست
      وگر دل نخواهي كه باشي نژند نخواهي كه دائم بوي مستمند
      به گفتار پيغمبرت راه جوي دل از تيرگي ها بدين آب شوي

      دیدگاه


        #4
        پاسخ : افزایش دقت واحد adc میکرو avr

        برنامه خودتو رو بزار من تا هر جا بتونم کمکت می کنم
        راستی تو سایت سرچ کردی خیلی در مورد همین سنسور ونحوه کار باهاش تو سایت بحث شده ، اگه سرچ کنی حتما به نتیجه می رسی
        خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
        [hr]

        دیدگاه


          #5
          پاسخ : افزایش دقت واحد adc میکرو avr

          نویز از میکرو یا رفرنس داخلی میکرو نیست نویز از سنسور است . کلا دور سنسور آنالوگ رو خط بکشید برید سراغ سنسور های دیجیتال.
          تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
          داشتن عقله زيادتر از دیگر آدم ها است

          دیدگاه


            #6
            پاسخ : افزایش دقت واحد adc میکرو avr

            نوشته اصلی توسط aliila
            نویز از میکرو یا رفرنس داخلی میکرو نیست نویز از سنسور است . کلا دور سنسور آنالوگ رو خط بکشید برید سراغ سنسور های دیجیتال.
            مثل اینکه شما تو ایران زندگی نمیکنین!
            قیمت سنسور دیجیتال 95 هزار تومنه!

            من میخوام اینو راه بندازم. تا حالا خیلی ازش استفاده کردم ولی این بار میخوام با دقت 0/1 درجه راش بندازم. :read:
            تو را دانش و دين نمايد درست در رستگاري ببايدت جست
            وگر دل نخواهي كه باشي نژند نخواهي كه دائم بوي مستمند
            به گفتار پيغمبرت راه جوي دل از تيرگي ها بدين آب شوي

            دیدگاه


              #7
              پاسخ : افزایش دقت واحد adc میکرو avr

              نوشته اصلی توسط ma.eca91

              قیمت سنسور دیجیتال 95 هزار تومنه!
              سنسور صنعتی با سنسور دیجیتال فرق داره

              http://eshop.eca.ir/%D8%B3%D9%86%D8%B3%D9%88%D8%B1-%D8%AF%D9%85%D8%A7/1925-%D8%B3%D9%86%D8%B3%D9%88%D8%B1-%D8%AF%D9%85%D8%A7-%D8%AF%DB%8C%D8%AC%DB%8C%D8%AA%D8%A7%D9%84-ds18b20-.html
              تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
              داشتن عقله زيادتر از دیگر آدم ها است

              دیدگاه


                #8
                پاسخ : افزایش دقت واحد adc میکرو avr

                نوشته اصلی توسط امین غفاری
                برنامه خودتو رو بزار من تا هر جا بتونم کمکت می کنم
                راستی تو سایت سرچ کردی خیلی در مورد همین سنسور ونحوه کار باهاش تو سایت بحث شده ، اگه سرچ کنی حتما به نتیجه می رسی
                من برنام رو با کدویژن نوشتم.
                مداری هم که شما گفتین و وصل کردم. دقتش خیلی خیلی خوب شد. من میخوام با noise canceler هم امتحانش کنم ولی نمیشه!
                برنامم به صودت زیره:
                میدونم مشکلش چیه ولی نمیتونم درستش کنم! oo:
                مشکلش اینه که اینتراپش فعال نمیشه! در صورتی که من دستور فعل شدن اینتراپ و نوشتم! میشه مشکل ار فیوز بیتاش باشه؟

                کد:
                /*****************************************************
                Chip type        : ATmega8
                Program type      : Application
                AVR Core Clock frequency: 8.000000 MHz
                Memory model      : Small
                External RAM size    : 0
                Data Stack size     : 256
                *****************************************************/
                
                #include <mega8.h>
                #include <delay.h>
                #include <alcd.h>
                #include <stdlib.h>
                
                unsigned int adc_data;
                #define ADC_VREF_TYPE 0xC0
                
                // 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 & 0xff);
                // 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 main(void)
                {
                float temp;
                char word[5]="";
                
                // ADC initialization
                // ADC Clock frequency: 62.500 kHz
                // ADC Voltage Reference: Int., cap. on AREF
                ADMUX=ADC_VREF_TYPE & 0xff;
                ADCSRA=0x8F;
                
                // Alphanumeric LCD initialization
                // Connections are specified in the
                // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
                // RS - PORTD Bit 6
                // RD - PORTC Bit 6
                // EN - PORTD Bit 0
                // D4 - PORTD Bit 1
                // D5 - PORTD Bit 2
                // D6 - PORTD Bit 3
                // D7 - PORTD Bit 4
                // Characters/line: 16
                lcd_init(16);
                
                // Global enable interrupts
                #asm("sei")
                
                while (1)
                   {
                   delay_ms(1000);
                   lcd_clear();
                   temp=read_adc(0);
                   temp=temp/4;
                   ftoa(temp,1,word);
                   lcd_putsf("TEMP= ");
                   lcd_puts(word);
                   }
                }
                تو را دانش و دين نمايد درست در رستگاري ببايدت جست
                وگر دل نخواهي كه باشي نژند نخواهي كه دائم بوي مستمند
                به گفتار پيغمبرت راه جوي دل از تيرگي ها بدين آب شوي

                دیدگاه


                  #9
                  پاسخ : افزایش دقت واحد adc میکرو avr

                  نه :surprised: من C رو فراموش کردم :mrgreen: فقط با بسکام کار می کنم شرمنده که نمی تونم کمکت کنم :redface:
                  راستی ds18b20 هم سنسور خوببیه رزولیشن 12 بیتی داره و دقت در حد 0.064 درجه دیجیتال هم هست قیمتش هم 2500 تومان بیشتر نیست خیلی از lm35 بهتره به نظرم اگه می خوایی دقت در اندازه گیری دما بالا ببری اون بهتره :rolleyes:
                  خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
                  [hr]

                  دیدگاه


                    #10
                    پاسخ : افزایش دقت واحد adc میکرو avr

                    یه زمانی منم همین مشکل رو داشتم.شما زمانی که با ولتمتر ولتاژ خروجی سنسور رو اندازه میگیرید در خود ولت متر یک خازن در ورودی و زمین قرار داره.اگه شما هم یه خازن در خروجی lm35 با زمین قرار بدین مشکل نوسان ولتاژ تا حدودی حل میشه. خازن ها میتونن یه 1n + 100n + 10u باشه خازن ها از جنس تانتال و mkt نبود معمولی
                    بعد قرار دادن این خازن ها تا حد زیادی نویز کم میشه.برای خوندن adc از روش پول استفاده کن ولی به این روش که مثلا 100 تا نمونه مکرر پشت سر هم از adc بردار و بزرگترین مقدار و یا کوچکترین مقدار رو تبدیل به دما بکن.واضح تر یعنی این که از 100 تا نمونه بزرگترین مقدار، مقدار دما بشه.
                    i
                    کد:
                    int read_temp (char b)
                    {
                    char i;
                    int adc_temp = 0,adc_n;
                    
                    for(i=0;i<=100;i++)
                    {
                    adc_n = read_adc(b);
                    if(adc_n> adc_temp)  adc_temp = adc_n;
                    }
                    return adc_temp;
                    }
                    دودمانم بر باد رفت

                    دیدگاه


                      #11
                      پاسخ : افزایش دقت واحد adc میکرو avr

                      فرکانس تبدیل ADC میکرو هم خیلی در دقت تاثیر داره بهتره حدود 100KHz باشه (البته در دیتا شیت بازه بازتری رو اعلام کرده فکر کنم بین 50 تا 200)

                      دیدگاه


                        #12
                        پاسخ : افزایش دقت واحد adc میکرو avr

                        نوشته اصلی توسط امین غفاری
                        نه :surprised: من C رو فراموش کردم :mrgreen: فقط با بسکام کار می کنم شرمنده که نمی تونم کمکت کنم :redface:
                        راستی ds18b20 هم سنسور خوببیه رزولیشن 12 بیتی داره و دقت در حد 0.064 درجه دیجیتال هم هست قیمتش هم 2500 تومان بیشتر نیست خیلی از lm35 بهتره به نظرم اگه می خوایی دقت در اندازه گیری دما بالا ببری اون بهتره :rolleyes:
                        فردا صبح حتما میرم یکیشو میخرم.
                        ولی دقت lm35 هم حتما بالا میبرم. :-> :read:
                        تو را دانش و دين نمايد درست در رستگاري ببايدت جست
                        وگر دل نخواهي كه باشي نژند نخواهي كه دائم بوي مستمند
                        به گفتار پيغمبرت راه جوي دل از تيرگي ها بدين آب شوي

                        دیدگاه


                          #13
                          پاسخ : افزایش دقت واحد adc میکرو avr

                          سلام
                          شما اینتراپت سراسری رو فعال کردی؟
                          امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

                          دیدگاه


                            #14
                            پاسخ : افزایش دقت واحد adc میکرو avr

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

                            http://www.eca.ir/forum2/index.php?topic=83190.0
                            .The best question deserves a better answer
                            =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
                            «پناه»می برم «به خدا»
                            از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
                            محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

                            دیدگاه


                              #15
                              پاسخ : افزایش دقت واحد adc میکرو avr

                              نوشته اصلی توسط mahdi8866
                              سلام
                              شما اینتراپت سراسری رو فعال کردی؟
                              آره. مگه میشه فعال نکرده باشم. کمپایلر وقتی که به این دو تا دستور میرسه error میده.
                              این دوتا دستورم به زبان اسمبلیه منم چیزی سر در نمیارم.
                              این دو تا دستور رو با ستاره مشخص کردم.
                              اگه شما کدویژن دارین این برنامه رو کپی کنین، ببینین ایراد میگیره یا نه؟

                              کد:
                              /*****************************************************
                              Chip type        : ATmega8
                              Program type      : Application
                              AVR Core Clock frequency: 8.000000 MHz
                              Memory model      : Small
                              External RAM size    : 0
                              Data Stack size     : 256
                              *****************************************************/
                              
                              #include <mega8.h>
                              #include <delay.h>
                              #include <alcd.h>
                              #include <stdlib.h>
                              
                              unsigned int adc_data;
                              #define ADC_VREF_TYPE 0xC0
                              
                              // 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 & 0xff);
                              // 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 main(void)
                              {
                              float temp;
                              char word[5]="";
                              
                              // ADC initialization
                              // ADC Clock frequency: 62.500 kHz
                              // ADC Voltage Reference: Int., cap. on AREF
                              ADMUX=ADC_VREF_TYPE & 0xff;
                              ADCSRA=0x8F;
                              
                              // Alphanumeric LCD initialization
                              // Connections are specified in the
                              // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
                              // RS - PORTD Bit 6
                              // RD - PORTC Bit 6
                              // EN - PORTD Bit 0
                              // D4 - PORTD Bit 1
                              // D5 - PORTD Bit 2
                              // D6 - PORTD Bit 3
                              // D7 - PORTD Bit 4
                              // Characters/line: 16
                              lcd_init(16);
                              
                              // Global enable interrupts
                              #asm("sei")
                              
                              while (1)
                                 {
                                 delay_ms(1000);
                                 lcd_clear();
                                 temp=read_adc(0);
                                 temp=temp/4;
                                 ftoa(temp,1,word);
                                 lcd_putsf("TEMP= ");
                                 lcd_puts(word);
                                 }
                              }
                              تو را دانش و دين نمايد درست در رستگاري ببايدت جست
                              وگر دل نخواهي كه باشي نژند نخواهي كه دائم بوي مستمند
                              به گفتار پيغمبرت راه جوي دل از تيرگي ها بدين آب شوي

                              دیدگاه

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