পোর্টকন্ট্রল-আউটপুটঃ (মাইক্রোকন্ট্রলারের সহজ পাঠঃ ৪র্থ কিস্তি)

আজকে একটি Atmega8 নিয়ে কয়েকটি এক্সপেরিমেন্টটি করব। Atmega8 এর তিনটি পোর্ট আছে । যেমনঃ

# Port B (PB0 to PB7)

# Port C (PC0 to PC6)

# Port D (PD0 to PD7)

প্রথম এক্সপেরিমেন্টঃ

একটা ব্রেড বোর্ডে নিচের ছবির মতো করে Atmega8 বসিয়ে ৮ টি এল ই ডি বাতি PortD তে ও তাদের সিরিজে ৮ টি রেজিস্ট্যান্স চিত্রের মতো করে লাগানো হলো।(পাওয়ার সাপ্লাই দেখানো হল। এক্সটার্নাল এডাপ্টার দিয়েও পাওয়ার সাপ্লাই দেয়া যাবে। ISP Programming PIN header আপাতত কোন কাজে লাগবেনা তবে পরবর্তিতে প্রোগ্রামার দিয়ে বার্নিং এর সময় কাজে লাগবে বলে বোর্ডে করে রাখা হল)

এর পর এই কমান্ড দেয়া হলোঃ

DDRD  = 0b11111111; // PortD এর সবগুলো পিন আউটপুট হিসাবে সেট হলো।

PORTD = 0b00110001; // PortD এর পিন নং ৩,৪,৮ নং পিনে ১ সেট করা মানে ভোল্টেজ দেয়া হলো

প্রথমে 0b যুক্ত করা মানে আমরা সরাসরি বাইনারিতে কমান্ড দিচ্ছি। ঐ একই কাজ হেক্স কমান্ডেও দেয়া যেত তখন লিখতাম

PORTD = 0xF1; // লক্ষনীয় 0b এর পরিবর্তে 0x

কারন হেক্সাডেসিমেল পদ্ধতিতে চার বিট ব্যাবহার করে F=0011 আর 1 = 0001। ইচ্ছা করলে আমরা দশমিকেও কমান্ড দিতে পারে সেই ক্ষেত্রে 0b বা 0x ইত্যাদি Prefix ব্যাবহার করতে হয়না।

PORTD = 241; কারন বাইনারি 00110001 , দশমিক পদ্ধতিতে ২৪১ একই কথা। কিন্তু বাইনারি পদ্ধতিতে সরাসরি কি আউটপুট আসতে পারে তা সহজেই কল্পনা করা যায় বলে এখন আমরা বাইনারিতেই কমান্ড দিব।

যাই হোক এমতাবস্থায় চিত্র ৪ এর মতো করে শুধু ৩,৪,৮ বাতি জ্বলে উঠবে। ধরা যাক এমতাবস্থায় আমরা সিদ্ধান্ত নিলাম শুধু ১ নং এল ই ডি কে জ্বালাতে হবে। এবার AVR C ল্যাংগুয়েজের বিটওয়াইস ম্যানিপুলেটর ম্যাক্রোটি ব্যাবহার করব।

PORTD |=_BV(1); // ব্র্যাকেটের ভিতরের বিট পজিশন (এক্ষেত্রে ১ম বিট) কে অন করবে

এখানে _BV(?) একটি বিটওয়াইজ ম্যাক্রো যা ইচ্ছামত যে কোন বিটকে পরিবর্তন করতে পারে। ম্যাক্রোটির পর PortD এর অবস্থা হবেঃ 10110001

এবার আমরা ৩ নং বিটকে (বা এল ই ডি কে) অফ করতে চাইলে, ম্যাক্রো প্রয়োগ করব এভাবেঃ

PORTD &= !_BV(3)

২য় এক্সপেরিমেন্টঃ

এল ই ডি প্যাটার্ন ফ্লাশিং

প্রথম প্রোগ্রামটি একটি বৈচিত্রহীন কাজ। কারন ঐ কাজ করার জন্য MCU এর ব্যাবহার একটি মূল্যবান অপচয়। এই কাজ সাধারন সুইচ দিয়েও করা সম্ভব। তাই আমরা এখন একটি বৈচিত্রপূর্ন কাজ করব যাতে আমাদের মাইক্রো কন্ট্রোলার ব্যাবহার স্বার্থক হয়।

নিচের কোডটি লক্ষ্যকরিঃ

void sweep1()

{

PORTD = 0b10000000;

_delay_ms(100);

PORTD = 0b01000000;

_delay_ms(100);

PORTD = 0b00100000;

_delay_ms(100);

PORTD = 0b00010000;

_delay_ms(100);

PORTD = 0b00001000;

_delay_ms(100);

Related Post

PORTD = 0b00000100;

_delay_ms(100);

PORTD = 0b00000010;

_delay_ms(100);

PORTD = 0b00000001;

_delay_ms(100);

PORTD = 0b00000000;

}

 

void sweep2()

{

for (int i=7;i>=0;i–)

{

PORTD = _BV(i);

_delay_ms(100);

}

PORTD = 0b00000000;

}

 

void sweep3()

{

PORTD = 0b10000000;

for (int i=0;i<8;i++)

{

_delay_ms(100);

PORTD >>= 1;

}

}

 

এখানে তিনটি প্যাটার্নে (,sweep1, sweep2, sweep3) এল ই ডি ফ্লাশিং করা হয়ছে যেখানে এক প্যাটার্ন শেষ হলেই পরের প্যাটার্ন শুরু হয়।

সুইপ১ –এ এক বিট এক বিট করে জ্বালানো হয়েছে। লক্ষ্য করুন প্রতিবার PortD কে নতুন করে সেট করা হয়েছে বাম থেকে ডানে ১ বিট কে সরিয়ে। প্রতিবার সরানোর মাঝা খানে _delay_ms(100); কমান্ডের মাধ্যমে ১০০ মিলি সেকেন্ডের একটা অপেক্ষা করা হয়েছে। এতে মনে হবে একটা আলো বাম থেকে ডানে এগিয়ে যাচ্ছে।

 

দ্বিতিয় সুইপে শেষ বিট থকে প্রথম দিকে একটা একটা করে (১০০ মিলি সেকেন্ড পরে) বাতি জ্বলে উঠছে। এটি করা হয়েছে ম্যাক্রো ব্যাবহার করে।

 

তৃতীয় সুইপে প্রথম প্যাটার্নটাই তৈরী করা হয়ছে তবে এক্ষেত্রে বিট শিফটিং করে।

 

<< ৩য় কিস্তি এখানে                                     ৫ম কিস্তি এখানে >>

This post was last modified on October 25, 2015 3:57 pm

কমেন্ট দেখুন

  • কোড গুলো কোন প্রোগ্রামে করা হয়েছে

    Cancel reply

    Leave a Reply

    Your email address will not be published. Required fields are marked*

  • (এ ভি আর) সি ল্যাংগুয়েজ।

    Cancel reply

    Leave a Reply

    Your email address will not be published. Required fields are marked*

  • ok

    Cancel reply

    Leave a Reply

    Your email address will not be published. Required fields are marked*

Leave a Reply

Your email address will not be published. Required fields are marked*

Share
Published by

Recent Posts

করোনা ভাইরাস প্রতিরোধে হ্যান্ড ওয়াশ চ্যালেঞ্জ - হ্যান্ড ওয়াশ টাইমার তৈরি করুন সহজেই

করোনা ভাইরাসের ভয়াবহতা নিয়ে আপনাদের বলার মত কিছু নেই। এটি যেকোনো জায়গায় থাকতে পারে এবং…

March 24, 2020

আরডুইনো দিয়ে স্ক্রলিং এলইডি মেসেজ ডিসপ্লে (ভিডিও সহ)

সকল বন্ধুদের স্বাগতম আমার আরডুইনো দিয়ে স্ক্রলিং এলইডি মেসেজ ডিসপ্লে প্রজেক্টে। এটা খুবই মজার একটি প্রজেক্ট।…

November 28, 2017

ভোঁতা ড্রিল বিট ধারালো করে নিন সহজেই (ভিডিও টিউটোরিয়াল)

ড্রিল বিট এর ধার দ্রুত ক্ষয়ে যায়। পিসিবি ড্রিল মেশিন গুলোতে ব্যবহৃত বিট গুলোকে চাইলে…

June 24, 2017

পাওয়ার ট্রান্সফরমার তৈরী করবার হিসাব নিকাশ (ক্যালকুলেটর সহ)

ভূমিকা পাওয়ার ট্রান্সফরমার তৈরী করতে চান অনেকেই। এই লেখার মাধ্যমে এটি তৈরী করবার প্রয়োজনীয় ক্যালকুলেশন…

June 16, 2017

তৈরি করুন সহজ কোড লক সিকিউরিটি সুইচ

কোড লক সিকিউরিটি সুইচ আমরা প্রায়ই মুভিতে দেখি। যেখানে নির্দিষ্ট কোড ঢুকানোর পর কোন সুইচ…

June 12, 2017

মাল্টিমিটার দিয়ে ট্রানজিস্টর এর বেজ, ইমিটার ও কালেক্টর লেগ বের করা

মাল্টিমিটার দিয়ে কিভাবে কোনো ট্রানজিস্টর এর বেজ, ইমিটার ও কালেক্টর (Base, Emitter & Collector) বের…

June 2, 2017