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

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

7
1048

io_ports_input_real

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

io_ports_intro_input

 

পুশবাটন দুটি ২৩ ও ২৪ নাম্বার পিন (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;} এটিতে কি হতে পারে তা সহজেই অনুমেয় (!=উলটা)।

 

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() ফাংশনের সাথে প্রোগ্রামিটিক্যালি যুক্ত করা হয়েছে।

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

7 COMMENTS

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

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

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

  2. 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…

    • পার্থক্য আর্কিটেকচারে। রেজিষ্টার ভিন্ন, ম্যামোরী অর্গানাইজেশন ভিন্ন ফলে কোডিং ও ভিন্ন। একটায় লেখা কোড আরেকটায় কাজ করেনা, যদিও একই ধরনের কাজ করানো যায় তাদের স্ব স্ব কোডিং এর মাধ্যমে।

      প্রতিটা মাইক্রোর আলাদা আলাদা আই ডি ই আছে সেগুলিতে কোড লিখতে পারবেন। এভি আরের জন্য এভি আর ষ্টুডিও, উইন এভিয়ার কিংবা আরডুইনো আই ডি ই ব্যাবহার করতে পারেন।

      মুভিং ডিসপ্লে সম্পর্কে কমেন্টে বলা সম্ভব নয়। নেটে প্রচুর উদাহরন, ভিডিও পাবেন।

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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.