PIC Micro Controller টিউটোরিয়াল [পর্ব-০৪]

আজকে আমরা Micro controller এর ইনপুট এবং Proteus  নিয়ে আলোচনা করবো। আজকে প্রোগ্রামার নিয়ে লিখার কথা ছিল কিন্তু অফিস এবং নিজের দৈনন্দিন কাজে প্রচণ্ড বাস্ততার মাঝে সময় করে উঠতে পারি নাই। আগামী পর্বে শুধু  প্রোগ্রামার নিয়ে লিখব। আশা করি দেখাতে পারব কিভাবে বাসায় বসে PCB বানাবেন।

আমরা জানি যে, Micro controller এর যে কোন  port এর কোন্ কোন্  পিন input অথবা output হিসেবে কাজ করবে তা TRIS Register ঠিক করে দেয়। তাই আমরা প্রথমেই যেই যেই পিনকে ইনপুট হিসেবে ব্যবহার করা দরকার তাদেরকে TRIS Register এর মাধ্যমে Configure করে নিবো। এর পর আমরা চেক করবো পিনটি High(Set) আছে না low(Clear) আছে অর্থাৎ পিনটিতে  5V আছে না 0V আছে। কোন bit এর status চেক করার জন্য আমরা BTFSC এবং  BTFSS এই Command দুইটা  ব্যবহার করতে পারি।  BTFSC এর মানে হল  Micro controller কোন বিট টেস্ট করে যদি clear পায় তবে সে next instruction skip করবে। BTFSC কে আমরা বলতে পারি, Bit Test that Follows, Skip if Clear. Bolded অক্ষরগুলোকে আলাদা করে লিখলে দাঁড়াচ্ছে BTFSC. একই ভাবে BTFSS কে আমরা বলতে পারি, Bit Test that Follows, Skip if Set অর্থাৎ Micro controller কোন বিট টেস্ট করে যদি Set পায় তবে সে next instruction skip করবে। চলুন একটা প্রোগ্রাম লিখে ফেলি যার মাধ্যমে কোন একটা  switch ON করলে LED ON হবে এবং  switch OFF করলে LED OFF হবে।

আমরা PortA এর RA0 পিনটিকে ইনপুট এবং PortA এর RA2 পিনটিকে OUTPUT হিসাবে ব্যবহার করবো।

CODE লিখে ফেলা যাক।

প্রথমে INPUT/OUTPUT configure করে নেয়া যাক,

BANKSEL    TRISA

MOVLW        B'00001'

MOVWF        TRISA

BANKSEL     PORTA

উপরের CODE গুলো খেয়াল করুন BANK SELECTION এর জন্য আমি BANKSEL নতুন একটি INSTRUCTION ব্যাবহার করেছি এবং  PORTA এর  RA0 পিনকে  INPUT আর বাকী পিনগুলোকে  OUTPUT হিসেবে সিলেক্ট করেছি।

এবার চেক করা যাক  পিনটি HIGH না  LOW. পিনটি HIGH হলে RA2 পিনকে আমরা set করবো। আর  পিনটি low হলে RA2 পিনকে আমরা clear করবো।

START                       BTFSS        PORTA,0

GOTO             $+3

BSF                  PORTA,2

GOTO             START

BCF                  PORTA,2

GOTO              START

উপরের প্রথম লাইনে  BTFSS  এর মাধ্যমে  Micro controller PORTA এর 0 নাম্বার BIT টি অর্থাৎ RA0 পিনটি HIGH আছে কী না তা চেক করা হয়েছে। HIGH হলে Micro controller নেক্সট INSTRUCTION SKIP করে তৃতীয় লাইনটি EXECUTE করবে । তৃতীয় লাইনে "BSF                  PORTA,2"  instruction এর দ্বারা PORTA এর 2নাম্বার BIT টি অর্থাৎ RA2 পিনটিকে সেট বা HIGH করবে। এরপরের  লাইনের "GOTO             START"  INSTRUCTION এর মাধ্যমে Micro controller আবার প্রথম লাইনে ফেরত যাবে এবং চেক করতে থাকবে RA0 পিনটির অবস্থা।

আর যদি  RA0 পিনটি low অর্থাৎ clear হয় তাহলে কি ঘটবে। clear থাকলে Micro controller দ্বিতীয় লাইনটি skip করবে না। দ্বিতীয় লাইনে Micro controller কে ৩ লাইন skip করে পঞ্চম লাইনে যেতে বলা হয়েছে। পঞ্চম লাইনে PORTA এর 2নাম্বার BIT টি অর্থাৎ RA2পিনটিকে clear করতে বলা হয়েছে। এরপর "GOTO              START" এর মাধ্যমে Micro controller আবার প্রথম লাইনে ফেরত যাবে।

এখন PORTA এর RA0 পিনে switch এর মাধ্যমে ৫ ভোল্ট supply দিলে এবং PORTA এর RA2 পিনে led লাগালে, switch টি ON/OFF করলে LED ON/OFF  হবে। circuit diagram নিচে দেখুন।

উপরের diagram এ R1 ব্যবহার করা হয়েছে  যেন RA0 পিন টি SW1  না চাপা পর্যন্ত কোন ভাবে high না হয়ে যায় তার জন্য। অর্থাৎ এই R1 resistor এর মাধ্যমে  RA0 পিনকে টেনে low করা হয়েছে (Pull Low)। R2 resistor ব্যবহার করা হয়েছে LED এর কারেন্ট limit করার জন্য। Micro controller এর MCLR পিনটি active low(MCLR এর উপরে bar দেয়ায় এটি inverted) অর্থাৎ এই পিনটিকে low করা হলে Micro controller  RESET হয়ে যাবে।  কোন ভাবেই যাতে পিনটি  low হতে না পারে তাই R3 resistor এর মাধ্যমে পিনটিকে টেনে high করে রাখা হয়েছে(pull high)। X1 হচ্ছে crystal Oscillator(2oMHz), c1,c2  ক্রিস্টাল টিকে stable করার জন্য। C1, C2 না দিলে crystal Oscillator এর Oscillation শুরু নাও হতে পারে। সার্কিটে power supply দেখানো হয়নি কিন্তু বাস্তবে আপনাকে অবশ্যই VDD(১৪ নাম্বার পিন) পিনে 5V supply দিতে হবে। বলা বাহুল্য VSS(৫ নাম্বার পিন) হল micro controller এর Ground পিন।

সবগুলো কোড একসাথে লিখলে দাঁড়াচ্ছে,

BANKSEL    TRISA

MOVLW        B'00001'

MOVWF        TRISA

BANKSEL     PORTA

START         BTFSS            PORTA,0

GOTO             $+3

BSF                  PORTA,2

GOTO             START

BCF                  PORTA,2

GOTO              START

এবার PIC Simulator IDE তে রান করানো যাক।

Main Window এর  Tools থেকে assembler ওপেন করে উপরের code গুলো assembler এ লিখে assembled and load করে নিন।

এরপর Tools থেকে Micro controller View ওপেন করুন।

যদি উপরের মত Micro controller View ওপেন না হয়ে ভিন্ন ধরনের window আসে তবে Option থেকে Compact Micro controller View এর উপর থেকে টিক চিহ্ন উঠিয়ে দিন।

এবার Extremely Fast Rate এ Simulation Start করুন।

Simulation Start  হলে RA০ পিনের পাশে থাকা Toggle button টি Toggle করুন।

এখানে RA0 যখন  ON তখন RA2ও ON হছে এবং RA0 , OFF হলে  RA2 ও OFF হচ্ছে।

আপনারা চাইলে LED Window Open করে RA2 পিনে LED Connect  করে দেখতে পারেন।

আমরা BTFSC Command ব্যবহার করেও উপরের কাজটি করতে পারতাম। সেক্ষেত্রে কোডগুলো একটু পরিবর্তন করতে হত। পরিবর্তিত অংশ নিম্নরুপ-

START             BTFSC            PORTA,0

GOTO             $+3

BCF                  PORTA,2

GOTO             START

BSF                  PORTA,2

GOTO              START

গত টিউটোরিয়ালে আমি Proteus 7 Professional এর Download link দিয়েছিলাম। আশা করি আপনারা সেখান থেকে download করে নিয়েছেন। আমি গ্রামীণফোনের নেট ব্যবহার করি আমার জন্য বারবার ১০০MB এর সফটওয়্যার আপলোড করা খুবই কষ্টকর। তারপরও আমি চেষ্টা করেছিলাম Mediafire এ আপলোড করতে কিন্তু দুখের কথা আমি ব্যর্থ হয়েছি। কোন সহৃদয়বান ব্যক্তি যদি আপলোড করে লিঙ্ক দিয়ে দেন তবে খুবই ভালো হয়।

তবে এখন পর্যন্ত কেউ আমাকে বলেননি যে সফলতার সাথে কেউ download করতে পেরেছেন। যদিও আমি বিভিন্ন পিসি থেকে download দিয়ে দেখেছি হয় কিনা। আমার কোন সমস্যা হয়নি।

যারা download করেন নাই তারা নিচের লিঙ্ক থেকে download করে নিন।

Proteus 7 Professional 

কিভাবে ইন্সটল করবেন তা Help folder এ দেয়া আছে। আশা করি কোন সমস্যা হবে না। সমস্যা হলে তো কমেন্ট এর ঘর থাকলোই সর্ব নিচে।

আমার দেখা Proteus হল সর্বশ্রেষ্ঠ simulation Software. Proteus দিয়ে আপনি PCB ও ডিজাইন করতে পারবেন। Proteus এর দুইটা অংশ। একটি হল  ISIS এবং অন্যটি ARES.  Schematic design এবং Simulation এর জন্য ISIS আর   PCB ডিজাইন এর জন্য ARES।

All Programs থেকে ISIS 7 Professional Administrator এ ওপেন করুন।

View Sample Design এর dialogue box  আসলে তাতে NO দিন।

বামে P তে ক্লিক করলে নতুন একটা pick device নামক window আসবে।  এই window এর keywords এর ঘরে আপনার প্রয়োজনীয় ডিভাইসের নাম লিখুন। ISIS  এর লাইব্রেরিতে ডিভাইসটি থাকলে তা দেখতে পাবেন। আমরা keywords এ PIC16F84A লিখতে পারি।  micro controller টির বর্ণনা Results এর ঘরে দেখতে পাবেন। এর গায়ে ডাবল ক্লিক করলে ডিভাইসটি Main window এর  Devices এর ঘরে পাওয়া যাবে।

এরপর PICK DEVICES window close করে দিন। Devices এর ঘরে P এর নিচে pic16f84a এর নাম দেখতে পাবেন। এখান থেকে ডিভাইসটি সিলেক্ট করে Drawing এর জায়গায় একবার মাউসের left button এ ক্লিক করুন। দেখবেন আপনার মাউসের নিচে কম্পোনেন্ট টির একটা অবয়ব দেখা যাচ্ছে। এবার যেখানে বসাতে চান সেখানে অবয়বটি নিয়ে আবার ক্লিক করুন দেখবেন ডিভাইসটি সুন্দর স্থাপন করা হয়ে গেছে।

এবার সুইচ বসানোর পালা। আগের মত P তে ক্লিক করে pick devices এর keywords এ লিখুন Switch. নিচের মত category এবং subcategory সিলেক্ট করে কাঙ্খিত  Switch এর উপর ডাবল ক্লিক করুন।

এখন devices এর ঘরে সুইচটির নাম আসলে সিলেক্ট করে সুইচটিকে জায়গামত স্থাপন করুন। এবার মাউস যেকোন পিনের মাথায় নিলে দেখবেন হাল্কা  লাল রঙের একটা বক্স আসবে। এই সময় ক্লিক করলে আপনি মাউসের মাথায় wire দেখতে পাবেন। মাউস যেখানে নিবেন wire ও সেখানে যাবে। এবার যেই পিনের সাথে যুক্ত করবেন মাউস সেখানে নিন দেখবেন আবার আগের মত বক্স আসবে। আবার ক্লিক করুন দেখবেন wire connect হয়ে গেছে।

এবার সুইচের অন্য প্রান্তে পাওয়ার দেয়া যাক। এর জন্য আপনাকে Terminal mode এ যেতে হবে। এতক্ষন আমরা Component Mode এ ছিলাম। কোথায় ক্লিক করলে Terminal mode  এ যাবে তা নিচে দেখুন। Terminal mode  এর ভিতর থেকে Power সিলেক্ট করুন। এরপর যেভাবে Component বসানো হয়েছিল একই ভাবে Power Terminal জায়গামত বসিয়ে নিন।

সুইচের অন্য প্রান্তের সাথে Power terminal wire দিয়ে যুক্ত করুন।

এবার 10k Ohms এর একটা resistor বসানো যাক। এর জন্য আপনাকে আবার Component Mode এ যেতে হবে। নিচে দেখানো হল।

Pick Device থেকে 10k Ohms এর Resistor select করে নিন।  Subcategory আমার মত নির্বাচন করতে হবে এমন কোন কথা নাই। Component এর Value ঠিক থাকলেই চলবে।

Resistor টিকে ডিজাইনে স্থাপন করুন। Resistor টিকে Rotate করতে চাইলে এর গায়ের উপর মাউসের right button click করলে Rotate clockwise এবং anti clockwise  এর অপশন পাবেন। 180 degree ঘুরাতে Mirror না ব্যবহার করাই ভালো।

এবার resistor এর একপ্রান্ত micro controller এর সাথে এবং অন্য প্রান্ত Ground এর সাথে যুক্ত করতে হবে। Terminal Mode থেকে যেভাবে Power Terminal select করা হয়েছিল একই জায়গায়  Power Terminal এর নিচে Ground Terminal আছে।

নিচের চিত্রের মত করে বাকি component গুলো বসিয়ে connection complete কর ফেলুন। LED নির্বাচনের ক্ষেত্রে Animated LED সিলেক্ট করবেন তাহলে দেখতে সুবিধা হবে।  LED যেন শুধু লাল বা সবুজ হয়  অর্থাৎ multicolored না হয়।

এবার Micro controller এর ভিতর সোর্স কোড ঢুকানোর পালা। Micro controller এর উপর ডাবল ক্লিক করুন দেখুন নিচের window আসে কি না। আসলে Clock Frequency 20MHz ইনপুট দিন। আর সোর্স কোড ব্রাউজ করে .HEX ফাইল দেখিয়ে দিন।  সোর্স কোড কোথায় পাবেন!! বলছি একটু সবুর করতে হবে ভাই। আপনি তো পড়ছেন, আমার তো লিখতে লিখতে হাত ব্যথা হয়ে গেল। আগে edit box টা দেখে নিন।

সোর্স কোড কোত্থেকে আসবে। আপনাকে প্রোগ্রাম লিখে বানাতে হবে। এই বিষয়ে আপনাকে সাহায্য করব PIC Simulator IDE. কোন একটি প্রোগ্রাম PIC Simulator IDE এর  assembler এ লিখে assembled and load করে নিন। assembled and load করার সময় সফটওয়্যারটি অবশ্যই আপনাকে প্রোগ্রাম Save করতে বলছিল। খেয়াল রাখুন আপনি কি নামে এবং কোথায় Save করছেন। ঐ লোকেশনে সফটওয়্যারটি আপনার দেয়া নামে একটি .HEX ফাইল তৈরি করবে। ধরা যাক আপনি নাম দিয়েছিলেন Switch, তাহলে সে Switch.hex নামে একটা ফাইল পাবেন। এইটাই আপনার কাঙ্খিত সোর্স কোড।

এখন Simulate করার পালা। ISIS এর নিচে play বাটনে ক্লিক করুন। Simulation শুরু হএ গেছে। এবার Switch এর পাশে থাকা দুইটা arrow চিহ্ন বিশিষ্ট Up এবং Down বাটনে ক্লিক করুন তাহলে Switch টি Open এবং Close হবে।

Proteus এ যেহেতু clock frequency আলাদা করে দেয়া হয়েছে তাই এতে OSC1এবং OSC2 পিনে crystal connect করার দরকার নাই। Proteus এ MCLR pin কে pull high করে রাখারও দরকার নাই। সফটওয়্যার টিতে বিভিন্ন Device এর VCC এবং Ground পিন Hidden করা থাকে। চিন্তার কোন কারন নাই এই দুই পিন internally Power এবং Ground Terminal এর সাথে যুক্ত করা আছে।

আজকে এই পর্যন্তই থাকলো।  আমার আর একটি পর্ব লেখার কথা Assembly নিয়ে। তাই আগামী পর্বের পরের পর্বে আমি assembly তে এনালগ ইনপুট এবং LCD display নিয়ে আলচনা করবো। আগামী দিন Programmer বানিয়েই ফেলব ইনশাল্লাহ, সেই পর্যন্ত ভালো থাকবেন।

Level 0

আমি Faisal। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 15 বছর 1 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 7 টি টিউন ও 110 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস

Level New

khob sondor hoiyese vai. agami poste program niye dekhte chai.thanks

vaia ami micro controller apnar kas teke personally sikte chai, and amra ekta project e onekdin theke kaj korchi. Please email me and give me your contact number. My email ID is: [email protected]

    Level 0

    ভাই, আসলে আমি যে খূব ভালো পারি তা কিন্তু না। চাকরীর সুবাদে আমাকে পরিবার পরিজন ছেড়ে ভোলায় থাকতে হয়। অবসর সময় কাটানোর জন্য micro controller নিয়ে ঘাটাঘাটি। তাই কাউকে শেখাতে পারবো কিনা জানি না। personally বলতে যদি আপনাকে সামনা সামনি শেখাতে হয়, তাহলে সেটা সম্ভব না। ভোলায় থেকে কীভাবে হবে!! তবে আপনার কোথায় সমস্যা হচ্ছে তা আমাকে বলতে পারেন আমি সমাধানের চেষ্টা করবো। আরেকটি কাজ করা যায়, আপনি আরেকটি কাজ করতে পারেন, FACEBOOK এ আপনার PROJECT এর নাম দিয়ে একটা PAGE খোলেন, এরপর কতটুকু কাজ করেছেন তার বিস্তারিত আপলোড করেন। আমরা প্রতিদিন একটা নির্দিষ্ট টাইমে অগ্রগতি নিয়ে আলোচনা করতে পারি আর অন্য সময় সেটা নিয়ে কাজ করতে পারি। আমার email- [email protected]. আর আমি সাধারণত প্রতি মাসে একবার দুই দিনের জন্য ঢাকায় বাসায় আসি। ধন্যবাদ আমার লেখা পড়ার জন্য। শুভ কামনা রইলো আপনার জন্য।

Level 0

ভাইয়া আপনার কাছে কি proteus and AVR STUDIO 5.,1 download করার ভালো লিঙ্ক আছে ? থাকলে একটু দিবেন প্লিজ । আপনার টিউন আমার খুবই ভালো লাগছে । আর আমি জানতে আগ্রহী । চালিয়ে যান ।

vai..BANKSEL ar kaj ta aktu bujhia bolben plzz?

    Level 0

    PIC Micro controller এর বিভিন্ন Register গুলোকে বিভিন্ন Bank এ ভাগ করা আছে। ধরুন কোন কন্ট্রোলারে Bank আছে দুইটা Bank0, Bank1। এখন আপনি এমন একটা Register নিয়ে কাজ করতে চান যেটা আছে Bank1 এ। ওই Register কে Access করতে হলে আপনাকে Bank1 এ যেতে হবে। Status Register এর RP0 এবং RP1 বিট দুইটির মাধ্যমে Bank পরিবর্তন করা যায়। BANKSEL কমান্ডের এর মাধ্যমেও Bank পরিবর্তন করা যায়। এইক্ষেত্রে সুবিধা হচ্ছে Status Register এর কোন বিটকে পরিবর্তন করতে হবে বা যেই Register কে নিয়ে কাজ করবেন সেটি কোন Bank এ আছে তা জানার প্রয়োজন নাই।

faisal ভাই,
http://www.mediafire.com/?xpa38eafzlv9kvq — Proteus 1.10 with patch.
প্রোটিয়াস এর মিডিয়াফায়ারের লিংকটা দিলাম। আপডেট করে দিয়েন.

Level 0

Dear Brother
You have disused tune 1 to 4th Port and move instruction. We are waiting other instructions. After instruction complete then touch us project.

Level 0

ভাই, এল সি ডি নিয়ে তাড়াতাড়ি টিউন করবেন আশা করি। আগামি সপ্তাহে আমার একটা প্রজেক্ট জমা দিতে হবে, মাইক্রোকন্ট্রোলার নিয়ে হতাশায় ছিলাম। আপনার টিউন আমাকে অনেক সাহায্য করছে। আশা করি সি ল্যাঙ্গুয়েজ দিয়ে তাড়াতাড়ি শুরু করবেন…। ধন্যবাদ।

আজকে খুব ভাল লাগলো দাদা, আপনার লেখা পড়ে কিছু শিখলাম এবং সেই সাথে নিজের হাতে কিছু বানিয়ে। ধণ্যবাদ দাদা। LCD’র সাথে কিভাবে Interface করবো সেবিষয়ে একটু জ্জদি লেখেন তাহলে খুব ভালো হয়। ধণ্যবাদ দাদা।

আপনি আবার assembly language’র উপর আবার লেখা শুরু করুন দাদা।আমি আপনার কাছ থেকে assembly language’র আর নতুন Instruction স্মপকে জ্জান্তে চাই দাদা।