विषयसूची:

Arduino का उपयोग करके बाहरी EEPROM को डेटा पढ़ना और लिखना: 5 कदम
Arduino का उपयोग करके बाहरी EEPROM को डेटा पढ़ना और लिखना: 5 कदम

वीडियो: Arduino का उपयोग करके बाहरी EEPROM को डेटा पढ़ना और लिखना: 5 कदम

वीडियो: Arduino का उपयोग करके बाहरी EEPROM को डेटा पढ़ना और लिखना: 5 कदम
वीडियो: EEPROM in Arduino | Arduino Programming Tutorial in HINDI 2024, जुलाई
Anonim
Arduino का उपयोग करके बाहरी EEPROM को डेटा पढ़ना और लिखना
Arduino का उपयोग करके बाहरी EEPROM को डेटा पढ़ना और लिखना

EEPROM,इलेक्ट्रिकली इरेज़ेबल प्रोग्रामेबल रीड-ओनली मेमोरी के लिए खड़ा है।

EEPROM बहुत महत्वपूर्ण और उपयोगी है क्योंकि यह मेमोरी का एक गैर-वाष्पशील रूप है। इसका मतलब यह है कि जब बोर्ड बंद हो जाता है, तब भी EEPROM चिप उस प्रोग्राम को बरकरार रखता है जो उस पर लिखा गया था। इसलिए जब आप बोर्ड को बंद करते हैं और फिर उसे वापस चालू करते हैं, तो प्रोग्राम जो EEPROM को लिखा गया था, चलाया जा सकता है। तो मूल रूप से, EEPROM एक प्रोग्राम को स्टोर करता है और चलाता है, चाहे कुछ भी हो। इसका मतलब है कि आप एक डिवाइस को बंद कर सकते हैं, इसे 3 दिनों के लिए बंद रख सकते हैं, और वापस आकर इसे चालू कर सकते हैं और यह अभी भी उस प्रोग्राम को चला सकता है जो इसमें प्रोग्राम किया गया था। इस प्रकार अधिकांश उपभोक्ता इलेक्ट्रॉनिक उपकरण काम करते हैं।

यह परियोजना एलसीएससी द्वारा प्रायोजित है। मैं LCSC.com से इलेक्ट्रॉनिक घटकों का उपयोग कर रहा हूं। एलसीएससी की 200 से अधिक देशों में वैश्विक शिपिंग नेटवर्क के साथ सर्वोत्तम मूल्य पर वास्तविक, उच्च गुणवत्ता वाले इलेक्ट्रॉनिक घटकों के विस्तृत चयन की पेशकश करने के लिए एक मजबूत प्रतिबद्धता है। आज ही साइन अप करें और अपने पहले ऑर्डर पर $8 की छूट पाएं।

EEPROM भी बहुत कुशल है कि पारंपरिक EEPROM में व्यक्तिगत बाइट्स को स्वतंत्र रूप से पढ़ा, मिटाया और फिर से लिखा जा सकता है। अधिकांश अन्य प्रकार की गैर-वाष्पशील मेमोरी में, ऐसा नहीं किया जा सकता है। सीरियल EEPROM डिवाइस जैसे माइक्रोचिप 24-सीरीज़ EEPROM आपको किसी भी डिवाइस में अधिक मेमोरी जोड़ने की अनुमति देता है जो I²C बोल सकता है।

आपूर्ति

  1. ईईपीरोम - 24LC512
  2. एटीमेगा३२८पी-पीयू
  3. 16 मेगाहर्ट्ज क्रिस्टल
  4. ब्रेड बोर्ड
  5. रोकनेवाला 4.7k ओम x 2
  6. संधारित्र 22 पीएफ x 2

चरण 1: EEPROM मूल बातें

EEPROM मूल बातें
EEPROM मूल बातें

माइक्रोचिप 24LC2512 चिप को 8 पिन डीआईपी पैकेज में खरीदा जा सकता है। 24LC512 पर पिन बहुत सीधे-आगे हैं और इसमें पावर (8), GND (4), राइट प्रोटेक्शन (7), SCL/SDA (6, 5), और तीन एड्रेस पिन (1, 2, 3) शामिल हैं।

रोम का एक संक्षिप्त इतिहास

प्रारंभिक "संग्रहीत-प्रोग्राम" प्रकार के कंप्यूटर - जैसे डेस्क कैलकुलेटर और कीबोर्ड दुभाषिए - ने डायोड मैट्रिक्स ROM के रूप में ROM का उपयोग करना शुरू किया। यह एक विशेष रूप से संगठित पीसीबी पर रखे असतत अर्धचालक डायोड से बनी एक मेमोरी थी। इसने एकीकृत परिपथों के आगमन के साथ मास्क रोम को रास्ता दिया। मास्क रॉम काफी हद तक डायोड मैट्रिक्स रॉम की तरह था, केवल इसे बहुत छोटे पैमाने पर लागू किया गया था। हालाँकि, इसका मतलब यह था कि आप सोल्डरिंग आयरन के साथ कुछ डायोड को इधर-उधर नहीं घुमा सकते थे और इसे फिर से शुरू कर सकते थे। मास्क रोम को निर्माता द्वारा प्रोग्राम किया जाना था और उसके बाद परिवर्तन नहीं किया जा सकता था।

दुर्भाग्य से, मास्क रॉम महंगा था और इसे बनाने में लंबा समय लगता था क्योंकि प्रत्येक नए कार्यक्रम के लिए एक फाउंड्री द्वारा निर्मित एक नए उपकरण की आवश्यकता होती थी। हालाँकि, 1956 में, इस समस्या को PROM (प्रोग्रामेबल ROM) के आविष्कार के साथ हल किया गया था, जिसने डेवलपर्स को चिप्स को स्वयं प्रोग्राम करने की अनुमति दी थी। इसका मतलब है कि निर्माता लाखों एक ही अनप्रोग्राम्ड डिवाइस का उत्पादन कर सकते हैं जिसने इसे सस्ता और अधिक व्यावहारिक बना दिया। हालाँकि, PROM को केवल एक बार हाई-वोल्टेज प्रोग्रामिंग डिवाइस का उपयोग करके लिखा जा सकता है। एक PROM डिवाइस के प्रोग्राम किए जाने के बाद, डिवाइस को उसकी अनप्रोग्राम्ड स्थिति में वापस करने का कोई तरीका नहीं था।

यह 1971 में EPROM (इरेज़ेबल प्रोग्राममेबल ROM) के आविष्कार के साथ बदल गया, जो - परिवर्णी शब्द में एक और अक्षर जोड़ने के अलावा - अपने साथ डिवाइस को मिटाने और एक मजबूत यूवी प्रकाश स्रोत का उपयोग करके इसे "रिक्त" स्थिति में वापस करने की क्षमता लेकर आया। यह सही है, आपको इसे पुन: प्रोग्राम करने के लिए IC पर एक उज्ज्वल प्रकाश चमकाना था, वह कितना अच्छा है? ठीक है, यह पता चला है कि यह बहुत अच्छा है जब तक कि आप फर्मवेयर पर काम करने वाले डेवलपर नहीं हैं, जिस स्थिति में आप वास्तव में विद्युत संकेतों का उपयोग करके डिवाइस को रीप्रोग्राम करने में सक्षम होना चाहते हैं। यह अंततः 1983 में EEPROM (इलेक्ट्रिकली इरेज़ेबल प्रोग्राममेबल ROM) के विकास के साथ एक वास्तविकता बन गया और इसके साथ ही, हम वर्तमान दिन के बोझिल परिवर्णी शब्द पर पहुँचे।

चरण 2: EEPROM की विशेषताएं

डेटा भंडारण की एक विधि के रूप में EEPROM में दो प्रमुख कमियां हैं। अधिकांश अनुप्रयोगों में, पेशेवरों के नुकसान से अधिक है, लेकिन आपको अपने अगले डिजाइन में EEPROM को शामिल करने से पहले उनके बारे में पता होना चाहिए।

सबसे पहले, वह तकनीक जो EEPROM को काम करती है, उसे फिर से लिखे जाने की संख्या को भी सीमित करती है। यह ट्रांजिस्टर में फंसे इलेक्ट्रॉनों के साथ करना है जो रोम बनाते हैं और तब तक निर्माण करते हैं जब तक कि "1" और "0" के बीच चार्ज अंतर पहचानने योग्य न हो। लेकिन चिंता न करें, अधिकांश EEPROM में अधिकतम 1 मिलियन या उससे अधिक की री-राइट संख्या होती है। जब तक आप लगातार EEPROM को नहीं लिख रहे हैं, तब तक यह संभावना नहीं है कि आप इस अधिकतम को प्राप्त करेंगे। दूसरे, यदि आप इससे बिजली हटाते हैं तो EEPROM मिटाया नहीं जाएगा, लेकिन यह आपके डेटा को अनिश्चित काल तक नहीं रखेगा। समय के साथ EEPROM को प्रभावी ढंग से मिटाते हुए, इलेक्ट्रॉन ट्रांजिस्टर से और इन्सुलेटर के माध्यम से बाहर निकल सकते हैं। उस ने कहा, यह आमतौर पर वर्षों के दौरान होता है (हालांकि इसे गर्मी से तेज किया जा सकता है)। अधिकांश निर्माताओं का कहना है कि आपका डेटा EEPROM पर कमरे के तापमान पर 10 साल या उससे अधिक के लिए सुरक्षित है। और एक और बात है जिसे आपको अपने प्रोजेक्ट के लिए EEPROM डिवाइस का चयन करते समय ध्यान में रखना चाहिए। EEPROM क्षमता को बिट्स में मापा जाता है न कि बाइट्स में। एक 512K EEPROM में 512Kbit डेटा होगा, दूसरे शब्दों में, केवल 64KB।

चरण 3: Arduino हार्डवेयर हुकअप

Arduino हार्डवेयर हुकअप
Arduino हार्डवेयर हुकअप
Arduino हार्डवेयर हुकअप
Arduino हार्डवेयर हुकअप

ठीक है, अब जब हम जानते हैं कि EEPROM क्या है, आइए एक को जोड़ते हैं और देखते हैं कि यह क्या कर सकता है! हमारे डिवाइस को बात करने के लिए, हमें बिजली के साथ-साथ I²C सीरियल लाइनों को जोड़ने की आवश्यकता होगी। यह उपकरण, विशेष रूप से, 5VDC पर चलता है, इसलिए हम इसे अपने Arduino UNO के 5V आउटपुट से जोड़ेंगे। साथ ही, संचार के सही ढंग से होने के लिए I²C लाइनों को पुल-अप प्रतिरोधों की आवश्यकता होगी। इन प्रतिरोधों का मान लाइनों की समाई और आवृत्ति पर निर्भर करता है जिसे आप इसे संप्रेषित करना चाहते हैं, लेकिन गैर-महत्वपूर्ण अनुप्रयोगों के लिए अंगूठे का एक अच्छा नियम इसे kΩ श्रेणी में रखा जाता है। इस उदाहरण में, हम 4.7kΩ पुल-अप प्रतिरोधों का उपयोग करेंगे।

I²C पते का चयन करने के लिए इस डिवाइस पर तीन पिन हैं, इस तरह आप बस में एक से अधिक EEPROM रख सकते हैं और उन्हें अलग-अलग तरीके से संबोधित कर सकते हैं। आप उन सभी को बस ग्राउंड कर सकते हैं, लेकिन हम उन्हें तार देंगे ताकि हम बाद में ट्यूटोरियल में उच्च क्षमता वाले डिवाइस को छोड़ सकें।

हम सब कुछ एक साथ जोड़ने के लिए ब्रेडबोर्ड का उपयोग करेंगे। नीचे दिया गया आरेख हमारे द्वारा बेचे जाने वाले माइक्रोचिप 24-श्रृंखला EEPROM सहित अधिकांश I²C EEPROM उपकरणों के लिए सही हुकअप दिखाता है।

चरण 4: पढ़ना और लिखना

अधिकांश समय जब आप एक माइक्रोकंट्रोलर के साथ एक EEPROM का उपयोग कर रहे होते हैं, तो आपको वास्तव में मेमोरी की सभी सामग्री को एक बार में देखने की आवश्यकता नहीं होगी। आप जरूरत पड़ने पर बस इधर-उधर बाइट पढ़ेंगे और लिखेंगे। इस उदाहरण में, हालांकि, हम EEPROM को एक पूरी फाइल लिखने जा रहे हैं और फिर इसे वापस पढ़ेंगे ताकि हम इसे अपने कंप्यूटर पर देख सकें। यह हमें EEPROM का उपयोग करने के विचार के साथ सहज होना चाहिए और हमें यह भी महसूस करना चाहिए कि एक छोटे से उपकरण पर कितना डेटा वास्तव में फिट हो सकता है।

कुछ लिखना

हमारा उदाहरण स्केच बस किसी भी बाइट को ले जाएगा जो सीरियल पोर्ट के ऊपर आता है और इसे EEPROM को लिखता है, इस बात पर नज़र रखते हुए कि हमने मेमोरी में कितने बाइट्स लिखे हैं।

EEPROM को मेमोरी का बाइट लिखना आम तौर पर तीन चरणों में होता है:

  1. उस मेमोरी एड्रेस का सबसे महत्वपूर्ण बाइट भेजें जिसे आप लिखना चाहते हैं।
  2. उस मेमोरी एड्रेस का कम से कम महत्वपूर्ण बाइट भेजें जिसे आप लिखना चाहते हैं।
  3. डेटा बाइट भेजें जिसे आप इस स्थान पर संग्रहीत करना चाहते हैं।

वहाँ शायद कुछ प्रमुख शब्द हैं जो स्पष्ट रूप से समझाते हैं:

मेमोरी एड्रेस

यदि आप कल्पना करते हैं कि 512 Kbit EEPROM में सभी बाइट्स 0 से 64000 तक एक पंक्ति में खड़े हैं - क्योंकि एक बाइट में 8 बिट हैं और इसलिए आप 512 Kbit EEPROM पर 64000 बाइट्स फिट कर सकते हैं - तो एक मेमोरी एड्रेस में जगह है लाइन जहां आपको एक विशेष बाइट मिलेगी। हमें उस पते को EEPROM को भेजने की आवश्यकता है ताकि यह जान सके कि हम जो बाइट भेज रहे हैं उसे कहाँ रखा जाए।

सबसे महत्वपूर्ण और कम से कम महत्वपूर्ण बाइट्स

क्योंकि 256 Kbit EEPROM में 32000 संभावित स्थान हैं - और क्योंकि 255 सबसे बड़ी संख्या है जिसे आप एक बाइट में एन्कोड कर सकते हैं - हमें इस पते को दो बाइट्स में भेजने की आवश्यकता है। सबसे पहले, हम सबसे महत्वपूर्ण बाइट (MSB) भेजते हैं - इस मामले में पहले 8 बिट। फिर हम कम से कम महत्वपूर्ण बाइट (एलएसबी) - दूसरे 8 बिट्स भेजते हैं। क्यों? क्योंकि इस तरह डिवाइस उन्हें प्राप्त करने की अपेक्षा करता है, बस इतना ही।

पृष्ठ लेखन

एक समय में एक बाइट लिखना ठीक है, लेकिन अधिकांश EEPROM उपकरणों में "पेज राइट बफर" नामक कुछ होता है जो आपको एक ही बाइट की तरह एक बार में कई बाइट्स लिखने की अनुमति देता है। हम अपने उदाहरण स्केच में इसका लाभ उठाएंगे। EEPROM एक आंतरिक काउंटर का उपयोग करता है जो इसे प्राप्त होने वाले प्रत्येक निम्न डेटा बाइट के साथ स्वचालित रूप से मेमोरी स्थान को बढ़ाता है। एक बार मेमोरी एड्रेस भेज दिए जाने के बाद हम 64 बाइट्स डेटा के साथ उसका अनुसरण कर सकते हैं। EEPROM मानता है (ठीक है) कि ३१२ का एक पता १० बाइट्स के बाद बाइट ० को एड्रेस ३१२ पर, बाइट १ को एड्रेस ३१३ पर, बाइट २ को एड्रेस ३१४ पर, और इसी तरह रिकॉर्ड किया जाएगा।

कुछ पढ़ें

EEPROM से पढ़ना मूल रूप से EEPROM को लिखने के समान तीन-चरणीय प्रक्रिया का अनुसरण करता है:

  1. उस मेमोरी एड्रेस का सबसे महत्वपूर्ण बाइट भेजें जिसे आप लिखना चाहते हैं।
  2. उस मेमोरी एड्रेस का कम से कम महत्वपूर्ण बाइट भेजें जिसे आप लिखना चाहते हैं।
  3. उस स्थान पर डेटा बाइट के लिए पूछें।

चरण 5: योजनाबद्ध और कोड

स्कैमैटिक्स और कोड
स्कैमैटिक्स और कोड

कोड:

#शामिल

#define eeprom 0x50 // EEPROM के आधार पते को परिभाषित करता है

व्यर्थ व्यवस्था() {

वायर.बेगिन (); // एक वायर ऑब्जेक्ट बनाता है

सीरियल.बेगिन (९६००);

अहस्ताक्षरित अंतर पता = 0; // EEPROM का पहला पता

Serial.println ("हम ज़िप कोड 22222, एक ज़िप कोड लिखते हैं"); के लिए (पता = 0; पता <5; पता ++) लिखें EEPROM (eeprom, पता, '2'); // EEPROM को 22222 लिखता है

के लिए (पता = 0; पता <5; पता ++) {Serial.print (readEEPROM (eeprom, पता), HEX); } }

शून्य लूप () {

/*लूप () फ़ंक्शन में कुछ भी नहीं है क्योंकि हम नहीं चाहते कि आर्डिनो एक ही चीज़ को बार-बार EEPROM पर लिखे। हम केवल एक बार लिखना चाहते हैं, इसलिए EEPROMs के साथ लूप () फ़ंक्शन से बचा जाता है।*/ }

// राइटईईपीरोम फ़ंक्शन को परिभाषित करता है

शून्य लिखेंईईपीरोम (इंट डिवाइसएड्रेस, अहस्ताक्षरित इंट ईएड्रेस, बाइट डेटा) {वायर.बेगिनट्रांसमिशन (डिवाइसएड्रेस); Wire.write((int)(eeaddress >> 8)); // MSB Wire.write((int)(eeaddress & 0xFF)) लिखता है; // एलएसबी वायर लिखता है। लिखें (डेटा); वायर.एंडट्रांसमिशन (); }

// readEEPROM फ़ंक्शन को परिभाषित करता है

बाइट रीडईईपीरोम (इंट डिवाइसएड्रेस, अहस्ताक्षरित इंट ईएड्रेस) {बाइट रडाटा = 0xFF; Wire.beginTransmission (डिवाइस एड्रेस); Wire.write((int)(eeaddress >> 8)); // MSB Wire.write((int)(eeaddress & 0xFF)) लिखता है; // एलएसबी वायर लिखता है। एंडट्रांसमिशन (); Wire.requestFrom (डिवाइस पता, 1); अगर (वायर.उपलब्ध ()) rdata = Wire.read (); रिटर्न आरडीटा; }

सिफारिश की: