تبلیغات
به نام خدا
با عرض سلام خدمت دوستان عزیز
در مورد میكروكنترلر‌های AVR در جلسات گذشته توضیحات مفصلی داده شده است و دوستان تا حد خوبی با این خانواده از میكروكنترلر‌ها آشنا شده‌اند، اما این آشنایی برای انجام پروژه‌های حرفه‌ای‌تر كافی نیست و مطالب بسیار گسترده‌ی دیگری هم در مورد این خانواده از میكروكنترلرها وجود دارد كه هنوز مطرح نشده‌اند، ولی اهمیت بسیار زیادی دارند. از این رو ما سعی می‌كنیم در خلل كار، مجدداً جلساتی را به مباحث مرتبط با AVR اختصاص دهیم تا خلأ موجود در این بخش را به تدریج برطرف كنیم.
در این جلسه به موضوع انواع حافظه در میكروكنترلرهای می‌پردازیم.
با نحوه‌ی پروگرام كردن میكرو كنترل آشنا شدید. همان‌طور كه می‌دانید، اطلاعاتی كه در مرحله‌ی پروگرام كردن به میكروكنترلر منتقل می‌شود، با خاموش كردن سیستم(یعنی قطع جریان برق میكروكنترلر)، از بین نمی‌رود و نیازی نیست برای هر بار استفاده از میكروكنترلر مجدداً آن را پروگرام كنیم، و تا زمانیكه برنامه‌ی پروگرام شده روی میكروكنترلر توسط كاربر Erase نشود، آن برنامه پاك نخواهد شد. این نوع حافظه را «حافظه‌ی غیر فرّار» می‌گوییم، در این نوع حافظه اگر جریان برق قطع هم شود اطلاعات از بین نخواهند رفت. مثال دیگر این نوع حافظه‌ها، هارد دیسك كامپیوتر‌های شخصی خانگیست.
نوع دیگر حافظه‌ها، حافظه‌های «فرّار» نام دارند، در این نوع، با قطع جریان برق، اطلاعات هم از بین می‌روند. مثال آن حافظه‌ی RAM در كامپیوتر‌های شخصی خانگیست.
در میكروكنترلر‌های AVR چند نوع حافظه وجود دارد كه در زیر به اختصار در مورد هر یك آن‌ها توضیح می‌دهیم.


حافظه‌ی FLASH




این حافظه در مرحله‌ی پروگرام كردن، و برای ذخیره‌ی برنامه‌ی كامپایل شده توسط كامپیوتر (فایل با پسوند hex.) در میكروكنترلر مورد استفاده قرار می‌گیرد. همان‌ط‌ور كه توضیح داده شد این حافظه از نوع حافظه‌های غیر فرّار است.



حافظه‌ی SRAM




وقتی در برنامه‌های خود متغیری تعریف می‌كنیم، در زمان اجرای آن توسط میكروكنترلر، به‌طور معمول از حافظه‌ی SRAM استفاده می‌شود. مثلاً وقتی در برنامه جمله‌ی زیر را می‌نویسید:
int TEMP; 



میكروكنترلر برای ساختن این متغیر 2-بایتی، از حافظه‌ی SRAM استفاده می‌كند.
حافظه‌ی SRAM از نوع حافظه‌های فرّار است و اطلاعاتی كه در آن ذخیره می‌شوند، پس از خاموش شدن ربات و قطع جریان برق از میكروكنترلر، همگی پاك می‌شوند. اگر بخواهیم برای تعریف حافظه از فضای دیگری به جز SRAM استفاده كنیم، باید در الگوی تعریف متغیر، تغییر كوچكی دهیم كه در ادامه شرح داده شده است.



حافظه‌ی EEPROM




گاهی اوقات ما نیاز داریم اطلاعاتی كه در متغیر‌ها ذخیره شده‌اند با خاموش شدن ربات یا دستگاه پاك نشوند و برای استفاده در زمان‌های دیگر هم قابل استفاده باشند. برای این منظور حافظه‌ی EEPROM تعبیه شده است. EEPROM جزو حافظه‌های غیر فرّار است.
برای استفاده از این حافظه باید متغیر‌ها را به گونه‌ای تعریف كنید كه به جای استفاده از SRAM از EEPROM استفاده كنند. برای این منظور طبق الگوی زیر عمل می كنیم:
eeprom int TEMP;



یعنی پیش از تعریف متغیر، كلمه‌ی كلیدی «eeprom» را ذكر می‌كنیم. اگر این كار را نكنیم، متغیر به صورت پیش فرض در حافظه‌ی SRAM تعریف می‌شود.
برای مثال فرض كنید ربات مین‌یابی داریم كه مختصات مین‌های كشف شده را در متغیرهایی از حافظه‌ی میكروكنترلرش ذخیره كرده است. اگر این متغیر‌ها در SRAM باشند، زمانی‌كه ربات خاموش شود این اطلاعات پاك می‌شوند و دیگر قابل بازبینی نیستند، در این‌گونه موارد بهتر است اطلاعات در eeprom ذخیره شوند تا خیالمان از بابت ذخیره‌ی این اطلاعات راحت باشد.



رجیسترها




در مورد رجیستر‌ها در جلسات گذشته توضیحاتی داده شده است. رجیسترها هم جزو متغیر‌های فرّار هستند و با قطع جریان برق پاك می‌شوند. مهم‌ترین مزیت رجیسترها نسبت به SRAM سرعت بالای آن‌ها به‌خاطر نزدیك بودن به واحد پردازش‌گر مركزی است. و مهم‌ترین محدودیت‌ آن‌ها هم كم بودن تعداد آن‌هاست. نیازی نیست كه ما در برنامه‌های خود مستقیماً از رجیستر‌ها استفاد كنیم، اما خود میكروكنترلر برای اجرای برنامه‌های خود مكرراً از آن‌ها استفاده می‌كند.
مطالب مطرح شده مختصر و اجمالی هستند، ولی این مطالب برای رفع نیاز دوستان و انجام پروژه‌های مختلف كفایت می‌كنند و نیاز به بررسی تخصصی‌تر روی این مبحث نیست. توضیحات بیشتر در این باب، نیاز به مقدمات علمی و تخصصی بیشتری دارد كه در این‌جا مجال مطرح كردن تمام این مطالب نیست.
منتظر سوالات، نظرها و پیشنهادهای دوستان خوبم هستم.