جدول المحتويات:

قراءة وكتابة البيانات إلى EEPROM خارجي باستخدام Arduino: 5 خطوات
قراءة وكتابة البيانات إلى EEPROM خارجي باستخدام Arduino: 5 خطوات

فيديو: قراءة وكتابة البيانات إلى EEPROM خارجي باستخدام Arduino: 5 خطوات

فيديو: قراءة وكتابة البيانات إلى EEPROM خارجي باستخدام Arduino: 5 خطوات
فيديو: أعلى مستوى وصلتوا في البرمجة 2024, يوليو
Anonim
قراءة وكتابة البيانات إلى EEPROM الخارجية باستخدام Arduino
قراءة وكتابة البيانات إلى EEPROM الخارجية باستخدام Arduino

يرمز EEPROM إلى ذاكرة القراءة فقط القابلة للمسح والبرمجة كهربائيًا.

يعد EEPROM مهمًا ومفيدًا للغاية لأنه شكل من أشكال الذاكرة غير المتطايرة. هذا يعني أنه حتى عند إيقاف تشغيل اللوحة ، تظل شريحة EEPROM تحتفظ بالبرنامج الذي تمت كتابته عليها. لذلك عند إيقاف تشغيل اللوحة ثم إعادة تشغيلها ، يمكن تشغيل البرنامج الذي تمت كتابته على EEPROM. لذلك ، في الأساس ، تقوم EEPROM بتخزين وتشغيل برنامج بغض النظر عن السبب. هذا يعني أنه يمكنك إيقاف تشغيل الجهاز وإيقاف تشغيله لمدة 3 أيام والعودة وتشغيله ولا يزال بإمكانه تشغيل البرنامج الذي تمت برمجته فيه. هذه هي الطريقة التي تعمل بها معظم الأجهزة الإلكترونية الاستهلاكية.

هذا المشروع برعاية LCSC. لقد كنت أستخدم مكونات إلكترونية من LCSC.com. تلتزم LCSC بقوة بتقديم مجموعة واسعة من المكونات الإلكترونية الأصلية عالية الجودة بأفضل الأسعار مع شبكة شحن عالمية لأكثر من 200 دولة. اشترك اليوم واحصل على خصم 8 دولارات على طلبك الأول.

كما أن EEPROM فعال للغاية في أن البايتات الفردية في EEPROM التقليدية يمكن قراءتها ومسحها وإعادة كتابتها بشكل مستقل. في معظم أنواع الذاكرة غير المتطايرة الأخرى ، لا يمكن القيام بذلك. تتيح لك أجهزة EEPROM التسلسلية مثل Microchip 24-series EEPROM إضافة المزيد من الذاكرة إلى أي جهاز يمكنه التحدث بـ I²C.

اللوازم

  1. إيبروم - 24LC512
  2. ATmega328P- بو
  3. 16 ميجا هرتز كريستال
  4. اللوح
  5. المقاوم 4.7 كيلو أوم × 2
  6. مكثف 22 pF x 2

الخطوة 1: أساسيات إيبروم

أساسيات إيبروم
أساسيات إيبروم

يمكن شراء شريحة Microchip 24LC2512 في حزمة DIP ذات 8 سنون. المسامير الموجودة على 24LC512 مستقيمة جدًا للأمام وتتكون من الطاقة (8) و GND (4) وحماية ضد الكتابة (7) و SCL / SDA (6 ، 5) وثلاثة دبابيس عنوان (1 ، 2 ، 3).

تاريخ موجز لل ROM

بدأت أجهزة الكمبيوتر المبكرة من نوع "البرامج المخزنة" - مثل الحاسبات المكتبية ومترجمي لوحة المفاتيح - في استخدام ذاكرة القراءة فقط في شكل ديود ماتريكس روم. كانت هذه ذاكرة مكونة من ثنائيات شبه موصلة منفصلة موضوعة على ثنائي الفينيل متعدد الكلور منظم بشكل خاص. أفسح هذا المجال لـ Mask ROM مع ظهور الدوائر المتكاملة. كان Mask ROM يشبه إلى حد كبير Diode Matrix ROM إلا أنه تم تنفيذه على نطاق أصغر بكثير. هذا يعني ، مع ذلك ، أنه لا يمكنك فقط تحريك زوجين من الثنائيات باستخدام مكواة لحام وإعادة برمجتها. يجب أن تتم برمجة Mask ROM من قبل الشركة المصنعة وبعد ذلك لم يكن قابلاً للتغيير.

لسوء الحظ ، كان Mask ROM باهظ الثمن واستغرق إنتاجه وقتًا طويلاً لأن كل برنامج جديد يتطلب جهازًا جديدًا يتم تصنيعه بواسطة مسبك. في عام 1956 ، تم حل هذه المشكلة باختراع PROM (ROM القابل للبرمجة) والذي سمح للمطورين ببرمجة الرقائق بأنفسهم. وهذا يعني أن الشركات المصنعة يمكنها إنتاج الملايين من نفس الجهاز غير المبرمج مما جعله أرخص وأكثر عملية. ومع ذلك ، لا يمكن الكتابة إلى PROM إلا مرة واحدة باستخدام جهاز برمجة عالي الجهد. بعد برمجة جهاز PROM ، لم تكن هناك طريقة لإعادة الجهاز إلى حالته غير المبرمجة.

تغير هذا في عام 1971 مع اختراع EPROM (ذاكرة القراءة فقط القابلة للمسح القابلة للبرمجة) والتي - بالإضافة إلى إضافة حرف آخر إلى الاختصار - جلبت معها القدرة على محو الجهاز وإعادته إلى حالة "فارغة" باستخدام مصدر ضوء قوي فوق البنفسجي. هذا صحيح ، كان عليك تسليط ضوء ساطع على IC لإعادة برمجته ، ما مدى روعة ذلك؟ حسنًا ، اتضح أنه رائع جدًا ما لم تكن مطورًا يعمل على البرامج الثابتة وفي هذه الحالة ترغب حقًا في إعادة برمجة الجهاز باستخدام الإشارات الكهربائية. أصبح هذا أخيرًا حقيقة واقعة في عام 1983 مع تطوير EEPROM (ذاكرة القراءة فقط القابلة للمسح كهربائيًا القابلة للبرمجة) وبهذا ، نصل إلى اختصار اليوم غير العملي.

الخطوة 2: مراوغات EEPROM

هناك عيبان رئيسيان لـ EEPROM كطريقة لتخزين البيانات. في معظم التطبيقات ، تفوق الإيجابيات السلبيات ، ولكن يجب أن تكون على دراية بها قبل دمج EEPROM في تصميمك التالي.

بادئ ذي بدء ، فإن التقنية التي تجعل EEPROM تعمل أيضًا تحد من عدد المرات التي يمكن إعادة كتابتها فيها. هذا له علاقة بالإلكترونات التي تصبح محاصرة في الترانزستورات التي تشكل ذاكرة القراءة فقط وتتراكم حتى لا يمكن التعرف على فرق الشحنة بين "1" و "0". ولكن لا داعي للقلق ، فمعظم وحدات ذاكرة الوصول العشوائي EEPROM لديها عدد إعادة كتابة أقصى يبلغ مليون أو أكثر. طالما أنك لا تكتب باستمرار إلى EEPROM ، فمن غير المحتمل أن تصل إلى هذا الحد الأقصى. ثانيًا ، لن يتم مسح EEPROM إذا قمت بإزالة الطاقة منه ، ولكنه لن يحتفظ ببياناتك إلى أجل غير مسمى. يمكن أن تنجرف الإلكترونات من الترانزستورات وعبر العازل ، مما يؤدي إلى محو EEPROM بشكل فعال بمرور الوقت. ومع ذلك ، يحدث هذا عادةً على مدار سنوات (على الرغم من أنه يمكن تسريعه بالحرارة). تقول معظم الشركات المصنعة أن بياناتك آمنة على EEPROM لمدة 10 سنوات أو أكثر في درجة حرارة الغرفة. وهناك شيء آخر يجب أن تضعه في اعتبارك عند اختيار جهاز EEPROM لمشروعك. يتم قياس سعة EEPROM بالبت وليس بالبايت. ستحتوي ذاكرة EEPROM سعة 512 كيلو بايت على 512 كيلو بايت من البيانات ، أي 64 كيلو بايت فقط.

الخطوة 3: ربط أجهزة Arduino

ربط أجهزة اردوينو
ربط أجهزة اردوينو
ربط أجهزة اردوينو
ربط أجهزة اردوينو

حسنًا ، الآن بعد أن عرفنا ما هو EEPROM ، دعنا نربط إحداها ونرى ما يمكن أن تفعله! من أجل جعل أجهزتنا تتحدث ، سنحتاج إلى توصيل الطاقة بالإضافة إلى الخطوط التسلسلية I²C. يعمل هذا الجهاز ، على وجه الخصوص ، عند 5VDC ، لذلك سنقوم بتوصيله بمخرج 5V من Arduino UNO. أيضًا ، ستحتاج خطوط I²C إلى مقاومات سحب حتى يحدث الاتصال بشكل صحيح. تعتمد قيمة هذه المقاومات على سعة الخطوط والتردد الذي تريد توصيله به ، ولكن يتم الاحتفاظ بقاعدة جيدة للتطبيقات غير الحرجة في نطاق kΩ. في هذا المثال ، سنستخدم مقاومات سحب 4.7kΩ.

هناك ثلاثة دبابيس على هذا الجهاز لتحديد عنوان I²C ، وبهذه الطريقة يمكنك الحصول على أكثر من EEPROM على الحافلة ومعالجتها بشكل مختلف. يمكنك فقط تأريضهم جميعًا ، لكننا سنقوم بتوصيلهم بالأسلاك حتى نتمكن من إسقاط جهاز عالي السعة لاحقًا في البرنامج التعليمي.

سنستخدم لوحة توصيل لربط كل شيء معًا. يوضح الرسم البياني أدناه التوصيل الصحيح لمعظم أجهزة I²C EEPROM ، بما في ذلك Microchip 24-series EEPROM التي نبيعها.

الخطوة الرابعة: القراءة والكتابة

في معظم الأوقات عندما تستخدم EEPROM جنبًا إلى جنب مع متحكم دقيق ، فلن تحتاج في الواقع إلى رؤية جميع محتويات الذاكرة في وقت واحد. سوف تقرأ وتكتب البايت هنا وهناك حسب الحاجة. ومع ذلك ، في هذا المثال ، سنكتب ملفًا كاملاً إلى EEPROM ثم نقرأه بالكامل حتى نتمكن من عرضه على جهاز الكمبيوتر الخاص بنا. يجب أن يجعلنا هذا مرتاحين لفكرة استخدام EEPROM ويعطينا أيضًا شعورًا بكمية البيانات التي يمكن أن تناسب حقًا جهاز صغير.

أكتب شيئا

سيأخذ رسم المثال الخاص بنا ببساطة أي بايت يأتي عبر المنفذ التسلسلي ويكتبه إلى EEPROM ، مع تتبع عدد البايتات التي كتبناها في الذاكرة.

تحدث كتابة بايت من الذاكرة إلى EEPROM بشكل عام في ثلاث خطوات:

  1. أرسل البايت الأكثر أهمية من عنوان الذاكرة الذي تريد الكتابة إليه.
  2. أرسل البايت الأقل أهمية من عنوان الذاكرة الذي تريد الكتابة إليه.
  3. أرسل بايت البيانات الذي ترغب في تخزينه في هذا الموقع.

من المحتمل أن تكون هناك بعض الكلمات الرئيسية التي تشرح:

عناوين الذاكرة

إذا كنت تتخيل أن جميع البايتات في EEPROM سعة 512 كيلوبت تقف في سطر من 0 إلى 64000 - لأن هناك 8 بتات في البايت ، وبالتالي يمكنك احتواء 64000 بايت على 512 كيلوبت EEPROM - إذن عنوان الذاكرة هو المكان في السطر الذي ستجد فيه بايتًا معينًا. نحتاج إلى إرسال هذا العنوان إلى EEPROM حتى يعرف مكان وضع البايت الذي نرسله.

البايت الأكثر أهمية والأقل أهمية

نظرًا لوجود 32000 مكان محتمل في EEPROM سعة 256 كيلوبايت - ولأن 255 هو أكبر رقم يمكنك ترميزه في بايت واحد - نحتاج إلى إرسال هذا العنوان في 2 بايت. أولاً ، نرسل البايت الأكثر أهمية (MSB) - أول 8 بتات في هذه الحالة. ثم نرسل البايت الأقل أهمية (LSB) - الثماني بتات الثانية. لماذا ا؟ لأن هذه هي الطريقة التي يتوقع الجهاز استقبالها ، هذا كل شيء.

كتابة الصفحة

لا بأس من كتابة بايت واحد في كل مرة ، ولكن معظم أجهزة EEPROM تحتوي على شيء يسمى "المخزن المؤقت لكتابة الصفحة" والذي يسمح لك بكتابة عدة بايت في وقت واحد بنفس الطريقة التي تكتب بها بايت واحد. سنستفيد من هذا في مثالنا على الرسم التخطيطي. يستخدم EEPROM عدادًا داخليًا يعمل تلقائيًا على زيادة موقع الذاكرة مع كل بايت من البيانات التالية التي يستقبلها. بمجرد إرسال عنوان الذاكرة ، يمكننا متابعته حتى 64 بايت من البيانات. تفترض EEPROM (بحق) أن العنوان 312 متبوعًا بـ 10 بايت سيسجل البايت 0 في العنوان 312 ، البايت 1 في العنوان 313 ، البايت 2 في العنوان 314 ، وهكذا.

اقرأ شيئًا ما

تتبع القراءة من EEPROM بشكل أساسي نفس العملية المكونة من ثلاث خطوات مثل الكتابة إلى EEPROM:

  1. أرسل البايت الأكثر أهمية من عنوان الذاكرة الذي تريد الكتابة إليه.
  2. أرسل البايت الأقل أهمية من عنوان الذاكرة الذي تريد الكتابة إليه.
  3. اطلب بايت البيانات في هذا الموقع.

الخطوة 5: المخططات والكود

المخططات والكود
المخططات والكود

الشفرة:

#يشمل

#define eeprom 0x50 // يحدد العنوان الأساسي لـ EEPROM

الإعداد باطل() {

Wire.begin () ؛ // ينشئ كائن سلك

Serial.begin (9600) ؛

عنوان int غير الموقع = 0 ؛ // العنوان الأول لـ EEPROM

Serial.println ("نكتب الرمز البريدي 22222 ، رمز بريدي") ؛ لـ (العنوان = 0 ؛ العنوان <5 ؛ العنوان ++) writeEEPROM (eeprom ، العنوان ، '2') ؛ // يكتب 22222 إلى EEPROM

لـ (العنوان = 0 ؛ العنوان <5 ؛ العنوان ++) {Serial.print (readEEPROM (eeprom ، العنوان) ، HEX) ؛ }}

حلقة فارغة() {

/ * لا يوجد شيء في وظيفة الحلقة () لأننا لا نريد أن يكتب اردوينو نفس الشيء بشكل متكرر إلى EEPROM مرارًا وتكرارًا. نريد فقط كتابة لمرة واحدة ، لذلك يتم تجنب وظيفة الحلقة () مع EEPROMs. * /}

// يحدد وظيفة writeEEPROM

كتابة باطلة EEPROM (int deviceaddress، unigned int eeaddress، byte data) {Wire.beginTransmission (deviceaddress)؛ Wire.write ((int) (eeaddress >> 8)) ؛ // يكتب MSB Wire.write ((int) (eeaddress & 0xFF)) ؛ // يكتب LSB Wire.write (البيانات) ؛ Wire.endTransmission () ؛ }

// يحدد وظيفة readEEPROM

بايت readEEPROM (int deviceaddress، unigned int eeaddress) {byte rdata = 0xFF؛ Wire.beginTransmission (deviceaddress) ؛ Wire.write ((int) (eeaddress >> 8)) ؛ // يكتب MSB Wire.write ((int) (eeaddress & 0xFF)) ؛ // يكتب LSB Wire.endTransmission () ؛ Wire.request From (deviceaddress، 1) ؛ إذا (Wire.available ()) rdata = Wire.read () ؛ عودة rdata }

موصى به: