৯. 8051 এর ক্ষেত্রে টাইমার পেরিফেরাল


টাইমার হল যেকোন মাইক্রোকন্ট্রোলারের সবচেয়ে গুরুত্বপূর্ণ একটি পেরিফেরাল। কোন একটি মাইক্রোকন্ট্রোলারের কাজ করার সুক্ষ্ণতা মূলত এই টাইমারের উপরই ডিপেন্ড করে। টাইমার ছাড়া পুরো এম্বেডেড সিস্টেমই এককথায় অচল। এই পোস্টে আমরা 8051 এর টাইমার সম্পর্কে এবং এর রিলেটেড সব রেজিস্টার এবং অপারেশন সম্পর্কে জানবো।

এর আগের পোস্টে অবশ্য আমরা জেনেছিলাম যে 8051 মাইক্রোকন্ট্রোলারের দুইটি ১৬-বিটের টাইমার/কাউন্টার রয়েছে। এদেরকে যথাক্রমে Timer/Counter0 এবং Timer/Counter1 বলা হয়। 8051 ফ্যামিলির কোন কোন মডেলে (AT89C52,AT89C55) অবশ্য তৃতীয় একটি টাইমার রয়েছে যেটাকে Timer/Counter2 বলা হয়। আচ্ছা টাইমারের সাথে সাথে আবার কাউন্টার কথাটা আমরা দেখতে পাচ্ছি। এটার মানে কি? এটার মানে একটু পরে আমরা বুঝতে পারবো। তার আগে আমাদের জানা দরকার যে টাইমার আসলে কিভাবে কাজ করে? মাইক্রোকন্ট্রোলারের প্রধান ক্লক পালসে্‌র সোর্স হল ক্রিস্টাল অসসিলেটর। ক্রিস্টাল অসসিলেটর থেকে যে ক্লক পালস্‌ আসে সেটাকে কাজে লাগিয়েই মূলত মাইক্রোকন্ট্রোলারের সব পেরিফেরালস্‌ কাজ করে। টাইমারও ঐ ক্লক পালস্‌কে কাজে লাগিয়েই সময় গণনা করে। 8051 এর টাইমারকে আপ-কাউন্টিং টাইমার বলা হয়। এর অর্থ হল এটি ১ ২ ৩ ৪ .........  এভাবে উপরের দিকের সংখ্যা গণনা করতে থাকে। এখন প্রশ্ন হল এভাবে কত পর্যন্ত গণনা করতে পারে 8051 এর টাইমার? উত্তর খুবই সোজা , ৬৫৫৩৫ পর্যন্ত গণনা করতে পারে। কীভাবে?? যেহেতু ১৬ বিটের টাইমার তাই ১৬ ^ ২ = ৬৫,৫৩৬। আর যেহেতু ০ থেকে গণনা শুরু করে সেহেতু ৬৫,৫৩৬ - ১ = ৬৫,৫৩৫ । এই যে ০ থেকে শুরু করে একধাপ করে উপরের দিকে গণনা করছে এবং ৬৫,৫৩৫ এ পৌছাচ্ছে এটা অবশ্যই একটা তালে তালে হচ্ছে মানে সিঙ্ক্রোনাইজড ভাবে হচ্ছে। এক মেশিন সাইকেলে একধাপ করে মান বৃদ্ধি পায়। মেশিন সাইকেল বা ইন্সট্রাকশন সাইকেল কি তা আমরা আগেই জেনেছি। ক্রিস্টাল অসসিলেটরের ১২ টি পালস্‌কে ১ মেশিন সাইকেল বলে। এই এক মেশিন সাইকেলে, টাইমারের মান একধাপ করে বৃদ্ধি পায়। তাহলে ১২ মেগাহার্টজের ক্রিস্টাল অসসিলেটর এর জন্যে এক মেশিন সাইকেলের সময় হল ১ মাইক্রোসেকেন্ড। অতএব টাইমারের

    ০ --> ১ যেতে লাগবে ১ মাইক্রোসেকেন্ড
    ১ --> ২ যেতে লাগবে ১ মাইক্রোসেকেন্ড
    ২ --> ৩ যেতে লাগবে ১ মাইক্রোসেকেন্ড
............................................................
............................................................
............................................................
............................................................
৬৫,৫৩৪ --> ৬৫,৫৩৫ যেতে লাগবে ১ মাইক্রোসেকেন্ড

তাহলে টোটাল ০ থেকে ৬৫,৫৩৫ পর্যন্ত গণনা করতে টাইমারের লাগবে ৬৫,৫৩৬ মাইক্রোসেকেন্ড ( যেহেতু ৬৫,৫৩৬ টা ধাপ)।
যেহেতু টাইমার ১৬ বিটের তাই ৬৫,৫৩৬ তো সে গণনা করতে পারবে না। এখন প্রশ্ন হল ৬৫,৫৩৫ পর্যন্ত গণনা করে এরপর কি হবে? টাইমার কি বার্স্ট হয়ে যাবে নাকি মাইক্রোকন্ট্রোলার কাজ করা থামিয়ে দিবে? এমন কিছুই হবেনা। টাইমারের মান সর্বোচ্চ হয়ে গেলে টাইমার আবার প্রথম থেকে অর্থাৎ ০ থেকে গণনা করা শুরু করবে। এটাকে বলা হয় টাইমার ওভার-ফ্লো হয়ে যাওয়া। আচ্ছা এই যে টাইমার সংখ্যা গণনা করছে, কোথায় এই সংখ্যা? টাইমার নিশ্চয় মনে মনে এই সংখ্যা গণনা করছে না। তার একটি রেজিস্টার আছে যেখানে সে সংখ্যার মান এক করে বৃদ্ধি করছে। যেহেতু সে ১৬বিটের সংখ্যা গণনা করছে, সেহেতু তার সেই রেজিস্টার হওয়া উচিৎ ১৬ বিটের। কিন্তু 8051 তো ৮ বিটের মাইক্রোকন্ট্রোলার, তাই তার ডিরেক্ট কোন ১৬ বিটের রেজিস্টার নাই। বরং ৮ বিটের দুটি রেজিস্টার মিলে ১৬ বিট করা আছে। টাইমার-০ এর ক্ষেত্রে এই রেজিস্টারগুলো হল TH0 এবং TL0, আর টাইমার-১ এর ক্ষেত্রে এই রেজিস্টারগুলো হল TH1 এবং TL1.




তাহলে এতক্ষনে আমরা এটুকু নিশ্চয় বুঝতে পেরেছি যে টাইমারের ১ টিক = ১ মেশিন সাইকেল। ১২ মেগাহার্টজের ক্রিস্টাল অসসিলেটরের জন্যে টাইমারের ১ টিক = ১ মাইক্রোসেকেন্ড। তারমানে ১ মাইক্রসেকেন্ডের চেয়ে কম সময় এক্ষেত্রে টাইমার গণনার করতে পারবে না। তাহলে আমাদের যদি এমন দরকার হয় যে, ১ মাইক্রোসেকেন্ডের চেয়েও সুক্ষ সময় গণনার দরকার হয় তখন কি করা যাবে? তখন আমাদের ক্রিস্টাল অসসিলেটর পরিবর্তন করতে হবে। যেমন ২৪ মেগাহার্টজের ক্রিস্টালের জন্যে টাইমারের ১ টিক = ০.৫ মাইক্রোসেকেন্ড হবে।

আচ্ছা এই গেলো আমাদের টাইমারের সংখ্যা গণনার হিসাব। এবং এইসব কিছুই কিন্তু মাইক্রোকন্ট্রোলারের ভিতর সংগঠিত হচ্ছে। আমরা শুধু প্রোগ্রাম করে এটুকু বলে দিতে পারি যে কোন সংখ্যা থেকে কোন সংখ্যা পর্যন্ত গণনা করতে হবে। কিন্তু যদি আমাদের এমন প্রয়োজন হয় যে বাইরের জগতের কোন ঘটনা গণনা করতে হবে। যেমন কোন একটি গেট দিয়ে কতজন মানুষ একটি রুমের ভিতরে ঢুকছে এটা গণনা করার প্রয়োজন হল। এইক্ষেত্রে এটা হল বাহ্যিক ঘটনা। এই বাহ্যিক ঘটনা গণনার জন্যে 8051 মাইক্রোকন্ট্রোলারের T0 (১৪ নম্বর পিন) এবং T1 (১৫ নম্বর পিন) নামে দুটি পিন আছে। এই পিন দুটি ডিরেক্ট কোন এক্সটার্নাল ইভেন্ট বা এক্সটার্নাল ঘটনা গণনা করতে পারে (সিগন্যাল রিডের মাধ্যমে)। এই পিনদ্বয় হাই স্টেট থেকে লো স্টেটে গেলে একটি ইভেন্ট ঘটেছে বলে গণনা করা হয় এবং রেজিস্টারের মান একধাপ বৃদ্ধি পায়। এইজন্যেই এই পোস্টে টাইমার এর সাথে সাথে কাউন্টারও বলা হয়েছে। যখন ইন্টার্নাল কোন সিগন্যাল গণনা করে তখন টাইমার আর যখন এক্সটার্নাল কোন ঘটনা গণনা করে তখন কাউন্টার। তবে কাউন্টারের ক্ষেত্রে হাই-টু-লো স্টেট ডিটেক্ট করতে দুই মেশিন সাইকেল লাগে। অর্থাৎ ১২ মেগাহার্টজ ক্রিস্টাল অসসিলেটর যুক্ত মাইক্রোকন্ট্রোলারের ক্ষেত্রে  একটি এক্সটার্নাল ঘটনা কাউন্ট করতে মিনিমাম সময় লাগবে ২ মাইক্রোসেকেন্ড অর্থাৎ টাইমারের ঠিক দ্বিগুণ।

এতক্ষনে আমরা 8051 এর টাইমারের কার্যক্রমের বেসিক সম্পর্কে জানতে পেরেছি। এবার 8051 এর টাইমারের প্রকারভেদ এবং টাইমার রিলেটেড বাকি রেজিস্টারগুলো সম্পর্কে জেনে নেয়া যাক ।

8051 মাইক্রোকন্ট্রোলারে টাইমার মূলত চারটি ভিন্ন ভিন্ন মোডে কাজ করতে পারে। যথা-
  1. ১৩ বিট টাইমার         (Mode - 0)
  2. ১৬ বিট টাইমার         (Mode - 1)
  3. অটো-রিলোড টাইমার  (Mode - 2)
  4. ৮ বিট টাইমার           (Mode - 3) 
 ধাপে ধাপে এই চারটি মোড সম্পর্কে আমরা জানব। তার আগে টাইমার রিলেটেড রেজিস্টার গুলো সম্পর্কে জেনে নেয়া যাক।
  • Timer Mode Selection Register (TMOD).
  • Timer Control Register (TCON).
উপরক্ত এই দুটি রেজিস্টারই টাইমার/কাউন্টার এর সাথে সরাসরি ভাবে সম্পর্কিত।

Timer Mode Selection Register (TMOD) ঃ



M0 এবং M1 এই দুটি বিটের কম্বিনেশনেই আমরা চারটি মোডের মধ্যে যেকোন একটি সিলেক্ট করতে পারি। টাইমার/কাউন্টার-০ এর জন্যে প্রথম ও দ্বিতীয় বিট এবং টাইমার/কাউন্টার-১ এর জন্যে পঞ্চম ও ষষ্ঠ বিট। 

C/T: এই বিটটি সেট করে দিলে কাউন্টার হিসেবে কাজ করবে এবং এই বিট ক্লিয়ার করে দিলে টাইমার হিসেবে কাজ করবে। বাই-ডিফল্ট এই বিটটি ক্লিয়ার -ই করা থাকে। টাইমার/কাউন্টার-০ এর জন্যে তৃতীয় বিট এবং টাইমার/কাউন্টার-১ এর জন্যে সপ্তম বিট।

GATE: এই বিটটি নিয়ে কথা বলার আগে আরেকটি জিনিস আমাদের জানতে হবে। সেটা হল টাইমার পেরিফেরাল্‌সটা দুইভাবে ব্যবহার করা যায়। ফ্রি-রানিং মোডে অর্থাৎ যেখানে মাইক্রোকন্ট্রোলারে পাওয়ার-আপ করার সাথে সাথে টাইমার তার কাজ শুরু করবে এবং আরেকটি হল INT0 ও INT1 পিনে সিগন্যাল প্রদানের মাধ্যমে অর্থাৎ এই পিনদ্বয়ে হাই-টু-লো সিগন্যাল দিলে টাইমার তার কাজ শুরু করবে। এই দুটি মোড সিলেক্ট করার জন্যে এই বিটটি ব্যবহৃত হয়। এই বিট সেট করে দিলে INT0 এবং INT1 পিনের মাধ্যমে টাইমার তার অপারেশন শুরু করে এবং ক্লিয়ার করে দিলে ফ্রি-রানিং মোডে কাজ শুরু করে। বাই-ডিফল্ট এই বিটটি লো -ই থাকে।


Timer Control Register (TCON)ঃ




IT0: INT0 (12 নম্বর) পিনে কি ধরনের সিগন্যাল ইন্টারাপ্ট ঘটাবে তা এই বিট নির্ধারন করে দেয়। যদি এই বিট হাই করে দেয়া হয় তাহলে falling-edge এ ইন্টারাপ্ট জেনারেট হবে এবং যদি এই বিট ক্লিয়ার করে দেয়া হয় তাহলে low-level সিগন্যালের জন্যে ইন্টারাপ্ট জেনারেট হবে।



IE0: এটা হল Interrupt-0 edge flag বিট। এটা সেট হয় যখন INT0 (12 নম্বর) পিনে হাই-টু-লো সিগন্যাল ডিটেক্ট হয়। INT0 রিলেটেড ইন্টারাপ্ট-সার্ভিস-রুটিন এক্সিকিউট হলে এই বিট ক্লিয়ার হয়ে যায় সিপিউ দ্বারা।

IT1: INT1 (13 নম্বর) পিনে কি ধরনের সিগন্যাল ইন্টারাপ্ট ঘটাবে তা এই বিট নির্ধারন করে দেয়। যদি এই বিট হাই করে দেয়া হয় তাহলে falling-edge এ ইন্টারাপ্ট জেনারেট হবে এবং যদি এই বিট ক্লিয়ার করে দেয়া হয় তাহলে low-level সিগন্যালের জন্যে ইন্টারাপ্ট জেনারেট হবে।

IE1: এটা হল Interrupt-1 edge flag বিট। এটা সেট হয় যখন INT1 (13 নম্বর) পিনে হাই-টু-লো সিগন্যাল ডিটেক্ট হয়। INT1 রিলেটেড ইন্টারাপ্ট-সার্ভিস-রুটিন এক্সিকিউট হলে এই বিট ক্লিয়ার হয়ে যায় সিপিউ দ্বারা।

TR0: এই বিটটি সেট করে দিলে টাইমার/কাউন্টার-০ পেরিফেরাল্‌সটি অন হয় আর ক্লিয়ার করে দিলে অফ হয়ে যায়। বাই-ডিফল্ট ক্লিয়ার করা থাকে।

TF0: টাইমার/কাউন্টার-০ ওভার-ফ্লো হয়ে গেলে এই বিটটি হাই হয়ে যায়। টাইমার/কাউন্টার-০ রিলেটেড ইন্টারাপ্ট-সার্ভিস-রুটিন এক্সিকিউট হলে প্রসেসর একে ক্লিয়ার করে দেয় নতুবা প্রোগ্রামের মাধ্যমে একে ক্লিয়ার করে দিতে হয়।

TR1: এই বিটটি সেট করে দিলে টাইমার/কাউন্টার-১ পেরিফেরাল্‌সটি অন হয় আর ক্লিয়ার করে দিলে অফ হয়ে যায়। বাই-ডিফল্ট ক্লিয়ার করা থাকে।

TF1: টাইমার/কাউন্টার-১ ওভার-ফ্লো হয়ে গেলে এই বিটটি হাই হয়ে যায়। টাইমার/কাউন্টার-১ রিলেটেড ইন্টারাপ্ট-সার্ভিস-রুটিন এক্সিকিউট হলে প্রসেসর একে ক্লিয়ার করে দেয় নতুবা প্রোগ্রামের মাধ্যমে একে ক্লিয়ার করে দিতে হয়।

এবারে টাইমার/কাউন্টার এর চারটি মোড সম্পর্কে সংক্ষিপ্ত আলোচনা করা যাক, প্রোগ্রামিং পার্টে যেয়ে আরও বিস্তারিত আলোচনা করা হবে।
  • মোড-০, ১৩-বিট টাইমার/কাউন্টারঃ  এই মোডে টাইমার ০ থেকে ২^৮ - ১ = ৮১৯১ পর্যন্ত গণনা করতে পারে। ৮১৯১ এর পর টাইমার ওভার-ফ্লো হয়ে যায় এবং ইন্টারাপ্ট জেনারেট করে। এক্ষেত্রে টাইমার TH রেজিস্টারের সব বিট এবং TL রেজিস্টারের লেস সিগনিফিক্যান্ট ৫ টি বিট ইউজ হয় গণনার জন্যে। মূলত কোন সিগন্যালের pulse width পরিমাপের জন্যে এই মোড ইউজ করা হয়। 
    



  • মোড-১, ১৬-বিট টাইমার/কাউন্টারঃ এই মোডে টাইমার/কাউন্টার ০ থেকে শুরু করে ২^১৬ -১ = ৬৫,৫৩৫ পর্যন্ত গণনা করতে পারে। ৬৫,৫৩৫ এর পর টাইমার ওভার-ফ্লো হয়ে যায় এবং ইন্টারাপ্ট ঘটায়। এই মোড সাধারণত Delay ফাংশন তৈরিতে, PWM জেনারেট করতে, সার্ভো মোটর চালাতে এবং টাইম রিলেটেড যেকোন কিছু করতে ব্যবহৃত হয়। এক্ষেত্রে টাইমারের TH রেজিস্টার এবং TL রেজিস্টার সম্পূর্ণটাই ব্যবহৃত হয়। 


  • মোড-২, অটো-রিলোড টাইমার/কাউন্টারঃ এটি হল ৮ বিটের টাইমার/কাউন্টার অপারেশন। এক্ষেত্রে TL রেজিস্টার গণনা করে এবং TH রেজিস্টার ডাটা ধরে রাখে। TH রেজিস্টার যে ডাটা ধরে রাখে সেটাই TL রেজিস্টারে ফিড করানো হয় এবং TL রেজিস্টার সেটা থেকেই শেষ স্টেপ অর্থাৎ ২^৮ - ১ = ২৫৫ পর্যন্ত গণনা করে। যেমন TH রেজিস্টারে ৮০ (হেক্সাডেসিমেলে 50H) লোড করে দিলে, TL রেজিস্টার ৮০ থেকে গণনা করা শুরু করবে এবং ২৫৫ পর্যন্ত গণনা করে ওভার-ফ্লো হয়ে যাবে। এই মোডটি সাধারণত সিরিয়াল কমিউনিকেশনের  বড রেট জেনারেট করতে ব্যবহৃত হয়।

 
  • মোড-৩, ৮-বিট টাইমার/কাউন্টারঃ  এই মোডে টাইমার-০ দুটি ৮ বিটের টাইমার হিসেবে কাজ করে। অর্থাৎ TH0 রেজিস্টার ৮ বিটের সংখ্যা গণনা করে এবং TL0 রেজিস্টার পৃথকভাবে ৮ বিটের সংখ্যা গণনা করে। এক্ষেত্রে TR1এবং TF1 বিটদ্বয় টাইমার-০ এর TH0 রেজিস্টারকে কন্ট্রোল করে এবং TR0 ও TF0 বিটদ্বয় টাইমার-০ এর TL0 রেজিস্টারকে কন্ট্রোল করে। এক্ষেত্রে টাইমার-১ নিরপেক্ষ থাকে যেমনটা অর্থাৎ অফ থাকে।


এই মোটামোটি ভাবে 8051 মাইক্রোকন্ট্রোলারের টাইমার/ কাউন্টারের বেসিক। বাকি হিসাব নিকাশ আমরা প্রোগ্রামিং পার্টে যেয়ে শিখতে পারবো।

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি