اطلاعیه

Collapse
No announcement yet.

همکاری برای نوشتن یک برنامه با بسکام

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

    همکاری برای نوشتن یک برنامه با بسکام

    سلام
    دوستان گرامی من نزدیک 9 ماه است تلاش میکنم که یک برنامه با بسکام برای یک پروژه بنویسم ولی موفق نشد م .از هر جا وهر کس که توانستم پرسیدم ولی به نتیجه مطلوب نرسیدم .خواهشمند است اگر کسی می تواند راهنماییم کند.
    شرح برنامه ::
    4 کلید برای ورودی که با انتخاب هر کلید میکرو فرمانهای خاصی به خروجی های خاصی می دهد و کارهای خاصی انجام می دهد(مثلا کلید A1,A2,A3,A4)
    1 کلید برای روشن وخاموش کلی میکرو در هر لحظه از کار میکرو (مثلا کلید P)
    1 کلید برای شروع کار یا مکث در حین کار هر کدام از 4 کلید بالایی یا همان Play/Pause مثلا کلید (M)
    روش کار برنامه :
    ابتدا با فشار دادن کلید p برنامه شروع شده ومنتظر کلیدهای A باشد
    سپس یکی از کلید های A که فشار داده شد
    با فشار کلید M برنامه مربوط به کلید A مشخص شده شرو ع کار کند
    ****
    تا اینجای کار را با معلومات خودم می توانم بنویسم
    ناتوانی من در نوشتن برنامه این است که در هر کدام از مراحل زیر نمی توانم برنامه به درد بخوری را بنویسم
    مراحل مشکل زا::
    1)) در هر لحظه از کار میکرو با فشار کلید P کل سیستم خاموش شود وبا فشار مجدد سیستم از اول راه اندازی شود
    2)) در هر لحظه از کار میکرو با فشار کلید M کل سیستم متوقف ومنتظر دستور باشد که این دستور می تواند انتخاب دوباره کلیدهای A بوده یا ادامه کار متوقف شده باشد
    من از وقفه ها هم استفاده کردم ولی نتوانستم برنامه خوبی بنویسم

    با تشکر


    #2
    پاسخ : همکاری برای نوشتن یک برنامه با بسکام

    سلام من یه چی به ذهنم رسید نمیدونم درست باشه یا نه
    اول برنامه به bitwait بزار که تا وقتی کلید رو فشار ندادیم وارد برنامه اصلی نشه(البته اگه نخوای تغذیتو قطع و وصل کنی)
    بعد که کلید p رو زدیم بیاد وارد یک حلقه بشه که حلقمون شامل 4 تا شرط باشه و تا وقتی کلیدی نزدیم از حلقه خارج نشه
    بعد از زدن یکی از 4تا کلید دستورات مربوطه رو انجام بده که باید توی این دستورات 2تا شرط اضافه کنیم یکی برای کلید p که اگه زده شد با یک jmp بپره به اون bitwait که اول برنامه نوشتیم یکی دیگه هم واسه کلید m که اگه زده شد bitwait بشه تا دوباره کلید رو بزنیم

    دیدگاه


      #3
      پاسخ : همکاری برای نوشتن یک برنامه با بسکام

      سلام.
      مدت زمان کار هرکدام از 4 کلید بیش از نیم ساعت میباشد.
      حال دوشرطی را که گفتی چطوری بنویسیم که اگر مثلا در زمان دقیقه 12 کلید M را فشار دهیم برنامه فورا" متوقف وبا فشار مجدد از همان زمان دقیقه 12 وهمان کار ادامه دهد نه اینکه یک حلقه را انجام بده وسپس به یک شرط برسد تا برنامه متوقف شود..
      من تا حدودی الگوریتم برنامه را می دانم ولی در کد نویسی برنامه مشکل دارم
      با تشکر

      دیدگاه


        #4
        پاسخ : همکاری برای نوشتن یک برنامه با بسکام

        شرمنده دوست عزیز
        اگر توی این 9 ماه که میگی 2 ، 3 هفته وقت می گذاشتی دیتا شیت رو می خوندی و 2 ، 3 هفته هم مقاله کار با بسکام و avr رو می خوندی
        تا حالا کلی کار انجام می دادی
        بهتره این دوتا مورد رو بخونی
        موفق باشی
        هميشه به ياد خدا باش !

        دیدگاه


          #5
          پاسخ : همکاری برای نوشتن یک برنامه با بسکام

          خدا نکند هیچ بنده ای شرمنده شود
          دوست گرامی، من این مقدار اطلاعات ناچیز در مورد برنامه نویسی را خودم از اینترنت و یکی دو کتاب یاد گرفتم .
          دیتا شیت را نمی دانم از کجا باید گیر بیارم یا چطور از آن استفاده کنم.واین مقاله هارا هم نمی دانم
          ولی کتاب آقای کاهه را دارم وخوندم و2 کتاب دیگر ومقاله (1nafr) را هم خوندم ولی نتوانستم این برنامه را کامل کنم برنامه ای که نوشتم بجز 2 مورد کلید های PوM همه بخوبی کار میکند وچیزی حدود 400 خط میباشد
          حالا اگر شما فکر میکنید که می توانید راهنماییم کنید لطفا مضایقه نکنید

          دیدگاه


            #6
            پاسخ : همکاری برای نوشتن یک برنامه با بسکام

            سلامت باشید
            برای آیتم اولت
            یک روش می تونه این باشه که کلید پاور به یه وقفه وصل باشه
            هر وقت وقفه فراخوانی شد،توی روتین وقفه چک بشه تا کلید پاور فشرده نباشه
            و منتظر بمونه تا دیگه کاید فشرده نباشه
            بعد برای اطمینان یه تاخیر کوچولو ایجاد کنی و بعدش وقفه رو تو روتین خودش دوباره فعال کنی و یه تاخیر کوچولوی دیگه و بعد مد powerdown
            بعد دستور تنظیم واچ داگ با کمترین زمان و اننظار تا میکرو ریست بشه
            تست کن و نتیجه رو بگو،دقیقا بایستی تو این روش به همین ترتیب عمل کنی
            موفق باشی
            هميشه به ياد خدا باش !

            دیدگاه


              #7
              پاسخ : همکاری برای نوشتن یک برنامه با بسکام

              سلام:
              این چند خط را که بعنوان نمونه نوشتم ، اگر بتوانم خوب راه اندازی کنم می توانم اصول آنرا در برنامه اصلی که نمیتوان همه آنرا اینجا آورد قرار بدم
              در این برنامه دستوراتی که گفتید را چطور قرار بدم

              $regfile = "m16def.dat"

              $crystal = 8000000

              Config Porta = Output
              Config Portb = Output

              Config Int0 = Rising
              Config Int1 = Rising
              Enable Int0
              Enable Int1
              Enable Interrupts
              'On Int0 P
              'On Int1 M اینجا اگرعلامت (&#039را بردارم همین برنامه ساده کار نمیکند یا حداقل روی سیستم من که اینطور است(قبلا با یک ورژن 6 پروتوس مشکل داشتم)

              Dim A As Integer
              Dim B As Integer

              Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , _
              Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
              Config Lcd = 16 * 2
              Config Debounce = 10
              Bitwait Pind.3 , Set
              Waitms 10

              Do

              Set Porta.2 :
              Cls
              Lcd A
              Waitms 50 :
              A = A + 1
              Reset Porta.2
              : Waitms 50
              Loop
              End

              P:


              M:

              Bitwait Pind.3 , Set

              Return
              آیا اگر دستور on int1 m
              را قرار بدم وقفه خود به خود فعال میشود
              چیزی که من لازم دارم این است که مثلا هنگامی که ال سی دی عدد 5 را نشان می دهد و در حال ادامه شمارش میباشد برای یک لحظه کلید m
              را که به pind.3
              وصل میباشد فشار دهیم ،برنامه مکث کند وبا فشار مجدد ادامه دهد

              با تشکر(ضمنا فایل پروتوس را نمیدانم چطور اینجا قرار بدهم که مدار را هم ببینید. توی یک سایت دیگه امکان پلود بود)

              دیدگاه


                #8
                پاسخ : همکاری برای نوشتن یک برنامه با بسکام

                سلام دوست من برنامه ای که گفتی خیلی مشکل نیست اول برای 4کلیدت 4زیربرنامه بساز
                A1:
                A2:
                A3:
                حالا از دستور DEBOUNCE استفاده کن
                DEBOUNCE PINx.y,0,Al,SUB
                درزیر برنامهA1 هردستوری که میخوای برات انجام میده
                فقط داخل دستورA1 این دستور بنویس
                DEBOUNCE PINx.y,0,MM,SUB
                زیربرنامه MM
                MM:
                DO
                DEBOUNCE PINx.y,0,ST,SUB
                LOOP

                ST شروع مجدد برنامه است
                اول برنامت بنویس
                ST:

                دیدگاه


                  #9
                  پاسخ : همکاری برای نوشتن یک برنامه با بسکام

                  PINX.Y همان کلیدی است که بافشردن ان (A1...A4)است .باید ورودی معرفی کنی

                  دیدگاه


                    #10
                    پاسخ : همکاری برای نوشتن یک برنامه با بسکام

                    برای کلید M
                    شمابرای شمارش ازکانتر استفاده کرده اید .میتوانید از دستور STOP CANTER استفاده کنید .بنویسد اکر M رو 0 کردیدبه یک زیر برنامه بره در ان زیر برنامه STOP CANTER قرار بده وشرط بنویس که اکر دوباره 0 شد کانتر START بشه

                    دیدگاه


                      #11
                      پاسخ : همکاری برای نوشتن یک برنامه با بسکام

                      سلام
                      دوست گرامی این دستور ات بلادرنگ نیست
                      من کلیدی لازم دارم که در هر لحظه از کار میکرو ،آنرا متوقف کرده و منتظر رسیدن به شرطی در داخل دستور نبوده وبا فشار مجدد میکرو کار را از جایی که متوقف شده ادامه ده
                      (ضمنا همانطور که گفتم این برنامه برای مثال است .با کاری متفاوت .در برنامه اصلی کارها فرق کرده و چرخه بعضی از دستورات تا 30 دقیقه یا بیشتر زمان می برد)

                      دیدگاه


                        #12
                        پاسخ : همکاری برای نوشتن یک برنامه با بسکام

                        سلام.

                        به نظر من اگر می خواهید برنامه تون حرفه ای باشه و صد در صد جواب بده کاری کنید که هیچ وقت توی حلقه گیر نکنه. یعنی کلا از while و bitwait و اینها استفاده نکنید. همه را با if بنویسید. یه چیزی هست به اسم ماشین وضعیت یا State machine که دقیقا کارش اینه.

                        اگر برنامه هیچ وقت توی حلقه گیر نکنه. همیشه می تونید کلید P ، M یا هر چیز دیگه ای را چک کنید.

                        اساس کار State Machine هم به این صورته که یه متغیر مثلا به نام State تعریف میکنیم. بعد در ابتدای برنامه با چک کردن شرایط برنامه یک مقدار به State میدیم. یعنی برای هر شرایطی یک مقدار خاص را به State میدیم و بعد از کار توی یک Select case میاید و حالت های مختلف State را چک می کنید و برای هر حالت دستورات لازم را انجام میدید. البته کار کردن باهاش یکم اولش دردسر داره اما اگر راه بیفته سرعت برنامتون هم به شدت افزایش پیدا می کنه. در واقع به نظر من برنامه ای که تاخیر و حلقه توش باشه اصلا یه برنامه استاندارد محسوب نمیشه.

                        دیدگاه


                          #13
                          پاسخ : همکاری برای نوشتن یک برنامه با بسکام

                          سلام
                          با تشکر
                          این چیزی را که شما گفتید قبول دارم اما تعداد شرطها برای برنامه ای که در نظر دارم بسیار زیاد میشود
                          ضمنا" یکی از کار هایی که در این مدار قرار است انجام شود را ه اندازی یک موتور میباشد که حدود 5 ثانیه و در بعضی حالات تا 10 دقیقه موتور کار میکند
                          حال اگر با این روش از کلید p or M استفاده شود برنامه صبر میکند تا کار موتور تمام شود و این اصلا مد نظر من نیست

                          دیدگاه


                            #14
                            پاسخ : همکاری برای نوشتن یک برنامه با بسکام

                            با این روش هر کاری بخواهید می تونید بکنید. محدودیتی نداره(حتی برای اون موتور که گفتید).

                            اگر نمی خواهید از این روش استفاده کنید مشکل شما در واقع اینه که برنامه بعضی مواقع توی حلقه گیر می کنه و نمی تونید اون کلید ها را چک کنید. درسته؟ برای این این مشکل راه حلی که به نظر من میرسه اینه که توی شروط هر حلقه ، صفر شدن یکی از این پین ها را هم چک کنید تا اگه صفر شد برنامه از حلقه خارج شه.
                            در ضمن در مورد کلید P فکر می کنم دقیقا کار همون reset را انجام میده پس می تونید وصلش کنید به reset مستقیم.

                            دیدگاه


                              #15
                              پاسخ : همکاری برای نوشتن یک برنامه با بسکام


                              یک برنامه ساده که اگرکار کرد آنرا به یک برنامه اصلی که مد نظرم میباشد ارتقا دهم


                              **
                              یک مدار داریم با یک میکرو پروسسور و 3 کلید ورودی ویک ال سی دی
                              کلید Pبعنوان POWER
                              کلید Mبعنوان کلید PLAY / PAUSE
                              کلید Aبعنوان ورودی
                              **
                              با زدن کلید P مدار روشن و ال سی دی روشن شده
                              سپس با زدن کلید A برنامه AA که کار آن نمایش اعداد 1 تا 1000 با فاصله زمانی مثلا 1 ثانیه بر روی ال سی دی میباشد آماده وانتخاب می شود
                              با زدن کلید M برنامه AAشروع به کار میکند و اعداد ربا نمایش می دهد
                              شروط برنامه:::( مشکل من همین جا است))
                              1.اگر در حین اجرای برنامه AA کلید P را فشار دهیم کل سیستم خاموش و با فشار مجدد برنامه از اول آماده به کار شود
                              2- اگر در حین اجرای برنامه AA کلید M را فشار دهیم کل سیستمدر حالت مکث یا PAUSE بوده و با فشار مجدد برنامه به ادامه کار نمایش اعداد ادامه دهد مثلا اگر در حین نمایش عدد 21 این کلید را فشار دهیم همان لحظه مدار متوقف وبا فشار مجدد به شمارش از 21 به بعد ادامه دهد ( هر چند بار که خواستیم بتوان تکرار کرد)
                              با این نوضیح میتونید یک برنامه برایم بنویسید

                              دیدگاه

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