অনেক দিন পর টেকটিউনসে লিখতে বসলাম।লিখবো লিখবো করে লেখা হয় না। যারা কষ্ট করে আমার লেখা পড়ছেন এবং আরও কষ্ট করে কমেন্ট করেছেন তাদেরকে অসংখ্য ধন্যবাদ।
রাকীব ভাইকে ধন্যবাদ Proteus এর mediafire এর লিঙ্ক দেয়ার জন্য। নিচে থেকে Proteus ডাউনলোড করুন।
আমার আজকের লেখাও প্রোগ্রামার নিয়ে। আজকে আমি আপনাদের দেখাব কিভাবে PIC Micro controller এর জন্য একটি ফাটাফাটি USB Programmer বানাবেন।
আমি এর আগে কোনও এক টিউনে আপনাদের বলেছিলাম যে PIC Micro controller এর নির্মাতা প্রতিষ্ঠান Microchip তাদের controller এর প্রচার এবং ব্যবহার বাড়ানোর জন্য নিজেই একটি USB Programmer এর ডিজাইন, প্রয়োজনীয় Software, Firmware বিনামূল্যে তাদের ওয়েবসাইটে দিয়ে রেখেছে। আপনাকে শুধু বানিয়ে নিতে হবে। আপনি চাইলে রেডিমেডও কিনতে পারেন। প্রোগ্রামারটিকে নাম দেয়া হয়েছে PICkit. এর বর্তমান ভার্সন চলছে PICkit3, তবে PICkit2 সব চেয়ে জনপ্রিয় ভার্সন। আমাদের প্রোগ্রামারটি হবে PICkit2
এবার জেনে নেয়া যাক PICkit2 এর ফিচারগুলো কি কি।
এবার সার্কিট ডায়াগ্রাম দেখে নেয়া যাক।
সার্কিটটি যতটুকু সম্ভব পরিস্কার করে আঁকার চেষ্টা করা হয়েছে। একটু খেয়াল করে দেখুন আমি কিছু কিছু কানেকশন না একে টার্মিনাল এর মাধ্যমে যুক্ত করেছি। যেমন ধরুন IC2A এর ইনপুটে R18 এর একপ্রান্তে VDD_ADJ টার্মিনাল যুক্ত করা হয়েছে। আবার IC1 এর ১৩ নাম্বার পিনের সাথে VDD_ADJ টার্মিনাল যুক্ত করা আছে। এর মানে R18 এর একপ্রান্ত IC1 এর ১৩ নাম্বার পিনের সাথে যুক্ত করতে হবে। আমি যদি টার্মিনাল না একে তার দিয়ে পুরো ডায়াগ্রাম আঁকতাম তাহলে সম্পূর্ণ ডায়াগ্রামটা মাকড়সার জালের মত হয়ে যেত।
সার্কিটটি কিভাবে কাজ করতেছে তা বোঝার জন্য আমরা একে বিভিন্ন অংশে ভাগ করে নিব।
প্রয়োজনীয় পিসিবি লেআউট, সার্কিট ডায়াগ্রাম, পার্টস লিস্ট নিচের লিঙ্ক থেকে ডাউনলোড করে নিন।
PICkit2 এর সফটওয়ার নিচের লিঙ্ক থেকে ডাউনলোড করে নিন।
অথবা
আমার লেখার সাথে সাথে সার্কিটের অপারেশন ভালো ভাবে বুঝতে এবং পরবর্তীতে Trouble Shoot করতে আপনারা সার্কিট ডায়াগ্রামটি প্রিন্ট করে নিতে পারেন। এতে বুঝতে সুবিধা হবে।
প্রথমেই আসি পাওয়ার সাপ্লাই নিয়ে, সম্পূর্ণ সার্কিটটি পাওয়ার পাচ্ছে কম্পিউটার এর USB থেকে। উপরের ডায়াগ্রামে খেয়াল করে দেখুন, USB কানেক্টর এর VCC পিনটি +5V টারমিনালের সাথে এবং এর GND পিনটি সার্কিটের গ্রাউন্ডের সাথে যুক্ত করা আছে। এই +5V টারমিনালটি সম্পূর্ন সার্কিটকে পাওয়ার সাপ্লাই দিবে।
আমরা জানি যে, PIC micro controller গুলোর কোন কোনটা 3.3V এ আবার কোন কোনটা 5V এ কাজ করে। তাই micro controller এর মডেল অনুসারে প্রোগ্রামারকে সাপ্লাই হিসেবে ICSP এর VDD পিনে ভিন্ন ভিন্ন ভোল্টেজ প্রয়োগ করতে হয়। এর জন্য প্রোগ্রামারটিতে একটা ভোল্টেজ রেগুলেটর দেয়া আছে। আপনি 2.5V থেকে 5V পর্যন্ত ভোল্টেজ রেগুলেট করতে পারবেন। বোঝার সুবিধার্থে শুধু ভোল্টেজ রেগুলেটরকে আলাদা করে ফেলা যাক। নিচের ছবিতে দেখুন।
VDD_ADJ টারমিনালের মাধ্যমে R18 Resistor টির একপ্রান্ত pic18f2550 micro controller টির ccp1 পিনের সাথে যুক্ত করা আছে। মাইক্রোকন্ট্রোলার এর CCP1 এবং CCP2 দুইটি হচ্ছে PWM পিন। আর PWM এর মাধ্যমে আপনি Frequency ঠিক রেখে pulse এর width পরিবর্তন করে গড় ভোল্টেজ পরিবর্তন করতে পারবেন। এভাবেই pic18f2550 মাইক্রোকন্ট্রোলার IC2A Operational amplifier(সংক্ষেপে OPAMP) এর inverting input(২ নাম্বার পিন) এ PWM ব্যবহার করে একটি গড় ডিসি ভোল্টেজ Reference হিসেবে দিয়ে রাখে। এই ক্ষেত্রে R18 এবং C6 ব্যবহার করা হয়েছে PWM কে ফিল্টার করে ripple দূর করার জন্য। OPAMP সবসময় চেষ্টা করবে তার Output ভোল্টেজ পরিবর্তনের মাধ্যমে inverting input(২ নাম্বার পিন) এবং non-inverting input(৩ নাম্বার পিন) এর ভোল্টেজ সমান করতে। কি হারে পরিবর্তন করবে তা নির্ভর করছে তার ফীডব্যক অর্থাৎ গেইন এর উপর। ২ নাম্বার পিনে রেফারেন্স ভোল্টেজ দেয়ার ফলে OPAMP তার আউটপুটে ভোল্টেজ কমিয়ে দিবে এবং PNP Transistor Q2 কে linear মোডে অন করবে। Q2 অন হলে ভোল্টেজ R21এবং R22 এর মাধ্যমে ডিভাইড হয়ে non-inverting input এ ফীডব্যক হিসেবে যাবে। এভাবে OPAMP আউটপুট ভোল্টেজকে রেগুলেট করবে।
Q3 Transistor টি VDD_TGT_P টারমিনালের মাধ্যমে মাইক্রোকন্ট্রোলার এর ২৫ নাম্বার পিনের সাথে যুক্ত। এর মাধ্যমে মাইক্রোকন্ট্রোলার ICSP এর দুই নাম্বার পিন VDD তে ভোল্টেজ অন বা অফ করবে। পরিপূর্ণ সার্কিট ডায়াগ্রাম খেয়াল করে দেখুন Q3 Transistor টির কালেক্টর V_TGT টারমিনালের মাধ্যমে ICSP এর দুই নাম্বার পিনের সাথে যুক্ত। এখন প্রশ্ন হল মাইক্রোকন্ট্রোলার বুঝবে কিভাবে ICSP এর VDD পিনে Voltage কত আছে এবং VDD_ADJ টারমিনালে PWM এর Pulse এর Width কমাতে হবে না বাড়াতে হবে । এর জন্য তো ফীডব্যক প্রয়োজন তাইনা!! ICSP এর দুই নাম্বার পিনটি আবার R34 Resistor হয়ে VDD_TGT_FB টারমিনালের মাধ্যমে মাইক্রোকন্ট্রোলার এর ৩নাম্বার পিন Analog Input পিনের সাথে যুক্ত। এছাড়া কোন কারনে ICSP এর VDD পিন গ্রাউন্ডের সাথে সর্টসার্কিট হলে মাইক্রোকন্ট্রোলার Q3 Transistor অফ করে দিবে এবং প্রোগ্রামারটিকে নষ্ট হওয়ার থেকে বাঁচাবে।
এবার আসুন VPP নিয়ে আলোচনা করা যাক। আমরা জানি যে, কোন কোন ক্ষেত্রে প্রোগ্রামিং মোডে ঢোকার জন্য মাইক্রোকন্ট্রোলার এর VPP পিনে ১২ ভোল্টের কাছাকাছি ভোল্টেজ প্রয়োগ করতে হয়। কিন্তু আমাদের USB programmer এর সাপ্লাই ভোল্টেজ হচ্ছে ৫ ভোল্ট তাহলে ১২ ভোল্ট কিভাবে আসবে। সার্কিটে খেয়াল করে দেখুন Voltage Regulator এর আউটপুটে একটি খুবই সিম্পল Boost Converter ব্যবহার করা আছে। একে আমরা DC to DC converter ও বলতে পারি। শুধু এই অংশকে আলাদা করে নিচে দেখানো হল।
উপরের সম্পূর্ণ সার্কিটটিই কিন্তু DC to DC converter না। বাম পাশ থেকে শুরু করে C11 ক্যপাসিটর পর্যন্ত আমাদের কাঙ্খিত অংশ। বাকিটুকু শুধু সুইচিং করতেছে।
L1 এর একপ্রান্ত Voltage regulator এর আউটপুটের সাথে যুক্ত, বোঝার জন্য আমি V_TGT টার্মিনাল ব্যবহার করেছি। V_TGT টার্মিনাল হচ্ছে Voltage regulator এর আউটপুট। T1 transistor এর বেইজ R17 resistor হয়ে VPP_PUMP টারমিনালের মাধ্যমে মাইক্রোকন্ট্রোলার এর CCP2 পিনের সাথে যুক্ত। CCP2 মাইক্রোকন্ট্রোলার এর দ্বিতীয় PWM আউটপুট পিন।
এখন আমরা একটু চিন্তা করে দেখি T1 transistor কে অন এবং অফ করলে কি ঘটনা ঘটে। T1 transistor অন হলে Voltage regulator থেকে আসা কারেন্ট L1 Inductor হয়ে T1দিয়ে গ্রাউন্ডের দিকে ফ্লো করবে। সহজ কথা L1 Inductor এর ভিতর দিয়ে কারেন্ট ফ্লো করবে। আমরা জানি যে কোন Inductor এর ভিতর দিয়ে কারেন্ট প্রবাহিত করলে এটি Magnetic flux তৈরি করবে। এই Magnetic flux ই Inductor এর ভিতর এনার্জী সঞ্চয় করে রাখে। এখন T1 transistor অফ করলে T1 এর ভিতর দিয়ে আর আগের কারেন্ট ফ্লো করবেনা। কিন্তু আমরা জানি Inductor সব সময় কারেন্টের পরিবর্তনকে বাধা দেয়। Inductor চেষ্টা করবে তার আগের কারেন্ট ধরে রাখতে। T1 transistor অন থাকার সময় Inductor এর সামনের অংশের impedance ছিল প্রায় জিরো। কারন T1 transistor, Inductor এর একপ্রান্তকে গ্রাউন্ডের সাথে প্রায় সর্টসারকিট করে দিয়েছিল। কিন্তু T1 transistor অফ হওয়ার সাথে সাথে সার্কিটের বাকি অংশ Inductor এর সাথে যুক্ত হয় এবং সার্কিটের impedance বৃদ্ধি করে দেয়। এবার Inductor চেষ্টা করবে বাড়তি impedance এর ভিতর দিয়ে আগের কারেন্ট ফ্লো করতে। ওহমের সুত্র অনুসারে বাড়তি impedance কারেন্টকে কমানোর চেষ্টা করবে অথবা ভোল্টেজকে বাড়িয়ে দিবে। যেহেতু Inductor কারেন্ট কমাতে রাজি না তাই ভোল্টেজটাই বাড়বে। এই ভোল্টেজ T2 এর বেইজ এবং কালেক্টরে p-n জংশন থাকায় forward biased হয়ে capacitor কে চার্জ করবে। T1 অন থাকা অবস্থায় capacitor ডিসচার্জ হতে পারেনা কারন T2 এর বেইজ এবং কালেক্টরে p-n জংশন থাকায় reversed biased হয়ে capacitor কে ডিসচার্জ হতে দেয় না। এখন খুব দ্রুত T1কে অন অফ করতে থাকলে আপনি capacitor এর দুই প্রান্তে input এর চেয়ে বেশি Steady আউটপুট ভোল্টেজ পাবেন। কি পরিমান আউটপুট ভোল্টেজ পাবেন তা নির্ভর করছে T1 এর অন অফ টাইম এর উপর। মাইক্রোকন্ট্রোলার PWM এর মাধ্যমে এই কাজটাই করে। এবারো তাকে ফীডব্যাক নিতে হবে PWM এর Duty time ঠিক করার জন্য। সার্কিটে R10 এবং R11 দিয়ে ভোল্টেজ ডিভাইডার তৈরি করে VPP_FB টারমিনালের মাধ্যমে মাইক্রোকন্ট্রোলার এর ২নাম্বার পিন Analog Input পিনের সাথে যুক্ত করে ফীডব্যাক দেয়া আছে। এখানে ভোল্টেজ ডিভাইডার দেয়া হয়েছে কারন এখানকার ভোল্টেজ প্রায় ১২ভোল্ট আর মাইক্রোকন্ট্রোলার ৫ভোল্টের বেশি মাপতে পারেনা। তাই ভোল্টেজ ডিভাইডার দিয়ে ভোল্টেজ কমিয়ে নেয়া হয়েছে।
সুইচিং এর কারনে Inductorএ কেন ভোল্টেজ হাই হচ্ছে তা হয়তো ফ্লাক্সের চেইঞ্জ দিয়েও ব্যখ্যা করা যেত কিন্তু সেদিকে আর যাচ্ছি না।
T2 এর জায়গায় Diode ব্যবহার করা যাবে। তবে অবশ্যই Schottky diode ব্যবহার করতে হবে। 1N5817, Bat45 এগুলো Schottky diode এর মডেল নাম্বার। Schottky diode সব জায়গায় পাওয়া যায়না বলে T2 transistor ব্যবহার করা হয়েছে। সব জায়গায় সাধারণত T2 এর জায়গায় Diode ই ব্যবহার করা হয়ে থাকে।
Boost Converter সম্পর্কে জানতে নিচের লিঙ্ক থেকে ঘুরে আসুন।
http://en.wikipedia.org/wiki/Boost_converter
মাইক্রোকন্ট্রোলার VPP_ON টারমিনালের মাধ্যমে T5 Transistor কে অন করছে ফলে Q4 transistor ও অন হয়ে যাচ্ছে। আর Q4 অন হওয়া মানে VPP ভোল্টেজ ICSP এর ১নাম্বার পিনে পৌঁছে যাওয়া।
MCLR বা Vpp পিনকে গ্রাউন্ডেড করতে মাইক্রোকন্ট্রোলার MCLR_TGT টারমিনালের মাধ্যমে T4 Transistor কে অন করে থাকে।
ICSP FOR SELF কানেক্টরটি প্রোগ্রামারে অবস্থিত pic18f2550 micro controller কে অন্যকোন প্রোগ্রামার এর ICSP কানেক্টর দিয়ে প্রোগ্রাম করার জন্য। এছাড়া কম্পিঊটার ছাড়া প্রোগ্রাম করার ফাংশন Programmer to Go ব্যবহার না করতে চাইলে IC3 এবং IC4 EEPROM দুইটা না ব্যবহার করলেও কোন সমস্যা নাই। আমি ICSP FOR SELF এবং EEPROM দুইটা ব্যবহার করিনি।
কিভাবে পিসিবিতে প্রোগ্রামারটি বানাবেন সেটা আমি আর লিখছি না। আমার আগের টিউনে পিসিবি বিষয়েআমি বিস্তারিত লিখেছি।
আগের টিউনটি দেখতে এখানে ক্লিক করুন।
তারপরও পিসিবি লেআউট এবং বানানোর সময়কার কিছু ছবি নিচে থেকে দেখে নেয়া যাক।
উপরের চিত্রে দেখতে পাচ্ছেন PICkit2 এর পিসিবি লেয়াউট।
উপরের চিত্রের মাধ্যমে কোন পার্টস পিসিবিতে কোথায় এবং কিভাবে বসাবেন তা দেখানো হয়েছে। লাল রঙের মাধ্যমে wire link(short link or jumper) গুলো কোথায় কোথায় যুক্ত করতে হবে তা দেখানো হয়েছে।
pic18f2550 মাইক্রোকন্ট্রোলারটি বোর্ডে বসানোর আগে এটিকে প্রোগ্রাম করে নিতে হবে। প্রোগ্রাম ফাইল Firmware folderএ দেয়া আছে। মাইক্রোকন্ট্রোলারটি প্রোগ্রাম করতে আপনাকে আরেকটি প্রোগ্রামারের সাহায্য নিতে হবেই। এইক্ষেত্রে ডিম আগে না মুরগী আগের ব্যপারটা রয়েই যাচ্ছে। তবে একবার প্রোগ্রাম করতে পারলে মাইক্রোকন্ট্রোলারটি Boot loader এর মাধ্যমে নিজেই নিজেকে প্রোগ্রাম করতে পারবে।
এবার আপনার প্রোগ্রামারটি ঠিক মত বানানো হয়েছে কিনা তা টেস্ট করার পালা। আপনার প্রোগ্রামারটি কম্পিউটারের USB এর সাথে যুক্ত করার আগে একটু চেক করে দেখুন সোল্ডারিং করার সময় প্রোগ্রামারের USB connector এর পিনগুলো একটা আরেকটার সাথে সর্ট হয়ে গেল কিনা। আপনি নিশ্চয়ই চাইবেন না আপনার কম্পিউটারের কোন ক্ষতি হোক। কম্পিউটারের সাথে প্রোগ্রামারটি USB cable দিয়ে কানেক্ট করুন। এখন PICkit2 সফটওয়ারটি ইন্সটল করে তা রান করুন। Windows 7 এ Administrator রান করানোটাই ভালো হবে।
সব ঠিক থাকলে নিচের মত উইন্ডো চালু হবে
এখন Tools> troubleshoot... এ ক্লিক করলে নিচের মত Window চালু হবে।
Next চাপুন
এবার ICSP এর VDD পিনে যত ভোল্টেজ চান তত রেখে Test বাটনে ক্লিক করুন। একটি ভালো মাল্টিমিটার দিয়ে VDD এবং GND এর মাঝে ভোল্টেজ মেপে দেখতে পারেন ঠিক আছে কিনা। যদি ঠিক থাকে তাহলে নিচের window এর মত আসবে।
VDD টেস্ট কমপ্লিট এবার VPP টেস্ট করার পালা। Next চাপুন। PICkit2 আপনাকে একটা warning দিবে VDD adjust করে নেয়ার জন্য। অর্থাৎ কত VDD রাখা অবস্থায় আপনি VPP টেস্ট করবেন তা নিশ্চিত হতে বলছে। বিভিন্ন VDD তে আপনি VPP টেস্ট করে দেখতে পারেন। প্রতিবারই VPP তে ১২ভোল্ট আসার কথা। 16f family এর সবগুলোই প্রায় ১২ভোল্টের VPP.
next চাপুন।
যাদের Oscilloscope আছে তারা PGD এবং PGC পিনে ডাটা এবং ক্লক সিগনাল ঠিকমত আছে কিনা দেখে নিতে পারেন। Toggle 30kHz বাটন দুইটা চাপতে হবে।
ব্যস এবার প্রোগ্রাম করার পালা। ICSP কানেক্টর দিয়ে আপনার মাইক্রোকন্ট্রোলারটিকে প্রোগ্রামারের সাথে যুক্ত করুন। ICSPএর কোনটা কোন পিন তা নিচে থেকে দেখে নিন।
এবার যে মাইক্রোকন্ট্রোলারকে প্রোগ্রাম করবেন তার কোন কোন পিনে ICSP এর কোন কোন পিন যুক্ত করবেন তা নিচে দেখুন।
বুঝতেই পারতেছেন ICSP এর VPP/MCLR , VDD, GND, PGD, PGC পিনের সাথে যথাক্রমে কাঙ্খিত মাইক্রোকন্ট্রোলারের VPP/MCLR , VDD, GND, PGD, PGC পিনের সংযোগ করতে হবে।
যারা ZIF Socket ব্যবহার করতে চান তারা নিচের ডায়াগ্রাম অনুসারে কানেকশন দিবেন।
এই সার্কিট ডায়াগ্রামের পিসিবি লেয়াউটের ছবি নিচে দেখুন।
ICSP এবং ZIF Socket এর পিসিবি লেয়াউটের pdf ফাইল নিচে থেকে ডাউনলোড করে নিন।
ZIF Socket এ কত পিনের কন্ট্রোলার কোথায় কিভাবে বসাবেন তা আমার ৫ নাম্বার টিউটোরিয়ালে বিস্তারিত বলা আছে। এই ZIF Socket এর কানেকশন এবং ওই টিউটোরিয়ালে ব্যবহৃত ZIF Socket এর কানেকশন একই রকম।
মাইক্রোকন্ট্রোলার কানেক্ট থাকা অবস্থায় PICkit2 চালু করলে মাইক্রোকন্ট্রোলারটিকে PICkit2 Auto detect করবে। ডিটেক্ট করলে File থেকে Import File সিলেক্ট করুন। দেখিয়ে দিন আপনার প্রোগ্রাম করা HEX file.
এবার Programmer থেকে Write Device এ ক্লিক করুন। সব ঠিক থাকলে মাইক্রোকন্ট্রোলারটি প্রোগ্রাম হয়ে যাবে।
Configuration bit পরিবর্তন করতে চাইলে Configuration এ ক্লিক করে তা করতে পারেন। আপনার Configuration word যদি হয় 2ff2 তাহলে 2ff2 কে Binary তে অর্থাৎ 10111111110010 তে কনভার্ট করে পরিবর্তন করতে পারেন, কেননা PICkit2 এ Configuration word পরিবর্তনের window তে হিসাব Binary তে দেয়া আছে।
আজকে এই পর্যন্তই থাকল। আশা করি আপনারা সফলতার সাথে প্রোগ্রামারটি বানাবেন। আগামীতে আবার লিখবো। আমার লেখায় ভুল থাকতে পারে। সার্কিট ব্যখ্যায় ভুল হতেও পারে সেক্ষেত্রে আলোচনার মাধ্যমে শুধরে নেয়া যাবে। পরবর্তী টিউটোরিয়ালে LCD এবং Analog Input/Output নিয়ে লেখার ইচ্ছা আছে।
সবাইকে ধন্যবাদ।
আমি Faisal। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 15 বছর যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 7 টি টিউন ও 110 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
ফয়সাল ভাই, অনেকদিন পরে পেলাম আপনাকে। আমি যতটুকু জানি এই ধরনের প্রোগ্রামার নবাবপুর মার্কেটে কিনতে পাওয়া যায়। আর এর খরচ বা দাম সম্পর্কে একটু আইডিয়া দিলে ভালো হত। দেরি করে হলেও টিউন চালিয়ে যাবেন আশা করি। খুব ভালো টিউন হইছে। প্রিয়তে রাখলাম।