اطلاعیه

Collapse
No announcement yet.

محاسبه تایم صفر یا یک بودن ورودی میکرو ::: بی نهایت مهم :::

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

    محاسبه تایم صفر یا یک بودن ورودی میکرو ::: بی نهایت مهم :::

    بسم الله الرحمن الرحیم

    احتیاج به برنامه ای دارم که مدت زمان یک یا صفر بودن یکی از پایه ها را محاسبه ( برحسب میلی ثانیه با دقت 50 میکرو ثانیه ) سپس نتیجه را با یک مقدار خاص جمع کرده و به خروجی بدهد

    به عبارت دیگر اگر به مدت 3 میلی ثانیه ورودی میکرو ( پایه a3 ) برابر یک باشد . در خروجی ( پایه c2 ) پنج میلی ثانیه (2+3) ثانیه یک داشته باشیم و به همین ترتیب همه زمان های ورودی با 2 جمع شوند و در خروجی ظاهر شوند

    بنده فارغ التحصیل مهندسی الکترونیک هستم. چند ماهیست سرباز هستم و همه اطلاعاتم فراموش شده . در صورت موفقیت در نوشتن این برنامه و تکمیل پروژه پیشنهادی ام شرایط خدمت من خیلی بهبود می یابد. خوهش میکنم حداکثر همکاری را بفرمائید

    #2
    پاسخ : محاسبه تایم صفر یا یک بودن ورودی میکرو ::: بی نهایت حیاتی :::

    یک روش کار اینه:
    1- ورودی میکرو رو بده به یکی از وقفه های خارجی میکرو. طوریکه با لبه ها وقفه ایجاد بشه. با لبه بالا رونده؛ داخل وقفه هم یه تایمر رو روشن کن(با بالاترین فرکانس برای بدست آوردن بالاترین دقت)
    2- وقتی لبه پایین رونده اومد تایمر رو خاموش کن و نتیجه رو در عدد ثابت ضرب کن.
    3- حالا تایمر رو برای مدت بدست اومده روشن کن. وقتی وقفه تایمر اومد اونو غیر فعال کن
    * به حداکثر زمان اعمال ورودی (برای جلوگیری از سرریز تایمر یا مواجهه با اون) توجه داشته باش

    دیدگاه


      #3
      پاسخ : محاسبه تایم صفر یا یک بودن ورودی میکرو ::: بی نهایت حیاتی :::

      نوشته اصلی توسط mojalan
      یک روش کار اینه:
      1- ورودی میکرو رو بده به یکی از وقفه های خارجی میکرو. طوریکه با لبه ها وقفه ایجاد بشه. با لبه بالا رونده؛ داخل وقفه هم یه تایمر رو روشن کن(با بالاترین فرکانس برای بدست آوردن بالاترین دقت)
      2- وقتی لبه پایین رونده اومد تایمر رو خاموش کن و نتیجه رو در عدد ثابت ضرب کن.
      3- حالا تایمر رو برای مدت بدست اومده روشن کن. وقتی وقفه تایمر اومد اونو غیر فعال کن
      * به حداکثر زمان اعمال ورودی (برای جلوگیری از سرریز تایمر یا مواجهه با اون) توجه داشته باش
      اینکه از پایه های اینتراپت استفاده کنم ایده خوبیه. به این صورت که با لبه بالایی تایمر کانتر روشن بشه و در صورت صفر شدن خاموش. برای سرریز زمانها مشکلی ندارم چون زمان خاموش بودن ده برابر زمان روشن بودن که مشکلی ایجاد نمیشه.
      دوست عزیز میشه در نوشتن کد کمکم کنید ؟

      اضافه شده در تاریخ :
      پردازنده قراره یک دریچه ورودی رو با سرعت های بالا و در حد چند میلی ثانیه روشن کنه . حالا ما میخوایم یک کیت واسطه بین پردازنده و دریچه قرار بدیم تا زمان باز بودن دریچه با یک مقدار مشخص جمع بشه و روی دریچه اعمال بشه.
      میتونیم ورودی رو به پایه اینتراپت میکرو بدیم تا با یک شدن لبه بالارونده تایمر فعال بشه و با پایین اومدن تایم رو محاسبه کنه و با مقدار مشخصی جمع کنه و در خروجی به همون اندازه دریچه رو باز کنه. نیاز به دقت هم داریم.


      اضافه شده در تاریخ :
      دوستان من خیلی به این برنامه احتیاج دارم. لطفا همکاری کنید

      دیدگاه


        #4
        پاسخ : محاسبه تایم صفر یا یک بودن ورودی میکرو ::: بی نهایت مهم :::

        نوشته اصلی توسط soonaeid
        دوستان من خیلی به این برنامه احتیاج دارم. لطفا همکاری کنید
        اگه تو نوشتن برنامه مشکل داری بگو کدویژن یا بسکام ؟
        اگه یه چیزی هم خودت نوشتی بذار تا روی اون توضیح بدم ...
        [br /][hr]http://pcenter.ir[hr][br /]

        دیدگاه


          #5
          پاسخ : محاسبه تایم صفر یا یک بودن ورودی میکرو ::: بی نهایت مهم :::

          دوست من
          شما در این مورد خاص اصلا نیازی به اندازه گیری پهنای پالس ورودی نداری!
          کافیه که شما با 1 شدن ورودی خروجی رو 1 کنی و هر وقت ورودی 0 شد بعد از یک تاخیر 2ms خروجی رو 0 کنی

          دیدگاه


            #6
            پاسخ : محاسبه تایم صفر یا یک بودن ورودی میکرو ::: بی نهایت مهم :::

            نوشته اصلی توسط adelavr110
            اگه تو نوشتن برنامه مشکل داری بگو کدویژن یا بسکام ؟
            اگه یه چیزی هم خودت نوشتی بذار تا روی اون توضیح بدم ...
            سلام / ضمن تشکر از توجه شما ...
            نظرتون راجب کد پایین چیه ؟

            کد:
            $regfile = "m16def.dat"
            $crystal = 8000000
            Config Pinb.1 = Input
            Config Pinb.2 = Output
            Do
            If Pinb.1 = 1 Then
            Pinb.2 = 1
            L1:
            If Pinb.1 = 1 Then Goto L1
            Waitms 5
            Portb.2 = 0
            End If
            Loop

            در پروتئوس جواب نداد !

            دیدگاه


              #7
              پاسخ : محاسبه تایم صفر یا یک بودن ورودی میکرو ::: بی نهایت مهم :::

              نوشته اصلی توسط Hamid Reza.T
              دوست من
              شما در این مورد خاص اصلا نیازی به اندازه گیری پهنای پالس ورودی نداری!
              کافیه که شما با 1 شدن ورودی خروجی رو 1 کنی و هر وقت ورودی 0 شد بعد از یک تاخیر 2ms خروجی رو 0 کنی
              این روش ، روش خوب و ساده ای ست اما مشکلی که داره ممکنه میکرو عقب بیفته مثلا اگه میکرو پس از اتمام زمان پالس بخواد 2 میلی ثانیه تاخیر بده ممکنه تو این زمان پالس بعدی از راه برسه و ....

              نوشته اصلی توسط soonaeid
              سلام / ضمن تشکر از توجه شما ...
              نظرتون راجب کد پایین چیه ؟

              کد:
              $regfile = "m16def.dat"
              $crystal = 8000000
              Config Pinb.1 = Input
              Config Pinb.2 = Output
              Do
              If Pinb.1 = 1 Then
              Pinb.2 = 1
              L1:
              If Pinb.1 = 1 Then Goto L1
              Waitms 5
              Portb.2 = 0
              End If
              Loop

              در پروتئوس جواب نداد !
              در برنامه شما چند اشکال جزئی وجود دارد برنامه رو به صورت زیر اصلاح کنید:
              کد:
              $regfile = "m16def.dat"
              $crystal = 8000000
              Config Pinb.1 = Input
              Config Portb.2 = Output
              Do
              bitwait pinb.1,set
              Portb.2 = 1
              bitwait pinb.1,reset
              Waitms 2
              Portb.2 = 0
              Loop
              البته همونطوری که گفتم این روش جندان مناسب نیست بهتره که شما از اینتراپت خارجی و یکی از تایمر ها رو استفاده کنید
              مثلا تو این برنامه زمان حالت صفر رو هم +2 میلی ثانیه نمیکنه و در موقع تاخیر هم از پالس ورودی اطلاعی نداره

              [br /][hr]http://pcenter.ir[hr][br /]

              دیدگاه


                #8
                پاسخ : محاسبه تایم صفر یا یک بودن ورودی میکرو ::: بی نهایت مهم :::

                تایم روشن بودن ورودی یک دهم تایم خاموش بودن . پس مشکلی واسه عقب افتادن نداریم. فقط نمیدونم چطور میشه برای 3 یا 4 ورودی گسترشش داد.
                میتونید روی همین برنامه کمکم کنید یا با توجه به مشکلاتی که گرفتید برنامه جدیدی بهم بدید ؟

                دیدگاه


                  #9
                  پاسخ : محاسبه تایم صفر یا یک بودن ورودی میکرو ::: بی نهایت مهم :::

                  برای اضافه کردن چند ورودی یک حلقه DO:LOOP بذارید و توش همه پینهایی که بهشون پالس می آد رو بررسی و خروجی حا رو تغییر بدین
                  البته اشکالی رو که من گرفتم یکی در مورد زمان خاموشی (یا بهتر بگم فاصله بین هر پالس) بود که ضاهرا با گفته تون مشکلی به وجود نمی آد
                  اما اگه از چند ورودی استفاده کنید بازم اون اشکال ظاهر میشه و مشکل ساز می شه
                  کلا الان هر کاری بخواید که میکرو براتون انجام بده مشکل پیش می آد باور نمیکنی امتحان کن!

                  [color=red]
                  بهترین روش استفاده از تایمر و اینتراپت خارجی
                  [br /][hr]http://pcenter.ir[hr][br /]

                  دیدگاه


                    #10
                    پاسخ : محاسبه تایم صفر یا یک بودن ورودی میکرو ::: بی نهایت مهم :::

                    نوشته اصلی توسط adelavr110
                    این روش ، روش خوب و ساده ای ست اما مشکلی که داره ممکنه میکرو عقب بیفته مثلا اگه میکرو پس از اتمام زمان پالس بخواد 2 میلی ثانیه تاخیر بده ممکنه تو این زمان پالس بعدی از راه برسه و ....
                    در برنامه شما چند اشکال جزئی وجود دارد برنامه رو به صورت زیر اصلاح کنید:
                    کد:
                    $regfile = "m16def.dat"
                    $crystal = 8000000
                    Config Pinb.1 = Input
                    Config Portb.2 = Output
                    Do
                    bitwait pinb.1,set
                    Portb.2 = 1
                    bitwait pinb.1,reset
                    Waitms 2
                    Portb.2 = 0
                    Loop
                    البته همونطوری که گفتم این روش جندان مناسب نیست بهتره که شما از اینتراپت خارجی و یکی از تایمر ها رو استفاده کنید
                    مثلا تو این برنامه زمان حالت صفر رو هم +2 میلی ثانیه نمیکنه و در موقع تاخیر هم از پالس ورودی اطلاعی نداره
                    راه حلی که بنده ارائه دادم یک روش کلی بود و منظور من استفاده از حلقه و delay نبود! در واقع انتخاب روش پیاده سازی رو به خود دوست عزیزمون واگذار کردم :smile:
                    صد البته که بنده هم مثل شما استفاده از وقفه های خارجی و تایمر ها رو ترجیح میدم. ولی به علت کمی وقت خودم و دوست عزیزمون به ارائه یک پیشنهاد اکتفا کردم.
                    ممنون از توضیحات شما

                    دیدگاه


                      #11
                      پاسخ : محاسبه تایم صفر یا یک بودن ورودی میکرو ::: بی نهایت مهم :::

                      دوستان من همچنان منتظر راهنمایی شما هستم

                      دیدگاه

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