اطلاعیه

Collapse
No announcement yet.

برنامه برای محاسبه Duty cycle با میکرو

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

    برنامه برای محاسبه Duty cycle با میکرو

    سلام
    یک برنامه می خواستم که با میکرو Duty cycle را حساب کنه. البته 2تا برنامه نوشتم که متاسفانه هیچکدوم درست کار نمی کنه و همیشه یک مقدار روی LCD نمایش داده می شه و احتمال می دم Bascom تایمر کانتر را درست برنامه ریزی نکرده.
    ممنون

    #2
    پاسخ : برنامه برای محاسبه Duty cycle با میکرو

    سلام سعی کن کمیت رو تبدیل به رشته کنی وبعد دستور نمایش بدی :bye
    بعدا یه جمله قشنگ مینویسم

    دیدگاه


      #3
      پاسخ : برنامه برای محاسبه Duty cycle با میکرو

      خب بهتره برنامه رو بذاری تو بشه راجع بهش نظر داد. :job:

      دیدگاه


        #4
        پاسخ : برنامه برای محاسبه Duty cycle با میکرو

        سلام
        به روش سرکشی می تونی DUTY CYCLE رو حساب کنی به این شکل که یه تایمر با زمانی مشخص مثلا 100 میکروثانیه درست کنی که با هر بار ورود به اون صفر یا یک بودن پایه که سیگنال PWM به میکرو وارد میشه رو بشماری. پس از گذشت 1 ثانیه نسبت تعداد یکها به تعداد صفرها عرض پالس رو بهت میده.
        تلاش رمز ظفر

        دیدگاه


          #5
          پاسخ : برنامه برای محاسبه Duty cycle با میکرو

          سلام من مشکلی برام پیش اومده اونم اینه که برای اندازه گیری دما با سنسور smt160 تو عمل(تو پروتوس مشکلی نداره) مقدار واقعی رو نشون نمیده در اصل چیزی نزدیک به 10 درجه اختلاف داره و تو دمای کاملا ثابت (دستگاه جوجه کشی) نوسان 2 الی 3 درجه ای داره.در صورتیکه می بایست دقت 0.1 رو حداقل می داشت (مقاومت 4.7k بین portd.4 و زمین رو هم گذاشتم)برنامه ای هم که تو میکرو ریختم اینه لطفا راهنماییم کنید با تشکر فراوان (نماز و روزهاتون قبول)
          '--------------------------------main-------------------------------------------
          $regfile = "m32def.dat"
          $crystal = 8000000
          '-------------------------------lcd---------------------------------------------
          Config Lcd = 16 * 2
          Config Lcdpin = Pin , Rs = Pinb.0 , E = Pinb.2 , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = Pinb.7
          '--------------------------------dim-------------------------------------------
          Dim Yazdkit_reset As Word
          Dim Yazdkit_set As Word
          Dim Temp As Single
          Dim Duty As Single
          Dim X As Integer

          '-------------------------------------------------------------------------------
          Config Timer1 = Timer , Prescale = 1
          Enable Timer1
          '--------------------------------main------------------------------------------
          Config Pind.4 = Input
          '------------------------------------------------------------------------------
          Config Single = Scientific , Digits = 2
          Cursor Off
          Cls
          Locate 1 , 5
          Lcd "Hello"
          Locate 2 , 1
          Lcd "WWW.YAZDKIT.COM"
          Waitms 50
          Cls

          Smt160:
          Do
          Gosub Read_data_sm160
          Locate 1 , 1
          Lcd "T= " ; Temp ; "c ";
          Waitms 50
          Loop

          '-------------------------------------------------------------------------------
          Read_data_sm160:
          Bitwait Pind.4 , Set
          Bitwait Pind.4 , Reset
          Bitwait Pind.4 , Set
          Bitwait Pind.4 , Reset
          Bitwait Pind.4 , Set
          Bitwait Pind.4 , Reset
          Stop Timer1


          Bitwait Pind.4 , Set
          Timer1 = 0
          Start Timer1
          Bitwait Pind.4 , Reset
          'Xl = Timer1
          Yazdkit_set = Timer1


          Timer1 = 0
          Start Timer1
          Bitwait Pind.4 , Set
          'Xf = Timer1
          Yazdkit_reset = Timer1

          X = Yazdkit_set + Yazdkit_reset
          Duty = Yazdkit_set / X

          Duty = Duty - 0.32
          Waitms 1
          Temp = Duty / 0.0047
          Waitms 1
          'Locate 1 , 1
          'Temp = Round(temp)
          Stop Timer1
          Return




          دیدگاه


            #6
            پاسخ : برنامه برای محاسبه Duty cycle با میکرو

            سلام مجدد رفتم تو موضوعات گشتم اما بیشترشون زبان c بودن که من وارد نیستم(من بیسیک بلدم البته تازه کارم).تو یه قسمت گفته بودید اگه از int0 ,int1 باهم به عنوان ورودی استفاده بشه دقت خیلی بالا میره .چطور لبه بالا رونده رو با یه پایه ولبه پایین رونده رو با پایه دیگه باید خوند .لطفا با نوشتن برنامه توضی بدید ممنونم و منتظر جوابتون تا اون موقع می رم بازم روش کار می کنم :read:

            دیدگاه


              #7
              پاسخ : برنامه برای محاسبه Duty cycle با میکرو

              سلام
              میخواست برنامه رو بزارم که c بود که بدردت نمی خوره
              اما روش کارشو میگم میتونی پیادش کنی
              یه وقفه بساز که حساس به لبه (بالا و پایین رونده) باشه )toggle(
              در لبه بالا رونده تایمر رو فعال کن - چک کن اگه پایه یک هست پس بالا رونده بوده
              در لبه پاین رونده مقدار تایمر رو ذخیره کن=a
              در لبه بعدی مقدار تایمر رو ذخیره کن =b
              => c=a/b
              حالا که برنامه رو فهمیدی برای عملکرد مستمر
              لبه بالا:
              خواندن تایمر
              صفر کردن تایمر
              محاسبه دیوتی سایکل
              لبه پایین:
              خواندن تایمر

              نکته: در زبان سی باید تو محاسبه باید فلوت رو وارد کنیم
              یعنی اعشاری کنیم چون رقم های خوانده شده عدد صحیح بودن(بسته به تعریف اولیه )
              در نمایش به این فرمت ها باید دقت کنید

              دیدگاه


                #8
                پاسخ : برنامه برای محاسبه Duty cycle با میکرو

                سلام ممنون از راهنماییتون.اما بازم نشد (به احتمال زیاد من نتونستم اونچه که گفتید دقیق انجام بدم)دما بین 3 درجه نوسان داره.اگه لطف کنید برنامه ای رو که قرار دادم به روشی که گفتید تغییر بدید یا خودتون یه مثال با بیسیک بزنید ممنون میشم.در ضمن اون برنامه ای که می خواستید به زبان c بزارید رو هم قرار بدید دارم رو c هم کار می کنم شاید تونستم از روی برنامه c مشکلم رو تو بیسیک متوجه بشم خیلی ممنونم.نماز و روزتون قبول :job:

                دیدگاه

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