اطلاعیه

Collapse
No announcement yet.

چطور می شه از eeprom خود میکرو استفاده کرد؟

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

    چطور می شه از eeprom خود میکرو استفاده کرد؟

    سلام به همگی دوستان و اساتید گرامی
    به نظر شما می شه یه متغیر تو eeprom خود میکرو درست کرد و با اون کار کرد؟
    من قبلا به چشمم خورده بود ولی الان هر چی می گردم نمی تونم پیداش کنم ( شاید مال avr بوده )
    البته این رو هم بگم که دستور value = read_eeprom (address) رو دیدم ولی این متغیر نمی خواد ، آدرس می خواد که من بلد نیستم چطور باید بهش آدرس بدم
    پیشاپیش از بذل توجه شما متشکرم
    دوستان عزیزم تصمیم گرفتم تا یه مدت کمتر به تالار سر بزنم . اگر دیر جواب دادم ببخشید.

    #2
    پاسخ : چطور می شه از eeprom خود میکرو استفاده کرد؟

    سلام
    کافیه یه متغیر تعریف کنی و قبلش کلمه کلیدی eeprom رو بنویسی.
    eeprom char ch =100
    فراخوانی و نوشتنش هم مثل متغیر های معمولیه.
    ch = 200
    اگه خواستی در آدرس خواصی ذخیره بشه از @ و بعدش آدرستو بنویس
    eeprom unsigned int a @0x01 = 150
    مثلا در دستور بالا متغییر در آدرس 1 eeprom جا میگیره
    گفت که دیوانه نهی لایق این خانه نهی

    دیدگاه


      #3
      پاسخ : چطور می شه از eeprom خود میکرو استفاده کرد؟

      آقا یه دنیا ممنون
      فقط یه سوالی الان برام پیش اومد :
      من یه متغیری می خوام که ابتدا صفر باشه و اگر یه بار یه اتفاقی افتاد یک بشه و یک بمونه برای همیشه .
      (من این رو برای دستگاهم می خوام. می خوام اگر کسی در دستگاهم رو باز کرد دستگاه دیگه کار نکنه )
      حالا سوال اینه که این مساوی صفر رو کجای برنامه باید بهش بدم . اگر این متغیر رو به عنوان global قبل از تابع main تعریف کنم و بهش مقدار صفر بدم با هر بار روشن شدن دستگاه دوباره با مقدار صفر مقدار دهی نمیشه ؟
      در ضمن من این رو برای ccs می خوام این کدی که شما دادید برای ccs هست؟
      دوستان عزیزم تصمیم گرفتم تا یه مدت کمتر به تالار سر بزنم . اگر دیر جواب دادم ببخشید.

      دیدگاه


        #4
        پاسخ : چطور می شه از eeprom خود میکرو استفاده کرد؟

        سلام دوست عزیز
        eeprom اگه برای اولین بار تعریف بشه و هیچ مقداری داخلش ذخیره نشه به طور پیش فرض مقدارش ماکزیمم هست مثلا متغییر از نوع char مقدار پیش فرضش 255 هست بنابراین به کمک یک شرط ساده میتونی فقط بار اول بعد از پروگرام کردن به متغییرت مقدار صفر بدی یعنی بعد از تعریف متغییر کلی ، توی main از یه شرط استفاده کنی به طوریکه اگه متغییرت برابر با ماکزیمم گنجایشش بود اون رو صفر کنه و اگه دفعات بعد مدارتو روشن کنی دیگه این شرط برقرار نیست و متغییرت صفر نمیشه من اینطور هم با avr هم با pic جواب گرفتم البته این روش موقعی خوبه که مطمئن باشی هیچ وقت توی برنامت مقدار ماکزیمم روی متغییر ذخیره نمیشه

        دیدگاه


          #5
          پاسخ : چطور می شه از eeprom خود میکرو استفاده کرد؟

          خواهش میکنم
          دوتا راه داری
          1-یه برنامه جدا بنویسی که مقدار اون متغیر رو صفر کنه برنامه رو اجرا کن. بعدش برنامه اصلیت رو پروگرم کن و به متغیر eeprom که ساختی مقدار نده. اینطور صفری که از برنامه قبل داخل eeprom نوشتی میمونه
          2-زمانی که متغییر eeprom توی برنامت تعریف میکنی علاوه بر فایل .hex فایل .eep هم ساخته میشه که مقادیر اولیه که قراره روی eeprom ریخته بشه توی اون قرار داره میتونی از اون هم استفاده بکنی
          گفت که دیوانه نهی لایق این خانه نهی

          دیدگاه


            #6
            پاسخ : چطور می شه از eeprom خود میکرو استفاده کرد؟

            نوشته اصلی توسط mz1037
            سلام دوست عزیز
            eeprom اگه برای اولین بار تعریف بشه و هیچ مقداری داخلش ذخیره نشه به طور پیش فرض مقدارش ماکزیمم هست مثلا متغییر از نوع char مقدار پیش فرضش 255 هست بنابراین به کمک یک شرط ساده میتونی فقط بار اول بعد از پروگرام کردن به متغییرت مقدار صفر بدی یعنی بعد از تعریف متغییر کلی ، توی main از یه شرط استفاده کنی به طوریکه اگه متغییرت برابر با ماکزیمم گنجایشش بود اون رو صفر کنه و اگه دفعات بعد مدارتو روشن کنی دیگه این شرط برقرار نیست و متغییرت صفر نمیشه من اینطور هم با avr هم با pic جواب گرفتم البته این روش موقعی خوبه که مطمئن باشی هیچ وقت توی برنامت مقدار ماکزیمم روی متغییر ذخیره نمیشه
            خیلی ممنون
            جالب بود . اصلا من با توجه به کاربردی که برای این متغیر می خوام نیاز به صفر و یک ندارم می تونم همون ماگزیمم رو چک کنم . اگر تغییر کرد کارهای ثانوی رو انجام بدم.
            فقط یه چیزی تعریف متغیر تو ccs همون طوری هست که جناب moslem1368 گفتند؟ یا اینکه باید از همون آدرس دهی استفاده کنم .
            مثلا بنویسم :
            کد:
            while((read_EEPROM (door_open)==0))
            {
            if(input(key))//key(pin_c7) normal situation is 0
            {
              write_eeprom(1,door_open);
            }
            و البته صدر دستورات هم بنویسم:
            کد:
            #define door_open 10  // Location in EEPROM
            دوستان عزیزم تصمیم گرفتم تا یه مدت کمتر به تالار سر بزنم . اگر دیر جواب دادم ببخشید.

            دیدگاه


              #7
              پاسخ : چطور می شه از eeprom خود میکرو استفاده کرد؟

              نوشته اصلی توسط moslem1368
              خواهش میکنم
              دوتا راه داری
              1-یه برنامه جدا بنویسی که مقدار اون متغیر رو صفر کنه برنامه رو اجرا کن. بعدش برنامه اصلیت رو پروگرم کن و به متغیر eeprom که ساختی مقدار نده. اینطور صفری که از برنامه قبل داخل eeprom نوشتی میمونه
              2-زمانی که متغییر eeprom توی برنامت تعریف میکنی علاوه بر فایل .hex فایل .eep هم ساخته میشه که مقادیر اولیه که قراره روی eeprom ریخته بشه توی اون قرار داره میتونی از اون هم استفاده بکنی
              خیلی ممنون
              راه دوم رو انتخاب می کنم ( فکر کنم راحت تر باشه و اینکه اگر بخوام این کار رو به دفعات انجام بدم نمی شه هر بار پروگرام کردن رو دوبار انجام داد)
              فقط میمونه ایرادی که کامپایلر به دستور من میده:
              eeprom int open_door;
              دوستان عزیزم تصمیم گرفتم تا یه مدت کمتر به تالار سر بزنم . اگر دیر جواب دادم ببخشید.

              دیدگاه


                #8
                پاسخ : چطور می شه از eeprom خود میکرو استفاده کرد؟

                چه خطایی میده؟
                توجه کن که باید متغییر از نوع سراسری تعریف بشه
                گفت که دیوانه نهی لایق این خانه نهی

                دیدگاه


                  #9
                  پاسخ : چطور می شه از eeprom خود میکرو استفاده کرد؟

                  دوستان عزیزم تصمیم گرفتم تا یه مدت کمتر به تالار سر بزنم . اگر دیر جواب دادم ببخشید.

                  دیدگاه


                    #10
                    پاسخ : چطور می شه از eeprom خود میکرو استفاده کرد؟

                    تابعی به نام door_open که احیانا تعریف نکردین؟
                    گفت که دیوانه نهی لایق این خانه نهی

                    دیدگاه


                      #11
                      پاسخ : چطور می شه از eeprom خود میکرو استفاده کرد؟

                      نه
                      شاید ورژن ccs من کم باشه.
                      برای من pcwhd4.105 هست
                      دوستان عزیزم تصمیم گرفتم تا یه مدت کمتر به تالار سر بزنم . اگر دیر جواب دادم ببخشید.

                      دیدگاه


                        #12
                        پاسخ : چطور می شه از eeprom خود میکرو استفاده کرد؟

                        والا نمیدونم با همچین خطایی تا به حال مواجه نشدم
                        گفت که دیوانه نهی لایق این خانه نهی

                        دیدگاه


                          #13
                          پاسخ : چطور می شه از eeprom خود میکرو استفاده کرد؟

                          یه راه دیگه ای هم هست
                          کافیه تو برنامه هیچ وقت اون متغیر 0 مقدار دهی نکنی
                          بعد از پروگرام کردن برنامه میتونی حافظه EEPROM هم جدا پروگرام کنی
                          کافیه اون خونه ای که متغیرت توش ذخیره هست خودت 0 قرار بدی
                          اغلب پروگرامرها و نرم افزارهای اون یه بخشی جداگانه برای اینکار دارن
                          [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

                          دیدگاه


                            #14
                            پاسخ : چطور می شه از eeprom خود میکرو استفاده کرد؟

                            با سلام
                            دوست من کلمه کلیدی eeprom توی محیط ccs برای تعریف متغیر نداریم.این دوستمون با محیط avr code vision اشتباه گرفته احتمالا.
                            بستگی به نوع میکرو pic حافظه eeprom ظرفیتش متفاوته.تمام میکروهایی pic که من کار کردم 255 بایت حافظه eeprom داشتن.که آدرسش میشه 1 تا 255.این میشه آدرس دیگه این که اصلا بلد بودن نمیخواد رفیق.
                            مثلا خونه ی 1 رو برای متغیرت در نظر بگیر.پس یک میشه آدرس متغیرت.حالا با دستورات زیر می تونی توی این آدرس بنویسی یا از این آدرس بخونی:

                            برای نوشتن (مقدار متغیر,1)Eeprom_Write // برای آدرس 1
                            برای خوندن (1)eeprom_read// برای آدرس 1
                            تابع eeprom_read در مثال بالا مقداری را که در آدرس 1 eeprom را خونده به صورت یک بایت برمیگردونه که می تونی اونی تو یه متغیر از جنس بایت بریزی یا مستقیما ازش استفاده کنی.
                            البته خودم تو کارام سعی می کنم از یه struct که یه فیلد value , یه فیلد address داره استفاده کنم.اگه لازم داشتی توضیح بدم.
                            حالا اگه بخوای یه متغیر مثلا float که 4 بایته تعریف کنی چی!؟ اونم داستان خودشو داره که فک نمی کنم لازم داشته باشی. :smile:

                            دیدگاه


                              #15
                              پاسخ : چطور می شه از eeprom خود میکرو استفاده کرد؟

                              با سلام
                              دوست من کلمه کلیدی eeprom توی محیط ccs برای تعریف متغیر نداریم.این دوستمون با محیط avr code vision اشتباه گرفته احتمالا.
                              خیلی ممنون ، واقعا توضیح کامل و عالی ای دادید ، آره خودمم به این فکر افتادم که به نظر می رسه این کلمه تو picbasic یا یه چیز شبیه به اون بوده.
                              .که آدرسش میشه 1 تا 255.این میشه آدرس دیگه این که اصلا بلد بودن نمیخواد رفیق.
                              بله می دونستم که 1 تا 255 سلول 8 بایتی ما حافظه داریم ولی نمی دونستم باید از 0x0001 شروع کنم یا مثلا 0x1500 ، دنبال یه چیزی می گشتم مثل این عکسه تا آدرس شروع رو پیدا کنم :

                              در مورد متغیر فلوت هم اگر اشتباه نکنم باید تبدیلش کرد به یکسری بایت. درسته ؟ ( البته براش کتابخونه هم هست اگر اشتباه نکنم) .
                              البته که الان کارم راه افتاد ولی ایشالله بعدا از دانش شما و سایر دوستان استفاده کنیم .
                              فقط یه چیزی ، من فکر می کنم 256 تا 8 بایتی ما داریم که باید 8 بایت بهش مقدار بدیم . مثل زیر :
                              کد:
                                if(input(key))//key(pin_c7) normal situation is 0
                                {
                                 write_eeprom(door_open,0x00000000000055);
                                }
                              درسته ؟ یا اینکه باید بایت به بایت بهش مقدار بدیم؟
                              دوستان عزیزم تصمیم گرفتم تا یه مدت کمتر به تالار سر بزنم . اگر دیر جواب دادم ببخشید.

                              دیدگاه

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