সুচিপত্র:

Arduino ব্যবহার করে বাহ্যিক EEPROM- এ ডেটা পড়া এবং লেখা: 5 টি ধাপ
Arduino ব্যবহার করে বাহ্যিক EEPROM- এ ডেটা পড়া এবং লেখা: 5 টি ধাপ

ভিডিও: Arduino ব্যবহার করে বাহ্যিক EEPROM- এ ডেটা পড়া এবং লেখা: 5 টি ধাপ

ভিডিও: Arduino ব্যবহার করে বাহ্যিক EEPROM- এ ডেটা পড়া এবং লেখা: 5 টি ধাপ
ভিডিও: Extract GPS location in Arduino with NEO-6m or NEO-7M module 2024, নভেম্বর
Anonim
Arduino ব্যবহার করে বাহ্যিক EEPROM- এ ডেটা পড়া এবং লেখা
Arduino ব্যবহার করে বাহ্যিক EEPROM- এ ডেটা পড়া এবং লেখা

EEPROM মানে ইলেক্ট্রিক্যালি ইরেজেবল প্রোগ্রামযোগ্য রিড-ওনলি মেমোরি।

EEPROM খুবই গুরুত্বপূর্ণ এবং দরকারী কারণ এটি মেমরির একটি অস্থির রূপ। এর মানে হল যে বোর্ডটি বন্ধ থাকলেও, EEPROM চিপ এখনও এটিকে লেখা প্রোগ্রামটি ধরে রাখে। সুতরাং যখন আপনি বোর্ডটি বন্ধ করে দেন এবং তারপরে এটি আবার চালু করেন, EEPROM- এ লেখা প্রোগ্রামটি চালানো যেতে পারে। তাই মূলত, EEPROM সঞ্চয় করে এবং একটি প্রোগ্রাম চালায় যাই হোক না কেন। এর মানে হল আপনি একটি ডিভাইস বন্ধ করতে পারেন, 3 দিনের জন্য বন্ধ রাখতে পারেন, এবং ফিরে এসে এটি চালু করতে পারেন এবং এটি এখনও প্রোগ্রামটি চালাতে পারে যা এটিতে প্রোগ্রাম করা হয়েছিল। বেশিরভাগ ভোক্তা ইলেকট্রনিক ডিভাইস এভাবেই কাজ করে।

এই প্রকল্পটি LCSC দ্বারা স্পনসর করা হয়েছে। আমি LCSC.com থেকে ইলেকট্রনিক উপাদান ব্যবহার করে আসছি। এলসিএসসির 200 টিরও বেশি দেশে বৈশ্বিক শিপিং নেটওয়ার্কের সাথে সর্বোত্তম মূল্যে প্রকৃত, উচ্চমানের ইলেকট্রনিক উপাদানগুলির বিস্তৃত নির্বাচন প্রদানের দৃ strong় প্রতিশ্রুতি রয়েছে। আজই সাইন আপ করুন এবং আপনার প্রথম অর্ডারে $ 8 ছাড় করুন।

EEPROM এছাড়াও খুব দক্ষ যে একটি byতিহ্যগত EEPROM পৃথক বাইট স্বাধীনভাবে পড়া, মুছে ফেলা, এবং পুনর্লিখন করা যেতে পারে। বেশিরভাগ অন্যান্য ধরণের অ-উদ্বায়ী মেমরিতে, এটি করা যায় না। মাইক্রোচিপ 24-সিরিজের EEPROM এর মতো সিরিয়াল EEPROM ডিভাইসগুলি আপনাকে I²C বলতে পারে এমন যেকোনো ডিভাইসে আরও মেমরি যোগ করতে দেয়।

সরবরাহ

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 মেগাহার্টজ ক্রিস্টাল
  4. ব্রেডবোর্ড
  5. প্রতিরোধক 4.7k ওহম x 2
  6. ক্যাপাসিটর 22 pF x 2

ধাপ 1: EEPROM বুনিয়াদি

EEPROM বুনিয়াদি
EEPROM বুনিয়াদি

মাইক্রোচিপ 24LC2512 চিপ 8 পিন ডিআইপি প্যাকেজে কেনা যায়। 24LC512 এর পিনগুলি বেশ সোজা-সামনের এবং শক্তি (8), GND (4), রাইট সুরক্ষা (7), এসসিএল/এসডিএ (6, 5) এবং তিনটি ঠিকানা পিন (1, 2, 3) নিয়ে গঠিত।

রমের একটি সংক্ষিপ্ত ইতিহাস

প্রারম্ভিক "স্টোরেড -প্রোগ্রাম" টাইপ কম্পিউটার - যেমন ডেস্ক ক্যালকুলেটর এবং কীবোর্ড দোভাষী - ডিওড ম্যাট্রিক্স রম আকারে রম ব্যবহার শুরু করে। এটি একটি বিশেষভাবে সংগঠিত PCB- এ স্থাপন করা আলাদা সেমিকন্ডাক্টর ডায়োড দিয়ে গঠিত একটি স্মৃতি। এটি ইন্টিগ্রেটেড সার্কিটের আবির্ভাবের সাথে মাস্ক রমকে পথ দেয়। মাস্ক রম ছিল অনেকটা ডায়োড ম্যাট্রিক্স রমের মত, এটি অনেক ছোট আকারে বাস্তবায়িত হয়েছিল। তবে এর মানে হল, আপনি কেবল একটি সোল্ডারিং লোহার সাহায্যে কয়েকটা ডায়োড সরাতে পারেননি এবং এটি পুনরায় প্রোগ্রাম করতে পারেন। মাস্ক রমকে প্রস্তুতকারকের দ্বারা প্রোগ্রাম করতে হয়েছিল এবং তারপরে এটি পরিবর্তনযোগ্য ছিল না।

দুর্ভাগ্যক্রমে, মাস্ক রম ব্যয়বহুল ছিল এবং উত্পাদনে দীর্ঘ সময় লেগেছিল কারণ প্রতিটি নতুন প্রোগ্রামের জন্য একটি ফাউন্ড্রি দ্বারা তৈরি করার জন্য একটি নতুন ডিভাইস প্রয়োজন। 1956 সালে, এই সমস্যাটি PROM (প্রোগ্রামযোগ্য রম) আবিষ্কারের মাধ্যমে সমাধান করা হয়েছিল যা ডেভেলপারদের নিজেদের চিপগুলি প্রোগ্রাম করার অনুমতি দেয়। এর অর্থ নির্মাতারা লক্ষ লক্ষ একই রকম প্রোগ্রাম না করা ডিভাইস তৈরি করতে পারে যা এটিকে সস্তা এবং আরও ব্যবহারিক করে তুলেছে। PROM, তবে, শুধুমাত্র একবার একটি উচ্চ-ভোল্টেজ প্রোগ্রামিং ডিভাইস ব্যবহার করে লেখা যেতে পারে। একটি PROM ডিভাইস প্রোগ্রাম করার পরে, ডিভাইসটিকে তার প্রোগ্রামহীন অবস্থায় ফেরানোর কোন উপায় ছিল না।

এটি 1971 সালে ইপিআরওএম (ইরেজেবল প্রোগ্রামযোগ্য রম) আবিষ্কারের সাথে পরিবর্তিত হয় যা সংক্ষেপে আরেকটি অক্ষর যুক্ত করার পাশাপাশি - ডিভাইসটিকে মুছে ফেলার এবং একটি শক্তিশালী ইউভি আলোর উৎস ব্যবহার করে "ফাঁকা" অবস্থায় ফিরিয়ে আনার ক্ষমতা নিয়ে আসে। এটা ঠিক, আইসি তে পুনরায় প্রোগ্রাম করার জন্য আপনাকে একটি উজ্জ্বল আলো জ্বালাতে হয়েছিল, এটি কতটা শীতল? ঠিক আছে, এটি দেখা যাচ্ছে যে এটি বেশ চমৎকার যদি না আপনি ফার্মওয়্যারে কাজ করে এমন একজন ডেভেলপার হন যে ক্ষেত্রে আপনি বৈদ্যুতিক সংকেত ব্যবহার করে ডিভাইসটি পুনরায় প্রোগ্রাম করতে সক্ষম হতে চান। এটি অবশেষে 1983 সালে EEPROM (ইলেক্ট্রিক্যালি ইরেজেবল প্রোগ্রামযোগ্য রম) এর বিকাশের সাথে একটি বাস্তবতায় পরিণত হয়েছিল এবং এর সাথে, আমরা বর্তমান দিনের অযৌক্তিক সংক্ষিপ্তসারটিতে এসেছি।

ধাপ 2: EEPROM এর Quirks

ডেটা স্টোরেজ পদ্ধতি হিসেবে EEPROM- এর দুটি প্রধান ত্রুটি রয়েছে। বেশিরভাগ অ্যাপ্লিকেশনগুলিতে, পেশাদাররা অসুবিধার চেয়ে বেশি, কিন্তু আপনার পরবর্তী ডিজাইনে EEPROM অন্তর্ভুক্ত করার আগে আপনাকে তাদের সম্পর্কে সচেতন হওয়া উচিত।

প্রথমত, যে প্রযুক্তি EEPROM কে কাজ করে তা আবার লেখার সংখ্যাও সীমাবদ্ধ করে। ইলেকট্রনগুলি ট্রানজিস্টরে আটকা পড়ে যা রম তৈরি করে এবং "1" এবং "0" এর মধ্যে চার্জ পার্থক্য অচেনা না হওয়া পর্যন্ত তৈরি হয়। কিন্তু চিন্তা করবেন না, অধিকাংশ EEPROM- এর সর্বোচ্চ পুনর্লিখন সংখ্যা 1 মিলিয়ন বা তার বেশি। যতক্ষণ না আপনি EEPROM- এ ক্রমাগত লিখছেন না ততক্ষণ আপনি এই সর্বাধিক আঘাত করতে পারবেন না। দ্বিতীয়ত, EEPROM মুছে যাবে না যদি আপনি এটি থেকে বিদ্যুৎ অপসারণ করেন, কিন্তু এটি অনির্দিষ্টকালের জন্য আপনার ডেটা ধরে রাখবে না। ইলেকট্রনগুলি ট্রানজিস্টর থেকে এবং ইনসুলেটর দিয়ে বেরিয়ে যেতে পারে, কার্যকরভাবে সময়ের সাথে EEPROM মুছে ফেলতে পারে। এটি বলেছিল, এটি সাধারণত বছরের পর বছর ধরে ঘটে (যদিও এটি তাপ দ্বারা ত্বরান্বিত হতে পারে)। বেশিরভাগ নির্মাতারা বলে যে আপনার ডেটা 10 বছরের বা তার বেশি ঘরের তাপমাত্রায় EEPROM- এ নিরাপদ। এবং আপনার প্রকল্পের জন্য একটি EEPROM ডিভাইস নির্বাচন করার সময় আপনার আরও একটি বিষয় মনে রাখা উচিত। EEPROM ক্ষমতা বিটে পরিমাপ করা হয় এবং বাইটে নয়। একটি 512K EEPROM 512Kbit ডেটা ধারণ করবে, অন্য কথায়, শুধু 64KB।

ধাপ 3: Arduino হার্ডওয়্যার হুকআপ

আরডুইনো হার্ডওয়্যার হুকআপ
আরডুইনো হার্ডওয়্যার হুকআপ
আরডুইনো হার্ডওয়্যার হুকআপ
আরডুইনো হার্ডওয়্যার হুকআপ

ঠিক আছে, এখন আমরা জানি যে EEPROM কি, আসুন আমরা একটিকে হুক করি এবং দেখি এটি কী করতে পারে! আমাদের ডিভাইসে কথা বলার জন্য, আমাদের পাওয়ার এবং I²C সিরিয়াল লাইনগুলিকে সংযুক্ত করতে হবে। এই ডিভাইসটি, বিশেষ করে, 5VDC তে চলে তাই আমরা এটিকে আমাদের Arduino UNO এর 5V আউটপুটের সাথে সংযুক্ত করব। এছাড়াও, যোগাযোগ সঠিকভাবে হওয়ার জন্য I²C লাইনের পুল-আপ প্রতিরোধক প্রয়োজন হবে। এই প্রতিরোধকের মান নির্ভর করে লাইনের ক্যাপাসিট্যান্স এবং ফ্রিকোয়েন্সি যা আপনি এটি যোগাযোগ করতে চান, কিন্তু অ-সমালোচনামূলক অ্যাপ্লিকেশনের জন্য একটি ভাল নিয়ম শুধুমাত্র kΩ পরিসরে রাখা হয়। এই উদাহরণে, আমরা 4.7kΩ পুল-আপ প্রতিরোধক ব্যবহার করব।

I deviceC ঠিকানা নির্বাচন করার জন্য এই ডিভাইসে তিনটি পিন রয়েছে, এইভাবে আপনি বাসে একাধিক EEPROM রাখতে পারেন এবং তাদের প্রত্যেককে আলাদাভাবে সম্বোধন করতে পারেন। আপনি কেবল তাদের সবগুলি গ্রাউন্ড করতে পারেন, কিন্তু আমরা তাদের ওয়্যারিং করব যাতে আমরা একটি উচ্চ-ক্ষমতাসম্পন্ন ডিভাইসে পরবর্তীতে টিউটোরিয়ালে নামতে পারি।

সবকিছুকে একসাথে সংযুক্ত করতে আমরা একটি ব্রেডবোর্ড ব্যবহার করব। নিচের চিত্রটি বেশিরভাগ I²C EEPROM ডিভাইসের জন্য সঠিক হুকআপ দেখায়, যার মধ্যে রয়েছে মাইক্রোচিপ 24-সিরিজের 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 হল সবচেয়ে বড় সংখ্যা যা আপনি এক বাইটে এনকোড করতে পারেন - আমাদের এই ঠিকানাটি দুই বাইটে পাঠাতে হবে। প্রথমত, আমরা সর্বাধিক উল্লেখযোগ্য বাইট (এমএসবি) পাঠাই - এই ক্ষেত্রে প্রথম 8 বিট। তারপরে আমরা সর্বনিম্ন উল্লেখযোগ্য বাইট (এলএসবি) পাঠাই - দ্বিতীয় 8 বিট। কেন? কারণ এইভাবে ডিভাইসটি তাদের পাওয়ার আশা করে, এটুকুই।

পৃষ্ঠা লেখা

এক সময়ে এক বাইট লেখা ঠিক আছে, কিন্তু বেশিরভাগ EEPROM ডিভাইসে "পেইজ রাইট বাফার" বলে কিছু থাকে যা আপনাকে একই সময়ে একাধিক বাইট লিখতে দেয় যেমন আপনি একক বাইট লিখতে পারবেন। আমরা আমাদের উদাহরণ স্কেচে এই সুবিধা গ্রহণ করব। EEPROM একটি অভ্যন্তরীণ কাউন্টার ব্যবহার করে যা স্বয়ংক্রিয়ভাবে প্রতিটি নিম্নলিখিত ডেটা বাইট দ্বারা মেমরির অবস্থান বৃদ্ধি করে। একবার একটি মেমরি ঠিকানা পাঠানো হলে আমরা 64 বাইট পর্যন্ত ডেটা দিয়ে তা অনুসরণ করতে পারি। EEPROM অনুমান করে (সঠিকভাবে) যে 312 এর একটি ঠিকানা এবং 10 বাইটের ঠিকানা 312 এ বাইট 0, ঠিকানা 313 এ বাইট 1, ঠিকানা 314 এ বাইট 2 ইত্যাদি রেকর্ড করবে।

কিছু পড়ুন

EEPROM থেকে পড়া মূলত EEPROM- এ লেখার মতো একই তিন ধাপের প্রক্রিয়া অনুসরণ করে:

  1. আপনি যে মেমরি ঠিকানায় লিখতে চান তার সবচেয়ে উল্লেখযোগ্য বাইট পাঠান।
  2. আপনি যে মেমরি ঠিকানায় লিখতে চান তার সর্বনিম্ন উল্লেখযোগ্য বাইট পাঠান।
  3. সেই স্থানে ডেটা বাইটের জন্য জিজ্ঞাসা করুন।

ধাপ 5: স্কিম্যাটিক্স এবং কোড

পরিকল্পনা এবং কোড
পরিকল্পনা এবং কোড

কোড:

#অন্তর্ভুক্ত

#ডিফাইন eeprom 0x50 // EEPROM এর বেস এড্রেস নির্ধারণ করে

অকার্যকর সেটআপ() {

Wire.begin (); // একটি ওয়্যার বস্তু তৈরি করে

Serial.begin (9600);

স্বাক্ষরবিহীন int ঠিকানা = 0; // EEPROM এর প্রথম ঠিকানা

Serial.println ("আমরা জিপ কোড 22222, একটি পিন কোড লিখি"); জন্য (ঠিকানা = 0; ঠিকানা <5; ঠিকানা ++) লিখুন EEPROM (eeprom, ঠিকানা, '2'); // EEPROM এ 22222 লিখে

জন্য (ঠিকানা = 0; ঠিকানা <5; ঠিকানা ++) {Serial.print (readEEPROM (eeprom, address), HEX); }}

অকার্যকর লুপ () {

/*লুপ () ফাংশনে কিছুই নেই কারণ আমরা চাই না যে আরডুইনো বারবার একই জিনিস EEPROM- এ বারবার লিখুক। আমরা শুধু এককালীন লেখা চাই, তাই EEPROM গুলি দিয়ে loop () ফাংশন এড়ানো হয়।*/}

// writeEEPROM ফাংশন সংজ্ঞায়িত করে

অকার্যকর ইইপ্রোম (int deviceaddress, স্বাক্ষরবিহীন int eeaddress, বাইট ডেটা) {Wire.beginTransmission (deviceaddress); Wire.write ((int) (eeaddress >> 8)); // MSB Wire.write লিখেছেন ((int) (eeaddress & 0xFF)); // LSB Wire.write (data) লিখেছে; Wire.endTransmission (); }

// readEEPROM ফাংশন সংজ্ঞায়িত করে

বাইট পড়া EEPROM (int deviceaddress, স্বাক্ষরবিহীন int eeaddress) {বাইট rdata = 0xFF; Wire.beginTransmission (deviceaddress); Wire.write ((int) (eeaddress >> 8)); // MSB Wire.write লিখেছেন ((int) (eeaddress & 0xFF)); // LSB Wire.endTransmission () লিখেছে; Wire.requestFrom (deviceaddress, 1); যদি (Wire.available ()) rdata = Wire.read (); rdata ফেরত; }

প্রস্তাবিত: