اطلاعیه

Collapse
No announcement yet.

طریقه استفاده از EEPROM داخلی مگا32

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

    طریقه استفاده از EEPROM داخلی مگا32

    سلام
    با اجازه اساتید بزرگوار چون دیدم در این مدت خیلی سوال در این مورد شد این جسارت را میکنم که تا جاییکه سوادم برسه در مورد eeprom بنویسم
    اول یه کمی در مورد eeprom میگم بعد میریم سراغ کار با آن:
    eeprom مخفف (Electrical Ereasable Read Only Memory) میباشد یکی از خصیصه های بسیار مهم این حافظه این است که با قطع برق پاک نمیشود و یکی از عیب های بزرگ آن اینست که سرعت نوشتن در آن خیلی کند میباشد(حدود 2 تا 3 میلی ثانیه)
    حال در مورد کار با آن:
    ببینید شما به خانه های این حافظه نمیتونید دسترسی مستقیم داشته باشید (یعنی مثل RAM ) نیست شما باید با استفاده از 3 رجیستری که گفتم (EECR وEEDR وEEAR ) با این حافظه کار کنید حالا چطوری؟؟
    2 موردی که در حافظه مهم است یکی آدرس خانه هاست و یکی اطلاعاتی که شما میخواهید ذخیره کنید برای مثال شما میخواهید عدد 203 را در خانه ای به آدرس 546 ذخیره کنید و همانطور که میبینید این دو عدد هیچ ربطی به هم ندارند و هر کدام بیانگر یک معنی خاصند
    نوشتن در eeprom بوسیله CPU
    شما باید اول آدرس خانه ای که میخواهید در آن بنویسید را در رجیستر آدرس یعنی EEAR که مخفف (eeprom address register) هست بریزید مثلا 546 (در ضمن eeprom مگا 32 1024 کاراکتر جا دارد)
    سپس data یا اطلاعاتی که میخواهید در این خانه ذخیره شود (حتما از نوع کاراکتر 8 بیتی از 0 تا 255) را در رجیستر EEDR که رجیستر دیتا و مخفف (eeprom data register ) است بریزید مثلا 203 حالا همه چیز آماده است تا شما فرمان write را بدهید برای این کار را باید با رجیستر EECRآ‌ انجام دهید:

    همانطور که ملاحظه میکنید ما با 4 بیت آخر این رجیستر کار میکنیم برای نوشتن در eeprom باید در ابتدا بیت EEWME یعنی بیت سوم را یک کنیم بعد از آن بلا فاصله باید بیت EEWEرا یک کنیم با این کار عدد داخل EEDR در خانه ای با آدرس EEAR ذخیره میشود اکنون باید شما 2 میلی ثانیه صبر کنید تا عدد نوشته شود یا صبر کنید تا بیت EEWE صفر شود(در این مثال من صبر مینم تا این بیت صفر شود) اینم کد:

    EEDR=203;
    EEAR=546;
    EECR=0x04;
    EECR=0x02;
    while((EECR&0x02)==1);

    خواندن از eeprom بوسیه CPU
    برای خواندن باید اول آدرس خانه ای که میخواهید بخوانید در EEAR قرار دهید (مثلا خانه 742) سپس فرمان خواندن بدهید یعنی بیت اول از EECR یعنی EERE را یک کنید بعد از این کار دیتا موجود در خانه ای که توسط EEAR آدرس دهی شده بود (742) در EEDR ریخته میشود حال شما باید مقدار EEDR را در یک کاراکتر بریزید این هم کد مربوطه:

    EEAR=742;
    EECR=0x01;
    data=EEDR;
    در اینجا نیاز به صبر کردن نیست چون فقط نوشتن در eeprom زمانبر است
    حال ممکن است بپرسید خب این کار چه فرقی داره با نوشتن یک خط eeprom char data در برنامه؟ دیگه این همه دنگ و فنگ نداره که!!!!!!!!!!!!!!!!!!!!
    باید بگم دو مزیت عمده این عمل اینه که:
    1) شما با استفاده از این روش میتونید با پروگرامر مقادیر داخل eeprom را خوانده و بسته به آدرسی که دارند آنها را تفسیر کنید یعنی با CPU میکرو عدد را داخل eeprom نوشته و برای خواندن با کامپیوتر این کار ر انجام دهید
    2) با پروگرامر eeprom را پروگرام میکنید و هر عددی که خواستید در هر آدرسی که خواستید مینویسید و سپس در برنامه با آدرس دهی بوسیله CPU از این اعداد استفاده میکنید و این مورد دوم بسیار پر کاربرد است
    انشا الله در قطعه بعدی این روش که چطور با پروگرامر این کار را انجام دهید را کاملا توضیح میدهم
    فرزندم در راه است

    #2
    پاسخ : طریقه استفاده از EEPROM داخلی مگا32

    وای آقای کیانی از شما ممنونم که این آموزشو شروع کردید :nice: من حتما از آموزش شما در کارم استفاده می کنم. لطف بزرگی میکنید اگر برای من یک مطلب اضافه هم توضیح بدید که وقتی ما از دستوری مثل eeprom char data استفاده می کنیم نحوه قرار گرفتن اطلاعات در بیت ها چطوری هستش... منتظر قسمت بعدی هم هستم

    دیدگاه


      #3
      پاسخ : طریقه استفاده از EEPROM داخلی مگا32

      سلام
      امید وارم موضوع قبلی مورد پسند بوده باشه (که طبق آمار نبوده)
      به هر صورت همونطور که قول دادم آموزش قسمت بعدی را شروع میکنم
      شما با استفاده از پروگرامر تون میتونید از eeprom بخونید و به اون بنویسید حالا چطوری؟
      برای خواندن از eeprom بوسیله پروگرامر
      در کدویژن به منوی Tools>>Chip Programmer رفته و روی آن کلیک میکنید صفحه زیر نمایان میشود :



      حال پروگرامر را به میکرو وصل کنید و از این صفحه روی گزینه Read>>EEPROM کلیک کنید اکنون eeprom شما خوانده میشود حال روی گزینه edit>>EEPROM کلیک کنید اکنون شما میتوانید خانه های eeprom را به صورت اعداد هگز مانند شکل زیر ببینید:



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

      address=0x0086=134(decimal)
      وعدد داخل آن معادل 255 یا 0xff هگز میباشد

      برای نوشتن در eeprom بوسیله پروگرامر
      در کدویژن به منوی Tools>>Chip Programmer رفته و روی آن کلیک میکنید صفحه زیر نمایان میشود :



      حال پروگرامر را به میکرو وصل کنید و از این صفحه روی گزینه edit>>EEPROM کلیک کنید اکنون شما میتوانید خانه های eeprom را به صورت اعداد هگز مانند شکل زیر ببینید:

      برای مثال میخواهیم عدد 126 (0x7e) را در خانه ای با آدرس 852 (0x0354) ذخیره کنیم آدرس مربوطه را پیدا میکنیم که سطر آن 0x035 وستون آن 0x4 میباشد حال روی این خانه از حافظه کلیک میکنیم و عدد 7e
      را با کیبورد وارد میکنیم و یک بار tab را میزنیم اکنون این صفحه را بسته و روی گزینه Program>>EEPROM کلیک میکنیم و منتظر میشویم تا eeprom پروگرام شود اکنون این عدد در خانه مورد نظر ذخیره شده است




      فرزندم در راه است

      دیدگاه


        #4
        پاسخ : طریقه استفاده از EEPROM داخلی مگا32

        نوشته اصلی توسط hirad_g
        وای آقای کیانی از شما ممنونم که این آموزشو شروع کردید :nice: من حتما از آموزش شما در کارم استفاده می کنم. لطف بزرگی میکنید اگر برای من یک مطلب اضافه هم توضیح بدید که وقتی ما از دستوری مثل eeprom char data استفاده می کنیم نحوه قرار گرفتن اطلاعات در بیت ها چطوری هستش... منتظر قسمت بعدی هم هستم
        ببینید دوست من شما با این کار فقط میتونید در یک برنامه از اطلاعات موجود در eeprom استفاده کنید چون نام آنرا data گذاشتید ولی با این روش شما میتونید اطلااعات موجود در eeprom را در هر برنامه ای که خواستید بدون تغییر در آن استفاده کنید
        فرزندم در راه است

        دیدگاه


          #5
          پاسخ : طریقه استفاده از EEPROM داخلی مگا32

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

          دیدگاه


            #6
            پاسخ : طریقه استفاده از EEPROM داخلی مگا32

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

            دیدگاه


              #7
              پاسخ : طریقه استفاده از EEPROM داخلی مگا32

              نوشته اصلی توسط علیرضا کیانی
              ببینید دوست من شما با این کار فقط میتونید در یک برنامه از اطلاعات موجود در eeprom استفاده کنید چون نام آنرا data گذاشتید ولی با این روش شما میتونید اطلااعات موجود در eeprom را در هر برنامه ای که خواستید بدون تغییر در آن استفاده کنید
              سلام :biggrin: خب درسته که data تعریفش کردیم ولی باید تو یک بیتی ، یک جایی از حافظه ذخیره بشه. خب تعیین اون آدرس بر چه اساسی هست؟ آیا بر اساس اولویت و تعاریف اسمبلر تعیین میشه؟؟ این مطلبو فقط برای افزایش اطلاعاتم می خوام بدونم و آموزش شما مشکل منو حل کرد...

              دیدگاه


                #8
                پاسخ : طریقه استفاده از EEPROM داخلی مگا32

                سلام
                اولا خدا را شکر که سواد ناچیز من مشکل یکی را حل کرد
                دوما بستگی به کامپایلرها داره ولی معمولا از آدرس صفر شروع میکنند (تاکید میکنم معمولا)
                فرزندم در راه است

                دیدگاه


                  #9
                  پاسخ : طریقه استفاده از EEPROM داخلی مگا32

                  خیلی ممنون آقای کیانی واقعا"مشکل های اساسی من توسط شما حل شد .
                  اما من یه مشکل دیگه دارم که به دست شما حل میشه
                  من می خوام یه رشته تو حافظه eeprom ذخیره کنم با این دستور (eeprom char string[]="my string&quot می نویسم اما تو lcd نمایش نمیده
                  برنامه ساده ای که نوشتم
                  http://rapidshare.com/files/405722026/eeprom.rar
                  خواهش می کنم ببنید مشکل از چیه ؟خیلی نیاز دارم. (واقعا" خیلی ممنون از کمکتون)
                  سپاس گذارم.

                  دیدگاه


                    #10
                    پاسخ : طریقه استفاده از EEPROM داخلی مگا32

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

                    دیدگاه


                      #11
                      پاسخ : طریقه استفاده از EEPROM داخلی مگا32

                      سلام:
                      من یه مشکلی دارم تو کار با eeprom . با بسکام کار میکنم اطلاعات رو ذخیره میکنم هر دفعه و همچنین اطلاعات یع تنظیماتی هستند که مقدارشون فقط یه بار تنظیم میشه و تو روال برنامه از مقدار انها استفاده میشه
                      اما نمیدونم چرا بعضی وقتها اون متغییرهایی که فقط یکبار مقدارشون تنظیم شده تغییر میکنه و تمام سیستم رو مختل میکنه
                      چون تمام عملکرد بر اساس اون متغیرها عمل میکنه
                      ممکنه از چی باشه این مشکل.
                      تغذیه من یه سوییچینگ هست که 24 رو به 5 تبدیل میکنه
                      تعداد متغییر های eeprom زیاد هست
                      اما جالبی اینجاست که همه متغییرها تغییر نمیکنن هر دفعه یه چندتایی فقط . البته محیط نویز خیلی کمی هست موتور القایی

                      دیدگاه


                        #12
                        پاسخ : طریقه استفاده از EEPROM داخلی مگا32

                        آقا علیرضا دمت گرم خیلی عالیییی توضیح دادی!!!

                        دیدگاه


                          #13
                          پاسخ : طریقه استفاده از EEPROM داخلی مگا32

                          با سلام
                          من میخوام یه کد ده رقمی رو در حافظه eeprom ذخیره کنم بعد همون کد رو از حافظه بخونم و رو LCD نمایش بدم.

                          دیدگاه


                            #14
                            پاسخ : طریقه استفاده از EEPROM داخلی مگا32

                            یه مشکل خیلی عجیب.تابع زیر را برای نوشتن روی eeprom استفاده کردم.ولی توی پروتئوس این ارور را داد.
                            کد:
                            [AVR EEPROM]write operation attempt while busy flag is set.Do nothing
                            کد:
                            void write_epr(unsigned char data2,unsigned char addr)
                            {
                                EEDR=data2;
                                EEAR=addr;
                                EECR=0x04;
                                EECR=0x02;
                            while( ( EECR & 0x02 ) == 1 );
                            }
                            بعد کد را تغییرش دادم دست شد :eek: :eek: :eek:
                            کد:
                            void write_epr(unsigned char data2,unsigned char addr)
                            {
                                EEDR=data2;
                                EEAR=addr;
                                EECR=0x04;
                                EECR=0x02;
                            while( EECR & 0x02 );
                            }
                            به نظرتون چرا اولی کار نمیکنه؟؟
                            آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

                            دیدگاه


                              #15
                              پاسخ : طریقه استفاده از EEPROM داخلی مگا32

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

                              دیدگاه

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