اطلاعیه

Collapse
No announcement yet.

دماسنج دیجیتال AVR با سون سگمنت و سنسور LM35

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

    #16
    پاسخ : دماسنج دیجیتال AVR با سون سگمنت و سنسور LM35

    با سلام
    یه ئماسنج با lm35 ساختم ولی عددی که نشون میده 4 الی 5 درجه اشتباه داره می خواستم بدونم وقتی خروجی سنسور رو با adc خوندم در چه عددی ضرب کنم که دما نهایی درست باشه
    با تشکر

    دیدگاه


      #17
      پاسخ : دماسنج دیجیتال AVR با سون سگمنت و سنسور LM35

      نوشته اصلی توسط hamid1991reza
      با سلام
      یه ئماسنج با lm35 ساختم ولی عددی که نشون میده 4 الی 5 درجه اشتباه داره می خواستم بدونم وقتی خروجی سنسور رو با adc خوندم در چه عددی ضرب کنم که دما نهایی درست باشه
      با تشکر
      سلام

      اگر adc تون 10 بیتی باشه(ADCW = خروجی adc)
      کد:
      voltaje_voroodi = ADCW * voltaje_marja / 1023;
      اگر n بیتی باشه میشه همون فرمول که به جای 1023 باید بزارید دو به توانه n منهای یک:
      voltaje_voroodi = ADCW * voltaje_marja / 2-1
      راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
      کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
      نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
      http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
      انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

      دیدگاه


        #18
        پاسخ : دماسنج دیجیتال AVR با سون سگمنت و سنسور LM35

        نوشته اصلی توسط RubeuS
        سلام

        اگر adc تون 10 بیتی باشه(ADCW = خروجی adc)
        کد:
        voltaje_voroodi = ADCW * voltaje_marja / 1023;
        اگر n بیتی باشه میشه همون فرمول که به جای 1023 باید بزارید دو به توانه n منهای یک:
        voltaje_voroodi = ADCW * voltaje_marja / 2-1
        با تشکر از جوابتون
        من از adc ده بیتی استفاده می کنم وولتاژ مرجعم 5 ولت است اما سرچ کردم همه جا فرمول رو اینطوری نوشتن و منم با این فرمول جواب گرفتم

        کد:
        voltaje_voroodi = ADCW * 500 / 1023;
        چرا ولناژ مرجع رو 500 شد مگه نباید 5 باشه ؟

        دیدگاه


          #19
          پاسخ : دماسنج دیجیتال AVR با سون سگمنت و سنسور LM35

          نوشته اصلی توسط hamid1991reza
          با تشکر از جوابتون
          من از adc ده بیتی استفاده می کنم وولتاژ مرجعم 5 ولت است اما سرچ کردم همه جا فرمول رو اینطوری نوشتن و منم با این فرمول جواب گرفتم

          کد:
          voltaje_voroodi = ADCW * 500 / 1023;
          چرا ولناژ مرجع رو 500 شد مگه نباید 5 باشه ؟
          وقتی شما اینجوری فرمول رو بنویسید مقدار ولتاژ ورودی متغییر بین 0 تا 500 بتون جواب میده
          مثلا اگر 0 ولت بود : جواب 0
          اگر 1.2 ولت بود : جواب 120
          اگر 5 ولت بود : جواب 500
          که شما بعدش باید یک مرحله جواب را تقسیم بر صد کنید تا نتیجه نهایی حاصل شود( اینطوری دقیقتر هم جواب بتون میده)

          شما یه نگاه به فرمول بندازید وقتی میگید adc من 10 بیتیه یعنی یک عدد از 0 (که نمایان گر زمین است) تا 1023 (که نمایان گر ولتاژ مرجع است) بتون میده. پس وقتی مثلا بتون عدد 1023 رو داد وقتی توی فرمول جای ADCW عدد 1023 رو بزارید ،دوتا 1023ها باهم ساده میشن و جواب عدد 500 میشه که شما اگر تقسیم بر 100 کنید (اگر مرجع رو 5 ولت گرفته باشید) جواب دقیق نهایی بدست می آید.
          راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
          کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
          نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
          http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
          انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

          دیدگاه


            #20
            پاسخ : دماسنج دیجیتال AVR با سون سگمنت و سنسور LM35

            سلام خدمت دوستان

            من یه برنامه نوشتم و خواستم روی 7 سگمنت نشون بده و به خاطر همین باید اون چیزی که از ADC می خوندو رند می کردم و دما رو بدون اعشار می خواستم نشون بده.حالا هر چی دستور می نویسم که مثلاً 29.7 به 30 گرد بشه و 29.3 به 29 ، نمیشه و همه اعداد بین 29 و 30 رو به 29 گرد می کنه.مشکل چیه؟
            #include <mega8.h>
            #include <delay.h>
            #include <i2c.h>
            #include <ds1307.h>
            #define ADC_VREF_TYPE 0xC0
            unsigned char a1=0,b1=0;
            float temp1,temp3;
            int temp2;
            unsigned char temp4;
            unsigned int read_adc(unsigned char adc_input)
            {float temp;
            ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
            delay_us(10);
            ADCSRA|=0x40;
            while ((ADCSRA & 0x10)==0);
            ADCSRA|=0x10;
            temp=(ADCL*256)/1023;
            return temp;
            }
            void main(void)
            {
            PORTB=0x1F;
            DDRB=0x2F;
            PORTC=0x03;
            DDRC=0x00;
            PORTD=0x00;
            DDRD=0xFF;
            SFIOR=0x00;


            ADMUX=ADC_VREF_TYPE & 0xff;
            ADCSRA=0x86;
            while (1)

            {
            temp1=read_adc(2);
            temp2=(int)temp1;
            if((temp2+0.5)<temp1)
            {temp2+=1;
            }
            a1=temp2%10;
            b1=temp2/10;
            ........
            ........
            ........
            از یه روش دیگه هم که temp1=temp1+0.5 این کارو می کنن و بعد int می گیرن هم استفاده کردم و دقیقاً همین جوابو میده.چرا؟
            یه سوال دیگه هم این که توی کد کاملی که تو لینک پایین گذاشتم با فایل پروتئوس 4 تا متغیر تو eeprom تعریف کردم که می خوام فقط دفعه اولی که مدار راه می افته(فقط دفعه اول)صفر رو بریزم توش.برای این کار باید از پروگرامر استفاده کنم و این متغیر ها رو صفر کنم؟یه راهنمایی کنین.ممنون

            http://s5.picofile.com/file/81084706...Clock.rar.html

            دیدگاه


              #21
              پاسخ : دماسنج دیجیتال AVR با سون سگمنت و سنسور LM35

              نوشته اصلی توسط E.N

              یه سوال دیگه هم این که توی کد کاملی که تو لینک پایین گذاشتم با فایل پروتئوس 4 تا متغیر تو eeprom تعریف کردم که می خوام فقط دفعه اولی که مدار راه می افته(فقط دفعه اول)صفر رو بریزم توش.برای این کار باید از پروگرامر استفاده کنم و این متغیر ها رو صفر کنم؟یه راهنمایی کنین.ممنون

              http://s5.picofile.com/file/81084706...Clock.rar.html
              خب همون اول کار بالای برنامه موقع تعریف صفر بریز توش
              مثل بغیه متغیر ها
              اینجوری با هر راه اندازی صفر ریخته میشه توش

              دیدگاه


                #22
                پاسخ : دماسنج دیجیتال AVR با سون سگمنت و سنسور LM35

                نوشته اصلی توسط تیک تاک
                خب همون اول کار بالای برنامه موقع تعریف صفر بریز توش
                مثل بغیه متغیر ها
                اینجوری با هر راه اندازی صفر ریخته میشه توش
                این متغیری که توی eeprom ذخیره میشه اگر من بیام اول برنامه صفر بریزم توش و بعدش با کار کردن مدار یه عدد دیگه توش ذخیره میشه و حالا مثلاً برق قطع و وصل میشه و حالا صفر می ریزه توی متغیر eeprom و این کارو خراب می کنه.مگه این طور نیست؟؟یه چیز دیگه این که من توی این مدار از DS1307 به عنوان ساعت استفاده کردم ولی نمی دونم چطوری میتونم از اون رم اضافش به عنوان منبعی برای ذخیره کردن متغیر ها به هنگام قطع برق استفاده کنم.اگر امکانش هست در این مورد هم راهنمایی کنین.

                نوشته اصلی توسط E.N
                سلام خدمت دوستان

                من یه برنامه نوشتم و خواستم روی 7 سگمنت نشون بده و به خاطر همین باید اون چیزی که از ADC می خوندو رند می کردم و دما رو بدون اعشار می خواستم نشون بده.حالا هر چی دستور می نویسم که مثلاً 29.7 به 30 گرد بشه و 29.3 به 29 ، نمیشه و همه اعداد بین 29 و 30 رو به 29 گرد می کنه.مشکل چیه؟

                از یه روش دیگه هم که temp1=temp1+0.5 این کارو می کنن و بعد int می گیرن هم استفاده کردم و دقیقاً همین جوابو میده.چرا؟

                http://s5.picofile.com/file/81084706...Clock.rar.html
                یه چیز دیگه اینه که دستور float ceil(float temp1) رو می زنم ارور میده میگه must declare first in block بعدش گفتم شاید کتابخونه math رو نیاوردم این طوری میشه و کتابخونه رو فراخوانی کردم ولی بازم همین ارور رو میده.کسی تا حالا این مشکلا رو نداشته .ممنون میشم اگه راهنمایی کنن دوستان
                :redface:

                دیدگاه


                  #23
                  پاسخ : دماسنج دیجیتال AVR با سون سگمنت و سنسور LM35

                  نوشته اصلی توسط E.N
                  این متغیری که توی eeprom ذخیره میشه اگر من بیام اول برنامه صفر بریزم توش و بعدش با کار کردن مدار یه عدد دیگه توش ذخیره میشه و حالا مثلاً برق قطع و وصل میشه و حالا صفر می ریزه توی متغیر eeprom و این کارو خراب می کنه.مگه این طور نیست؟؟یه چیز دیگه این که من توی این مدار از DS1307 به عنوان ساعت استفاده کردم ولی نمی دونم چطوری میتونم از اون رم اضافش به عنوان منبعی برای ذخیره کردن متغیر ها به هنگام قطع برق استفاده کنم.اگر امکانش هست در این مورد هم راهنمایی کنین.

                  یه چیز دیگه اینه که دستور float ceil(float temp1) رو می زنم ارور میده میگه must declare first in block بعدش گفتم شاید کتابخونه math رو نیاوردم این طوری میشه و کتابخونه رو فراخوانی کردم ولی بازم همین ارور رو میده.کسی تا حالا این مشکلا رو نداشته .ممنون میشم اگه راهنمایی کنن دوستان
                  :redface:
                  خب این مورد توضیح نداده بودید
                  خب قطع شدن برق با راه اندای مجدد فرقی نداره
                  و نمیتونیم بینشون تمییزی قائل باشیم
                  البته با برنامه ریزی هنگم پروگرمر میشه اما خب فقط اولین بار که راه اندازی بشه اون مقدار ریخته میشه
                  که میتونه باز حین کار تغییر کنه
                  نمیتونم دقیق بگم
                  اما بنظرم مقداری که ما اول برنامه تعریف میکنیم فقط یکبار تو متغییر eeprom تعریف میشه
                  و یعنی همون چیزی که میخوای
                  کمی مطالعه کن راجب ش در مورد حافظه eeprom به جواب میرسی
                  فکر کنم نظریه ام درست باشه اما تاییدش نمیکنم

                  و در مورد حافظه ایسی ساعت خودم این کار نکردم اما همون جوری که برای ست کردن مثلا مقدار ساعت اقدام میکنی
                  توی توابع ds 1307 2 تابع برای این کارا هست .. خواندن دیتا و نوشتن
                  باید از اونا استفاده کنی و از ادرس اون متغیر که میخوای اطلاعاتی توش بریزی

                  و در مورد گرد کردن چیزی بخاطر ندارم اما گویا سالیان پیش انجام دادم و به احتمال اون تابع مورد نیازتو پیدا نکردی
                  و منم در خاطر ندارم که تو کدوم کتابخونه بود متاسفانه
                  avr اینش بده بشدت فراره و فراموش میشه
                  اما خب چرا خودتو اذیت میکنی ... خودت دستی این کارو انجام بده
                  مثلا چک کن اگه بالای نیم خودت به عدد بزرگتر تغییرش بده و همچنین برعکس


                  [move]به امید موفقیت[/move]

                  دیدگاه


                    #24
                    پاسخ : دماسنج دیجیتال AVR با سون سگمنت و سنسور LM35

                    pcb این مداررو میخوام

                    دیدگاه

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