NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 2486 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 15 از 15

موضوع: ذخيره ماندن متغير بعد ازريست

  1. #1
    کاربر علاقه مند wiki آواتار ها
    تاریخ عضویت
    Feb 2010
    نوشته ها
    54
    تشکر
    74
    تشکر شده 32 بار در 15 پست

    پیش فرض ذخيره ماندن متغير بعد ازريست

    سلام
    يك سئوال درمورد ذخيره كردن يك عدد در ميكرو دارم، درطول برنامه يك متغير بدليل وقفه خارجي تغيير ميكند وبروي السيدي مقدار ان نمايش داده ميشود حالا اگر ميكرو ريست بشود مقدار متغير نشان داده شده روي السيدي همان مقدار اوليه برنامه است درحاليكه من ميخواهم اخرين عددي كه قبل از ريست شدن ميكرو درون ان بوده بعد از روشن شدن مجدد ميكرو روي السيدي نمايش دهد .ميدونم بايد از حافظه داخلي ميكرو استفاده كنم اما دقيقا نميدونم چيكار كنم، ميشه دوستان كمك كنند وراهنماييم بكنند .

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    با سلام
    ساده ترين و بهترين راه ذخيره كردن اون عدد تو حافظه EEPROM ميكرو هستش. يعني قبل از اينكه ميكرو ريست شه اون عدد توسط ميكرو در اين حافظه ذخيره ميشه و بعد از روشن شدن دوباره ميكرو ميتوني اون عدد رو دوباره استفاده كني.
    از چه ميكرويي استفاده مي كني؟ PIC يا AVR يا ARM ? از كدوم كامپايلر استفاده ميكني؟ WinAVR يا CodeVision يا Bascom يا Keil يا IAR؟

    ________________________
    برنامه نويسي، الكترونيك(PE)
    ________________________
    ویرایش توسط sadmonew : 17-08-2011 در ساعت 15:08

  4. تشکرها از این نوشته :


  5. #3
    کاربر علاقه مند wiki آواتار ها
    تاریخ عضویت
    Feb 2010
    نوشته ها
    54
    تشکر
    74
    تشکر شده 32 بار در 15 پست

    پیش فرض

    سلام
    ممنونم .اينو ميدونستم كه بايد ازeeprom استفاده كنم حتي اين كاررا هم كردم اما هردفعه بازم چون متغير اصلي را دراول برنامه عدد اوليه دادم موقع ريست شدن همون عدد اوليه مياد ميدونم يه قلقي داره اما نميتونم انجامش بدم .
    ازميكرو avr وبرنامه نويسي بسكام استفاده ميكنم.

  6. #4
    کاربر فعال processor آواتار ها
    تاریخ عضویت
    May 2010
    نام
    محمد صداقتی
    نوشته ها
    171
    تشکر
    124
    تشکر شده 262 بار در 120 پست

    پیش فرض

    سلام
    یه روش بهت میگم
    شما قبل از اینکه مقدار اولیه بدی متغیر eeprom رو بخون
    اگه مساوی مقدار x بود هیچ اگه نه مقدار دهی کن
    (ترفند :made in procesor)

  7. تشکرها از این نوشته :


  8. #5
    مدیر انجمن cmuiran آواتار ها
    تاریخ عضویت
    Jan 2011
    نام
    پیمان غلامی
    نوشته ها
    1,071
    تشکر
    407
    تشکر شده 966 بار در 553 پست

    پیش فرض

    سلام دوست من
    وقتی شما عدد اولیه میدین چه انتظاری میره که دفعه بعد ذخیره کنه ؟؟؟
    شما بیشتر توضیح بدین و برنامه را هم بزارین
    تا بیشتر کمکتون کنم

  9. تشکرها از این نوشته :


  10. #6
    کاربر علاقه مند wiki آواتار ها
    تاریخ عضویت
    Feb 2010
    نوشته ها
    54
    تشکر
    74
    تشکر شده 32 بار در 15 پست

    پیش فرض

    سلام
    دوستان من خيلي سعي كردم خودم راهشو پيدا كنم اما چون تجربه كافي ندارم متاسفانه نتونستم .ببينيد توضيح برنامه را اينجوري ميد هم كه:
    بار اول ميكرو كه روشن ميشود مقدار داده fبرابر 5 است وروي السيدي بايد اين مقدار 5 نمايش داده شود .
    درطول برنامه وقفه خارجي مي ايد كه به ازاي هر وقفه خارجي يك عدد به متغير f اضافه ميشود وان عدد برروي السيدي نمايش داده ميشود فرض كنيد ده بار وقفه آمده باشد حال مقدار f=15‌است وروي السيدي اين مقدار 15 نمايش داده ميشود .
    دراين لحظه ميكرو ريست ميشود موقعي كه مجددا ميكرو روشن ميشود بايد روي السيدي آخرين عددي كه متغيرf داشته نمايش داده شود يعني در مثالي كه زدم مقدار 15 بايد نمايش داده شود .
    من مشكلم اين است كه دفعه اول اول بايد به متغيرم مقدار اوليه بدهم اما از آن به بعد بايد طبق اخرين تغييرات متغير روي السيدي نمايش داده شود.
    لطفا دوستان كمك كنيد

  11. #7
    مدیر باز نشسته shayanmelody آواتار ها
    تاریخ عضویت
    Jan 2011
    نام
    شایان نیکزاد
    نوشته ها
    576
    تشکر
    283
    تشکر شده 1,038 بار در 473 پست

    پیش فرض

    نقل قول نوشته اصلی توسط wiki نمایش پست ها
    سلام
    دوستان من خيلي سعي كردم خودم راهشو پيدا كنم اما چون تجربه كافي ندارم متاسفانه نتونستم .ببينيد توضيح برنامه را اينجوري ميد هم كه:
    بار اول ميكرو كه روشن ميشود مقدار داده fبرابر 5 است وروي السيدي بايد اين مقدار 5 نمايش داده شود .
    درطول برنامه وقفه خارجي مي ايد كه به ازاي هر وقفه خارجي يك عدد به متغير f اضافه ميشود وان عدد برروي السيدي نمايش داده ميشود فرض كنيد ده بار وقفه آمده باشد حال مقدار f=15‌است وروي السيدي اين مقدار 15 نمايش داده ميشود .
    دراين لحظه ميكرو ريست ميشود موقعي كه مجددا ميكرو روشن ميشود بايد روي السيدي آخرين عددي كه متغيرf داشته نمايش داده شود يعني در مثالي كه زدم مقدار 15 بايد نمايش داده شود .
    من مشكلم اين است كه دفعه اول اول بايد به متغيرم مقدار اوليه بدهم اما از آن به بعد بايد طبق اخرين تغييرات متغير روي السيدي نمايش داده شود.
    لطفا دوستان كمك كنيد

    سلام.
    ببینید من مشکل شمارو درست متوجه شدم ؟
    شما یک متغیر از نوع ایپرام معرفی میکنید و مقدار 5 بهش میدید.
    طی اجراس برنامه این مقدار به 15 میرسه.
    بعد از ریست شدن میکرو و اجرای برنامه شما انتظار دارید متغیرتون از 15 شروع بشه ، ولی از 5 شروع میشه.
    درست فهمیدم ؟



    بعد از چند وقت برگشتم



  12. تشکرها از این نوشته :


  13. #8
    کاربر علاقه مند wiki آواتار ها
    تاریخ عضویت
    Feb 2010
    نوشته ها
    54
    تشکر
    74
    تشکر شده 32 بار در 15 پست

    پیش فرض

    اول از همه از پاسختون ممنونم .
    بزاريد دقيقتر توضيح بدم من متغيرمو اول از همه از نوع معمولي يعني word‌انتخاب كردم ببينيد قراره اول كار روي السيدي اولين بار مثلا عدد 5 نمايش داده بشه حالا از اون دفعه به بعد وقفه كه مياد اون متغير زياد ميشه وميخوام هروقت ميكرو خاموش شد ومجدد روشن شد ديگه عدد 5 را نشون نده بلكه اخرين عددي كه در طول برنامه گرفته را نشون بده
    ویرایش توسط wiki : 28-08-2011 در ساعت 15:00

  14. #9
    مدیر باز نشسته shayanmelody آواتار ها
    تاریخ عضویت
    Jan 2011
    نام
    شایان نیکزاد
    نوشته ها
    576
    تشکر
    283
    تشکر شده 1,038 بار در 473 پست

    پیش فرض

    مثل اینکه شما تمام برنامه رو قرار ندادی ، اما با این حال شکم کامل تر شد !
    وقتی که مینویسید :
    dim f as word
    کامپایلر خودش مقدار 0 رو به این متغییر میده حالا یک نکته ای اینجاست :
    وقتی که اولین بار برنامه رو اجرا میکنید ، بعد از رویداد وقفه یک واحد به مقدار f اضافه میشه و سپس روی متغیر c که از نوع Eeprom هست ذخیره میشه.
    این عمل n بار اجرا میشه تا میکرو ریست میشه.
    دوبار وقتی کنترل به دستور
    dim f as word
    میرسه ، مقدار صفر رو بهش میده و پس از رویدادن وقفه یک واحد به f اضافه میشه (یعنی برابر 1 میشه) و سپس روی متغیر c نوشته میشه.
    نکته کار رو فهمیدید ؟ شما اومدید مقدار متغییرتون رو عملا پاک کردید.



    بعد از چند وقت برگشتم



  15. تشکرها از این نوشته :


  16. #10
    کاربر علاقه مند wiki آواتار ها
    تاریخ عضویت
    Feb 2010
    نوشته ها
    54
    تشکر
    74
    تشکر شده 32 بار در 15 پست

    پیش فرض

    نقل قول نوشته اصلی توسط shayanmelody نمایش پست ها
    نکته کار رو فهمیدید ؟ شما اومدید مقدار متغییرتون رو عملا پاک کردید.
    بله متوجه شدم هربار كه ميكرو خاموش روشن ميشه متغيرf پاك ميشه واز اول عددگذاريشو از يك شروع ميكنه .من كجا بايد تغييرات fرا روي c ‍ بگذارم؟اگر در زير برنامه وقفه بگذارم كه همين مشكل ميشه ؟اگر هرجاي ديگه هم بگذارم بازم همين مشكل پيش مياد؟روي متغير از نوع eeprom هم كه نميشه عمليات رياضي انجام داد چون بسكام بهم ارور ميگره.
    خب راه حل چيه؟

  17. #11
    مدیر باز نشسته shayanmelody آواتار ها
    تاریخ عضویت
    Jan 2011
    نام
    شایان نیکزاد
    نوشته ها
    576
    تشکر
    283
    تشکر شده 1,038 بار در 473 پست

    پیش فرض

    کاری نداره !
    قبل از پیکره بندی وقفه ، بیاد مقدار متغیر C رو رو f بریزید !



    بعد از چند وقت برگشتم



  18. تشکرها از این نوشته :


  19. #12
    کاربر علاقه مند wiki آواتار ها
    تاریخ عضویت
    Feb 2010
    نوشته ها
    54
    تشکر
    74
    تشکر شده 32 بار در 15 پست

    پیش فرض

    سلام
    آقا بسيار ممنون مشكل حل شد .
    فقط يك سئوال اونم واسه اطلاعات خودم ، ممكنه سئوالم واقعا خنده دار بياد اما خب سئواله چيكار كنم؟
    ببينيد من در طول برنامه هيچ مقدار اوليه (همون 5 مثال)را نه به متغير معمولي ونه به منغير eeprom ندادم اما الان موقعي كه واسه بار اول ميكرو را روشن كردم دقيقا از همون مقدار اوليه را نشون داد ، آيا اين براي اين هست كه قبلا به متغير eeprom اين عدد را داده بودم (درطول برنامه هاي غلطي كه قبلن نوشته وپروگرام كرده بودم)؟
    يعني ميخوام بدونم اين متغير eeprom با پروگرام شدن مقدارش ريست نميشود ؟

  20. #13
    مدیر باز نشسته shayanmelody آواتار ها
    تاریخ عضویت
    Jan 2011
    نام
    شایان نیکزاد
    نوشته ها
    576
    تشکر
    283
    تشکر شده 1,038 بار در 473 پست

    پیش فرض

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



    بعد از چند وقت برگشتم



  21. تشکرها از این نوشته :


  22. #14
    کاربر علاقه مند wiki آواتار ها
    تاریخ عضویت
    Feb 2010
    نوشته ها
    54
    تشکر
    74
    تشکر شده 32 بار در 15 پست

    پیش فرض

    سلام دوستا ن
    خب من تونستم همانطور كه كمك كرديد مقدار متغيرم را سيو كنم اماالان يك سئوال دارم من مقدار اوليه را به متغير از نوع eeprom ميدهم ويكبار ميكرو را پروگرام ميكنم پس از اين به بعد مقدار اوليه من درون حافظه داخلي ميكرو وجود داره وبرنامه درست كار ميكنه براي اينكه تغييرات كه در طول برنامه انجام ميشه درون متغير من سيو بمونه بايد يكبار ديگر ميكرو را پروگرام كنم واين بار اون خط برنامه كه به متغير از نوع eeprom مقدار اوليه دادم را پاك كنم .
    اما الان از دوستان اين سئوال را دارم ايا روش ديگري هست كه من با يكبار پروگرام كردن بتونم اين عمليات را انجام بدم؟

  23. #15
    تازه وارد
    تاریخ عضویت
    Feb 2016
    نوشته ها
    2
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام دوستان
    من با کامپایلر atmel studio کار میکنم
    یه کی پد و 7seg به میکرو وصل کردم. برنامه رو طوری نوشتم که با فشرده شدن کلید، عددش رو 7seg نمایش داده میشه.
    حالا میخوام کاری کنم که با قطع شدن برق میکرو عدد فشرده شده قبلی پاک نشه و وقتی میکرو دوباره روشن میشه، عدد آخری نمایش داده بشه
    اما بلد نیستم چطوری با eeprom این کارو انجام بدم
    لطفا راهنمایی کنید

موضوعات مشابه

  1. پاسخ: 3
    آخرين نوشته: 14-02-2012, 21:57
  2. تغير عكس كاربري
    توسط Doloop در انجمن گفت و گوي آزاد
    پاسخ: 3
    آخرين نوشته: 04-10-2011, 10:06
  3. تبديل چند متغير به يكي
    توسط esmaeil57 در انجمن AVR
    پاسخ: 0
    آخرين نوشته: 13-05-2009, 21:19
  4. پاسخ: 2
    آخرين نوشته: 08-03-2008, 01:07

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •