כיצד להשתמש ב- Arduino EEPROM לשמירת נתונים בין מחזורי חשמל

כיצד להשתמש ב- Arduino EEPROM לשמירת נתונים בין מחזורי חשמל

האם ידעת שהארדואינו יכול לאחסן נתונים כשהוא כבוי? לא המערכון המאוחסן בזיכרון הבזק. אני מדבר על נתונים משתנים ב- EEPROM. הצטרף אלי כשאני מראה לך כיצד לקרוא ולכתוב לו, ומה הוא יכול לעשות עבור הפרויקטים שלך.





אם אתה חדש בארדואינו, הקפד לבדוק את שלנו מדריך למתחיל .





מהו EEPROM?

EEPROM מייצג זיכרון לתכנות לקריאה בלבד הניתן למחיקה . זהו סוג של זיכרון לא נדיף. אל תדאג אם אתה לא מבין מה זה אומר. הוא פשוט מאחסן נתונים אפילו כשהספק מוסר (שלא כמו RAM , אשר זקוק לחשמל כדי לשמור על כל הנתונים).





EEPROM מובנה במספר רב של מעבדים, כגון מערך השערים הניתן לתכנות שדה (FPGA) המשמש ב- HAT של Matrix Creator Pi. לכל Arduinos יש EEPROM זמין, אך הקיבולת משתנה לפי דגם. הקפד לעיין במדריך הקנייה שלנו לקבלת פרטים נוספים על כל לוח.

איך זה עובד?

EEPROM נמחק ומתוכנת באמצעות חשמל מנהרת פאולר-נורדהיים . אינך צריך לדעת את הפרטים הטכניים כדי שתוכל להשתמש בו. הנחת היסוד היא שחשמל משמש לשינוי הנתונים הבינאריים (מהו בינארי). ניתן לקרוא, למחוק ולכתוב מחדש באופן אלקטרוני.



למרבה המזל, ה שפת ארדואינו מקל על שינוי הנתונים, כל זאת ללא צורך בתואר במדעי המחשב.

תוחלת חיים

למרות שקל להשתמש ב- EEPROM בארדואינו, יש לו אורך חיים מוגבל. EEPROM מצוין להתמודד עם 100,000 מחזורי קריאה/מחיקה. המשמעות היא שאתה יכול לכתוב ולאחר מכן למחוק/לכתוב מחדש נתונים 100,000 פעמים לפני שה- EEPROM יהפוך ליציב. במציאות, אטמל (יצרני ה- Arduino 'Chip') מוליכים למחצה עשויים להתמודד עם מספר מחזורים גבוה או נמוך יותר, בהתאם לסובלנות של כל מעבד ומעבד.





ברגע שמיקום נכתב ונמחק יותר מדי פעמים הוא יכול להיות בלתי אמין. ייתכן שהוא לא יחזיר את הנתונים הנכונים, או יחזיר את הערך מהסיבית השכנה.

זה אולי נשמע כמו הרבה כותבים, אבל קל להגיע למגבלה הזו אם קוראים וכתיבים באופן תכנותי (ב לוּלָאָה , לדוגמה). קריאת נתונים אינה פוגעת בסיליקון, רק הכתיבה עושה . אתה יכול לקרוא נתונים מ- EEPROM כמה שאתה רוצה ללא חשש!





חשוב לציין כי מגבלה זו חלה על כל מיקום זיכרון. ל- Arduino שלך יהיו 1,000 מיקומי זיכרון או יותר זמינים ב- EEPROM, כך שאם אתה כותב יותר מדי פעמים למיקום אחד, רק המיקום הזה מושפע, ולא אחד מהאחרים. בהמשך אדון הרמה ללבוש , שיכול להפחית את שחיקת EEPROM על ידי הפצת נתונים באופן שווה - משהו ש- SSDs עושים בו שימוש.

למה זה שימושי?

EEPROM שימושי להפליא לפרויקטים של Arduino שלך. מכיוון שהוא זוכר נתונים גם כאשר החשמל מוסר, תוכל לאחסן את מצב ה- Arduino. אולי תוכל לבנות צריח לייזר שזוכר את מיקומו או כמה 'תחמושת' נותרה. תוכל להשתמש בו כדי לשלוט במכשירי החשמל שלך ולרשום כמה פעמים המכשיר הופעל.

EEPROM מתאים ביותר לדברים כמו הגדרות או ציונים גבוהים. אם אתה רוצה לכתוב נתונים מורכבים באופן קבוע, אולי שקלו מגן Ethernet (עם חריץ SD מובנה) או פטל פטל.

תקרא ותכתוב

כעת, כשהתיאוריה לא הגיעה, בואו נסתכל איך לקרוא ולכתוב כמה נתונים! ראשית, כלול את הספרייה (זה מגיע עם Arduino IDE):

#include

עכשיו כתוב כמה נתונים:

EEPROM.write(0, 12);

זה כותב את המספר 12 למיקום EEPROM 0 . כל כתיבה אורכת 3.3 אלפיות השנייה ( גברת , 1000ms = שנייה). שימו לב כיצד אינכם יכולים לכתוב אותיות ( לְהַשְׁחִיר ), רק המספרים מאפס עד 255 מותרים. זו הסיבה ש- EEPROM אידיאלי להגדרות או לציונים גבוהים, אך לא כל כך טוב לשמות שחקנים או מילים. אפשר לאחסן טקסט בשיטה זו (ניתן למפות כל אות באלף בית למספר), אולם יהיה עליך להיות בעל מספר מיקומי זיכרון - מיקום אחד לכל אות.

כך קראת את הנתונים האלה:

תוכנת עריכת סרטים בחינם ל- mac
EEPROM.read(0);

אפס היא הכתובת שאליה כתבת בעבר. אם לא כתבת לכתובת בעבר, היא תחזיר את הערך המרבי ( 255 ).

ישנן שיטות קצת יותר שימושיות. נניח שרצית לאחסן מקום עשרוני או מחרוזת:

EEPROM.put(2,'12.67');

זה כותב את הנתונים למספר מיקומים - דבר שקל יהיה לכתוב בעצמך, אך לא פחות מכך שימושי. עדיין תצטרך לעקוב אחר כמה מיקומים זה כתב אליך, כך שלא תחליף בטעות את הנתונים שלך! אתה צריך להשתמש ב לקבל שיטה לאחזור נתונים אלה שוב:

float f = 0.00f;
EEPROM.get(2, f);

הערך מ- get מאוחסן בציפה ו מִשְׁתַנֶה. שים לב כיצד זה מתאתחל עם 0.00f כערך. ה ו מאפשר למהדר לדעת שאולי תרצה לאחסן מספר גדול במשתנה זה, כך שהוא מגדיר כמה תצורות נוספות במהלך האוסף.

ה תיעוד EEPROM על אתר ארדואינו יש עוד הרבה דוגמאות.

הרמה ללבוש

פילוס ללבוש הוא טכניקה המשמשת להפחתת הבלאי ולהארכת חיי EEPROM. אם אתה עובד רק על פרויקט קטן, ייתכן שלא תצטרך לדאוג לגבי זה.

הדבר הפשוט ביותר שאתה יכול לעשות כדי לשמור על חיי EEPROM הוא להגביל את הכתיבה שלך למיקום מסוים. אתה יכול לעשות זאת על ידי קריאת הכתובת תחילה, ואם הערך שברצונך לכתוב כבר קיים, אין צורך לכתוב אותו שוב (זכור, קריאת הנתונים אינה מזיקה). כך תוכל לעשות זאת:

int safeWrite(int data, address) {
if(EEPROM.read(address) != data) {
EEPROM.write(address, data);
}
}

זהו פיסת קוד די פשוטה, אולם הוא פועל רק למספרים שלמים! במקום להמציא מחדש את הגלגל, השתמש בפונקציה המובנית בספריית Arduino EEPROM:

EEPROM.update(address, val);

לשיטה זו יש בדיוק אותה חתימה כמו ה- לִכתוֹב שיטה, למרות שהיא עשויה להפחית באופן דרסטי את מספר הכתיבות הדרושות!

אם אתה צריך לכתוב הרבה נתונים ואתה מודאג לגבי שחיקת הסיליקון, אתה יכול לעקוב אחר כמה כותבים שאתה עושה, למרות שזה משתמש בנתונים נוספים. הנה יישום גס ב פסאודוקוד :

var address = 0
var writeCount = 0
if(writeCount > 75,000)
writeCount = 0
address += 1
EEPROM.write(address, data)

יהיה עליך לאחסן כתובת ו- writeCount ב- EEPROM (וכן יהיה צורך לפצל את writeCount בין מיקומי הכתובות). לרוב, רמת הגנה זו לא תהיה נחוצה. Arduinos הם גם כל כך זולים, כך שיהיה לך קל יותר לרכוש גיבוי!

עכשיו אתה צריך לדעת מספיק כדי ליצור כמה פרויקטים מדהימים. ספר לנו אם אתה מכין משהו מגניב! האם אתה יכול לזהות את כל המכשירים שבתמונות? השאירו לנו תגובה למטה!

לַחֲלוֹק לַחֲלוֹק צִיוּץ אימייל 5 טיפים להטעין את מכונות הלינוקס של VirtualBox

נמאס לכם מהביצועים הגרועים שמציעות מכונות וירטואליות? הנה מה שאתה צריך לעשות כדי לשפר את ביצועי VirtualBox שלך.

קרא הבא
נושאים קשורים
  • עשה זאת בעצמך
  • ארדואינו
  • מכשירי חשמל
על הסופר ג'ו קוברן(136 מאמרים פורסמו)

ג'ו בוגר מדעי המחשב מאוניברסיטת לינקולן שבבריטניה. הוא מפתח תוכנה מקצועי, וכשהוא לא מטיס רחפנים או כותב מוזיקה, לעתים קרובות אפשר למצוא אותו מצלם או מפיק סרטונים.

עוד מאת ג'ו קוברן

הירשם לניוזלטר שלנו

הצטרף לניוזלטר שלנו לקבלת טיפים, סקירות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!

לחצו כאן להרשמה