বুধবার, ১৮ ফেব্রুয়ারী, ২০১৫

মাইক্রোকন্ট্রোলারের প্রাথমিক টার্ম।

·   0

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


ADC
অ্যানালগ টু ডিজিটাল কনভার্টার। মাইক্রোকন্ট্রোলার ডিজিটাল ডিভাইস, এটা শুধু ডিজিটাল 1(+5V) আর 0(0V) নিয়ে কাজ করে। কিন্তু অ্যানালগ সিগন্যাল (যেমন অডিও সিগন্যাল) নিয়ে কাজ করতে গেলে কি হবে তখন? এর জন্যই ADC নামের মডিউলটাকে মাইক্রোকন্ট্রোলারে ঢুকিয়ে দেয়া আছে। কাজ হল অ্যানালগ সিগন্যাল ইনপুট নিয়ে তার জন্য ডিজিটাল ভ্যালু তৈরি করে দেয়া।

ডাটাশিট
মাইক্রোকন্ট্রোলারের আদ্যপান্ত হল ডাটাশিট। মাইক্রোকন্ট্রোলারের পিন কনফিগারেশন, কোন রেজিস্টার কি কাজ করে, বিশেষ কোন মডিউল (যেমন, টাইমার, ADC, সিরিয়াল কমিউনিকেশন হাবিজাবি) কিভাবে ব্যাবহার করতে হয়- সোজা কথা মাইক্রোকন্ট্রোলারের সমস্ত তথ্য পাওয়া যাবে ডাটাশিটে। যেকোন ইলেকট্রনিক কম্পোনেন্টেরই ডাটাশিট থাকে। ইন্টারনেট থেকে মডেল নাম্বার লিখে সার্চ করলেই ডাটাশিটের দেখা মেলে।

I/O পোর্ট
ইনপুট/আউটপুট পোর্ট। মাইক্রোকন্ট্রোলারে অনেকগুলো পিন বের হয়ে থাকে যেগুলো বিভিন্ন কাজে ব্যাবহার করতে হয়। যেমন কিছু পিন দিয়ে পাওয়ার দিতে হয়, কিছু পিন দিয়ে ডাটা পাঠাতে হয় ইত্যাদি। যে পিনগুলো দিয়ে ডাটা পাঠানো কিংবা ইনপুট নেয়া যায় সেগুলোকে বলে I/O পিন। এরকম একগুচ্ছ I/O পিনকে আবার একসাথে I/O পোর্ট বলে। I/O পিন হল একটা পিন, আর I/O পোর্ট হল অনেকগুলো পিন মিলে একটা ইউনিট। যেমন, PORTA, PORTB, PORTC, PORTD এরকম। I/O পোর্টের সুবিধা হল একেবারে অনেকগুলো পিনে একবারে ডাটা পাঠানো কিংবা অনেকগুলো পিন থেকে একেবারে ইনপুট নেয়া যায়।

রেজিস্টার
সহজ করে বললে রেজিস্টার হল মাইক্রোকন্ট্রোলারের নিজস্ব ভেরিয়েবল, যেগুলোতে বিভিন্ন ভ্যালু সেট করে মাইক্রোকন্ট্রোলারকে বিভিন্নভাবে কনফিগার করা যায়। আরেকটু বিস্তারিত বললে, রেজিস্টার হল এক ধরনের মেমরি যেখানে বিভিন্ন ভ্যালু সেট করে রাখা যায়। পাওয়ার অফ করলে এই মেমরিগুলো হারিয়ে যায়। সচরাচর যে মাইক্রোকন্ট্রোলারগুলো ব্যাবহার করছি, সেগুলোতে রেজিস্টারগুলো ৮ বিট (মাঝে সাঝে ১৬ বিট) এর। মানে রেজিস্টারটিতে আটটি ভ্যালু রাখা যেতে পারে। যেমন, PORTB রেজিটারের কথাই ধরা যাক। এটা একটা I/O পোর্ট। ATMEGA16 এ B পোর্টে আছে ৮ টি পিন। এগুলো হল, PB0, PB1, ... PB7.

DDR
ডাটা ডিরেকশন রেজিস্টার। নাম শুনেই বোঝা যাচ্ছে এর কাজ হল ডাটার ডিরেকশন বলে দেয়া। মানে ডাটা মাইক্রোকন্ট্রোলারের ভিতরে ঢুকবে (ইনপুট) না বাইরে বেরুবে (আউটপুট) সেটা বলে দেয়া। যেমন, PORTB এর ডাটা ডিরেকশন রেজিস্টার হল, DDRB (একিভাবে অন্য পোর্টের জন্যও বের করা যাবে নিশই)| মনে রাখতে হবে, কোন I/O পিনের ডিরেকশন আউটপুট হলে ওর DDR এ লিখতে হবে 1 আর ইনপুট হিসেবে ব্যাবহার করতে চাইলে 0। যেমন, PORTB এর সবগুলো পিন আউটপুট হিসেবে ব্যাবহার করলে DDRB কে লিখতে হবে,

1
2
DDRB = 0b11111111; // কিংবা
DDRB = 255;

আর ইনপুট হিসেবে ব্যাবহার করতে চাইলে,

1
2
DDRB = 0b00000000; // কিংবা
DDRB = 0;
0b দিয়ে শুরু করার মানে হল প্রত্যেক বিটকে আলাদা আলাদাভাবে লেখা। 0b এর পর আটটা 1 দেয়ার মানে হল PB7 থেকে PB0 এই আটটি বিটের প্রত্যেকটি 1 মানে আউটপুট। এভাবে নাম্বার লেখার পদ্ধতিকে বাইনারি নাম্বার সিস্টেম বলে। একি জিনিস সাধারনভাবে লিখলে দাঁড়ায় পরের লাইনের মত। দুটোই এক। এভাবে পোর্টের সবগুলো পিনকে একবারে সেট করা যায়। চাইলে প্রত্যেক পিনকেও আলাদাভাবে সেট করা যায়। যেমন, PB3 কে আউটপুট হিসেবে লিখতে চাইলে লিখতে হবে,

1
DDB3_bit = 1;

আর ইনপুট হিসেবে লিখতে চাইলে,

1
DDB3_bit = 0;

PORT
ধরা যাক, DDR দিয়ে PORTB এর সবগুলো পিনকে আউটপুট বলে দেয়া হল। কিন্তু আউটপুট খানা কি হবে? সেটা বলে দেবার জন্য PORT রেজিস্টার। এর কাজ হল আউটপুট বলে দেয়া। মনে রাখতে হবে, PORT রেজিস্টারে 1 সেট করা মানে আউটপুটে ডিজিটাল 1 (+5V) আর 0 সেট করা মানে আউটপুটে 0 (0V) পাওয়া। ধরা যাক, PORTB এর সবগুলো পিনে একটা করে LED জ্বালাতে চাই। তাহলে কোডটা হবে,

1
2
PORTB = 0b11111111; // কিংবা
PORTB = 255;
ব্যাস! এবার PB0 থেকে PB7 পর্যন্ত সবগুলো পিনে একটা করে LED লাগালেই জ্বলে উঠবে সেগুলো। আর LED নিভিয়ে রাখতে,
1
2
PORTB = 0b00000000; // কিংবা
PORTB = 0;
পুরো কোডটা হবে অনেকটা এরকম,
1
2
3
4
5
6
7
void    main() {
    DDRB = 0b11111111;    // আউটপুট হিসেবে বলে দিতে হবে
    PORTB = 0b11111111;   // সবগুলো LED জ্বলে ওঠার জন্য
    while (1) {
    }
}
উপরের কোডে PORTB এর বিভিন্ন কম্বিনেশন করে দেখ। যেমন,
1
2
3
PORTB = 0b10101010;
PORTB = 0b01010101;
PORTB = 0b11110000;

PIN
আউটপুট দেখার জন্য যেমন PORT রেজিস্টার কাজে লাগে, তেমনি ইনপুট নেয়ার জন্য PIN রেজিস্টার। যেমন, B পোর্ট দিয়ে ইনপুট নিতে চাইলে, প্রথমে DDR কে ইনপুট হিসেবে সেট করতে হবে তারপর PINB তে পাওয়া যাবে ইনপুট।

1
2
3
4
int input;            // এই ভেরিয়েবলে ইনপুট রাখব
DDRB = 0b00000000;    // সবগুলো ইনপুত
input = PINB;         // ইনপুট এর ডাটা input ভেরিয়েবলে
                      // রাখা হল
টাইমার
মোবাইলের স্টপওয়াচে যেমন টাইমার থাকে, মাইক্রোকন্ট্রোলারেও থাকে ওরকম একটা। কাজ হল, টাইম কাউন্ট করা। মাইক্রোকন্ট্রোলারের খুব দরকারি মডিউলগুলোর মধ্যে একটা।

Interrupt
সন্ধ্যাবেলায় পড়তে বসেছ। খুব মন দিয়েই পড়ছ, এমন সময় প্রিয় বন্ধু/বান্ধবীর ফোন।

ডিলে
Delay মানে হল দেরি। মাইক্রোকন্ট্রোলারে ডিলে মানে হল ইচ্ছে করে প্রোগ্রামের কোন জায়গায় আটকে রাখা। কাজ করতে গেলে এটা খুব দরকারি একটা বিষয়।

নয়েজ
মাইক্রোকন্ট্রোলারে Noise মানে হল অবাঞ্চিত ভোল্টেজের উপস্থিতি। Noise বিভিন্ন কারনে হতে পারে। এই যেমন- Fly Back Voltage, কম্পোনেন্টের আশেপাশে AC ভোল্টেজের উপস্থিতি ইত্যাদি। সার্কিট ডিজাইনের সময় যেন Noise এর প্রভাব কম থাকে, সেটা মাথায় রাখতে হয়।