সুচিপত্র:

আরডুইনো দিয়ে DS1307 এবং DS3231 রিয়েল-টাইম ক্লক মডিউল ব্যবহার করা: 3 ধাপ
আরডুইনো দিয়ে DS1307 এবং DS3231 রিয়েল-টাইম ক্লক মডিউল ব্যবহার করা: 3 ধাপ

ভিডিও: আরডুইনো দিয়ে DS1307 এবং DS3231 রিয়েল-টাইম ক্লক মডিউল ব্যবহার করা: 3 ধাপ

ভিডিও: আরডুইনো দিয়ে DS1307 এবং DS3231 রিয়েল-টাইম ক্লক মডিউল ব্যবহার করা: 3 ধাপ
ভিডিও: LDmicro 14: I2C LCD & DS3231 Real-Time Clock (Microcontroller PLC Ladder Programming with LDmicro) 2024, নভেম্বর
Anonim
আরডুইনো দিয়ে DS1307 এবং DS3231 রিয়েল-টাইম ক্লক মডিউল ব্যবহার করা
আরডুইনো দিয়ে DS1307 এবং DS3231 রিয়েল-টাইম ক্লক মডিউল ব্যবহার করা
আরডুইনো দিয়ে DS1307 এবং DS3231 রিয়েল-টাইম ক্লক মডিউল ব্যবহার করা
আরডুইনো দিয়ে DS1307 এবং DS3231 রিয়েল-টাইম ক্লক মডিউল ব্যবহার করা

আমরা বিভিন্ন উৎস থেকে Arduino- এর সাথে DS1307 এবং DS3231 রিয়েল-টাইম ক্লক মডিউলগুলি কীভাবে ব্যবহার করতে হয় সে বিষয়ে অনুরোধ পেতে থাকি-তাই সেগুলি কীভাবে ব্যবহার করতে হয় তার দুটি অংশের টিউটোরিয়ালের মধ্যে এটি প্রথম। এই Arduino টিউটোরিয়ালের জন্য আমাদের ব্যবহার করার জন্য দুটি রিয়েল-টাইম ক্লক মডিউল আছে, একটি ম্যাক্সিম DS1307 (স্কয়ার মডিউল) এবং DS3231 (আয়তক্ষেত্রাকার মডিউল) এর উপর ভিত্তি করে।

রিয়েল-টাইম ক্লক মডিউলগুলিতে আইসিগুলির মধ্যে দুটি প্রধান পার্থক্য রয়েছে, যা সময় রাখার সঠিকতা। প্রথম মডিউলে ব্যবহৃত DS1307 খুব ভাল কাজ করে, তবে বাহ্যিক তাপমাত্রা অসিলেটর সার্কিটের ফ্রিকোয়েন্সি প্রভাবিত করতে পারে যা DS1307 এর অভ্যন্তরীণ কাউন্টার চালায়।

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

একটি নতুন CR2032 ব্যাটারি কেনা এবং এটি মডিউলে ফিট করা একটি ভাল ধারণা। সময় এবং তারিখের উপর নজর রাখার পাশাপাশি, এই মডিউলগুলির একটি ছোট EEPROM, একটি অ্যালার্ম ফাংশন (শুধুমাত্র DS3231) এবং বিভিন্ন ফ্রিকোয়েন্সিগুলির একটি বর্গ-তরঙ্গ উৎপন্ন করার ক্ষমতা রয়েছে-যা সবই দ্বিতীয় টিউটোরিয়ালের বিষয় হবে।

ধাপ 1: আপনার মডিউলটিকে একটি আরডুইনোতে সংযুক্ত করা

উভয় মডিউল I2C বাস ব্যবহার করে, যা সংযোগ খুব সহজ করে তোলে।

প্রথমে আপনাকে সনাক্ত করতে হবে যে আপনার Arduino বা সামঞ্জস্যপূর্ণ বোর্ডে কোন পিনগুলি I2C বাসের জন্য ব্যবহৃত হয় - এগুলি SDA (বা ডেটা) এবং এসসিএল (বা ঘড়ি) হিসাবে পরিচিত হবে। আরডুইনো ইউনো বা সামঞ্জস্যপূর্ণ বোর্ডগুলিতে, এই পিনগুলি ডেটা এবং ঘড়ির জন্য A4 এবং A5; আরডুইনো মেগাতে পিনগুলি ডেটা এবং ঘড়ির জন্য D20 এবং D21; এবং যদি আপনি একটি প্রো মিনি-সামঞ্জস্যপূর্ণ ব্যবহার করেন তবে পিনগুলি A4 এবং A5 ডেটা এবং ঘড়ির জন্য, যা প্রধান পিনের সমান্তরাল।

DS1307 মডিউল

আপনার যদি DS1307 মডিউল থাকে তাহলে আপনাকে বোর্ডে তারের সোল্ডার করতে হবে, অথবা কিছু ইনলাইন হেডার পিনে সোল্ডার করতে হবে যাতে আপনি জাম্পার ওয়্যার ব্যবহার করতে পারেন। তারপর আপনার আরডুইনোতে এসসিএল এবং এসডিএ পিন এবং Vcc পিনকে 5V পিন এবং GND থেকে GND এর সাথে সংযুক্ত করুন।

DS3231 মডিউল

এই মডিউলটি সংযুক্ত করা সহজ কারণ কারখানায় বোর্ডে হেডার পিন ইনস্টল করা আছে। আপনি কেবল এসসিএল এবং এসডিএ থেকে আরডুইনো এবং আবার মডিউলের Vcc এবং GND পিন থেকে আপনার বোর্ডের 5V বা 3.3. V এবং GND এ আবার জাম্পার ওয়্যার চালাতে পারেন। তবে আপনার নিজের তারের সোল্ডারিংয়ের জন্য এগুলি অন্যদিকে নকল করা হয়েছে। এই দুটি মডিউলের প্রয়োজনীয় পুল-আপ প্রতিরোধক রয়েছে, তাই আপনার নিজের যোগ করার দরকার নেই। I2C বাসের সাথে সংযুক্ত সমস্ত ডিভাইসের মতো, চেষ্টা করুন এবং SDA এবং SCL তারের দৈর্ঘ্য সর্বনিম্ন রাখুন।

ধাপ 2: আপনার আরটিসি মডিউল থেকে সময় পড়া এবং লেখা

একবার আপনি আপনার আরটিসি মডিউলটি ওয়্যার্ড করে নিন। প্রবেশ করুন এবং নিম্নলিখিত স্কেচ আপলোড করুন। যদিও স্কেচে নোট এবং ফাংশনগুলি শুধুমাত্র DS3231 কে নির্দেশ করে, কোডটি DS1307 এর সাথেও কাজ করে।

#অন্তর্ভুক্ত "ওয়্যার.এইচ"#ডিএস 3231_I2C_ADDRESS 0x68 // সাধারণ দশমিক সংখ্যাগুলিকে বাইনারি কোডেড দশমিক বাইট decToBcd (বাইট ভ্যাল) {রিটার্ন ((ভ্যাল/10*16) + (ভ্যাল%10)) রূপান্তর করুন; } // বাইনারি কোডেড দশমিককে সাধারণ দশমিক সংখ্যায় বাইট bcdToDec (বাইট ভ্যাল) {রিটার্ন ((val/16*10) + (val%16)) রূপান্তর করুন; } অকার্যকর সেটআপ () {Wire.begin (); Serial.begin (9600); // এখানে প্রাথমিক সময় সেট করুন: // DS3231 সেকেন্ড, মিনিট, ঘন্টা, দিন, তারিখ, মাস, বছর // setDS3231time (30, 42, 21, 4, 26, 11, 14); } void setDS3231time (বাইট সেকেন্ড, বাইট মিনিট, বাইট ঘন্টা, বাইট dayOfWeek, বাইট dayOfMonth, বাইট মাস, বাইট বছর) {// DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS) এ সময় এবং তারিখের ডেটা সেট করে; Wire.write (0); // সেকেন্ডে শুরু করার জন্য পরবর্তী ইনপুট সেট করুন Wire.write (decToBcd (সেকেন্ড)); // সেট সেকেন্ড Wire.write (decToBcd (মিনিট)); // সেট মিনিট Wire.write (decToBcd (ঘন্টা)); // সেট ঘন্টা Wire.write (decToBcd (dayOfWeek)); // সপ্তাহের নির্ধারিত দিন (1 = রবিবার, 7 = শনিবার) Wire.write (decToBcd (dayOfMonth)); // সেট তারিখ (1 থেকে 31) Wire.write (decToBcd (মাস)); // সেট মাস Wire.write (decToBcd (বছর)); // সেট বছর (0 থেকে 99) Wire.endTransmission (); } অকার্যকর readDS3231time (বাইট *সেকেন্ড, বাইট *মিনিট, বাইট *ঘন্টা, বাইট *dayOfWeek, বাইট *dayOfMonth, বাইট *মাস, বাইট *বছর) {Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // সেট DS3231 নিবন্ধক পয়েন্টার 00h Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // DS3231 থেকে সাত বাইট ডেটার অনুরোধ করুন রেজিস্টার 00h *সেকেন্ড = bcdToDec (Wire.read () & 0x7f) থেকে শুরু করে; *মিনিট = bcdToDec (Wire.read ()); *ঘন্টা = bcdToDec (Wire.read () & 0x3f); *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *মাস = bcdToDec (Wire.read ()); *বছর = bcdToDec (Wire.read ()); } void displayTime () {বাইট সেকেন্ড, মিনিট, ঘন্টা, dayOfWeek, dayOfMonth, মাস, বছর; // DS3231 readDS3231time থেকে তথ্য পুনরুদ্ধার করুন // এটি সিরিয়াল মনিটরে পাঠান Serial.print (ঘন্টা, DEC); // সিরিয়াল.প্রিন্ট (":") প্রদর্শিত হলে বাইট ভেরিয়েবলকে দশমিক সংখ্যায় রূপান্তর করুন; যদি (মিনিট <10) {Serial.print ("0"); } সিরিয়াল.প্রিন্ট (মিনিট, ডিসি); সিরিয়াল.প্রিন্ট (":"); যদি (দ্বিতীয় <10) {Serial.print ("0"); } সিরিয়াল.প্রিন্ট (দ্বিতীয়, ডিসি); সিরিয়াল.প্রিন্ট (""); Serial.print (dayOfMonth, DEC); সিরিয়াল.প্রিন্ট ("/"); সিরিয়াল.প্রিন্ট (মাস, ডিসি); সিরিয়াল.প্রিন্ট ("/"); সিরিয়াল.প্রিন্ট (বছর, ডিসি); সিরিয়াল.প্রিন্ট ("সপ্তাহের দিন:"); সুইচ (dayOfWeek) {case 1: Serial.println ("Sunday"); বিরতি; কেস 2: Serial.println ("সোমবার"); বিরতি; case 3: Serial.println ("মঙ্গলবার"); বিরতি; case 4: Serial.println ("বুধবার"); বিরতি; কেস 5: Serial.println ("বৃহস্পতিবার"); বিরতি; কেস 6: Serial.println ("শুক্রবার"); বিরতি; কেস 7: Serial.println ("শনিবার"); বিরতি; }} অকার্যকর লুপ () {displayTime (); // সিরিয়াল মনিটরে রিয়েল-টাইম ক্লক ডেটা প্রদর্শন, বিলম্ব (1000); // প্রতি মুহূর্ত }

অনেকগুলি কোড থাকতে পারে, তবে এটি পরিচালনাযোগ্য অংশগুলিতে ভালভাবে ভেঙে যায়।

এটি প্রথমে ওয়্যার লাইব্রেরি অন্তর্ভুক্ত করে, যা I2C বাস যোগাযোগের জন্য ব্যবহৃত হয়, তারপরে আরটিসির বাসের ঠিকানা 0x68 হিসাবে সংজ্ঞায়িত করে। এর পরে দুটি ফাংশন রয়েছে যা দশমিক সংখ্যাগুলিকে BCD (বাইনারি-কোডেড দশমিক) এবং তদ্বিপরীত রূপান্তর করে। এইগুলি প্রয়োজনীয় কারণ RTC ICs BCD তে কাজ করে দশমিক নয়।

ফাংশন setDS3231time () ঘড়ি সেট করতে ব্যবহৃত হয়। এটি ব্যবহার করা খুব সহজ, সহজ বছর থেকে দ্বিতীয় পর্যন্ত মান সন্নিবেশ করান, এবং RTC সেই সময় থেকে শুরু হবে। উদাহরণস্বরূপ যদি আপনি নিম্নলিখিত তারিখ এবং সময় নির্ধারণ করতে চান - বুধবার নভেম্বর 26, 2014 এবং 9:42 বিকাল এবং 30 সেকেন্ড - আপনি ব্যবহার করবেন:

setDS3231time (30, 42, 21, 4, 26, 11, 14);

ধাপ 3:

লক্ষ্য করুন যে সময়টি 24-ঘন্টা সময় ব্যবহার করে সেট করা হয়েছে এবং চতুর্থ প্যারামিটারটি হল "সপ্তাহের দিন"। এটি 1 এবং 7 এর মধ্যে পড়ে যা যথাক্রমে রবিবার থেকে শনিবার। এই প্যারামিটারগুলি বাইট মান যদি আপনি আপনার নিজের ভেরিয়েবলকে সাবসিটিউট করছেন।

একবার আপনি ফাংশনটি চালানোর পরে এটি // এর সাথে প্রিফিক্স করা এবং আপনার কোডটি আবার আপলোড করা বুদ্ধিমানের কাজ, তাই একবার পাওয়ার সাইকেল চালানো বা মাইক্রোকন্ট্রোলার রিসেট করার সময় এটি পুনরায় সেট হবে না। আপনার আরটিসি গঠনের সময়টি পড়ার মতোই সহজ, আসলে প্রক্রিয়াটি ফাংশন ডিসপ্লেটাইম () এর ভিতরে সুন্দরভাবে অনুসরণ করা যেতে পারে। আরটিসি থেকে ডেটা সঞ্চয় করার জন্য আপনাকে সাতটি বাইট ভেরিয়েবল সংজ্ঞায়িত করতে হবে, এবং সেগুলি readDS3231time () ফাংশনে ertedোকানো হবে। উদাহরণস্বরূপ যদি আপনার ভেরিয়েবলগুলি হয়:

বাইট সেকেন্ড, মিনিট, ঘন্টা, ডেঅফ উইক, ডেঅফমোনথ, মাস, ইয়ার;

… আপনি RTC থেকে বর্তমান ডেটা ব্যবহার করে তাদের রিফ্রেশ করবেন:

পড়ুন DS3232time (& সেকেন্ড, & মিনিট, & ঘন্টা, & dayOfWeek, & dayOfMonth, & month, & year);

তারপর আপনি ভেরিয়েবল ব্যবহার করতে পারেন যেমন আপনি উপযুক্ত দেখতে পারেন, সময় এবং তারিখ পাঠানো থেকে সিরিয়াল মনিটরে যেমন উদাহরণ স্কেচ করে - সমস্ত ধরণের আউটপুট ডিভাইসের জন্য ডেটাকে উপযুক্ত ফর্মে রূপান্তর করা।

সবকিছু কাজ করছে কিনা তা পরীক্ষা করার জন্য, প্রদর্শনের স্কেচে উপযুক্ত সময় এবং তারিখ লিখুন, এটি আপলোড করুন, setDS3231time () ফাংশনটি মন্তব্য করুন এবং এটি আবার আপলোড করুন। তারপর সিরিয়াল মনিটর খুলুন, এবং আপনাকে বর্তমান সময় এবং তারিখের চলমান প্রদর্শন প্রদান করা উচিত।

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

আপনি নির্মাতার ওয়েবসাইট-ডিএস 1307 এবং ডিএস 3231 থেকে নির্দিষ্ট রিয়েল-টাইম ঘড়ি আইসি সম্পর্কে আরও জানতে পারেন।

এই পোস্টটি আপনার জন্য নিয়ে এসেছে pmdway.com - নির্মাতারা এবং ইলেকট্রনিক্স উত্সাহীদের জন্য সবকিছু, বিশ্বব্যাপী বিনামূল্যে বিতরণ সহ।

প্রস্তাবিত: