বাংলায় মাইক্রোকন্ট্রোলার প্রোগ্রামিং শিখি [পর্ব ২: “Hello World” আমাদের ১ম প্রোগ্রাম]

আসসালামু আলাইকুম,আমি আবরার অন্তর, আশা করি সবাই ভালই আছেন।  ১ম ক্লাসে আমি বলেছিলাম আমরা ১ম “hello world” একটি প্রোগ্রাম করব। তো কথা না বাড়িয়ে আমি কাজে চলে যাই।

আশা করি সবাই ১ম ক্লাসে বলা software গুলো download করে নিয়েছেন। আর যারা এখনও করেন নি তারা এখন করে নিন।

PIC Tutorials ক্লাস ১: Microcontoller ভূমিকা

আমি বলেছিলাম আমি আপনাদের দুইটা ল্যাঙ্গুয়েজেই প্রোগ্রাম শিখাব আপনাদের যেকোনো একটা ল্যাঙ্গুয়েজ বেছে নিতে বলেছিলাম। যারা এখনও বেছে নিতে পারেন নি আশা করি তারা আজকের প্রোগ্রামটি দেখে একটি বেছে নিতে পারবেন খুব সহজেই। আমি বলবো আপনাদের যেটা বেশি সহজ লাগে সেটাই বেছে নিতে।

ভুল করেও দুইটা ল্যাঙ্গুয়েজ একসাথে শিখতে যাবেন না।

প্রথমে Proteus এ আমরা নিচের মতো একটা ডিজাইন করব। যারা ডিজাইন করতে পারেন না তারা নিচের ভিডিওটি অনুসরণ করতে পারেন।

Hello world Proteus

[Note: Proteus software simulation এ ক্রিস্টাল, পাওয়ার সাপ্লাই ইত্যাদি না লাগালেও কাজ করবে কারণ সাধারণ ভাবেই এই software টিতে এগুলো built-in করা রয়েছে।]

উপরের ছবিটি দেখে আমরা বুঝতেই পারছি যে, একটি PIC16F84A মডেলের microcontroller এর সাথে শুধু মাত্র একটি LED (লাইট) লাগানো রয়েছে। লক্ষ্য করলে দেখা যায় LED টি microcontroller এর “RB0/INT” নামের একটি পিনের সাথে LED এর পজেটিভ(+) পিন লাগানো এবং LED  এর অন্য পিনটি গ্রাউন্ড(-) করা।

সুতরাং আমরা বুঝতেই পারছি, Microcontroller এর RB0 পিন থেকে যদি পজেটিভ(+) সিগন্যাল আসে তাহলেই LED টি জ্বলবে।

আমি আপনাদের এই Hello world প্রোগ্রামে LED টি প্রতি 0.5sec পরপর ON এবং OFF করে দেখাব।

প্রথমে আমরা MikroC code দেখে নেইঃ

sbit led at portb.B0;

 void main() {

trisb = 0; portb = 0;

 

     while(1){

    led = 1;

    delay_ms(500);

    led = 0;

    delay_ms(500);

   }

}

লাইন – ১, আমরা বিট মানে বুঝি এক (১) এবং শূন্য (০)। এখানেও তাই sbit দিয়ে led কে বিট হিসেবে ধরা হয়েছে এবং at দিয়ে বলে দেয়া হয়েছে led বিট টা PORTB এর RB0 এর জন্য। এই লাইন টা আমরা “#define led portb.b0;” এই ভাবেও লিখতে পারি। MikroC তে কোন PORT এর বিট বুঝাতে “b0,b1,b2,...b3” অথবা “f0,f1,f2,....f3” লিখতে হয়। সাধারণত প্রায় সব PIC এই ৮ বিটের(০ থেকে ৭) PORT register থাকে।

 

Note: RA, RB, RC, RD, RE ইত্যাদি এগুলো দিয়ে PIC এর PORT register কে বুঝায়। যেমন, RB = PORTB, RB0 = PORTB.0 ইত্যাদি ইত্যাদি।

 

লাইন – ২, “void main()” এইটা C++ ল্যাঙ্গুয়েজ এর একটা FUNCTION. আমাদের মূল প্রোগ্রাম এইটার মধ্যে লিখতে হয়। এইটা “{“ দিয়ে শুরু হয় এবং “}” দিয়ে শেষ হয়।

 

লাইন – ৩, TRIS হল PORT register কিভাবে কাজ করাবো অর্থাৎ ইনপুট নাকি আউটপুট সেটা নির্ধারণ করার আরেকটি register. Code এ আমি PORTB register কে আউটপুট হিসেবে সেট করেছি তাই trisb = 0.

লক্ষ্য করেন, আমি trisb = 0 লিখেছি তার মানে portb এর সব কটি বিটই output হয়ে গেছে।

Portb তে ৮ টি বিট আছে আপনি চাইলে যেটা খুশি input বা output করতে পারবেন। তার জন্য আপনি trisb.1 = 1 এইভাবেও প্রতিটি বিট কে নির্ধারণ করতে পারেন অথবা trisb = 0b00000010 এই ভাবেও করতে পারেন। “0b” দিয়ে বাইনারি নাম্বার বুঝানো হয়। আপনি চাইলে ডেসিম্যাল, হেক্স নাম্বার দিয়েও লিখতে পারেন। আমি পরে নাম্বার সিস্টেম নিয়ে একটি ক্লাস করব। portb = 0 দিয়ে portb register টা ক্লিয়ার করে দেয়া হয়েছে।

 

লাইন – ৪, “while(1)” হল endless loop statement অর্থাৎ এর মধ্যে যা থাকবে সেটাই বার বার হতে থাকবে। এইটা “{“ দিয়ে শুরু হয় এবং “}” দিয়ে শেষ হয়।

 

লাইন – ৫, আমরা উপরে যে portb.0 পিন টা led নামে নির্ধারণ করেছিলাম সেটা এখানে led = 1 দিয়ে পিনটা ON করা হয়েছে।

 

লাইন – ৬, আমি আগেই বলেছি আমি এই hello world প্রোগ্রামে led টা ০.৫sec পর পর ON OFF করব তাই এখানে “delay_ms(500);” 1000ms = 1sec.

 

লাইন – ৭, led = 0 দিয়ে led টা OFF করেছি.

 

লাইন – ৮, led OFF করে আবার ০.৫sec delay.

 

লাইন – ৯,১০, void main() এর “}” এবং while(1) এর “}”।

 

আশা করি সবাই বুঝতে পেরেছেন আজকের hello world প্রোগ্রাম। আর যারা C++ বুঝতে পারছেন না তারা basic ল্যাঙ্গুয়েজ শিখতে পারেন।

 

এখন Proton Basic কোড দেখে নেইঃ

Device = 16F84A

Xtal 20

TRISB = 0

PORTB = 0

 

Symbol led1 = PORTB.0

 

main:

led1 = 1

DelayMS 500 '500 = 0.5 second

led1 = 0

DelayMS 500 '500 = 0.5 second

GoTo main

 

লাইন – ১, আমরা PIC16F84A নিয়ে কাজ করছি তাই আমাদের প্রথমেই কোড এ বলে দিতে হবে আমরা কোন device নিয়ে কাজ করব তাই device = 16F84A.

লাইন – ২, device সেট করার পর আমাদের ক্রিস্টাল অর্থাৎ প্রসেসর কত সেটা xtal কমান্ড দিয়ে লিখতে হবে। সাধারণত ক্রিস্টাল ৪,৮,১০,১২,১৬,২০,...৪০+ পাওয়া যায়। তবে PIC এর একটি নির্দিষ্ট রেঞ্জ থাকে সে কত পর্যন্ত নিতে পারবে। সাধারণত প্রায় বেশির ভাগই ২০MHz পর্যন্ত হয়ে থাকে। এটাই PIC কত speed এ চলবে নির্দেশ করে।

লাইন – ৩,৪, MikroC কোড এর লাইন ৩।

লাইন – ৫, symbol কমান্ড দিয়ে PIC এর PORTB.0 পিনকে rename করা হয়েছে।

লাইন – ৬, main একটি লুপ করা হয়েছে। যাতে পরবর্তীতে আবার এখানে আসা যায়।

লাইন – ৭, যেহেতু আমরা PORTB.0 কে rename করে led1 করেছি তাই led1 = 1 লিখলেই PORTB.0 = 1 হবে।

লাইন – ৮, MikroC কোড এর লাইন ৬।

লাইন – ৯, led1 = 0 দিয়ে PORTB.0 কে OFF করা হয়েছে।

লাইন – ১০, LED লাইট OFF করে আবার ০.৫sec delay.

লাইন – ১১, goto main কমান্ড দিয়ে আবার “main” এ ফিরে যাওয়া হয়েছে। অর্থাৎ এখানে একটা Endless loop করা হয়েছে।

 

এই ক্লাসে ভালো সাড়া পেলে আমি ৩য় ক্লাস টিউন করব। আপনারাই নির্ধারণ করুন আমি পরবর্তী ক্লাস শুরু করব কিনা...!

আশা করি সবাই বুঝতে পেরেছেন। তাও যদি কেও কোন লাইন না বুঝে থাকেন তাহলে নিচে টিউমেন্ট করতে পারেন।

আপনাদের যদি আমার লেখা ভাল লাগে অবশ্যই টিউমেন্ট করবেন এবং আমাকে সাপোর্ট করার জন্য আমার টিউনস প্রিয় টিউনস এ যুক্ত করবেন।

Download: class 2 “hello world” files (Source code + Proteus Simulation)

Facebook ID: Abrar Antor

Level New

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


টিউনস


আরও টিউনস


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


টিউমেন্টস

Level 0

ভাইয়া সি ল্যাংগুয়েজ দিয়ে টিউন করলে ভালো
হবে। সি ল্যাংগুয়েজ কম-বেশী সবার যানা আছে।

    ওকে পরবর্তী ক্লাস গুলো আমি শুধু C ল্যাঙ্গুয়েজই করব। তাহলে আমারও চাপ কমে যাবে।
    আপনাদের যদি আমার লেখা ভাল লাগে অবশ্যই কমেন্ট করবেন এবং আমাকে সাপোর্ট করার জন্য আমার টিউনস প্রিয় টিউনস এ যুক্ত করবেন।

Level 0

Nice tune…….