![E0](http://projects.m32.ir/up/2013/12/E0.jpg)
گاهی اوقات در طراحی سیستم های الکترونیکی نیاز داریم تا مقدار متغییر ها را در یک حافظه دائمی ذخیره کنیم تا در صورت قطع تغذیه اطلاعات از دست نرود. مثلا در سیستم ترموستات حتما نیاز است تا مقدار دمای نرمال که دمای محیط با آن مقایسه می شود همیشه بعد از تنظیم محفوظ بماند تا هر بار بعد از قطع برق نیازی به تنظیم مجدد آن نباشد. برای ذخیره این مقادیر می توان از حافظه های EEPROM داخلی میکروکنترلر نیز استفاده کرد. استفاده از حافظه EEPROM داخلی به جای حافظه های خارجی باعث کاهش هزینه ها می شود.
در این پروژه قصد داریم تا با ارئه یک نمونه آموزش نحوه استفاده از حافظه داخلی میکروکنترلر AVR را با استفاده از کامپایلر Bascom AVR آموزش دهیم.
برای این کار می توان از دستور Writeeeprom استفاده کرد. در زمان استفاده از این دستور باید مکان حافظه که قرار است اطلاعات در آن ذخیره شود نیز داده شود. یعنی مدیریت مکان های حافظه جهت ذخیره سازی اطلاعات به دست ما انجام می شود و باید دقت کرد تا در زمان آدرس دهی هم پوشانی رخ ندهد.
جهت روشن تر شدن این مسئله، سورس زیر بر روی میکرو کنترلر تست شد:
![E1](http://projects.m32.ir/up/2013/12/E1.jpg)
وضعیت حافظه EEPROM از قرار زیر شد:
![E2](http://projects.m32.ir/up/2013/12/E2.jpg)
چون متغییر مرد نظر از نوع word و با طول ۲ بایت می باشد پس باید حواسمان باشد که در صورت استفاده مجدد از دستور Writeeeprom ، باید اطلاعات را به خانه های غیر از ۰۲ و ۰۳ هدایت کنیم.
در صورتی که در آدرس دهی خانه های حافظه اشتباه کنیم اطلاعت ذخیره شده نا معتبر خواهند شد. پیشنهاد ما تغییر روش در استفاده از حافظه EEPROM می باشد. روشی موثر که این بار مدیریت مکان ها ذخیره سازی اطلاعات به صورت اتوماتیک توسط خود کامپایلر انجام می شود و ضریب اطمینان ۱۰۰% دارد.
بهتر است در زمان تعریف یک متغییر از نوع معمولی ( SRAM ) همان متغییر را با یک نام مشابه از جنس EEPROM نیز تعریف شود.
![E3](http://projects.m32.ir/up/2013/12/E3.jpg)
با روش بالا، خود کامپایلر اولین جای خالی را برای ذخیره متغییر استفاده میکند و چون این فرایند توسط خود کامپایلر انجام می شود، احتمال خطا صفر می باشد.
نکته: توجه داشته باشید که اول برنام تمام متغییر های ذخیره شده در حافظه eeprom باید در متغییر ها معمولی باز نشانده شود.
برای درک بهتر این مسئله یک مثال آموزش تهیه شده است که در نرم افزار پروتیوس نیز شبیه سازی شده است. با استفاده از کلید های UP و DOWNE میتوان مقدار متغیر I را کم و زیاد کرد. مقدار این متغیر با ریست کردن میکروکنترلر از بین نمیرود.
برنامه این پروژه به روش ساب روتین نوشته شده است و جنبه آموزشی سورس این پروژه شامل نحوه کد نویسی نیز می شود.
جهت مشاهده سورس این پروژه اینجا کلیک کنید.
اهداف آموزشی:
. • آشنایی با حافظه EEPROM داخلی میکروکنترلر
. • آشنایی با روش ذخیره کردن و خواندن اطلاعت از حافظه EEPROM داخلی میکروکنترلر AVR
. • آشنایی با روش برنامه نویسی ساب روتین
محتویات فایل دانلود:
. • سورس برنامه با کامپایلر Bascom AVR
. • شبیه سازی پروژه با نرم افزار پروتیوس
جهت دانلود فایل های این پروژه اینجا کلیک کنید. ( ۷۸KB )