تحلیل کتابخانه

تحلیل و بررسی کتابخانه EEPROM.h

نوشته شده توسط علی زاهدی

شاید تا به حال در پروژه های مختلف به این نتجیه رسیده اید که مقدار برخی از متغیر ها بایستی حتی بعد از قطع شدن برق نیز باقی بماند. راه های مختلفی برای این کار وجود دارد. برای مثال استفاده از باتری بکاپ یا ذخیره اطلاعات بر روی ایسی های حافظه و یا حتی کارت SD از جمله راه های ذخیره اطلاعات بعد از قطع شدن برق است. اما بردهای آردوینو ذخیره اطلاعات را پس از قطع برق را برای ما بسیار ساده تر کرده اند. غیر از حافظه Flash و RAM در برخی میکروکنترلر ها حافظه دیگری با نام EEPROM قرار دارد. که اطلاعات موجود در این حافظه پس از قطع برق نیز باقی خواهد ماند. در این آموزش، همانند سلسله آموزش های تحلیل کتابخانه، به تشریح و تحلیل توابع کتابخانه EEPROM.h می پردازیم. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


حافظه EEPROM


کلمه EEPROM مخفف عبارت Electrically Erasable Programmable Read-Only Memory به معنای حافظه فقط خواندنی قابل برنامه ریزی و پاکسازی بصورت الکتریکی است. این نوع حافظه نوع پیشرفته تری از حافظه EPROM است. همانطور که گفته شد مقادیری که در این حافظه ذخیره شوند با قطع شدن تغذیه برد آردوینو از بین نمیروند و پس از روشن شدن مجدد، مقداری که قبل از قطع شدن تغذیه در آن ذخیره شده بود را  همچنان خواهند داشت. مقدار حافظه EEPROM در برد های مختلف متفاوت است. با توجه به تصویر زیر میتوانید مقدار حافظه EEPROM برد آردوینو خود را مشاهده کنید.

یکی از نکته های مهم در حافظه های EEPROM که بایستی به آن توجه شود این است که این نوع حافظه دارای عمر مفید است. برای مثال حافظه EEPROM در میکروکنترلر های AVR دارای عمر مفید صد هزار بار نوشتن است.

 


نکات فنی کتابخانه EEPROM.h


کتابخانه EEPROM.h  برای تعامل با فضای ذخیره سازی غیر فرار در برد های آردوینو مبتنی بر تراشه های AVR است. این کتابخانه با توابع ساده و روان رابط کاربری ساده ای را برای ارتباط با حافظه غیر فرار میکروکنترلر، فراهم می‌کند. این کتابخانه نیاز به نصب ندارد و جزء کتابخانه های پیش فرضی است که همراه نرم‌افزار آردوینو نصب می‌شود. برای درسترسی به سورس های این کتابخانه می‌توانید در سیستم های تحت سیستم عامل ویندوز به آدرس زیر مراجعه کنید.

برای استفاده از این کتابخانه نیاز است که فایل هدر مربوط به این کتابخانه را به کد خود اضافه کنید. همانند دستور زیر:

 


توابع کلیدی کتابخانه EEPROM.h


در این بخش توابع مهم و کلیدی کتابخانه را مورد بررسی قرار می‌دهیم. این کتابانه دارای توابع مختلفی است که هر یک از این توابع عملیات خاصی مثل نوشتن داخل حافظه EEPROM و یا خواندن از این حافظه را انجام می دهند. در ادامه با کاربرد هر یک از این توابه آشنا می‌شویم.

 

  • ()read

این تابع برای خواندن یک بایت از یک آدرس مشخص در حافظه EEPROM است. ایت تابع دارای یک ورودی از نوع int است. این ورودی مکان مورد نظر در حافظه که قصد خواندن آن را دارید را مشخص می‌کند. شروع آدرس از عدد ۰ است. خروجی این تابع یک بایت است. که از آدرس مشخص شده در حافظه EEPROM خوانده شده است. در مثال زیر متغیر a ورودی تابع است و متغییر value خروجی تابع است.

 

  • ()write

تابع write همانطور که از نامش مشخص است برای نوشتن یک بایت عدد داخل حافظه EEPROM است. این تابع دارای دو ورودی است. ورودی اول همانند ورودی تابع read برای مشخص کردن آدرس است که از نوع int است. ورودی دوم مقداری است که قصد داریم آن را در حافظه EEPROM ذخیره کنیم. زمان مورد نیاز برای تکمیل نوشتن در حافظه EEPROM برابر ۳٫۳ میلی ثانیه است. پس برای نوشتن داخل این حافظه بایستی حداقل ۳٫۳ میلی ثانیه در برنامه خود تاخیر ایجاد کنید. در مثال زیر متغیر i مربوط به آدرس و متغیر value مقداری است که قصد ذخیره آن را داریم.

 

  • ()update

عملکرد تابع update همانند تابع write است. این تابع هم برای نوشتن در حافظه EEPROM استفاده می‌شود. ورودی های این تابع نیز همانند تابع write است. اما تفاوت این تابع با تابع write این است که این تابع تنها زمانی عملیات نوشتن در حافظه EEPROM را انجام می‌دهد که مقدار جدید برای نوشتن با مقدار ذخیره شده در آدرس مورد نظر متفاوت باشد. در مثال زیر عدد ۱۲ تنها یک بار در آدرس ۳ ذخیره خواهد شد و در ۲۵۴ مرحله دیگر حلقه این تابع عملیات نوشتن را انجام نمی‌دهد. این نوع عملکرد باعث می شود عمر مفید این حافظه مدت زمان طولانی تری باقی بماند.

 

  • ()get

تابع get همانند تابع read عملیات خواندن از حافظه EEPROM را انجام می‌دهد. تفاوت این تابع با تابع read این است که با استفاده از این تابع می‌توانید هر نوع داده با هر مقداری را از حافظه EEPROM بخوانید. این تابع دارای دو ورودی است. ورودی اول از نوع int است که برای مشخص کردن آدرس مورد نظر برای شروع خواندن از حافظه EEPROM استفاده می شود. ورودی دوم میتواند float یا هر نوع دیگری که به آن معرفی می‌کنید، خروجی دهد. برای درک بهتر این مطلب یه مثال زیر توجه کنید.

 

  • ()put

عملکرد تابع put همانند تابع write و update است. با این تفاوت که با استفاده از این تابع میتواند هر نوع داده ای را داخل EEPROM ذخیره کنید. این تابع دارای دو ورودی است. ورودی اول از نوع int است که برای مشخص کردن آدرس مورد نظر برای شروع نوشتن در حافظه EEPROM استفاده می شود. ورودی دوم میتواند float یا هر نوع دیگری که به آن معرفی می‌کنید، عملیات ذخیره سازی را انجام دهد. این تابع داخل خود از تابع update برای ذخیره سازی استفاده کند. بنابراین تا زمانی که تغیرری در داده ایجاد نشود این تابع عملیات نوشتن را انجام نخواهد داد. برای درک بهتر این مطلب یه مثال زیر توجه کنید.

 

  • []EEOROM

این اپراتور مانند یک آرایه از شناسه EEPROM استفاده می کند. سلولهای EEPROM را می توان مستقیماً با استفاده از این روش خواند و نوشت. برای درک بهتر این مطلب یه مثال زیر توجه کنید.

 

 


اجرای نمونه برنامه


در این قسمت سه نمونه برنامه، برای خواندن و نوشتن داخل حافظه EEPROM و همچنین پاک کردن مقادیر ذخیره شده در این حافظه، قرار داده شده است. در کد اول مقدار ورودی آنالوگ A0 خوانده شده و در حافظه EEPROM ذخیره می شود. در این کد از تابع write برای ذخیره سازی مقدار ورودی آنالوگ استفاده شده است. همچنین پورت سریال برای گزارش وضعیت فعال شده است.

 

در کد دوم از آدرس ۰ تا ۵۱۲ حافظه EEPROM توسط تابع read خوانده شده و در سریال مانیتور نمایش داده می‌شود.

 

در آخر برای پاک کردن (برابر صفر قرار دادن) مقادیر ذخیره شده در حافظه EEPROM میتوانید از کد زیر استفاده کنید.

 


لوازم مورد نیاز


این کتابخانه نیاز به ماژول خاصی ندارد. همانطور که گفته شد تمامی برد های آردوینو مبتنی بر تراشه های AVR از این کتابخانه پشتیبانی می‌کنند. برای تهیه بردهای آردوینو میتوانید از طریق لینک زیر اقدام کنید.

خرید برد های آردوینو

 


جمع بندی


در این آموزش ابتدا با تاریخچه و عملکرد حافظه EEPROM آشنا شدیم. همچنین فهمیدیم که حافظه EEPROM دارای عمر مفید است و قابلیت نوشتن بر روی آن محدود است. سپس میزان حافظه EEPROM در برد های مختلف آردوینو مورد بررسی قرار گرفت. در ادامه کتابخانه EEPROM.h و توابع کلیدی آن معرفی شد. در آخر سه نمونه کد برای نوشتن ، خواندن و پاک کردن حافظه EEPROM قرار داده شده است.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

درباره نویسنده

علی زاهدی

برنامه نویس و طراح سیستم های مبتنی بر میکروکنترلر

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

تبادل نظر و رفع عیب با ثبت دیدگاه

۸ دیدگاه

    • با سلام
      ارتباط این نوع حافظه های EEPROM با توجه به تراشه ای که از آن استفاده می‌کنید، مشخص می‌شود. عموم این حافظه ها با رابط I2C به میکروکنترلر متصل می‌شود. کتابخانه ها مختلفی برای این نوع حافظه توسعه داده شده است که می‌توانید از آن استفاده کنید.

      • سلام خسته نباشید
        آیا فقط حافظه EEROM عمر محدود داره یا
        حافظه فلش و sram هم عمری محدود داره اگر اینطور هست عمر هر کدوم چقدر هست با تشکر

  • با سلام
    می خواستم بدونم آیا می تونم به کد های این کتابخانه دسترسی پیدا کنم ؟
    و آیا می تونم این کدها رو تغییر بدم؟
    و آیا با اضافه کردن این کتابخانه به کدویژن می تونم از دستورات این کتابخانه در کدویژن استفاده کنم؟

    • با سلام
      بله در صورتی که وارد پوشه فایل نصب شده آردوینو در سیستم خود شوید به کد های این کتابخانه دسترسی خواهید داشت. اما امکان استفاده از این کتابخانه در کدویژن نیست. در کدویژن کتابخانه EEPROM.h نیز وجود دارد اما توابع آن کمی با این کتابخانه متفاوت است.

    • با سلام
      بایستی کتاخانه موجود برای میکروکنترلر های ESP8266 را بررسی کنید. ممکن است توابع موجود در این کتابخانه بر روی ESP کار نکند.