اطلاعیه

Collapse
No announcement yet.

مشکل در lm35 و mega8

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

    مشکل در lm35 و mega8

    سلام دوستان
    من یه برنامه نوشتم برای اندازه گیری دما
    اما نمیدونم ایراد کجاست که دمارو صفر نمایش میده
    این کد برنام:
    [code=cpp]
    #include <mega8.h>
    #include <delay.h>
    #include <lcd.h>
    #define ADC_VREF_TYPE 0xC0

    #asm
    .equ __lcd_port = 0x18;
    #endasm

    unsigned int ADCWdata = 0;
    unsigned int temp = 0;

    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    delay_us(10);
    ADCSRA|=0x40;
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;
    }

    void print_temp(unsigned int t)
    {
    int ch;

    lcd_gotoxy(0,0);
    ch = (t%10) | 0x30;
    lcd_putchar(ch);
    ch = (t/10) | 0x30;
    lcd_putchar(ch);
    }

    void main(void)
    {
    ACSR=0x80;
    SFIOR=0x00;
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x87;

    lcd_init(16);

    while (1)
    {
    delay_ms(100);
    ADCWdata = read_adc(0);
    temp = (ADCWdata * 5) / 1024;
    temp = temp * 100;
    print_temp(temp);
    }
    }
    [/code]

    #2
    پاسخ : مشکل در lm35 و mega8

    سلام
    شما نوع Temp رو به صورت int تعریف کردید و در صورتی که مقدار ADCWdata شما کمتر از 204 باشه خروجی محاسبه کمتر از مقدار 1 میشه و درنتیجه بعد از گرد شدن صفر میشه
    اول برای اطمینان از کارکرد صحیح سیستم مقدار adcwdata رو نمایش بدین و بعدش هم با توجه به نکته بالا یا نوع داده رو تغییر بدبن یا اینکه اون *100 پایین رو به بالا منتقل کنین و مقدار adcwdataرو در 500 ضرب کنین
    موفق باشین

    دیدگاه


      #3
      پاسخ : مشکل در lm35 و mega8

      دوستان ایراد از اینجا بود که من به جای ضرب در 2.56 در 5 ضرب کرده بودم.
      مشکل حل شد.

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

      دیدگاه


        #4
        پاسخ : مشکل در lm35 و mega8

        با کدویزارد تنظیمات adc رو روی گزینه use 8 bit بزارین. قبلش هم vref رو بزارین internal 2.56 volt
        با این گزینه مقدار دیجیتالی که میخونین خود دماست(البته با سنسور lm35)

        دیدگاه


          #5
          پاسخ : مشکل در lm35 و mega8

          نوشته اصلی توسط engpakbaz
          دوستان ایراد از اینجا بود که من به جای ضرب در 2.56 در 5 ضرب کرده بودم.
          مشکل حل شد.

          اما یه مشکل دیگه اینکه کلا دما درست نشون داده نمیشه. خیلی بالاتر نشون داده میشه. الان دما 29 درجست که در واقعیت دما شاید به زور 20 باشه.
          و وقتی دما تقریبا متعادل میشه الان چند لحظه پیش 23 بود اما همین که تغذیه مدار قطع و وصل شد (از برق قطع شد و دوباره به برق زده شد) دما رفت بالا و الان از 29 پایین نمیاد.
          ولتاژ ref مناسب برای میکرو و همچنین تغذیه 5 ولت رگوله شده داشته باشین بعد هم کالیبرش کنید تو مدارتون هر چند که این سنسور طبق گفته دیتاشیتش تا جایی که یادم میاد نیاز به کالیبره نداره
          التماس دعا

          دیدگاه


            #6
            پاسخ : مشکل در lm35 و mega8

            نوشته اصلی توسط ali.ra
            ولتاژ ref مناسب برای میکرو و همچنین تغذیه 5 ولت رگوله شده داشته باشین بعد هم کالیبرش کنید تو مدارتون هر چند که این سنسور طبق گفته دیتاشیتش تا جایی که یادم میاد نیاز به کالیبره نداره
            دوست عزیز ممنون
            یکم در مورد 5 ولت رگوله و کالیبره توضیح بده لطفا

            دیدگاه


              #7
              پاسخ : مشکل در lm35 و mega8

              دوست عزیز کلا روال کار با adc اینطوری هستش که میگم
              پایه avcc رو با یه سلف 100 میکرو وصل کنین به vcc
              هرجقدر ولتاژ مرجع پایین تر باشه دقتتون میره بالاتر ، واسه همین من بیشتر موارد از 2.56 داخلی استفاده میکنم مگه اینکه یه ولتاژی بالاتر از این بخام بخونم.وقتی بزارمش رو داخلی پایه vref با یه خازن 100 نانو وصل میکنم به زمین.
              در نهایت بین avcc و GND هم یه خازن 100 نانو دیگه میذارم.
              خروجی آنالوگ سنسور رو مستقیم وصل نکین به میکرو ، تو دیتاشیت سنسور تو خروجیش یه فیلتر بسته که الآن یادم نیست چطوری بود ، نگاه کن ببین چطوریه ببندش سر راه خروجی.
              در نهایت تو کدویزارد برای تنظیمات ADC ولتاژ مرجعرو بزار روی 2.56 داخلی و تیک USE 8 BIT هم بزار
              حالا تو برنامه وقتی READ_ADC میکنی هرچی که بهت بده همون دما هست.بدون هیچ محاسبات اضافی
              به قول استاد : به همین سادگی :nice:

              دیدگاه


                #8
                پاسخ : مشکل در lm35 و mega8

                ممنون دوست عزیز
                من دیتاشیت lm35 رو دیدم و حدود 15 حالت بستن lm35 بود که من ندونستم باید از کدوم استفاده کنم؟

                دیدگاه


                  #9
                  پاسخ : مشکل در lm35 و mega8

                  نوشته اصلی توسط engpakbaz
                  ممنون دوست عزیز
                  من دیتاشیت lm35 رو دیدم و حدود 15 حالت بستن lm35 بود که من ندونستم باید از کدوم استفاده کنم؟
                  از مدار شکل 16 استفاده کن ، یه مقاومت سری بعدش یه خازن 10 نانو ، البته این کار کاملا پشنال هست و بستگی به خودتون داره ، من که تا الآن نیاز نشد این فیلتر رو ببندم

                  دیدگاه


                    #10
                    پاسخ : مشکل در lm35 و mega8

                    کلا lm35 چون سنسور آنالوگی است خطای دما بالاست
                    اما بقول اساتید ابتدا مدار را طبق دیتاشیت و تاحد امکان نزدیک میکرو ببند
                    حتما از رگولاتور استفاده کن و پنج دقیق تغذیه داشته باشی
                    در برنامه ات دما رو به صورت لحظه ای نشان نداه و حدود 200 تا 500 بار دما رو بخون و میاگین ازش بگیر و سپس نشان بده این کار دما دیگه نوسان نداره
                    کار آخر اینه این دماسنج کالیبره نیست یعنی فرضا 9درجه از دمای واقعی بیشتر نشان میده شما برو توی برنامه و قبل از نمایش دما بر روی ال سی دی 9 درجه کم کن سپس نمایش بده
                    امیدوارم موفق و سربلند باشی

                    دیدگاه


                      #11
                      پاسخ : مشکل در lm35 و mega8

                      برای انکه مطمئن بشید که مشکل از مدار LM35 هستش یا برنامه، بجای LM35 از یه پتانسیومتر استفاده کنید. اگر برنامه صحیح کار کرد، اونوقت بررسی میکنیم تا مشکل پیدا بشه
                      از آنجایی که آموزش ماهی گیری برای من بسیار مهم تر هستش، به همین خاطر، در این انجمن، تاجایی که بتونم جواب مطلبی رو مستقیم نمیگم و تلاش میکنم با آدرس دادن و کمی جستجو به جواب برسید. اگر عاشق الکترونیک باشید، دنبال جواب خواهید گشت.

                      دیدگاه

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