Fuse bit AVR মাইক্রোকন্ট্রোলারের অভ্যন্তরীণ সেটিংস। মাইক্রোকন্ট্রোলার ভিত্তিক প্রোজেক্টগুলোতে অনেকেই AVR সিরিজের মাইক্রোকন্ট্রোলার ব্যবহার করে থাকেন। যেমন ATmega8, ATmega32 and ATtiny13 ইত্যাদি। এই কন্ট্রোলারগুলো বিভিন্ন ফিচারের হয়ে থাকে। অন্যদিকে এদের পিনের সংখ্যারও পরিবর্তন রয়েছে। যেমন, ৪০ পিন, ২৮ পিন, ২০ পিন, ৮ পিন, ৩২পিন, ৪৪ পিন, ৬৪ পিন ও ১০০ পিন ইত্যাদি। এদের মধ্যে রয়েছে DIP প্যাকেজ ও SMD প্যাকেজ।
পিনগুলোর মধ্যে VCC, GND, IO, ADC, Interrupt, Timer, PWM, UART পিন রয়েছে। একটি প্রোজেক্ট তৈরির ক্ষেত্রে কি কি ফিচার থাকবে, তার উপর নির্ভর করে একজন ব্যাক্তি মাইক্রোকন্ট্রোলার সিলেক্ট করেন। কন্ট্রোলারটি যে কোন পিনেরই হতে পারে। সাধারণত নতুনদের পছন্দের তালিকায় থাকে ২৮ পিনের ATmega8A এবং ৪০ পিনের ATmega32A মাইক্রোকন্ট্রোলার।
যখন একটি AVR Microcontroller কে প্রোগ্রাম আপলোড করা হয়, সাধারণত USBasp প্রোগ্রামার ব্যবহার করা হয়ে থাকে। USBasp ছাড়াও বিভিন্ন AVR Programmer রয়েছে। সদ্য নতুন মাইক্রোকন্ট্রোলারকে প্রোগাম আপলোডের পূর্বে ফিউজ বিট কনফিগার করে নিতে হয়, অন্যথা কাঙ্ক্ষিত আউটপুট পাওয়া যাবে না। এখন আসুন ফিউজ বিট সম্পর্কে জেনে নেই।
Fuse bit কি?
Fuse bit হলো মাইক্রোকন্ট্রোলারের অভ্যন্তরীণ সেটিংস বা কনফিগারেশন বিট। যার দ্বারা বুঝা যায়, একটি মাইক্রোকন্ট্রোলার কিভাবে কাজ করবে, ক্লক স্পিড কত হবে, সোর্স ক্লক কি হবে, কত ভোল্টেজে চলবে, ভিতরে বুটলোডার আছে কিনা এই সকল বিষয় নির্দেশ করে ফিউজ বিট।
- AVR এর কিছু ফিচার রয়েছে যা Fuse Byte এর bit পরিবর্তন করে ফিচারগুলো পাওয়া যায়।
- এই ফিচার অতিরিক্ত কোন প্রয়োজন বাদ দিয়ে সিস্টেমের খরচ কমিয়ে দিবে।
- ATmega32 মাইক্রোকন্ট্রোলারে দুইটি Fuse Byte রয়েছে।
- যদি ফিউজ বিটগুলি ভুল প্রোগ্রাম করা হয়, তাহলে মাইক্রোকন্ট্রোলার লক হওয়ার সম্ভাবনা রয়েছে।
- ফিউজ বিটের ক্ষেত্রে ‘0’ অর্থ প্রোগ্রাম করা হয়েছে। ‘1’ অর্থ Program করা হয়নি।
প্রকারভেদঃ
ATmega32 মাইক্রোকন্ট্রোলারে দুই ধরণের ফিউজ বাইট রয়েছে।
- High Fuse Byte
- Low Fuse Byte
এদের প্রতিটি ৮ বিট সম্পন্ন।
High Fuse Byte
Low Fuse Byte
উপরের বিটগুলো সফটওয়ারের মাধ্যমে Programed/ Unprogrammed করে নিতে হবে। এর ফলে High একটি byte এবং Low একটি byte পাওয়া যাবে।
ATmega32 মাইক্রোকন্ট্রোলারের ডিফল্ট ফিউজ বাইট Low = 0xE1, High = 0x99. যার ক্লক ফ্রিকুয়েন্সি 1 MHz. একটা মাইক্রোকন্ট্রোলার নতুন না পুরাতন তা আপনি এই ফিউজ বিট যাচাইয়ের মাধ্যমেই বুঝতে পারবেন। তবে ভিন্ন ভিন্ন মাইক্রোকন্ট্রোলারের ক্ষেত্রে এই ফিউজ বাইটও ভিন্ন ভিন্ন হয়ে থাকে।
Fuse bit কেনো পরিবর্তন করতে হবে?
মাইক্রোকন্ট্রোলার প্রস্তুতকারী কোম্পানিগুলো Default অবস্থায় মাইক্রোকন্ট্রোলারগুলোকে একটা সেটিং করে রাখেন। যা পরবর্তীতে ব্যবহারকারী নিজের প্রয়োজনমত পরিবর্তন করে নিতে পারেন। এর ফলে সঠিক আউটপুট পাওয়া যাবে।
যে সকল বিষয় লক্ষ্য রাখতে হবে।
- মাইক্রোকন্ট্রোলার ক্লক ফ্রিকুয়েন্সি কত মেগা হার্জ প্রয়োজন?
- ক্লক ফ্রিকুয়েন্সি কি হবে? ইন্টারনাল অথবা এক্সটারনাল?
- PORT C এর সবগুলো পিন কি ব্যবহার করবো?
কিভাবে করতে হবে?
- ক্লক ফ্রিকুয়েন্সি 8 MHz প্রয়োজন হলে, L Fuse হবে 0xE4. এবং H fuse হবে 0xD9. এই ক্ষেত্রে অতিরিক্ত কোন ক্রিস্টাল অসিলেটর প্রয়োজন নেই। অভ্যন্তরীণ সেটিং করেই 8 MHz ফ্রিকুয়েন্সি পাওয়া যাবে।
- ক্লক ফ্রিকুয়েন্সি 16 MHz প্রয়োজন হলে, L Fuse হবে 0xFF. এবং H fuse হবে 0xD9. এই অবস্থায় অবশ্যই মাইক্রোকন্ট্রোলারের XTAL1 এবং XTAL2 পিনের সাথে একটি ক্রিস্টাল অসিলেটর ব্যবহার করতে হবে। যদি ভুল ক্রমে সঠিক ক্রিস্টাল অসিলেটর কানেক্ট করতে ব্যর্থ হন, তাহলে মাইক্রোকন্ট্রোলার কোন প্রকার রেসপন্স করবে না। এবং পূর্বের অবস্থায় ফিরেও যাওয়া যাবে না, যতক্ষণ পর্যন্ত সঠিক ক্রিস্টাল অসিলেটর স্থাপন করা না হয়।
- PORT C এর ৪টি বিট এক্সেস করা যাবে না, যদি JTAGEN bit Enable করা থাকে। সাধারনত JTAGEN প্রয়োজন না হলে, এই bit কে Disable করে রাখবো।
- JTAGEN Enable অবস্থায় High Fuse হবে 0x99
- JTAGEN Disable অবস্থায় High Fuse হবে 0xD9
Fuse bit Settings
Fuse bit Settings করার জন্য এই পেজটি অনুসরণ করা যেতে পারে।
AVR part name থেকে মাইক্রোকন্ট্রোলার ATmega32 সিলেক্ট করে নিতে হবে। এরপর Feature configuration লক্ষ্য করলে দেখা যাবে Check/Uncheck অবস্থায় কিছু লাইন রয়েছে।
এরপর Manual fuse bits configuration এ Low Fuse এবং High fuse আলাদা আলাদা ভাবে bit configuration এর ব্যবস্থা রয়েছে। এখান থেকে bit ধরে ধরে চেক / আনচেক করা যাবে। সাবধানতার সহিত এই কাজগুলো করতে হবে। তারপর Current settings এ বর্তমানে সিলেক্টকৃত ATmega32 মাইক্রোকন্ট্রোলারের Default ফিউজ বিট দেখা যাবে।
Current settings
ATmega32 কে 8 MHh এ কনফিগার করার জন্য – ২টা পরিবর্তন করতে হবে। ক্লক ফ্রিকুয়েন্সি এবং JTAGEN bit.
Int RC Osc. 8 MHz সিলেক্ট করতে হবে।
JTAGEN bit কে Uncheck বা Disable করতে হবে। এর যে ফিউজ বিট জেনারেট হবে, সেটিই ATmega32 মাইক্রোকন্ট্রোলারে Write করতে হবে।
8 MHz এর জন্য কাঙ্ক্ষিত Fuse bit
Fuse bit রাইট করার জন্য ব্যবহার করতে হবে AVRDUDES সফটওয়্যার। সাবধানে দেখে দেখে L = 0xE4, H = 0xD9 লিখে Write ক্লিক করতে হবে।
একই নিয়মে 16 MHz এর জন্য ফিউজ বিট বের করে নিয়ে Write করতে হবে। এই সেটিং এ শুধু Frequency পরিবর্তন করলেই হবে।
এর ফলে ফিউজ বিট আসবে L = 0xFF, H = 0xD9. Simulation যখন করা হয়, তখন এই ফিউজ বিট সেটিং প্রয়োজন হবে না। কিন্তু বাস্তবে এর সঠিক ব্যবহার নিশ্চিত না করলে অনেক পেরিফেরালই কাজ করবে না।
সঠিক Fuse bit ব্যবহারের সুবিধাঃ
- অধিক ক্লক ফ্রিকুয়েন্সি পাওয়া যাবে।
- আইও (IO) পোর্টের সকল পিনের ব্যবহার করা যাবে।
- ইন্টারনাল/এক্সটারনাল অসিলেটরের ব্যবহার।
- মাইক্রোকন্ট্রোলার লক হওয়া থেকে রক্ষা পাবে।
সাবধানতাঃ
- কোন ভাবেই SPIEN bit কে Disable করা যাবেনা। যদি SPIEN bit কে Disable করা হয়, তাহলে মাইক্রোকন্ট্রোলারে প্রোগ্রাম আপলোড করা যাবে না।১১
- External ক্রিস্টাল অসিলেটর 16 MHz এর জন্য ফিউজ বিট সেট করার পূর্বে, একটি সঠিক ক্রিস্টাল অসিলেটর অবশ্যই সংরক্ষণ করতে হবে।
- 16 MHz এর জন্য ফিউজ বিট রাইট করার পর, পুনরায় পরিবর্তন করতে হলে অবশ্যই XTAL1 এবং XTAL2 পিনের সাথে 16 MHz ক্রিস্টাল অসিলেটর কানেক্ট থাকতে হবে।
- সঠিক bit কনফিগার না করে মাইক্রোকন্ট্রোলারে কোন ভ্যালু রাইট করা থেকে বিরত থাকি।