اطلاعیه

Collapse
No announcement yet.

انجام پروژه با تایمر و وقفه (فوری)

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

    انجام پروژه با تایمر و وقفه (فوری)

    سلام
    من میخوام پروژه سیستمی با atmega8 و با بیسکام طراحی کنم که در خط تولید لوله استفاده میشه به این صورت که:
    در زمانی که لوله در حال عبور کردنه و داخل آن با چسب داره پر میشه - یکی از پایه های میکرو وظیفه نشان دادن این چسبکاری را بر عهده داره - ( یعنی وقتی داره چسب می خوره صفره و وقتی چسب خوردن قطع بشه روی پایه یک پالس می فرسته ) ناگهان چسبکاری لوله قطع بشه ، بعد از گذشت 10 ثانیه یکی دیگه از پایه های میکرو را ست کنه .
    نکته پروژه اینه که اون پایه میکرو که نشانگر چسب است اگه یک بشه (یعنی چسبکاری قطع شده) ولی تا قبل از 10 ثانیه دوباره صفر بشه ( یعنی چسبکاری دوباره شروع بشه) میکرو باید منتظر بشه تا پایه مورد نظر دوباره یک بشه و زمان را از اول دوباره بشماره( منتظر بشه تا دوباره چسبکاری قطع بشه و بعد از گذشت 10ثانیه پایه را ست کنه)
    من این برنامه را نوشتم ولی یه جای کار اشکال داره یعنی 10 ثانیه زمان را داریم ولی اگه وسط 10 ثانیه پایه یکبار قطع و وصل بشه کار نمی کنه
    لطفا راهنمایی کنید، ممنون از همه
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Timer1 = Timer , Prescale = 1024
    Config Int1 = Falling
    Config Portb = Output
    Enable Interrupts
    Enable Int1
    On Int1 Test2
    Enable Ovf1
    On Ovf1 Test3
    Do
    If Pind.2 = 1 Then Start Timer1
    Loop
    End

    Test2:
    Stop Timer1
    Return

    Test3:
    Portb = &B00000001
    Return

    #2
    پاسخ : انجام پروژه با تایمر و وقفه (فوری)

    سلام دوست عزیز
    فکر میکنم این برنامه بدردت بخوره
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Timer1 = Timer , Prescale = 1024
    Config Int1 = Falling
    Config Portb = Output
    Enable Interrupts
    Enable Int1
    On Int1 Test2
    Enable Ovf1
    On Ovf1 Test3
    Do
    If Pind.2 = 1 Then
    Start Timer1
    Do
    If Pind.2 = 0 Then
    Stop Timer1
    Timer1 = 0
    Reset Portb.0
    End If
    Loop Until Pind.2 = 1
    End If
    Loop
    End

    Test2:
    Stop Timer1
    Timer1 = 0
    Return

    Test3:
    Portb = &B00000001
    Return
    Share OR Die

    دیدگاه


      #3
      پاسخ : انجام پروژه با تایمر و وقفه (فوری)

      [right]آقای mahdi.n با تشکر از جواب شما
      من عکس فایل شبیه سازی شده کارم را ضمیمه می کنم اگه نکته ای به ذهنتون میرسه ممنون میشم که راهنماییم کنید.
      چند تا نکته:
      1- من اپتوکوپلر استفاده کردم تا مدار دیجیتال من از مدار تحریک من جدا باشه و از امیتر اپتو استفاده کردم تا منطق های ورودی من برعکس نشن
      2- رله در پروتئوس انگار که کار نمی کنه و عکس العملی نداره !!!
      3- نکته ای برای بهتر شدن مدار دارید لطفا دریغ نکنید

      دیدگاه


        #4
        پاسخ : انجام پروژه با تایمر و وقفه (فوری)

        مدارتون خوبه ، هیچ مشکلی نداره ، همه چی رو بجا استفاده کردی .
        رله تو پروتیوس عکس العمل نداره اما کار می کنه
        بازم اگه سوالی بود من در خدمتم...
        Share OR Die

        دیدگاه


          #5
          پاسخ : انجام پروژه با تایمر و وقفه (فوری)

          مجددا ممنونم :agree:
          من مدار را مونتاژ کردم ، داخل پروتئوس کاملا خوب جواب میده ولی وقتی تغذیه مدار مونتاژ شده خودم را وصل می کنم ، بدون اینکه من تحریکش کنم ، تایمر شروع به کار میکنه و بعد از 8 ثانیه رله وصل میشه. :cry2:
          همه ورودی های میکرو و تغذیه را هم فیلتر کردم و یک مقاومت 1 کیلواهم هم گذاشتم دو سر دیود اپتو ، ولی درست نشد فکر می کنید مشکل از کجاست؟
          ضمنا int 1 را هم قطع کردم فکر کنم وقفه لازم نداریم ولی برنامه را دست نزدم
          شکل جدیدی که داره در پروتئوس جواب میده ولی در مدار مونتاژ شده نه را ضمیمه کردم ممنون میشم کمکم کنید.

          دیدگاه


            #6
            پاسخ : انجام پروژه با تایمر و وقفه (فوری)

            اون مقاومت دو سر دیود اپتو برای چیه؟؟؟؟
            Share OR Die

            دیدگاه


              #7
              پاسخ : انجام پروژه با تایمر و وقفه (فوری)

              اپتو در اثر تحریک دیود آن فعال می شود. به نظرم آمد که شاید نویز باعث تحریک دیود اپتو می شه به همین دلیل مقاومت گذاشتم تا از این کار جلوگیری شود و با کوچکترین ولتاژی تحریک نشود.

              فکر کنم که متوجه کاری که می خوام در این پروژه انجام بدم شدید. نظر دیگری برای برنامه نویسی آن به یه شکل دیگه ندارید .

              امیدوارم بقیه هم اگه نظری دارند به من کمک کنند.

              دیدگاه


                #8
                پاسخ : انجام پروژه با تایمر و وقفه (فوری)

                دوست عزیز شما INT1 رو پایین رونده انتخاب کردید ولی پایه INT1 رو با مقاومت پول دان کردید(به جای پول پ)
                مقاومت 1k رو به جای زمین به مثبت تغذیه وصل کنید.
                INT0 در شماتیک استفاده شده ولی در برنامه تعریف نشده

                دیدگاه


                  #9
                  پاسخ : انجام پروژه با تایمر و وقفه (فوری)

                  تشکر خیلی زیاد
                  نکته برنامه همینجاست می خواهیم که از تحریک یک سوئیچ دو نتیجه بگیریم

                  وقتی سوئیچ را می زنیم نشانگر تحریک شدنه و وقتی تحریک نشود باید تایمر صفر شود و منتظر تحریک بعدی باشد
                  من از int0 استفاده نکردم از پایه pind.2 استفاده کردم ، به خاطر حرف جنابعالی اومدم پایه تحریک را pind.5 کردم ولی تایمر هنگام از یک به صفر شدن باید یه طوری ریست بشه که دیگه نشماره این کار را داخل حلقه انجامش دادم ولی کار نداد
                  از int1 هم که به قول شما این طوری نمیشه استفاده کرد برنامه را باید عوض کرد که من چیزی به ذهنم نیومد.

                  نکته: ( به پایه امیتر u1 توجه کنید این پایه با فشردن کلید یک است و وقتی فشرده نشود صفر است باید pull down باشه و اگه به 5 ولت وصل باشه منطق ما تغییر می کنه )

                  یادآوری شکل برنامه من:
                  اگه بخوام مدار قبل از میکرو همینطوری باشه و من با فشردن کلید ، بعد از 10 ثانیه یکی دیگه از پایه های میکرو را یک کنم و اگر در بین 10 ثانیه کلید قطع شود ، میکرو منتظر شود تا دوباره کلید فشرده شود و 10 ثانیه را مجدد از اول شروع به شمارش کند ، برنامه را چطوری باید بنویسم.
                  این قطع و وصل شدن شاید چند صد بار باشه ولی بالاخره یه 10 ثانیه پیش میاد که کلید به طور دائمی فشرده شده است.
                  من با برنامه آقای hamid.n که هست وقتی با پروتئوس کار می کنم جواب میده ( pin ها را تصحیح می کنم ها) ولی یه جای کار ایراد داره اونم ست شدن بدون دلیل pinb.0 است
                  میشه اگه نظری برای از نو نوشتن برنامه دارید بدید خیلی خیلی ممنون

                  دیدگاه


                    #10
                    پاسخ : انجام پروژه با تایمر و وقفه (فوری)

                    منظورتون اینه که تو پروتئوس درست جواب میآ‌ده ولی در عمل خوب کار نمیآ‌کنه؟
                    به جای مقاومت 1M ،یه مقاومت 1K بذار و بیس ترانزیستور رو با یه مقاومت 10K به منفی وصل کن،اگه نتیجه نگرفتی بگو تا از اول برنامه رو بنویسیم

                    دیدگاه


                      #11
                      پاسخ : انجام پروژه با تایمر و وقفه (فوری)

                      مجددا سلام
                      من pcb مدار را ساختم الان اشکال ما فقط به این صورت است که:
                      وقتی تغذیه مدار را وصل میکنم بعد از 10 ثانیه رله وصل می شه ولی اگر من پایه pd.5 را توسط switch یکبار قطع و وصل کنم دیگه خود به خود رله تحریک نمیشه و میکرو منتظر میشه تا من توسط switch مدار را تحریک کنم.
                      من ورودی میکرو را با توجه به شکل در pind.5 زمین کردم مشکل برطرف شد
                      با این حساب بایاس اپتو مشکل داره !!! یه بایاس دیگه برای اون میشه پیشنهاد بدین که وقتی اپتو تحریک میشه ، ولتاژ خروجی لازم برای تحریک میکرو را داشته باشه.
                      ترجیحا ورودی به میکرو از کلکتور ترانزیستور اپتو باشه بهتره. در حال حاضر ورودی به میکرو از امیتر ترانزیستور میکرو است.

                      دیدگاه

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