برد های آردوینو دارای چندین نوع حافظه هستند. ابتدا RAM استاتیک (حافظه دسترسی تصادفی) است که برای ذخیره متغیرها در هنگام اجرای برنامه استفاده می شود. ثانیا ، این فلش مموری است که طرح هایی را که نوشته اید ذخیره می کند. و سوم اینکه ، این یک EEPROM است که می تواند برای ذخیره دائمی اطلاعات استفاده شود. اولین نوع حافظه فرار است ، پس از راه اندازی مجدد Arduino تمام اطلاعات را از دست می دهد. دو نوع دوم حافظه اطلاعات را ذخیره می کنند تا زمانی که دوباره با یک مورد جدید رونویسی شوند ، حتی پس از خاموش شدن منبع تغذیه. آخرین نوع حافظه - EEPROM - امکان نوشتن ، ذخیره و خواندن داده ها را در صورت لزوم فراهم می کند. اکنون این حافظه را در نظر خواهیم گرفت.
ضروری است
- - آردوینو ؛
- - کامپیوتر.
دستورالعمل ها
مرحله 1
EEPROM مخفف کلمه Electrically Erasable Programmable Memory-Only Memory است. حافظه فقط خواندنی که به صورت الکتریکی پاک می شود. داده های موجود در این حافظه می توانند پس از خاموش شدن برق ده ها سال ذخیره شوند. تعداد چرخه های بازنویسی به ترتیب چندین میلیون بار است.
میزان حافظه EEPROM در آردوینو نسبتاً محدود است: برای تابلوهای مبتنی بر میکروکنترلر ATmega328 (به عنوان مثال ، Arduino UNO و Nano) ، میزان حافظه 1 کیلوبایت است ، برای تخته های ATmega168 و ATmega8 - 512 بایت ، برای ATmega2560 و ATmega1280 - 4 کیلوبایت
گام 2
برای کار با EEPROM برای Arduino ، کتابخانه خاصی نوشته شده است که به طور پیش فرض در Arduino IDE گنجانده شده است. این کتابخانه دارای ویژگی های زیر است.
read (آدرس) - 1 بایت از EEPROM را می خواند. آدرس - آدرسی که داده ها از آن خوانده می شوند (سلول از 0 شروع می شود) ؛
نوشتن (آدرس ، مقدار) - مقدار مقدار (1 بایت ، عدد از 0 تا 255) را در حافظه در آدرس آدرس می نویسد ؛
بروزرسانی (آدرس ، مقدار) - اگر محتوای قدیمی آن با محتوای جدید متفاوت باشد ، مقدار را در آدرس جایگزین می کند.
get (آدرس ، داده) - داده های نوع مشخص شده را از حافظه در آدرس می خواند.
قرار دادن (آدرس ، داده) - نوشتن داده ها از نوع مشخص شده در حافظه در آدرس ؛
EEPROM [آدرس] - به شما اجازه می دهد تا از شناسه "EEPROM" به عنوان آرایه ای برای نوشتن داده ها و خواندن از حافظه استفاده کنید.
برای استفاده از کتابخانه در طرح ، آن را با دستورالعمل #include EEPROM.h قرار می دهیم.
مرحله 3
بیایید دو عدد صحیح برای EEPROM بنویسیم و سپس آنها را از EEPROM بخوانیم و آنها را به پورت سریال منتقل کنیم.
اعداد از 0 تا 255 هیچ مشکلی ندارند ، آنها فقط 1 بایت حافظه را اشغال می کنند و با استفاده از تابع EEPROM.write در مکان مورد نظر نوشته می شوند.
اگر عدد بیشتر از 255 باشد ، با استفاده از عملگرهای highByte () و lowByte () باید آن را بر بایت تقسیم کنید و هر بایت را باید در سلول خود بنویسید. حداکثر تعداد در این حالت 65536 (یا 2 ^ 16) است.
نگاه کنید ، مانیتور پورت سریال در سلول 0 به سادگی یک عدد کمتر از 255 را نشان می دهد. در سلول های 1 و 2 ، تعداد زیادی 789 ذخیره می شود. در این حالت ، سلول 1 فاکتور سرریز 3 را ذخیره می کند ، و سلول 2 شماره 21 از دست رفته را ذخیره می کند (یعنی 789 = 3 * 256 + 21). برای جمع آوری مجدد تعداد زیادی ، تجزیه شده به بایت ، تابع کلمه () وجود دارد: int val = word (سلام ، کم) ، که در آن hi و کم مقادیر زیاد و پایین بایت هستند.
در تمام سلولهای دیگر که هرگز آنها را یادداشت نکرده ایم ، شماره 255 ذخیره شده است.
مرحله 4
برای نوشتن اعداد و رشته های نقطه شناور ، از روش EEPROM.put () و برای خواندن ، از EEPROM.get () استفاده کنید.
در روش setup () ابتدا نقطه شناور f را می نویسیم. سپس با تعداد سلول های حافظه ای که نوع شناور اشغال می کند حرکت می کنیم و یک رشته char با ظرفیت 20 سلول می نویسیم.
در روش حلقه () ما تمام سلول های حافظه را می خوانیم و سعی می کنیم ابتدا آنها را به عنوان نوع "float" و سپس به عنوان "char" رمزگشایی کنیم و نتیجه را به پورت سریال صادر کنیم.
می بینید که مقدار سلول های 0 تا 3 به درستی به عنوان یک عدد نقطه شناور تعریف شده است و از 4 شروع می شود - به عنوان یک رشته.
مقادیر حاصل از ovf (سرریز) و nan (نه عدد) نشان می دهد که نمی توان عدد را به درستی به عدد شناور تبدیل کرد. اگر دقیقاً بدانید که سلولهای حافظه چه نوع داده ای را اشغال می کنند ، پس مشکلی نخواهید داشت.
مرحله 5
یک ویژگی بسیار مناسب مراجعه به سلولهای حافظه به عنوان عناصر آرایه EEPROM است. در این طرح ، در روش setup () ، ابتدا داده ها را در 4 بایت اول می نویسیم و در روش حلقه () ، هر دقیقه داده ها را از همه سلول ها می خوانیم و آنها را به پورت سریال منتقل می کنیم.