اطلاعیه

Collapse
No announcement yet.

یه سوال از برنامه نویسان محترم !

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

    یه سوال از برنامه نویسان محترم !

    سلام ما برنامه زیر رو نوشتیم ولی تو پروتیوس جواب نمیده (همیشه عدد صفر نمایش داده میشه!) :NO:
    این برنامه دماسنج هست که ما به جای LM35 در شبیه سازی از یک POT-HG استفاده کردیم و اون رو به پایه A.0وصل کردیم :cry2:



    $regfile = "m32def.dat" 'We use internal osc 4000000 for atmega32
    $crystal = 4000000

    Config Lcdpin = Pin , Db4 = Portc.1 , Db5 = Portc.2 , Db6 = Portc.3 , Db7 = _
    Portc.4 , E = Portd.2 , Rs = Portd.3
    Config Lcd = 16 * 2
    Config Adc = Single , Prescaler = Auto
    Start Adc
    Config Timer0 = Timer , Prescale = 1024

    Enable Interrupts
    Enable Timer0
    On Timer0 Sample
    Start Timer0

    Dim Va As Word
    Dim Dt As Word
    Dim Temp As Word
    Dim A As Word
    Dim Sample As Word
    Dim Sum As Word

    Do
    Loop
    End

    Sample:
    Incr Sample
    Dt = Getadc(0)
    A = 5 * Dt
    Va = A / 1024
    Temp = Va * 100 'temp is equal to real temperature
    Sum = Sum + Temp
    If Sample = 15 Then
    Cls
    Sample = 0
    Stop Timer0
    Temp = Sum / 15
    Lcd Temp
    Start Timer0
    Sum = 0
    End If
    Return

    #2
    پاسخ : یه سوال از برنامه نویسان محترم !

    پیکر بندی ADC رو اینجوری تغییر بده:

    CONFIG ADC = single, PRESCALER = AUTO, REFERENCE =AVCC

    پایه AREF و AVCC رو به 5 ولت و AGND رو به زمین وصل کن و امتحان کن.

    دیدگاه


      #3
      پاسخ : یه سوال از برنامه نویسان محترم !

      این هم شماتیک مدار که جواب نمیده

      دیدگاه


        #4
        پاسخ : یه سوال از برنامه نویسان محترم !

        ممنون مشکلو پیدا کردیم :wow: اما نمیدونیم چکارش کنیم :angry: اگر ولتاژ روی ADC رو بالا ببریم جواب میده ولی اگر کمتر از یک باشه جواب نمیده
        این درحالی که lm35 هم ولتاژ خروجیش معمولا زیر یک و در حد میلی ولت هست :surprised:
        در ضمن اون مشکل پیکربندی رو هم اصلاح کردیم

        دیدگاه


          #5
          پاسخ : یه سوال از برنامه نویسان محترم !

          این جوری امتحان کن:

          temp = getadc(0)
          Temp = Temp / 2

          بعد بیا و مقدار Temp رو نشون بده . این مقدار دمای وقاعی رو باید نشون بده.
          اینو امتحان کن خبرشو بده

          دیدگاه


            #6
            پاسخ : یه سوال از برنامه نویسان محترم !

            adc=1024*vin / vref پس vin=adc*vref / 1024 و vref=5 در نتیجه vin=adc*5 / 1024
            که Vinولتاژ روی پایه ADC هست از اونجایی که در LM35هر 10 میلی ولت (یک صدم ولت) متناظر با یک درجه سانتیگراد هست پس با ضرب ولتاژ بدست اومده ( Vin) در 100 دما بدست میاد.حالا چه دلیلی داره که ما مقدار رو بر 2 تقسیم کنیم (سنسوری که تو کتاب علی کاهه استفاده می کنه و آخرش میاد یه تقسیم بر دو می کنه LM335 هست که کلوین رو اندازه می گیره در حالی که LM35خودش سانتیگراد هست)

            دیدگاه


              #7
              پاسخ : یه سوال از برنامه نویسان محترم !

              احسان جان . این تقسیم بر دوم تقریبا همونیه که خودت میگی. یه ذره روش فکر کن.
              میدونی چرا کمتر ایک جواب نمیده؟
              فرض کن مقدار 100 تو متغیر Dt ذخیره شده. در 5 کهضرب بشه میشه 500 . بعد تقسیم بر 1024 ه بشه میشه صفر ( چون نتیجه تو یه متغیر Word ریخته میشه ) و در 100 هم که ضرب بشه بازم میشه صفر.
              برای همین من گفتم تقسیم بر دو کن و نتیجه رو بگو. یااینکه در جای لازم متغیرو اعشاری تعریف کن.

              دیدگاه


                #8
                پاسخ : یه سوال از برنامه نویسان محترم !

                ببخشید در مورد تقسیم بر دو حق با تو هست

                دیدگاه


                  #9
                  پاسخ : یه سوال از برنامه نویسان محترم !

                  دستت درد نکنه تو پروتیوس درست شد امیدوارم رو برد هم جواب بده نوع متغیر رو Integer کردم
                  :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow:

                  دیدگاه


                    #10
                    پاسخ : یه سوال از برنامه نویسان محترم !

                    درست شد!!! :surprised:
                    Integer هم با Word تو این کاربرد زیاد فرقی نداره. چون اون هم یه نوع عدد صحیح دریافت می کنه.

                    دیدگاه


                      #11
                      پاسخ : یه سوال از برنامه نویسان محترم !

                      روبرد هم جواب داد! :wow: :agree:

                      دیدگاه

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