একটি ঘড়ি তৈরি করতে আপনার আরটিসি দরকার নেই: এটিএমগা চিপে আরটিসি নিজেই দায়িত্ব পালনের জন্য প্রয়োজনীয় সমস্ত হার্ডওয়্যার রয়েছে। এটি এখানে:
একটি 32768 হার্জ ওয়াচ স্ফটিক পান: হয় তা কিনুন বা একটি পুরানো ঘড়ি বিচ্ছিন্ন করুন। এই স্ফটিকগুলি, বিশেষত সময় রাখার জন্য ডিজাইন করা হয়েছে, একটি অত্যন্ত ছোট তাপমাত্রা প্রবাহ থাকে। আপনি যদি আরটিসি চিপ ব্যবহার করতে চান তবে তাদের মধ্যে একটিরও আপনার প্রয়োজন হবে।
8 মেগাহার্টজ আরসি অসিলেটর চালানোর জন্য আপনার এটিমেগার ফিউজগুলি কনফিগার করুন। এটি আপনার millis()
ফাংশনটিকে মারাত্মকভাবে ভুল করে তুলবে এবং এক্সটিএল 1 এবং এক্সটিএল 2 পিনগুলি মুক্ত করবে।
TOSC1 এবং TOSC2 পিনের সাথে ঘড়ির স্ফটিকটি সংযুক্ত করুন। এগুলি XTAL1 এবং XTAL2 (328P-তে 9 এবং 10) এর মতো একই পিন are বিভিন্ন নামগুলি বিভিন্ন ফাংশন বোঝাতে ব্যবহৃত হয়।
অ্যাসিক্রোনাস অপারেশন, সাধারণ গণনা মোড, প্রেসক্যালার 128 এ সেট করার জন্য টাইমার / কাউন্টার 2 কনফিগার করুন এবং টাইমার ওভারফ্লো বিঘ্ন সক্ষম করুন।
এখন আপনি প্রতি সেকেন্ডে একবারের খুব স্থিতিশীল হারে একটি TIMER2_OVF বাধা পেয়ে যাবেন। আইএসআর-এ আপনাকে কেবল এক সেকেন্ডের সাহায্যে ক্লক ডিসপ্লে এগিয়ে নিতে হবে। বিঘ্নগুলির মধ্যে, আপনি এমসিইউটিকে খুব গভীর ঘুমে রাখতে পারেন (পাওয়ার-সেভ স্লিপ মোড: টাইমার / কাউন্টার 2 ব্যতীত আর কিছুই চালায় না) এবং কয়েক বছর ধরে এএ কোষে চলতে পারে। প্রদর্শিত না হলে শক্তি ক্ষুধার্ত, স্পষ্টতই।
আমার 24 ঘন্টা এক হাতের প্রাচীরের ঘড়িটি তৈরি করতে আমি ঠিক এটি করেছি । এই লিঙ্কটি ফরাসি ভাষায় মূল ডকুমেন্টেশনের ইংরেজি অনুবাদকে নির্দেশ করে।
কোয়ার্টজ ক্যালিব্রেশন
আপনি যদি আপনার কোয়ার্টজকে ক্রমাঙ্কণ না করেন, তবে আপনি সপ্তাহে সাধারণত কয়েক সেকেন্ডের মধ্যে একটি উল্লেখযোগ্য প্রবাহের আশা করতে পারেন । ড্রিফট রেট এমসইউতে ক্রিস্টালকে সংযুক্ত করে এমন ট্রেসগুলির স্ট্রে ক্যাপাসিট্যান্সের উপর নির্ভর করে। নীতিগতভাবে, এটি কিছু অতিরিক্ত, সূক্ষ্মভাবে সুরক্ষিত ক্যাপাসিটেন্স যোগ করে মুছে ফেলা হতে পারে। এটি লক্ষণীয় যে আপনার আরটিসি-তে একই ড্রিফট সমস্যা হবে ।
আপনি যদি এই ধরণের নির্ভুলতায় সন্তুষ্ট হন তবে এটির সাথে বেঁচে থাকুন এবং খুশি হন। যাইহোক, যদি আপনি প্রবাহটি পরিমাপ করতে যত্নশীল হন তবে লক্ষ্য করবেন যে এটি খুব স্থিতিশীল। তারপরে আপনি সহজেই সফ্টওয়্যারটিতে এর জন্য ক্ষতিপূরণ দিতে পারবেন এবং প্রতি বছর কয়েক সেকেন্ডের নির্ভুলতা অর্জন করতে পারেন ।
বামন সংশোধন করার জন্য অ্যালগরিদম খুব সহজ। পরিমাপিত ড্রিফ্ট থেকে, আপনি বাধাগুলির মধ্যে সুনির্দিষ্ট বিলম্ব অনুমান করেন যা 10 9 ন্যানোসেকেন্ডের খুব কাছাকাছি হওয়া উচিত :
#define ONE_SECOND 1000000000 // in nanoseconds
#define ONE_INTERRUPT 999993482 // for example
ISR(TIMER2_OVF_vect)
{
static uint32_t unaccounted_time;
unaccounted_time += ONE_INTERRUPT;
while (unaccounted_time >= ONE_SECOND) {
advance_display_by_one_second();
unaccounted_time -= ONE_SECOND;
}
}
উপরের উদাহরণে, কোয়ার্টজ কিছুটা দ্রুত গতিযুক্ত, এবং সফ্টওয়্যারটি প্রতি কয়েকদিনে একটি টিক "অনুপস্থিত" দ্বারা ক্ষতিপূরণ দেয়। কোয়ার্টজ যদি খুব ধীর হয় তবে একই কোডটি প্রতি কয়েকদিনের পরিবর্তে একবার ডাবল-টিক লাগাত।
এই জাতীয় ক্রমাঙ্কনটি আরটিসির জন্যও করা যেতে পারে তবে এটি উল্লেখযোগ্যভাবে জটিল হবে কারণ আরটিসি একটি ভাঙ্গা-ডাউন আকারে সময়টি রিপোর্ট করে যা প্রাকৃতিকভাবে গাণিতিক ক্রিয়াকলাপগুলিতে leণ দেয় না।