اطلاعیه

Collapse
No announcement yet.

ریست نرم افزاری میکرو

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

    ریست نرم افزاری میکرو

    سلام خدمت دوستان

    من تو برنامه ای که نوشتم به این نیاز دازم که پس از انجام یک کار، میکرو به طور خودکار ریست بشه و برنامه از ابتدا آغاز بشه. مثل اینکه پاور را قطع و وصل کرده ایم

    برای این مشکل، ریست نرم افزاری وجود داره؟

    اگه نه ، چه راهی پیشنهاد میکنید؟

    لطفا سریعتر یک راه پیشنهاد بدید

    #2
    پاسخ : ریست نرم افزاری میکرو - کمک فوری

    باید یک دستور مثل JMP در اسمبلی یا Goto در بیسیک به آدرس Startبرنامه بدی

    معمولا start برنامه در اسمبلی آدرس 0 و در بیسیک شما خودتون یک Label با نام دلخواه در ابتدای برنامه قرار میدهید.

    موفق باشید

    دیدگاه


      #3
      پاسخ : ریست نرم افزاری میکرو - کمک فوری

      من با CodeVision برنامه مینویسم و تو کدویژن هم دستور goto X فقط در یک تابع اجرا میشه

      یعنی فقط در همون محدودهآ‌ی تابعی که از این دستور استفاده میکنی میشه از lable هم استفاده کرد

      درسته؟ (من امتحان کردم اینطوری جواب داد ؛ مطمئن نیستم)

      در ضمن دستور یا lable را میتوان خارج از Main و پس از سرتیتر ها استفاده کرد؟

      دیدگاه


        #4
        پاسخ : ریست نرم افزاری میکرو - کمک فوری

        بهترین راه watch dog هستش
        واچ داگ رو تنظیم کن رو کمترین زمان راهش بنداز و بعد از راه اندازی یه تاخیر بزرگ بذار تا توی تاخیر ریست بشه

        یادت نره اول برنامه واچ داگ رو غیر فعال کنی و فیوز بیت watch dog en رو هم غیر فعال کنی تا بصورت دستی بشه کنترل کرد
        به وبلاگم سر بزنید

        دیدگاه


          #5
          پاسخ : ریست نرم افزاری میکرو - کمک فوری

          سلام دوست عزیز
          توی حلقه while یا for شما به راحتی میتونید با دستور break از اون خارج بشید
          البته لا اجازه دوستان اینکه شما تو برنامتون بیاین و از goto استفاده کنید خوانایی برنامتون رو پایین میارید و یکم واس خودتون گیج کننده میشه

          دستور break یک دستور آشناست . قبلاٌ از آن برای خاتمه دادن به دستور switch و همچنین حلقهآ‌های while و do..while استفاده کردیم . از این دستور برای خاتمه دادن به حلقهآ‌ی for نیز میآ‌توانیم استفاده کنیم . دستور break انعطاف پذیری بیشتری را برای حلقهآ‌ها ایجاد میآ‌کند . معمولاٌ یک حلقهآ‌ی while ، یک حلقهآ‌ی do..while یا یک حلقهآ‌ی for فقط در شروع یا پایان مجموعهآ‌ی کامل دستورالعملآ‌های موجود در بلوک حلقه ، خاتمه میآ‌یابد . دستور break در هر جایی درون حلقه میآ‌تواند جا بگیرد و در همان جا حلقه را خاتمه دهد .

          یعنی اگه شما یه همچین چیزی بنویسی به محض اجرای شرط از حلقه وایل اصلی خارج میشه و برنامه از اول شروع به کار میکنه فقط یادت بشه کل متغیراتو صفر کنی واسه اطمینان
          while(1)
          {
          if(a==1)break;


          }
          دنبال کار میگردم تو تهران کسی سراغ داره

          دیدگاه


            #6
            پاسخ : ریست نرم افزاری میکرو - کمک فوری

            اگر اشتباه نکنم، ریست شدن میکرو با اینکه برنامه از اول شروع بشه کمی فرق میکنه، شروع برنامه از اول یعنی اینکه شمارنده برنامه با مقدار آدرس شروع برنامه مقدار دهی بشه و برنامه به اونجا پرش کنه و در نتیجه برنامه از اول شروع بشه، اما ریست کمی متفاوت هست، شما زمانی که ریست میکنی مقدار رجیستر های I/O و رجیسترهای کاربرد خاص هم به مقدار اولیه reset میشه و پورت های ورودی خروجی شما هم به حالت امپدانس بالا میره و از مدار خارجی جدا میشه و بعد از اینکه همه منابع ریست کننده غیر فعال شدند میکرو شما تازه تصمیم شروع به کار میگیره و در اینجا شما دوباره تاخیری دارید که به تاخیر شروع به کار معروف هست و به این خاطر این تاخیر رو قرار دادند که ولتاژ تغذیه میکروی شما به حالت پایدار برسه، که میتونید از طریق فکر کنم فیوز بیت های SUT0 و SUT1 مقدار این تاخیر رو تغییر بدید، آیا شما واقعا به همه اینها نیاز دارید یا فقط میخواید اجرای برنامه به ابتدا برگرده؟
            در ضمن اگر میخواید با آدرس دهی عددی به اول برنامه پرش کنید دقت کنید که آدرس شروع برنامه واقعا صفر هست یا نه، اگر از زبان سطح بالا استفاده میکنید ممکن هست کامپایلر آدرس شروع رو همیشه صفر در نظر نگیره و جور دیگری تنظیم شده باشه.
            از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
            هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
            اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
            اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
            شاد و موفق باشید

            دیدگاه


              #7
              پاسخ : ریست نرم افزاری میکرو - کمک فوری

              سلام
              شما میتوانید از watchdog استفاده کنید یا از این فایل زیر که برای من خیلی جالب بوده امیدوارم برای شما هم همین طور باشه.

              موفق باشید.

              دیدگاه


                #8
                پاسخ : ریست نرم افزاری میکرو - کمک فوری

                ببخشید فایل در پست قبلی قرار نگرفت
                http://i43.tinypic.com/2nlesnm.jpg

                دیدگاه


                  #9
                  پاسخ : ریست نرم افزاری میکرو - کمک فوری

                  سلام
                  watchdog رو فعال کن سپس توی یک حلقه while خودتو گیر بی انداز.

                  دیدگاه


                    #10
                    پاسخ : ریست نرم افزاری میکرو - کمک فوری

                    اگر مبتدی هستی و حوصله موارد بالا رو نداری می تونی یه ترانزیستور به مدار پایه رست میکرو بزنی و با یکی از پایه های میکرو ترانزیستور رو را بندازی تا پایه رست رو زمین کنه
                    ای با من و پنهان چو دل از دل سلامت میکنم توکعبه ای هر جا روم قصد مقامت می کنم
                    هر جا که هستی حاضری از دور در ما نا ظری شب خانه روشن میشود چون یاد نامت میکنم
                    گه همچو باز آشنا بر دست تو پر میزنم گه چون کبوتر پرزنان آهنگ بامت می کنم

                    مرا گویی تورا با این قفس چیست من چه دانم ، من چه دانم اگر مرغ هوایی این قفس چیست من چه دانم ، من چه دانم من چه دانم

                    دیدگاه


                      #11
                      پاسخ : ریست نرم افزاری میکرو - کمک فوری

                      از همه دوستان عزیز متشکر
                      من خیلی مبتدی نیستم. حدود 2 سالی هست که با AVR دارم کلنجار میرم :mrgreen:

                      از همه متشکر

                      تا اسم Whatch dog را آوردید یادم اومد و سریع رفتم و فعالش کردم. چون وقتی آدم تو یک مشکل که گیر میوفته حسابی اعصابش بهم میریزه و خیلی چیزاست که فراموش میکنه

                      اینجاست که وجود دوستای خوبی مثل شما خیلی مفیده

                      مشکل را با همون Whatch Dog رفع کردم ولی علت این مشکل را آخر نفهمیدم

                      یک سیستم صوتی برای کمک به نا بینایان راه انداخته بودم که باید بنا به هر عکیآ‌العملی یک پیام را پخش میآ‌کرد. ولی نمیآ‌دونم چرا فقط برای بار اول این کارو انجام میآ‌داد :eek:و دفعه های بعد Mute میآ‌شد که وقتی ریستش کردم درست شد
                      به هر حال متشکر :nice:

                      دیدگاه


                        #12
                        پاسخ : ریست نرم افزاری میکرو - کمک فوری

                        قطعا برنامه شما یک ایرادی داره

                        این ایرادات معمولا از تنظیم غلط Stack pointer ناشی میشه . یا دستور call بدون Return و امثال آن.

                        در هر صورت ، موفق باشید

                        دیدگاه


                          #13
                          پاسخ : ریست نرم افزاری میکرو - کمک فوری

                          اخه دستگاه من از دو میکرو تشکیل شده که به صورت سریال با هم ارتباط دارن و فرکانس کاری یکی 3.6864MHz هست ولی فرکانس دیگری 16MHz
                          من فکر میآ‌کنم اختلاف زیاد این دو فرکانس باعث ایجاد یک خطای زیاد در BAUD Rate میشه و باعت میشه که دسوری که از یکی به دیگری میآ‌فرستم یک چیز دیگه ترجمه بشه

                          به نظر شما امکانش وجود داره؟

                          دیدگاه


                            #14
                            پاسخ : ریست نرم افزاری میکرو - کمک فوری

                            با این حساب کمترین خطا را روی Baud rate 2400 دارید .

                            بعد از آن روی 4800 9600 و 19200 و 76800 دارید

                            از چه باود ریتی استفاده میکنید ؟


                            دیدگاه


                              #15
                              پاسخ : ریست نرم افزاری میکرو - کمک فوری

                              سلام

                              اگه اشتباه نکرده باشم شما از کدویژن استفاده میکردید

                              اگه از دستورات printf و scanf برای ارسال و دریافت استفاده میکنید این دستورها یه سری خصوصیات دارن مثل گذاشنت علامت \n\r که کدهای اسکی 10 و 13 رو اراسال میکنه(printf) با گذاشتن این دو تا توی سریال ایمولاتورها مثله هایپر ترمینال یه خط جدید ایجاد میشه و توی دستور scanf هم تابع دنبال کد 13 اسکی بعنوان پایان خط میگرده

                              چون من از کدویژن دل خوشی ندارم گاهی اوقات این مشکل رو دیدم که بار اول داده کامل و درست دریافت میشه ولی بار دوم به بعد داده درسته ولی توی آرایه رشته مورد نظر مثلا کد اسکی 10 وجود داره(اول ارایه) و این کار رو خراب میکنه

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

                              راستی اکثر این داده های مزاحم توی ترمینال ایمولاتور ها دیده نمیشن و باید بایت به بایت خونده بشن

                              برای اطلاع شاید هم بلد باشید ولی این عکس کد های اسکیه و کدهای مزاحم معمولا زیر 32 هستن:
                              به وبلاگم سر بزنید

                              دیدگاه

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