תוכן עניינים:
וִידֵאוֹ: ה- EEPROM המובנה של Arduino שלך: 6 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
במאמר זה אנו הולכים לבחון את ה- EEPROM הפנימי בלוחות ה- Arduino שלנו. מהו EEPROM שחלקכם אומרים אולי? EEPROM הוא זיכרון לקריאה בלבד הניתן לתכנות המחיקה.
זוהי סוג של זיכרון בלתי נדיף שיכול לזכור דברים כשהכוח נכבה, או לאחר איפוס הארדואינו. היופי בזיכרון מסוג זה הוא בכך שאנו יכולים לאחסן נתונים שנוצרים בתוך סקיצה באופן קבוע יותר.
מדוע שתשתמש ב- EEPROM הפנימי? למצבים בהם נתונים ייחודיים למצב זקוקים לבית קבוע יותר. לדוגמה, אחסון המספר הסידורי הייחודי ותאריך הייצור של פרויקט מסחרי מבוסס ארדואינו-פונקציה של הסקיצה יכולה להציג את המספר הסידורי על מסך LCD, או לקרוא את הנתונים על ידי העלאת 'שרטוט שירות'. או שתצטרך לספור אירועים מסוימים ולא לאפשר למשתמש לאפס אותם-כגון מד מרחק או מונה מחזור הפעלה.
שלב 1: איזה סוג נתונים ניתן לאחסן?
כל דבר שניתן לייצג כבתים של נתונים. בייט אחד של נתונים מורכב משמונה סיביות נתונים. קצת יכול להיות מופעל (ערך 1) או כבוי (ערך 0), והם מושלמים לייצוג מספרים בצורה בינארית. במילים אחרות, מספר בינארי יכול להשתמש רק באפסים ובאחד כדי לייצג ערך. לפיכך בינארי ידוע גם בשם "בסיס -2", מכיוון שהוא יכול להשתמש בשתי ספרות בלבד.
כיצד מספר בינארי עם שימוש בשתי ספרות בלבד יכול לייצג מספר גדול יותר? הוא משתמש בהרבה כאלה ואפסים. בואו נבחן מספר בינארי, נניח 10101010. מכיוון שמדובר במספר בסיס 2, כל ספרה מייצגת 2 בכוח x, מ x = 0 ואילך.
שלב 2:
ראה כיצד כל ספרה במספר הבינארי יכולה לייצג מספר בסיס 10. אז המספר הבינארי למעלה מייצג 85 בבסיס 10-הערך 85 הוא סכום ערכי הבסיס 10. דוגמא נוספת - 11111111 בינארית שווה 255 בבסיס 10.
שלב 3:
כעת כל ספרה במספר הבינארי הזה משתמשת ב"ביט "אחד של זיכרון, ושמונה סיביות יוצרות בתים. בשל מגבלות פנימיות של בקרי המיקרו בלוחות ה- Arduino שלנו, אנו יכולים לאחסן מספרים של 8 סיביות בלבד (בייט אחד) ב- EEPROM.
זה מגביל את הערך העשרוני של המספר ליפול בין אפס ל -255. לאחר מכן עליך להחליט כיצד ניתן לייצג את הנתונים שלך עם טווח מספרים זה. אל תתנו לזה להרתיע אתכם - מספרים המסודרים בצורה הנכונה יכולים לייצג כמעט כל דבר! יש מגבלה אחת שצריך לשים לב אליה - מספר הפעמים שנוכל לקרוא או לכתוב ל- EEPROM. לדברי היצרנית Atmel, ה- EEPROM טוב ל -100,000 מחזורי קריאה/כתיבה (עיין בגיליון הנתונים).
שלב 4:
כעת אנו יודעים את הביטים והבתים שלנו, כמה בתים יכולים להיות מאוחסנים במיקרו -הבקר של הארדואינו שלנו? התשובה משתנה בהתאם לדגם המיקרו -בקר. לדוגמה:
- לוחות עם אטמל ATmega328, כגון Arduino Uno, Uno SMD, Nano, Lilypad, וכו ' - 1024 בתים (1 קילובייט)
- לוחות עם ATmel ATmega1280 או 2560, כגון סדרת Arduino Mega - 4096 בתים (4 קילובייט)
- לוחות עם אטמל ATmega168, כגון Lilypad המקורי של Arduino, Nano הישן, Diecimila וכו ' - 512 בתים.
אם אינך בטוח עיין באינדקס החומרה של Arduino או שאל את ספק הלוח שלך. אם אתה צריך יותר אחסון EEPROM ממה שיש עם המיקרו -בקר שלך, שקול להשתמש ב- I2C EEPROM חיצוני.
בשלב זה אנו מבינים כעת איזה סוג נתונים וכמה ניתן לאחסן ב- EEPROM של Arduino שלנו. עכשיו הגיע הזמן להוציא את זה לפועל. כפי שנדון קודם לכן, יש מקום סופי לנתונים שלנו. בדוגמאות הבאות נשתמש בלוח Arduino טיפוסי עם ה- ATmega328 עם 1024 בתים של אחסון EEPROM.
שלב 5:
כדי להשתמש ב- EEPROM, יש צורך בספרייה, לכן השתמש בספרייה הבאה במערכונים שלך:
#כלול "EEPROM.h"
השאר פשוט מאוד. כדי לאחסן נתון, אנו משתמשים בפונקציה הבאה:
EEPROM.write (a, b);
הפרמטר a הוא המיקום ב- EEPROM לאחסון המספר השלם (0 ~ 255) של נתונים ב. בדוגמה זו, יש לנו 1024 בתים של אחסון זיכרון, כך שערכו של a הוא בין 0 ל- 1023. כדי לאחזר פיסת נתונים היא פשוטה באותה מידה, השתמש:
z = EEPROM.read (א);
כאשר z הוא מספר שלם לאחסון הנתונים ממיקום EEPROM א. עכשיו לראות דוגמא.
שלב 6:
סקיצה זו תיצור מספרים אקראיים בין 0 ל -255, תאחסן אותם ב- EEPROM, ולאחר מכן אחזור ותציג אותם על הצג הטורי. המשתנה EEsize הוא הגבול העליון של גודל EEPROM שלך, כך (למשל) זה יהיה 1024 עבור Arduino Uno, או 4096 עבור מגה.
// הפגנת EEPROM פנימית של ארדואינו
#לִכלוֹל
int zz; int EEsize = 1024; // גודל בייטים של ה- EEPROM של הלוח שלך
הגדרת חלל ()
{Serial.begin (9600); randomSeed (analogRead (0)); } לולאת void () {Serial.println ("כתיבת מספרים אקראיים …"); for (int i = 0; i <EEsize; i ++) {zz = אקראי (255); EEPROM.write (i, zz); } Serial.println (); עבור (int a = 0; a <EEsize; a ++) {zz = EEPROM.read (a); Serial.print ("מיקום EEPROM:"); Serial.print (א); Serial.print ("מכיל"); Serial.println (zz); עיכוב (25); }}
הפלט מהצג הטורי יופיע, כפי שמוצג בתמונה.
אז הנה לכם, דרך שימושית נוספת לאחסן נתונים במערכות Arduino שלנו. למרות שהיא לא ההדרכה המרגשת ביותר, היא בהחלט שימושית.
את הפוסט הזה הביאה לכם pmdway.com - הכל ליצרנים ולחובבי האלקטרוניקה, עם משלוח חינם לכל רחבי העולם.
מוּמלָץ:
Steam פאנק את ה- UPS שלך בכדי לקבל שעות של זמן פעולה לנתב ה- Wi-Fi שלך: 4 שלבים (עם תמונות)
Steam פאנק את ה- UPS שלך בכדי לקבל שעות של זמן פעולה לנתב ה- Wi-Fi שלך: יש משהו לא נעים ביסודיות בכך שה- UPS שלך ימיר את הסוללה 12V DC שלו לחשמל 220V AC כך שהשנאים המפעילים את הנתב והסיבים ONT יכולים להפוך אותו חזרה 12V DC! אתה גם מתנגד ל [בדרך כלל
לשלוט על הלדים שלך עם שלט הטלוויזיה שלך ?! -- מדריך IR ל- Arduino: 5 שלבים (עם תמונות)
לשלוט על הלדים שלך עם שלט הטלוויזיה שלך ?! || הדרכת IR של Arduino: בפרויקט זה אראה לך כיצד עיצבתי מחדש את הכפתורים חסרי התועלת בשלט הטלוויזיה שלי כדי לשלוט בנורות הלדים מאחורי הטלוויזיה שלי. אתה יכול גם להשתמש בטכניקה זו כדי לשלוט בכל מיני דברים עם קצת עריכת קוד. אני גם אדבר קצת על התאוריה
הגן על הרעיונות שלך, הגן על העבודה שלך: 8 שלבים
הגן על הרעיונות שלך, הגן על העבודה שלך: איבדתי נתונים לפני כמה ימים כתוצאה מהתרסקות מחשב. עבודה של יום אחד אבדה.:/ אני שומר את הנתונים שלי בענן כדי למנוע פגם בדיסק הקשיח. אני משתמש בתוכנת גרסאות כדי שאוכל לשחזר גרסאות ישנות יותר של עבודתי. אני עושה גיבוי כל יום. אבל הפעם אני
שלוט בפריסת הרכבת הדוגמנית שלך באמצעות לוח המקשים שלך !: 12 שלבים
שלוט בפריסת רכבת הדגמים שלך באמצעות לוח המקשים שלך !: באחד מההנחיות הקודמות שלי, הראיתי לך כיצד תוכל לשלוט ברכבת הדוגמניות שלך באמצעות שלט הטלוויזיה שלך. אתה יכול לבדוק גרסה משודרגת גם כאן. במדריך זה, אראה לך כיצד לשלוט על פריסת רכבות מודל באמצעות מקלדת
שלוט בפריסת הרכבת הדוגמנית שלך באמצעות הטלפון הנייד שלך !: 11 שלבים (עם תמונות)
שליטה בפריסת הרכבת המודל שלך באמצעות הטלפון הנייד שלך!: שליטה על פריסת רכבות דגמים עם מצערת חוט ובקרות אחוזי שיח עשויה להיות התחלה טובה למתחילים אך הם מהווים בעיה של אי ניידות. כמו כן, הבקרים האלחוטיים המגיעים לשוק יכולים לשלוט רק על חלק מסוים