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

এই কিস্তিতে আমরা মাইক্রোকন্ট্রলারের ইনপুট কন্ট্রলের সাথে পরিচিত হব। ইনপুট হিসাবে সবচেয়ে সহজ ডিভাইস দুটি পুশ বাটন নির্বাচন করি এবং নিচের মতো সার্কিট সাজাইঃ

 

পুশবাটন দুটি ২৩ ও ২৪ নাম্বার পিন (PC0 , PC1) কে গ্রাউন্ডে যুক্ত করে। এখন নিচের কমান্ড দেইঃ

///////////////////////
#include <avr/io.h>
int main (void)
{
 DDRD  = 0b11111111;   // All outputs
 DDRC  = 0b11111100;   // set PC0 & PC1 to input
 PORTC = 0b00000011;   // set PC0 & PC1 to high
 while(1)
 {
  PORTD = PINC;
 }
}

# DDRD  = 0b11111111;  পোর্ট D এর সব পিনকে আউটপুট হিসাবে সেট করে

# DDRC  = 0b11111100; কমান্ড C পোর্টের ডানের দুই বিট (, PC1) কে ইনপুট হিসাবে সেট করে।

# PORTC = 0b00000011;   কমান্ড PC0 , PC1 =1 বা হাই হিসাবে সেট করে।

while(1){PORTD = PINC;} কমান্ড পোর্ট D এর আউটপুটের দশা pinC এর অনুরূপ করে। যেমন যতক্ষন পুশবাটন চাপা না হয় PC0 =1 বা হাই থাকে ততক্ষন PD0=1 বা হাই থাকে। মানে PD0 এর লেড জ্বলতে থাকে। PC0 এর যুক্ত পুশবাটন চাপার সাথে সাথে তা গ্রাউন্ডে যুক্ত হলে PC0=0 হয়ে যায় আবার যেহেতু PC0=PD0 তাই PD0 এর সাথে যুক্ত লেড (LED) বন্ধ হয়ে যায়।

while(1){PORTD = !PINC;} এটিতে কি হতে পারে তা সহজেই অনুমেয় (!=উলটা)।

Related Post

 

PINx & _BV(y)) ম্যাক্রোটি দিয়ে আমরা ইনপুটপিনের অবস্থা চেক করা যায়। যেমন নিচের কোড দিয়ে PINC এর 0 পিনে যুক্ত (PC0) পুশবাটন চেপে আমরা যে কোন ফাংশন এক্সিকিউট করতে পারিঃ

////////////////////
if ((PINC & _BV(0))==0) //if button on PC0 is pressed
{
 any_function();
}

 

অথবা নিচের bit_is_set (মানে, হাইনাকি?) বা bit_is_clear (লো নাকি?) ম্যাক্রো দিয়ে বিট চেক করা যায়। যেমন নিচে PINC এর 0 পিনটিকি বন্ধ তা চেক করা হচ্ছে।

/////////////////////
if (bit_is_clear(PINC,0)) //if button on PC0 is pressed
{
 any_function ();
}

 

এখন ম্যাক্রো দিয়ে কিভাবে ফাংশন এক্সিকিউট করি তা দেখি

//////////////////////////
#include <avr/io.h>
#include <util/delay.h>
void blink_3_times(void)
{
 for (int i=0;i<3;i++)
 {
  PORTD = 0b11111111;
  _delay_ms(250);
  PORTD = 0b00000000;
  _delay_ms(250);
 }
}

void sweep()
{
 PORTD = 0b10000000;
 for (int i=0;i<8;i++)
 {
  _delay_ms(100);
  PORTD >>= 1;
 }
}

int main (void)
{
 DDRD  = 0b11111111;   // All outputs
 DDRC  = 0b11111100;   // set PC0 & PC1 to input
 PORTC = 0b00000011;   // set PC0 & PC1 to high
 while(1)
 {
  if (bit_is_clear(PINC,0)) //if button on PC0 is pressed
  {
   blink_3_times();
  }
  if (bit_is_clear(PINC,1)) //if button on PC1 is pressed
  {
   sweep();
  }

 }
}

এখানে   blink_3_times() , sweep() নামে দুটি ফাংশন তৈরী করা হয়েছে। প্রথম ফাংশনটি দ্বারা PORTD এর প্রতিটি লেড কে ৩ বার ফ্লাশিং করা হয়। পরের ফাংশনটি দ্বারা লেডগুলাকে সুইপ (একপাশ থেকে ক্রমান্বয়ে জ্বলে নিভে যাওয়া) করা হয়। blink_3_times() ফাংশনটি প্রথম পুশ বাটনের সাথে আর দ্বিতীয় বাটনটিকে sweep() ফাংশনের সাথে প্রোগ্রামিটিক্যালি যুক্ত করা হয়েছে।

<< ৪র্থ কিস্তি এখানে                          ৬ষ্ঠ কিস্তি এখানে >>

This post was last modified on October 26, 2015 11:25 pm

কমেন্ট দেখুন

  • স্যার,
    অামি প্রোগ্রামিং শিখতে চাই,

    কোথাই কম খরচে ভাল মােনর প্রোগ্রাম শিখানু হয়, দয়া করে জানালে উপকৃত হয়তাম।

    Cancel reply

    Leave a Reply

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

    • প্রোগ্রামিং শিখতে ভাল বইয়ের কোন বিকল্প নাই। ইন্টারনেটে প্রচুর ভাল বই ফ্রি ডাউনলোড পাওয়া যায়। তবে মাইক্রোকন্ট্রলার প্রোগ্রামিং আর কম্পিউটার প্রোগ্রামিং-এর বেসিক এক হলেউ কিছু পার্থক্য আছে। তাই টার্গেট আগে ঠিক করে এগুনো দরকার। এখানে AVR C দিয়ে প্রোগ্রামিং করা হয়েছে যার কিছু ম্যাক্রো আছে যা শুধু AVR Microcontroller এর ক্ষেত্রেই প্রযোজ্য। বই ছাড়াও অনলাইনে অফুরন্ত রিসোর্স, ভিডিও, ফোরাম ও উদাহরন আছে। কষ্টকরে হলেও একবার সেগুলিকে কাজে লাগালে কোর্স করার প্রয়োজন হয়না। তাছাড়া বাংলাদেশে ভাল প্রোগ্রামিং কোর্স দুষ্প্রাপ্য।

      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*

  • pic micro r avr er moddhe parthokko ta tik ki? progam likhar jonno ki soft use korbo? moving text display banabo kivave? bistarito jante ci...

    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*

  • Thanks a lot.

    Cancel reply

    Leave a Reply

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

  • AVR এ PortD তে Output হিসেবে এক ধরনের ডিজাইন চলতে থাকবে এবং একই সাথে PortC তে Output হিসেবে অন্য ধরনের ডিজাইন চলবে। এই Program লিখতে হলে কি ধরনের কমান্ড লিখতে হবে?

    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