در اين جلسه به موضوع انواع حافظه در ميكروكنترلرهاي ميپردازيم ...
به نام خدا
با عرض سلام خدمت دوستان عزيز
در مورد ميكروكنترلرهاي AVR در جلسات گذشته توضيحات مفصلي داده شده است و دوستان تا حد خوبي با اين خانواده از ميكروكنترلرها آشنا شدهاند، اما اين آشنايي براي انجام پروژههاي حرفهايتر كافي نيست و مطالب بسيار گستردهي ديگري هم در مورد اين خانواده از ميكروكنترلرها وجود دارد كه هنوز مطرح نشدهاند، ولي اهميت بسيار زيادي دارند. از اين رو ما سعي ميكنيم در خلل كار، مجدداً جلساتي را به مباحث مرتبط با AVR اختصاص دهيم تا خلأ موجود در اين بخش را به تدريج برطرف كنيم.
در اين جلسه به موضوع انواع حافظه در ميكروكنترلرهاي ميپردازيم.
با نحوهي پروگرام كردن ميكرو كنترلر در جلسهي 27 آشنا شديد. همانطور كه ميدانيد، اطلاعاتي كه در مرحلهي پروگرام كردن به ميكروكنترلر منتقل ميشود، با خاموش كردن سيستم(يعني قطع جريان برق ميكروكنترلر)، از بين نميرود و نيازي نيست براي هر بار استفاده از ميكروكنترلر مجدداً آن را پروگرام كنيم، و تا زمانيكه برنامهي پروگرام شده روي ميكروكنترلر توسط كاربر Erase نشود، آن برنامه پاك نخواهد شد. اين نوع حافظه را «حافظهي غير فرّار» ميگوييم، در اين نوع حافظه اگر جريان برق قطع هم شود اطلاعات از بين نخواهند رفت. مثال ديگر اين نوع حافظهها، هارد ديسك كامپيوترهاي شخصي خانگيست.
نوع ديگر حافظهها، حافظههاي «فرّار» نام دارند، در اين نوع، با قطع جريان برق، اطلاعات هم از بين ميروند. مثال آن حافظهي RAM در كامپيوترهاي شخصي خانگيست.
در ميكروكنترلرهاي AVR چند نوع حافظه وجود دارد كه در زير به اختصار در مورد هر يك آنها توضيح ميدهيم.
اين حافظه در مرحلهي پروگرام كردن، و براي ذخيرهي برنامهي كامپايل شده توسط كامپيوتر (فايل با پسوند hex.) در ميكروكنترلر مورد استفاده قرار ميگيرد. همانطور كه توضيح داده شد اين حافظه از نوع حافظههاي غير فرّار است.
وقتي در برنامههاي خود متغيري تعريف ميكنيم، در زمان اجراي آن توسط ميكروكنترلر، بهطور معمول از حافظهي SRAM استفاده ميشود. مثلاً وقتي در برنامه جملهي زير را مينويسيد:
ميكروكنترلر براي ساختن اين متغير 2-بايتي، از حافظهي SRAM استفاده ميكند.
حافظهي SRAM از نوع حافظههاي فرّار است و اطلاعاتي كه در آن ذخيره ميشوند، پس از خاموش شدن ربات و قطع جريان برق از ميكروكنترلر، همگي پاك ميشوند. اگر بخواهيم براي تعريف حافظه از فضاي ديگري به جز SRAM استفاده كنيم، بايد در الگوي تعريف متغير، تغيير كوچكي دهيم كه در ادامه شرح داده شده است.
گاهي اوقات ما نياز داريم اطلاعاتي كه در متغيرها ذخيره شدهاند با خاموش شدن ربات يا دستگاه پاك نشوند و براي استفاده در زمانهاي ديگر هم قابل استفاده باشند. براي اين منظور حافظهي EEPROM تعبيه شده است. EEPROM جزو حافظههاي غير فرّار است.
براي استفاده از اين حافظه بايد متغيرها را به گونهاي تعريف كنيد كه به جاي استفاده از SRAM از EEPROM استفاده كنند. براي اين منظور طبق الگوي زير عمل مي كنيم:
يعني پيش از تعريف متغير، كلمهي كليدي «eeprom» را ذكر ميكنيم. اگر اين كار را نكنيم، متغير به صورت پيش فرض در حافظهي SRAM تعريف ميشود.
براي مثال فرض كنيد ربات مينيابي داريم كه مختصات مينهاي كشف شده را در متغيرهايي از حافظهي ميكروكنترلرش ذخيره كرده است. اگر اين متغيرها در SRAM باشند، زمانيكه ربات خاموش شود اين اطلاعات پاك ميشوند و ديگر قابل بازبيني نيستند، در اينگونه موارد بهتر است اطلاعات در eeprom ذخيره شوند تا خيالمان از بابت ذخيرهي اين اطلاعات راحت باشد.
در مورد رجيسترها در جلسهي 24 توضيحاتي داده شده است. رجيسترها هم جزو متغيرهاي فرّار هستند و با قطع جريان برق پاك ميشوند. مهمترين مزيت رجيسترها نسبت به SRAM سرعت بالاي آنها بهخاطر نزديك بودن به واحد پردازشگر مركزي است. و مهمترين محدوديت آنها هم كم بودن تعداد آنهاست. نيازي نيست كه ما در برنامههاي خود مستقيماً از رجيسترها استفاد كنيم، اما خود ميكروكنترلر براي اجراي برنامههاي خود مكرراً از آنها استفاده ميكند.
مطالب مطرح شده مختصر و اجمالي هستند، ولي اين مطالب براي رفع نياز دوستان و انجام پروژههاي مختلف كفايت ميكنند و نياز به بررسي تخصصيتر روي اين مبحث نيست. توضيحات بيشتر در اين باب، نياز به مقدمات علمي و تخصصي بيشتري دارد كه در اينجا مجال مطرح كردن تمام اين مطالب نيست.
منتظر سوالات، نظرها و پيشنهادهاي دوستان خوبم هستم.
شاد و پيروز باشيد
دوست شما، فراز اميرغياثوند
>