Home Blog Page 14

কোড আপলোডঃ ধারনা (মাইক্রোকন্ট্রোলারের সহজ পাঠঃ ৬ষ্ঠ কিস্তি)

3

আমরা মাইক্রো বা মাইক্রোকন্ট্রোলার সম্পর্কে ধারনা পেলাম। প্রোগ্রামিং নিয়েও ধারনা হল। কিন্ত এই মাইক্রো চিপে প্রোগ্রাম ভরব কি ভাবে? (মাইক্রোকন্ট্রোলার এর সংক্ষেপ মাইক্রো বোঝানো হয়েছে)

হুম, এবারে এটা নিয়েই আলোচনা হবে। কিন্তু তার আগে একটু ফ্ল্যাশ ম্যামোরী নিয়ে আলোচনা করতে চাই বুঝার সুবিধার্থে।

ফ্লাশ মেমোরি কি

আগের দিনে প্রোগ্রামেবল আই সি বা মাইক্রো তে প্রোগ্রাম করা ছিল খুব দূরহ কাজ। সে এক বিরাট ইতিহাস। এই সমস্যার সমাধানে যে যুগান্তকারী পরিবর্তন আনল এই এ ভি আর মাইক্রোকন্ট্রোলার চিপগুলা। এতে সর্বপ্রথম ফ্ল্যাশ মেমোরী যুক্ত করা হয়। ফ্লাশ মেমোরি শব্দটি খুব পরিচিত হওয়ার কথা। কারন আমরা সবাই SD মেমোরি কার্ড খুব ভাল করেই চিনি।

আজকাল যারা এন্ড্রয়েড বা স্মার্টফোন ব্যবহার করে তারা অবশ্যই চিনে। এই SD কার্ড আসলে ফ্লাশ মেমোরি ছাড়া কিছুই না। এছাড়া সনি কম্পানির MMC বা বিভিন্ন ডিজিটাল ক্যামেরায় ব্যবহৃত কার্ডগুলো আসলে ফ্লাশ মেমোরি (ভিন্ন ভিন্ন ফরম্যাটের জন্য ভিন্ন নাম)। নিচে একটি MMC কার্ড দেখানো হল-

MMC কার্ড আসলে ফ্ল্যাশ মেমোরি
MMC কার্ড আসলে ফ্ল্যাশ মেমোরি

এতে ৭ টি পিন দৃশ্যমান। এদের বিভিন্ন ফাংশন নিচের টেবিলে দেয়া হলঃ

Pin # Pin Name Pin Function
1 #CS Chip Select (Activate)
2 SI Serial In
3 GND Ground
4 VCC Power
5 SCK Data Clock
6 Not connected Not connected
7 SO Serial Out

 

মোটামুটি এই টেবিল থেকেই কোন পিনের কাজ কি ধারনা পাওয়া যায়।

  • পিন ১ এ সিগনাল আসলে মেমোরি এক্টিভ হয় ফলে ডাটা পড়া বা লেখা সম্ভব হয়।
  • ৫ নং পিনের ক্লক স্পিডের উপর ভিত্তি করে ২ নং পিনের মাধ্যমে ডাটা লিখা বা ৭ নং পিনের মাধ্যমে ডাটা পড়া। যেমন ক্লক 100KHz স্পিডে প্রতি সেকেন্ডে 100,000 বিট তথ্য লিখা/পড়া যায়।
  • ৬ নং পিন কোন কাজের না এটির কোন ইন্টার্নাল কানেকশন থাকেনা। সুতরাং একটি ফ্ল্যাশ কার্ডের ৬ টি কার্যকরী পিন থাকে।

কিভাবে একটি কম্পিউটার মেমোরি কার্ড এ ডাটা লিখে/পড়ে

ডাটাকার্ড টাকে একটি রিডারে প্রবেশ করানো হয়। রিডারটি একটি ড্রাইভারের মাধ্যমে পিসির (বা ম্যাক) সাথে যোগাযোগ রক্ষা করে। ড্রাইভারটি পিসিকে বলে দেয় কি স্পিডে ডাটা লেন/দেন সম্ভব। পিসি ডাটা ম্যামোরীকার্ডে প্রয়োজনীয় ভোল্টেজ ও ক্লক স্পিড সাপ্লাই দেয় ও চিপ সিলেক্ট এক্টিভ করে। পিসির চাহিবা মত ২ নং পিন দিয়ে ডাটা রাইট/লিখে অথবা ৭ নং পিন দিয়ে ডাটা রিড/পড়ে।

কম্পিউটার কিভাবে মাইক্রো তে ডাটা লিখে/পড়ে

এভিআর মাইক্রোতে (AVR Microcontroller) প্রধানত তিন ধরনের মেমোরী লোকেশন থাকে

  1. SRAM
  2. EEPROM
  3. Flash Mamory

SRAM খুবই ক্ষনস্থায়ী মেমোরি। যেমন আমরা বড় যোগ বিয়োগ করার সময় ৯ এর বেশী সংখা হলে (১০ হলে ০ লিখে হাতে ১ রাখি) কিছু সময়ের জন্য হাতে রেখে দেই পরক্ষনেই আবার তা কাজে লাগিয়ে দেই তদ্রুপ। যেমন সাধারন কোন ডিক্লারেশন যেমন int a কে কম্পাইলার সাধারন ভাবে SRAM এ স্টোর করে।

EEPROM একটু স্থায়ী ধরনের মেমোরী। এতে চিপের জীবনকালে সাধারন ভাবে পরিবর্তিতি হয়না এমন (কনফিগারেশন) ডাটা রাখা হয়।

Flash Memory হলো সেই লোকেশন যেখানে আমরা আমাদের কম্পাইল করা (পরে আলোচিত) বাইনারি প্রোগ্রাম (.hex)রাখি। যা উইন্ডোজের .exe ফাইলের সমতুল্য। এটির মাধ্যমেই মাইক্রোচিপ গুলি উদ্দিষ্ট কার্যক্রম চালায়।

ফ্লাশ কার্ডের মতো প্রতিটা মাইক্রো’র বিশেষ কিছু পিন থাকে যাদের প্রোগ্রামিং পিন বলে (সাধারন ভাবে মাইক্রোর পিন গুলি মাল্টি রোল পিন মানে একই পিন দিয়ে ভিন্ন ভিন্ন কাজ করা যায় এ ধরনের। মূলত এগুলি দিয়ে ইনপুট/আউটপুটের কাজ করা হয়। কিন্তু প্রোগ্রামিং এর সময় এরা প্রোগ্রামিং পিনে রূপ নেয়)। নিচে লাল চিহ্নিত পিন গুলি প্রোগ্রামিং এর সময় প্রোগ্রামিং পিনে পরিনত হয়-

attiny2313 মাইক্রো'র পিন আউট
attiny2313 মাইক্রো’র পিন আউট

লক্ষ্য করলে দেখা যায় ফ্ল্যাশ কার্ডের মতো মাইক্রো এর ৬ টি কার্যকর পিন আছে। শুধু চিপ সিলেক্ট নামে সরাসরী কোন পিন নাই তার পরিবর্তে আছে রিসেট পিন। কিন্তু নাম ভিন্ন হলেও কাজ কিন্তু একই। রিসেট পিন চিপের স্বাভাবিক কার্যক্রমের সময় VCC ভোল্টেজের সমান থাকে। কিন্তু প্রোগ্রামিং-এর সময় রিসেট পিনকে GND এর সমান করতে হয়।

এখানে কার্ড রিডার/রাইটারের পরিবর্তে একটা যন্ত্র থাকে যাকে প্রোগ্রামার বলে। প্রোগ্রামারটি নির্দিষ্ট ড্রাইভারের সাহায্য পিসি (বা ম্যাক) এর সাথে যোগাযোগ রক্ষা করে ক্লক স্পিড ও ভোল্টেজ চিপে সাপ্লাই দেয়। এবং-

  • MOSI (MOSI – Master Out Serial In) পিন দিয়ে ডাটা রাইট আর
  • MISO (MISO – Master In Serial Out ) পিন দিয়ে ক্লক স্পিডে ডাটা রিড করে।

AVR সিস্টেমে দুই ধরনের পিন হেডার ব্যবহার করা হয় ৬ পিনের, ১০ পিনের (আভ্যন্তরিন কানেকশন একই, ৬ পিনের)

মাইক্রো'র হেডার পিন
মাইক্রো’র হেডার পিন

লক্ষ্যনীয় যে ১০ পিনের হেডারে ৩ টা অতিরিক্ত গ্রাউন্ড পিন আর একটা অব্যবহৃত পিন (NC) থাকে। প্রত্যেকটা ভোল্টেজ পিনকে (MISO, MOSI, SCK) আলাদা গ্রাউন্ড দেবার অভিপ্রায়ে এই সব অতিরিক্ত গ্রাউন্ড পিনের আবির্ভাব।

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

মাইক্রোকন্ট্রোলারের জন্য ৬ পিনের হেডার সংযুক্তি
মাইক্রোকন্ট্রোলারের জন্য ৬ পিনের হেডার সংযুক্তি
এভির মাইক্রোকন্ট্রোলারে হেডার পিনের সংযুক্তি
এভির মাইক্রোকন্ট্রোলারে হেডার পিনের সংযুক্তি

<< মাইক্রোকন্ট্রোলার নিয়ে ৫ম কিস্তি এখানে ৭ম কিস্তি এখানে >>

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

7

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

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

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

3

io_ports_real

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

# Port B (PB0 to PB7)

# Port C (PC0 to PC6)

# Port D (PD0 to PD7)

I-O Pins-AVR

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

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

io_ports_intro_04_med io_ports_intro_03_lrg

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

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)

io_ports_intro_05_med

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

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

প্রথম প্রোগ্রামটি একটি বৈচিত্রহীন কাজ। কারন ঐ কাজ করার জন্য 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);

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); কমান্ডের মাধ্যমে ১০০ মিলি সেকেন্ডের একটা অপেক্ষা করা হয়েছে। এতে মনে হবে একটা আলো বাম থেকে ডানে এগিয়ে যাচ্ছে।

 

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

 

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

 

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

রিমোট কন্ট্রোল টেস্টার সার্কিট

5
রিমোট টেস্টার সার্কিট ভেরো বোর্ডে বানানোর পরে

রিমোট টেস্টার কেন ব্যবহার করে- হঠাৎ আপনার টিভি রিমোট কাজ করা বন্ধ করে দেয় তাহলে আপনি কি করবেন? কিভাবে বুঝবেন সমস্যা রিমোটে নাকি আপনার টিভিতে? তখন এই রিমোট টেস্টার সার্কিটটা আপনাদের কাজে লাগবে। অথবা, ফ্যাক্টরিতে যেখানে প্রচুর রিমোট কন্ট্রোল তৈরি হয় সেখানে এ ধরনের টেস্টার উপযোগী। এর সামনে রিমোট নিয়ে রিমোটের কোন বোতাম চাপলে সার্কিটে অবস্থিত এলইডি লাইট টা যদি জ্বলতে থাকে তাহলে আপনার রিমোটটি ভাল আছে। আর না জ্বললে রিমোট নষ্ট। আসুন সার্কিট টা দেখি-

রিমোট টেস্টার এর সার্কিট ডায়াগ্রাম
রিমোট টেস্টার এর সার্কিট ডায়াগ্রাম

রিমোট টেস্টার সার্কিট এর পার্টস লিস্টঃ

  • রেজিস্টারঃ- 47 ওহম- ১টি
  • 1K – ২টি
  • 10K – ১টি
  • ডায়োডঃ- 1N4007 – ১টি
  • ট্রানজিস্টারঃ- BC557 – ১টি
  • বিবিধঃ- লাল এলইডি -১টি
  • ইনফ্রারেড সেন্সর – ১টি

সকল পার্টস যেকোন ইলেকট্রনিক্স এর দোকানে পাওয়া যাবে। ইনফ্রারেড সেন্সর টি যেকোন মানের হলেই হবে। আপনি শুধু দোকানে গিয়ে বলবেন আমাকে ইনফ্রারেড সেন্সর দিন যেটা টিভিতে ব্যবহার করা হয়। এবার আমার তৈরি সার্কিট টা দেখুন।

রিমোট টেস্টার সার্কিট

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

ইনফ্রারেড সেন্সর
ইনফ্রারেড সেন্সর
ট্রানজিস্টর এর লেগ
ট্রানজিস্টর এর লেগ
এলইডি
এলইডি

এলইডির লম্বা পা/লেগ টি পজিটিভ আর ছোট পা টি নেগেটিভ । আশা করি বুঝতে অসুবিধা হবে না ।

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

রিমোট টেস্টার সার্কিট এর থ্রিডি
রিমোট টেস্টার সার্কিট এর থ্রিডি ভিউ

রিমোট টেস্টার সার্কিট PCB
রিমোট টেস্টার সার্কিট PCB

পিসিবিতে J1 এর স্থানে সেন্সর বসবে আর J2 এর স্থানে 6 ভোল্ট ব্যাটারী কানেক্ট হবে। কোন অসুবিধা হলে কমেন্ট করবেন। সবার জন্য শুভকামনা রইল। আল্লাহ হাফেজ। রিমোট কন্ট্রোল টেস্টারের পিসিবি ফাইল নিচে থেকে ডাউনলোড করে নিন Remote tester PCB

খুব সহজ ১০ ওয়াট এ্যামপ্লিফায়ার সার্কিট

3
সহজ ১০ ওয়াট এ্যামপ্লিফায়ার সার্কিট
সহজ ১০ ওয়াট এ্যামপ্লিফায়ার সার্কিট

আজকে নিয়ে এসেছি খুব সহজ একটা এ্যামপ্লিফায়ার সার্কিট। সার্কিটটা আমি নিজে তৈরি করে ব্যবহার করেছি। খুব ভাল সাউন্ড, কোন নয়েজ নেই বললেই চলে।

তাহলে প্রথমে সার্কিটটা দেখে নিই-

সার্কিট ডায়াগ্রামঃ

১০ ওয়াট এ্যামপ্লিফায়ার সার্কিট ডায়াগ্রাম
১০ ওয়াট এ্যামপ্লিফায়ার সার্কিট ডায়াগ্রাম

পার্টস লিস্ট:

  • ১. TDA2030  IC – ১টি
  • ২. 100K – ১টি
  • ৩. 1K – ১টি
  • ৪. 33K- ১টি
  • ৫. 1R ( 1 ohom) – ১টি
  • ৬. 10uf/16v – ১টি
  • ৭. 1uf/16v -১টি
  • ৮. 0.1uf (104pf) -১টি

এবার এই এ্যামপ্লিফায়ার এর জন্য পাওয়ার সাপ্লাই সার্কিট দেখে নিই

১০ ওয়াট এ্যামপ্লিফায়ার এর পাওয়ার সাপ্লাই
১০ ওয়াট এ্যামপ্লিফায়ার এর পাওয়ার সাপ্লাই

 

পাওয়ার সাপ্লাইয়ের জন্য পার্টস লিস্টঃ

সার্কিটটা ডুয়াল পাওয়ার সাপ্লাইয়ে চলে অর্থাৎ পজেটিভ (+), নেগেটিভ (-) আর গ্রাউন্ডসার্কিট ডায়াগ্রামটা দেখলে সহজে বুঝতে পারবেন ।

আসুন এর কিছু থ্রিডি ভিউ (3D view) দেখে নিইঃ

এ্যামপ্লিফায়ার সার্কিট এর 3D view

১০ ওয়াট এ্যামপ্লিফায়ার এর 3D view
১০ ওয়াট এ্যামপ্লিফায়ার এর 3D view

পাওয়ার সাপ্লাইয়ের 3D view

পাওয়ার সাপ্লাইয়ের 3D view
পাওয়ার সাপ্লাইয়ের 3D view

আসুন এর পিসিবি ডিজাইন দেখে নিইঃ

এ্যামপ্লিফায়ার সার্কিট

1

পাওয়ার সাপ্লাই

2

এর সার্কিট ডিজাইন ও পিসিবি ডিজাইন একসাথে জিপ ফাইল করে পোস্টের শেষে দেওয়া হয়েছে । পিসিবি ডিজাইন প্রোটিয়াস দিয়ে করা ।

নোট:

  • ১. ট্রান্সফর্মার 12-0-12 ভোল্টের এবং 3 এ্যাম্পিয়ারের ব্যবহার করবেন । 3 এ্যাম্পিয়ারের বেশি ব্যবহার করলে আইসিটা ক্ষতিগ্রস্থ হতে পারে ।
  • ২. পাওয়ার সাপ্লাইয়ের ক্যাপাসিটর 2200uf এর বেশি মানের ব্যবহার করবেন না ।
  • ৩. TDA2030 আইসির সাথে অবশ্যই ভাল মানের হিটসিংক ব্যবহার করবেন ।
  • ৪. গ্রাউন্ড চিহ্ন দেওয়া পয়েন্টগুলা সব এক সাথে যুক্ত করে দিতে হবে । এ্যামপ্লিফায়ারের জন্য কোন মেটাল কেসিং ব্যবহার করলে গ্রাউন্ড পয়েন্ট গুলা একসাথে করে কেসিংয়ের সাথে ঝালাই করে দিতে হবে । নিচে গ্রাউন্ড চিহ্নটি দেওয়া হল

kT2jk

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

তাহলে তৈরি হয়ে যান ক্ষুদে বিজ্ঞানী হওয়ার জন্য। সবার জন্য শুভকামনা রইল ।

সব সহ জিপ ফাইল নিচ থেকে ডাউনলোড করে নিন

10w amp circuit

আল্লাহ হাফেজ

 

 

I/O পোর্ট: মাইক্রোকন্ট্রলারের সহজ পাঠ (৩য় কিস্তি)

0

I-O Pins-AVR

(এই কিস্তি ও পরবর্তি কিছু কিস্তিতে শুধু AVR MCU নিয়ে বিস্তারিত আলোচনা হবে। পরবর্তি অন্য কোন কিস্তিতে PIC MCU নিয়ে আলোচনার ইচ্ছা রাখি)

পোর্ট মানে দরজা। কোন বদ্ধ ক্ষত্রে অবাধ প্রবেশাধিকার নিয়ন্ত্রনের উদ্দেশে কিছু নিয়ন্ত্রিত পয়েন্টকে পোর্ট বা দরজা বলে। যেমন আমদের সদর দরজা। কিংবা একটি দেশকে বিবেচনা করলে তার বর্ডার গুলি সিলড থাকে শুধু কিছু পোর্ট যেমন এয়ার পোর্ট, ল্যান্ড পোর্ট বা সী পোর্টে নিয়ন্ত্রিত অবস্থায় বহিরাগত ব্যাক্তি বা মালামাল প্রবেশ-নির্গমন করানো হয়। তেমনি মাইক্রোকন্ট্রালারও তার উদ্দিষ্ট কাজের জন্য তার আভ্যন্তরিন ক্রিয়াকলাপের পাশাপাশি বাহ্যিক জগতের সিগনাল বা ডিভাইসের সাথে যোগাযোগ রক্ষা করে। যেমন একটি টেম্পারেচার মাপার যন্ত্রে একটি সেনসর থাকে যা তাপকে বৈদুতিক ভোল্টে রূপান্তরিত করে। এই ভোল্টেজকে মাইক্রোকন্ট্রলার ইনপুট হিসাবে গ্রহন করে প্রয়োজনীয় ক্যলকুলেশন সেরে আউটপুট হিসাবে ডিসপ্লে ডিভাইসে পাঠায়। মাইক্রোকন্ট্রলারের পিন/পা গুলি বাহ্যিক জগতের সাথে এই যোগাযোগ ঘটায়।

বাস্তবিক জগতে যেমন এয়ার পোর্ট, ল্যান্ডপোর্ট, বা সী পোর্ট দিয়ে আমদানী বা রপ্তানী দুটোই সম্ভব। মাইক্রো কন্ট্রলারের পোর্টগুলি তদ্রুপ ইচ্ছামত ইনপুট (আমদানী) বা আউটপুট (রপ্তানী) করা সম্ভব। সাধারনত একগুচ্ছ পিন নিয়ে এক একটি পোর্ট তৈরী হয় (যেমন এক গুচ্ছ লেন দিয়ে ল্যান্ড পোর্ট, আরেকগুচ্ছ রানওয়ে দিয়ে এয়ারপোর্ট, বা একগুচ্ছ পল্টুন দিয়ে সী পোর্ট)।

 

যেমন কিছু AVR মাইক্রো কন্ট্রোলারে ৩২ I/O পিন আছে। এদের ৪ টি পোর্টে যেমন A, B, C, D ভাগ করা হয় প্রতিটি পোর্টের অধিনে ৮ টি I/O পিন থাকে। আবার প্রতিটি পোর্টের সাথে ৩টি রেজিষ্টার সংশিষ্ট আছে যেমনঃ

  • The DDRx Register
  • The PORTx Register
  • The PINx Register

(এখানে x কে A, B, C, D দ্বারা প্রতিস্থাপিত করলে ঐ পোর্টের রেজিষ্টার পাওয়া যায়। যেমন DDRA)

 

DDR (Data Direction Register) :

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

যেমন শাহজালাল এয়ারপোর্ট-এ ধরা যাক ৮ টি রানওয়ে আছে এর কতক রানওয়েকে ল্যান্ডিং অনলি (ইনপুট পিন) আরা কতক রানওয়েকে টেকঅফ অনলি (আউটপুট পিন) করতে হবে যাতে ব্যাস্ত এয়ারপোর্টে সংঘর্ষ এড়ানো যায়। তাই রান ওয়ের পাশে বাতি বসানো হলো যে সব রানওয়েতে বাতি নিভে থাকবে (০) সেগুলিতে কেবল ল্যান্ডিং হবে আর যেগুলিতে বাতি জ্বলবে (১) তাতে শুধু টেক অফ করা যাবে। পাইলটরা প্রতিমূহুর্তে এই ষ্টাটাস দেখে নির্ধারন করবেন কোন রানওয়েতে নামা বা উঠা যাবে। তাই

ধরা যাক সকাল ১০ টায় ষ্ট্যাটাস এমন 10110001 । তার মানে দাঁড়ায় রানওয়ে ১,৩,৪,৮ দিয়ে টেকঅফ হবে আর ২, ৫,৬,৭ দিয়ে ল্যান্ডিং হবে।

MCU এর পরিভাষায় DDR C = 10110001 করলে AVR MCU Port C এর ১,৩,৪,৮ পিন আউটপুট পিন আর ২, ৫,৬,৭ পিন ইনপুটের জন্য প্রস্তুত হবে।

Port Register:

ধরাযাক কোন মুহুর্তে এয়ারপোর্টে অবস্থিত করা প্লেন গুলির জন্য ৮ টি রানওয়েতে প্রস্তুত। ৮ রানওয়ের সাথে ৮ টি টার্মিনাল সংশ্লিষ্ট । প্লেন কোন টার্মিনাল দিয়ে থেকে যাত্রিদের প্লেনে পাঠানো হবে আর কোন টার্মিনাল দিয়ে যাত্রিদের বের করে আনা হবে তা DDR রেজিষ্টার থেকে বুঝা যাবে। ধরাযাক প্লেনটেক টেকঅফ আর ল্যান্ডিং আলাদা অফিস হ্যান্ডেল করে। এখন DDR রেজিষ্টারের অবস্থা দেখে টেকঅফ অফিস বুঝতে পারে যে কোন কোন টার্মিনালে যাত্রি পাঠানো যাবে। তাদের হাতে অপশন এই মুহূর্তে শুধু ১,৩,৪,৮ টার্মিনালে প্লেন শিডিল করা কারন DDR রেজিষ্টার তাদের শুধু ঐ টার্মিনাল টেকঅফের জন্য বরাদ্দ করেছে। এখন ঐ তাদের হাতে রেজিশষ্টারের অবস্থা এমন হবেঃ – ০ – -০ ০ ০ – । ড্যাশ (-) চিহ্নিত স্থানে তারা ইচ্ছা মত শিডিউল করতে পারবে (০ বা ১ দিয়ে)। যদি প্লেন শিডিউল করে তাহলে বিট ১ আর না করলে ০ বিট সেট করা হয়। ধরা যাক ১০ টায় DDR কতৃক অনুমুদিত সবগুলা টার্মিনালে ফ্লাইট শিডিউল করা হলো তবে তাদের রেজিষ্টারের মান যা দাড়াবেঃ ১০১১০০০১। এখন ১১ টায় ৩ নং টার্মিনালে ফ্লাইট শিডিউল নাই। তাই তাদের রেজিষ্টার হবে ১০০১০০০১।

MCU এর পরিভাষায় Port রেজিষ্টার MCU থেকে যে ডাটা গুলি বাইরে যাবে তার বিট তথ্য গুলি জমা রাখে। আমরা এই বিটগুলি পরিবর্তন করে এর আউটপুট ডিভাইসগুলি কন্ট্রোল করি।

কিছু ব্যাতিক্রমি অবস্থা চিন্তা করা যাকঃ ধরা যাক PortC এর ৮ টি পিনের সাথে ৮টি এল ই ডি বাতি কানেক্ট করা হলো এরপর PortC = 11111111 হিসাবে ম্যানিপুলেট করা হলো কিন্তু DDR = 10110001 হিসাবে সেট। তাই DDR এর মতে শুধু ১,৩,৪,৮ পিনের সাথে যুক্ত আউটপুট ডিভাস (যেমন এল ই ডি বাতি) গুলি আউটপুট বিট রিসিভ করতে পারবে। তাই শুধু ঐ এল ই ডি গুলিই জ্বলবে আর বাকি বাতিগুলি নিভে থাকবে। তার মানে সত্যিকার আউটপুট দাঁড়াবে 10110001 তার মানে DDR Register একটা মাস্ক বা ছাকনির মতো আচরন করে।

 

Pin Register:

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

ব্যাতিক্রমি দৃষ্টান্ট আবার ব্যাবহার করা যাক, ধরাযাক কোন মূহুর্তে Port A এর ৮ টি পিনে ৮ টি ব্যাটারি যুক্ত করা হল। এর পর Pin A রেজিষ্টারকে এভাবে ম্যানিপুলেট করা হলো PinA = 11111111 । এবার আসুন আমরা DDR রেজিষ্টারের ছাকনি দিয়ে ইনপুট ডাটাকে ছাকি। ছাকনি আমাদের বলছে শুধু ২,৫,৬,৭ নং বিট ইনপূট হিসাবে ছাকনি দিয়ে প্রবেশ করবে বাকি বিট শুন্য হবে কারন বাকি বিট গুলা আউটপুট হিসাবে পরগনিত হবে। তবে ইনপুট যা হবে তা হলো 01001110

 

চিত্রে AVR MCU এর বিভিন্ন পিন দেখানো হয়েছে যেখানে PA0 – PA7, A পোর্টের পিন ও PB0 – PB7, B পোর্টের পিন ইত্যাদি।

PIC MCU তে অনুরূপ A, B, C, D, E ইত্যাদি পোর্টগ্রুপ আছে তাদের সংশ্লিষ্ট রেজিষ্টার হলো TRISx রেজিষ্টারগুলো। তবে সবগুলো পোর্টের অধিনে ৮ টি করে পিন নাও থাকতে পারে। যেমন PIC 16F877 এর PortA তে ৬ বিট বা ৬ ইনপুট/আউটপুট পিন আছে। আবার PortE তে আছে ৩ পিন।

<< ২য় কিস্তি এখানে                                            ৪র্থ কিস্তি এখানে >>

ডিজিটাল এসি ভোল্ট মিটার (0-400 VAC)

8

আজকে ডিজিটাল এসি ভোল্ট মিটার নিয়ে লিখছি। গত পর্বে ডিজিটাল ডিসি ভোল্ট মিটার প্রজেক্ট ছিল তার ধারাবাহিকতায় এবার এসি ভোল্ট মিটার প্রজেক্ট।

ভোল্ট মিটার কি?

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

এসি ভোল্ট মিটারের ব্যবহার

এসি বর্তনি বা এসি ডিভাইস এর ব্যাবহার যেখনে হয় সেখনেই এই মিটার ব্যাবহার করা যায় বা দেখা যায়, MDB (মেইন ডিস্ট্রিবিউশন বোর্ড)-এ, মেইন সুইচ এর পাশে এর ব্যবহার অনেক।

এছাড়া অনেক ধরনের প্রোডাক্ট এর (ফ্রন্ট প্যানেল) সামনের দিকে এই ভোল্ট মিটার এর ব্যাবহার দেখা যায়। ভোল্টেজ স্টাবিলাইজার(AVR), IPS সহ অনেক প্রডাক্ট-এ এর ব্যাবহার উল্লেখযোগ্য।

ডিসি ভোল্ট মিটারের মতো এসি ভোল্ট মিটার খুবই গুরুত্বপূর্ণ একটি সহযোগী যন্ত্র। আর তা যদি তৈরি হয় সহজ মাত্র কিছু পার্টস এর সংযোগে,  তাহলে তো সোনায় সোহাগা। হবিস্ট থেকে শুরু করে ইঞ্জিনিয়ার সবার জন্য উপযোগী।

ডিজিটাল এসি ভোল্ট মিটার চালু অবস্থার চিত্র
ডিজিটাল এসি ভোল্ট মিটার চালু অবস্থার চিত্র

ডিভাইসের ধরন

এটা তৈরির জন্য দুই ধরনে ডিভাইস ব্যাবহার করা যায় , ডিজিটাল আইসি বেজ ও মাইক্রোকন্ট্রোলার বেজ। পূর্বের ডিসি ভোল্ট মিটার মতই মাইক্রোকন্ট্রোলার বেজ নিয়ে আমরা এই প্রজেক্ট বানব, কেননা এই মাইক্রোকন্ট্রোলার বেজ সিস্টেম সুবিধা জনক। যেমন খরচ কম হয়, জটিলতা কম, সার্কিট ছোট। ডিজিটাল আইসি টি মনে হয় ৩০০-৫০০ টাকার মত স্টেডিয়াম মার্কেট-এ। প্রজেক্ট টি বানাতে ১৪০ টাকার মত, স্থান ভেদে ১৮০ টাকা হতে পারে।

ভোল্টমিটার এর স্কিমেটিক ডায়াগ্রাম
ভোল্টমিটার এর স্কিমেটিক ডায়াগ্রাম

প্রজেক্ট এর বর্ণনা

প্রজেক্ট টি PIC 16F676 মাইক্রোকন্ট্রোলার দিয়ে বানাব। ডিসি ভোল্ট মিটার এর অনুরুপ ইনপুট ভোল্ট মেজর করে MCU(মাইক্রোকন্ট্রোলার) এর internal adc কনভার্টার ও রেজিস্টারের নেট ওয়ার্ক। adc কনভার্টার ও রেজিস্টারের নেট ওয়ার্ক ভোল্টেজ কে বিভাজিত করে ইনপুট ভোল্ট পরিমাপ করে।

শুধু এসি ভোল্ট কে ডিসি তে পরিবর্তন করে নিতে হয় সেন্স এর জন্য। আর যা ডিজিটাল আকারে ৩ টি ৭ সিগমেন্ট ডিসপ্লে তে প্রদর্শিত হয়।

এটা ম্যাক্সিমাম ৪২৪ ভোল্ট পর্যন্ত ডিসপ্লে করে। ডিভাইস টি চালনা করার জন্য ৫ ভোল্ট ডিসি পাওয়ার প্রয়োজন, আর একে স্ট্যাবল করার জন্য 7805 রেগুলেটর IC ও ফিল্টারিং এর জন্য ক্যাপাসিটর ব্যাবহার করা হয়েছে।

৭ সিগমেন্ট কে ড্রাইভ করার জন্য ব্যাবহার করা হয় ৩ টি ট্রানজিস্টার ১০ টি রেজিস্টেন্স। একটি ভেরিয়েবল যা ভোল্ট কে এডজাস্ট করার জন্য । এছাড়া 5.1 জেনার ডায়োড ব্যবহার হয়েছে যাতে MCU এর ইনপুট পরিমাপের ভোল্টভোল্ট এর উপর না যায়।

এসি ভোল্ট মিটারটি আমরা অনেক প্রজেক্ট এ বা অনেক প্রডাক্ট এ লাগাতে পারি। এতে আমাদের প্রজেক্ট বা প্রডাক্ট এর মান কে বাড়িয়ে দিবে।

ভোল্ট মিটার এর পিসিবি লে আউট
ভোল্ট মিটার এর পিসিবি লে আউট

ভোল্ট মিটার প্রজেক্ট টি বানানোর সুবিধার্থে PCB ডিজাইন সহ Hex ফাইল, নিচে সংযুক্ত ফাইল আকারে দেওয়া হলো

AC Volt Meter (PCB design and HEX file)

ডিসি টু ডিসি কনভার্টার (২য় পর্ব)- ভোল্টেজ ডিভাইডার

25

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

ডিসি টু ডিসি কনভার্টারের শ্রেণীবিন্যাস

  1. ভোল্টেজ ডিভাইডার
  2. সুইচিং কনভার্টার

ডিসি টু ডিসি কনভার্টারের প্রধান দুটি ভাগের একটি হলো ভোল্টেজ ডিভাইডার, যার একটি বিশেষ শাখা হলো লিনিয়ার রেগুলেটর যেমন LM317, LM350, LM337, কিংবা 78xx সিরিজের রেগুলেটর আইসি।

ভোল্টেজ ডিভাইডার হলো রেজিস্টর বা ক্যাপাসিটর বা অন্যান্য ইলেকট্রনিক্স কম্পোনেন্ট দিয়ে তৈরি এমন একটি লিনিয়ার সিস্টেম, যা মূল ভোল্টেজকে (ইনপুট) দুই বা ততোধিক অংশে বিভক্ত করতে পারে। ভোল্টেজ ডিভাইডারের মধ্যে বহুল প্রচলিত দুটি ডিভাইডার হলো রেজিস্টিভ ভোল্টেজ ডিভাইডার এবং ক্যাপাসিটিভ ভোল্টেজ ডিভাইডার। এরমধ্যে রেজিস্টিভ ভোল্টেজ ডিভাইডারই সর্বাধিক ব্যবহৃত হয়। ফলে আলোচনার জটিলতা কমানোর জন্য এখানে শুধু রেজিস্টিভ ভোল্টেজ ডিভাইডার নিয়ে আলোচনা করবো।

কোনো ভোল্টেজকে কমিয়ে অপেক্ষাকৃত কম মানের ভোল্টেজ (Step Down) পাবার সবথেকে সহজ উপায় হলো ভোল্টেজ ডিভাইডার। নিচের চিত্রটি ভোল্টেজ ডিভাইডারের সাধারণরূপ।

ভোল্টেজ ডিভাইডার সার্কিট - সাধারণ রূপ
ভোল্টেজ ডিভাইডার সার্কিট

এখানে দুইটি রেজিস্টেন্স দিয়ে একটি সিরিজ নেটওয়ার্ক তৈরি করা হয়েছে, যার A ও C প্রান্তে ভোল্টেজ ইনপুট দিলে রেজিস্টেন্স দুটির মানের উপর ভিত্তি করে ইনপুট ভোল্টেজের কিছু অংশ R1 এবং কিছু অংশ R2 তে ড্রপ হয়। ফলে B বিন্দুতে ইনপুট ভোল্টেজের চেয়ে অপেক্ষাকৃত কম মানের ভোল্টেজ পাওয়া যায়।

B বিন্দু থেকে গ্রাউন্ডের সাপেক্ষে আউটপুট ভোল্টেজ Vout হিসাব করতে গেলে, কিংবা সার্কিটের যে কোনো অংশের ভোল্টেজ হিসাব করতে গেলে কার্শফের ভোল্টেজের সূত্র (kirchhoff’s voltage law or KVL) এবং ওহমের সূত্র সম্পর্কে জানা জরুরী। আশাকরি পরবর্তীতে অন্য কোনো লেখায় এসব প্রাথমিক সূত্র সম্পর্কে বিস্তারিত আলোচনা করা হবে। আপাতত একটি সহজ সূত্রের মাধ্যমে আমরা B বিন্দুতে আউটপুট ভোল্টেজ নির্ণয় করতে পারি। সূত্রটি দেখুন-

ভোল্টেজ ডিভাইডারের সাধারণ সূত্র

এই সূত্রটিই রেজিস্টেন্স দিয়ে তৈরি ভোল্টেজ ডিভাইডারের সাধারণ সূত্র। রেজিস্টেন্স দিয়ে তৈরি করা হয় বলে একে রেজিস্টিভ ভোল্টেজ ডিভাইডারও বলা হয়। প্রকৃতপক্ষে এ সূত্রটিও কার্শফের ভোল্টেজের সূত্র এবং ওহমের সূত্রের সাহায্যেই প্রতিপাদন করা হয়।

পরবর্তীতে B বিন্দুতে যখন কোনো লোড (ধরুন একটি LED, কিংবা একটি ছোটো লাইট বাল্ব) লাগানো হয়, তখন সূত্রটি নিম্নরূপে পরিবর্তীত হয়-

ভোল্টেজ ডিভাইডারের সূত্র (with load)

অর্থাৎ R2 কে এখন R2 এবং RLoad বা লোডের রেজিস্টেন্সের প্যারালাল কানেকশন থেকে সমতূল্য যে রেজিস্টেন্স পাওয়া যাবে, তা দিয়ে প্রতিস্থাপিত করতে হবে।

একটি উদাহরণ দেখা যাক। মনে করুন আপনি ১২ ভোল্টের একটি ব্যাটারি থেকে ৫ ভোল্ট আউটপুট পেতে চাচ্ছেন। তাহলে Vout = 5V । যেহেতু R1 এবং R2 দুটোই আমাদের অজানা, তাই যে কোনো একটিকে আমাদের ইচ্ছামতো ধরে নিতে হবে, অন্যটা সূত্রের সাহায্যে হিসাব করলেই পাওয়া যাবে। ধরুন R2 = 1K Ohms। তাহলে উপরের সূত্রে Vin , Vout এবং R2 এর মান বসালে পাই

উদাহরণ - হিসাবপ্রণালী

তাহলে আমার R1 এর মানও পেয়ে গেলাম। অর্থাৎ চিত্রের মতো করে R1 যায়গায় 1.4K Ohms এবং R2 এর যায়গায় 1K Ohms দিয়ে ইনপুটে ১২ ভোল্টের ব্যাটারি লাগালেই B বিন্দুতে গ্রাউন্ডের সাপেক্ষে (এক্ষেত্রে ব্যাটারির নেগেটিভ প্রান্ত) আমাদের কাংক্ষিত 5V পেয়ে যাবো।

এখানে একটা বিষয় লক্ষণীয়, R2 = 10 Ohms এবং R1 = 14 Ohms ধরলে, অথবা R2 = 470 Ohms এবং R1 = 658 Ohms, অথবা R2 = 1M Ohms এবং R2 = 1.4M Ohms ধরলে, অথবা R2 = 2.2 Ohms এবং R1 = 3 Ohms ধরলেও তো 5V পাওয়া যাবে। তাহলে কেনো আমরা R2 = 1K Ohms ধরলাম?
যে কোনো সার্কিট ডিজাইন করার সময় আমাদেরকে অবশ্যই উক্ত সার্কিট কি পরিমাণ পাওয়ার বা শক্তি অপচয় (dissipated power) করে বা গ্রহণ করে, তা মাথায় রাখতে হবে। এই সার্কিট দ্বারা গৃহীত বা অপচয়কৃত পাওয়ার আমরা নিম্নক্তো সূত্র দ্বারা হিসাব করতে পারি-

অপচয়কৃত শক্তির হিসাব

যদি R2 = 1K Ohms এবং R1 = 1.4K Ohms ধরা হয়, তাহলে Dissipated Power হয় 60 mW, খুব বেশি না। কিন্তু যদি R2 = 2.2 Ohms এবং R1 = 3 Ohms নেয়া হয়, তাহলে Dissipated Power এর পরিমাণ হবে 27W। এই বিশাল পরিমাণ পাওয়ার রেজিস্টেন্স সহ্য করতে পারবে না, মুহূর্তেই পুড়ে যাবে। তাছাড়া এই বিশাল পরিমাণ শক্তি কোনো কাজেও লাগছে না, শুধুমাত্র তাপশক্তি হিসেবে অপচয় হচ্ছে। তাই এমনভাবে রেজিস্টেন্স নির্বাচন করতে হবে যাতে ডিভাইডার নেটওয়ার্কটি খুব বেশি শক্তি অপচয় না করেই আউটপুটে পর্যাপ্ত ভোল্টেজ তৈরি করতে পারে।

তাহলে আমরা যদি একটু বেশিমানের রেজিস্টেন্স দিয়ে ভোল্টেজ ডিভাইডার তৈরি করি, সেক্ষেত্রে খুব বেশি শক্তির অপচয় না করেই আমাদের দরকারমতো যে কোনো ভোল্টেজ পেয়ে যাবো, কি মজা! তাইনা? উত্তর হলো – না, সমস্যা আরও আছে। একটু বাস্তব উদাহরণ দিয়ে দেখা যাক।

ট্রানজিস্টর বায়াসিং উদাহরণমনে করুন আপনি কোনো সার্কিটে একটি ট্রানজিস্টারকে 5V 1mA এ বায়াসিং করতে চান, অর্থাৎ ট্রানজিস্টরের বেস কারেন্ট 1mA। R2 = 1K Ohms এবং R1 = 1.4K Ohms দিয়ে ভোল্টেজ ডিভাইডার তৈরি করে আউটপুটে 5V পেলেন। ট্রানজিস্টরটি যেহেতু আউটপুটে লোড হিসেবে সংযুক্ত আছে, তাই একে একটি সমতূ্ল্য রেজিস্টেন্স দিয়ে প্রতিস্থাপন করলে তার রেজিস্টেন্স হয় 5V / 1mA =  5K Ohms। তাহলে এখন যেহেতু লোড সংযুক্ত করা হয়েছে, সেহেতু দ্বিতীয় সূত্রের সাহায্যে আমরা আউটপুট ভোল্টেজ বের করতে পারি-

উদাহরণ- হিসাবপ্রণালী

এক্ষেত্রে আউটপুট ভোল্টেজ কাংখিত 5V থেকে কমে 4.47V হয়ে গেছে, সাধারণ কাজের জন্য এটুকু মেনে নেয়া যায়, ট্রানজিস্টারটি কাজ করবে।

আরএকটি উদাহরণকিন্তু যদি এমন হয়, আপনি ট্রানজিস্টার বায়াসিং-এর পরিবর্তে 5V এর একটি ছোটো মটর চালাতে চাচ্ছেন, যেটা 20mA কারেন্ট টানে, কিংবা এই ট্রানজিস্টারের বেস-এই 20mA কারেন্ট সাপ্লাই দেয়া প্রয়োজন, তাহলে কি অবস্থা হবে? V = IR প্রয়োগ করলে লোড রেজিস্টেন্সের মান দাড়ায় RLoad = 5V / 20mA = 250 Ohms । আবারও দ্বিতীয় সূত্রটি প্রয়োগ করলে দেখা যায়

হিসাবপ্রণালী - উদাহরণ

কি হলো? আপনার তো 5V দরকার ছিলো, কিন্তু মাত্র 1.5V পাওয়া গেছে, এ দিয়ে তো কাজ হবে না।
প্রকৃতপক্ষে একটি সাধারণ হিসাব অনুযায়ী যেসব সার্কিটে 10 mA বা তার বেশি কারেন্ট দরকার হয়, সেখানে এ ধরনের ভোল্টেজ ডিভাইডার ব্যবহার করা হয় না, কিংবা প্রতিটা ডিভাইসের জন্য আলাদা আলাদা ভোল্টেজ ডিভাইডার ব্যবহার করতে হয়, বা প্রতিবারে রেজিস্টেন্স পরিবর্তন করতে হয়, যা খুবই বিরক্তিকর।

ভোল্টেজ ডিভাইডার - Simplifiedপাশের চিত্রটি লক্ষ করুন, এটি হলো আগের সার্কিটের সহজতররূপ। এখানে দেখতে পাচ্ছেন R2 এর পরিবর্তে সরাসরি লোডকে লাগানো হয়েছে। এক্ষেত্রে লোডের দুই প্রান্তের ভোল্টেজ নিচের সূত্রের সাহায্যে নির্ণয় করা যায়

ভোল্টেজ ডিভাইডারের সূত্র - Simplified

লক্ষ করুন, এটি কিন্তু সেই প্রথম সূত্রটিই, শুধু আগে যেখানে আলাদা একটি রেজিস্টেন্স R2 লাগতো, এখন আর সেটা লাগছে না, তারবদলে সরাসরি লোডের রেজিস্টেন্স বসিয়ে হিসাব করা হচ্ছে। এ পদ্ধতি ব্যাবহারের ফলে সার্কিটের জটিলতা কমে আসে, রেজিস্টেন্সও কম লাগে। তাছাড়া মূল সিস্টেমে ডিভাইডার নেটওয়ার্ক আলাদা পাওয়ার নষ্ট করতো, সেই সমস্যাটিও এখানে নেই। চলুন, এ পদ্ধতিতে একটি উদাহরণ দেখা যাক।

মনে করুন আপনি 12V ব্যাটারী থেকে একটি 3mm White LED জ্বালাতে চাচ্ছেন।

উদাহরণ - LED সার্কিট

ডাটাশিট থেকে দেখা যায় এই LED-র Continuous Forward Current 30mA এবং Minimum Forward Voltage 3.0V । ওহমের সূত্র V = IR প্রয়োগ করলে LED-র রেজিস্টেন্স পাওয়া যায় ১০০ ওহমস। এবার তৃতীয় সূত্র প্রয়োগের মাধ্যমে আমরা R1 এর মান বের করতে পারি

হিসাবপ্রণালী - LED সার্কিট

 

এ পদ্ধতি ব্যবহার করে খুব সহজেই যে কোনো ভোল্টের ব্যাটারী থেকে অপেক্ষাকৃত কম ভোল্টের LED বা অন্য কোন লোড চালাতে পারবেন। কিন্তু পূর্বের আলোচিত সমস্যা থেকেই যাচ্ছে, মানে লোড পরিবর্তন করলে ডিভাইডারের রেজিস্টেন্সও পরিবর্তন করতে হচ্ছে।

আসুন ভোল্টেজ ডিভাইডারের সুবিধা অসুবিধাগুলো দেখে নেয়া যাক।

সুবিধা

  1. জটিলতা কম, সহজে তৈরি করা যায়
  2. খরচ সাশ্রয়ী
  3. ইনপুট থেকে কম মানের যে কোনো ভোল্টেজই তৈরি করা যায়

অসুবিধা

  1. আউটপুট স্থির (Constant) নয়
  2. এক লোডের জন্য তৈরি ডিভাইডার অন্য লোডে ব্যবহার করা যায় না
  3. ইনপুট ভোল্টেজের থেকে বেশি ভোল্টেজ পাওয়া যায় না
  4. ইনভার্ট বা উল্টো ভোল্টেজ যেমন 12V ইনপুট থেকে -12V আউটপুট পাওয়া যায় না
  5. এফিসিয়েন্সী বা কর্মদক্ষতা কম

এবারে মনে করুন, আপনি লোডের কোনো পরিবর্তন করবেন না। ধরুন আপনি 12V ব্যাটারী থেকে ভোল্টেজ ডিভাইডারের মাধ্যমে 6V, 0.9W এর একটি ছোটো লাইট বাল্ব জ্বালাতে চাচ্ছেন, এই ডিভাইডার দিয়ে আপনি অন্য কিছু চালাবেন না, সবসময় এই লাইট বাল্বটি জ্বালানোর কাজেই ব্যবহার করবেন। তাহলে P=VI প্রয়োগ করে লাইট বাল্বের কারেন্ট পাওয়া যাবে 0.15A বা 150mA, এবং V=IR প্রয়োগ করে বাল্বের রেজিস্টেন্স পাওয়া যাবে 40Ω।  তাহলে তৃতীয় সূত্র প্রয়োগ করলে R1 ও 40Ω -ই পাওয়া যায়।

এখানে লক্ষনীয়, সমান মানের দুইটি রেজিস্টেন্স দিয়ে ভোল্টেজ ডিভাইডার তৈরি করলে আউটপুট ভোল্টেজ, ইনপুটের অর্ধেক হবে।

আপনি সবকিছু ঠিকঠাকভাবে হিসাব-নিকাশ করে 40Ω এর একটি রেজিস্টেন্সের সাথে লাইটবাল্বটি লাগিয়ে জ্বালানো শুরু করলেন। ভবিষ্যতে কখনো লাইট বাল্বের পরিবর্তে এই নেটওয়ার্কে মটর বা অন্য কোনো মানের লাইট বাল্ব, কিংবা অন্য কোনো লোড চালাবেন না, সে বিষয়েও সিদ্ধান্ত নিয়ে নিলেন। তাহলে নিয়ম অনুযায়ী আউটপুটে সবসময়ই 6V পাওয়া যাবার কথা, এবং বাল্বের ভেতর দিয়ে সবসময়ই 0.15A কারেন্ট প্রাবহিত হবার কথা।

সত্যিই কি আউটপুট ভোল্টেজ এবং কারেন্ট অপরিবর্তীত থাকবে? সূত্রগুলো আরও একবার দেখুন। যেহেতু তিনটিই একই সূত্র, তাই এই উদাহরণে হিসাবের সুবির্ধার্থে তৃতীয় সূত্রটিকেই বিবেচনা করা হলো।

ভোল্টেজ ডিভাইডারের সূত্র - Simplified

এখানে আউটপুট ভোল্টেজ Vout সর্বদা স্থির বা অপরিবর্তনীয় (Constant) থাকবে, যদি এবং কেবল যদি

  1. Vin অপরিবর্তনীয় থাকে
  2. R1 এবং RLoad অপরিবর্তনীয় থাকে

এই দুইটি শর্তের যে কোনো একটির পরিবর্তন হলেই আউটপুটের ভোল্টেজও পরিবর্তীত হবে। সুতরাং আউটপুটে স্থির (Constant) ভোল্টেজ পেতে হলে এ শর্তদুইটি অবশ্যই পূরণ করতে হবে। কিন্তু বাস্তব জীবনে তা কখনো সম্ভব নয়। কেনো সম্ভব নয়? চলুন দেখা যাক-

১ম শর্তের জন্য-

  • ব্যাটারী ধীরে ধীরে তার চার্জ হারায়, ফলে ইনপুট ভোল্টেজ কমে যায়
  • সোলার সেলে দিনের আলো কমা বাড়ার সাথে সাথে ভোল্টেজও কমে-বাড়ে
  • উইন্ড/ওয়াটার টারবাইনের ভোল্টেজ বাতাস বা পানির গতিবেগের সাথে পরিবর্তিত হয়
  • গ্যাসচালিত জেনারেটরে ভোল্টেজ তার ইঞ্জিনের ঘূর্ণনের উপর নির্ভর করে কমে-বাড়ে
  • বাসাবাড়ির গ্রীড পাওয়ার সাপ্লাই হিসেবে ব্যবহার করলে সেটিও কখনোই স্থির 220V নয়, বরং বিভিন্ন কারণে 200V-230V এর মাঝে ওঠানামা করে। ক্ষেত্রবিশেষে আরও বেশি কমে বা বাড়ে

সুতরাং দেখা যায় সাধারণভাবে প্রাপ্ত কোনো উৎস থেকে কোনোভাবেই Vin বা ইনপুট ভোল্টেজ স্থির রাখা সম্ভব নয়। ফলে ১ম শর্ত অপরিবর্তীত রাখা সম্ভব নয়, অর্থাৎ আউটপুট ভোল্টেজও স্থির রাখা সম্ভব নয়।

একমাত্র রেগুলেটেড পাওয়ার সাপ্লাই থেকেই মোটামুটি স্থির মানের ভোল্টেজ পাওয়া সম্ভব, আর সেটিই আমার এই লেখাই চুড়ান্ত উদ্দেশ্য। আপাতত আলোচনার সুবিধার্থে কোনোভাবে Vin কে স্থির রাখা হলো। এবারে দ্বিতীয় শর্তের দিকে নজর দেয়া যাক-

বাস্তবজীবনে কোনো লোডই স্থির রেজিন্টেন্স বা ইমপিডেন্স-এর হয় না। রেজিস্টেন্সের মধ্যে দিয়ে কারেন্ট প্রবাহিত হলে রেজিস্টেন্স গরম হয়, যার ফলে তার রেজিস্টেন্স আরও বৃদ্ধি পায়। একই কথা লাইট বাল্বের ক্ষেত্রেও প্রযোজ্য। অন্যদিকে লাইটবাল্বের পরিবর্তে অন্য কোনো লোড লাগালেও তার রেজিস্টেন্স বা ইম্পিডেন্স পরিবর্তীত হবে। যেমন মটরের ইম্পিডেন্স তার ম্যাকানিকাল লোডের সাথে সাথে পরিবর্তিত হয়। ফলে দ্বিতীয় শর্তও পূরণ করা সম্ভব নয়।

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

তাহলে এমন কোনো কম্পোনে্ট বা ডিভাইস কি নেই, যা দিয়ে এই দুইটি শর্ত না মানলেও আউটপুটে স্থির ভোল্টেজ পাওয়া সম্ভব? হ্যা, সম্ভব, কিন্তু আজ আর না, এ বিষয়ে পরবর্তী পর্বে আলোচনা করবো। ততক্ষণ পর্যন্ত আমাদের সাথেই থাকুন। কোনো প্রশ্ন থাকলে, বা লেখাতে কোনো ভূল-ভ্রান্তি থাকলে নিচে কমেন্টস বক্স ব্যবহার করুন, চাইলে ফেসবুক পেজ থেকেও ঘুরে আসতে পারেন।

ধন্যবাদ

আরডুইনো দিয়ে সহজেই বানিয়ে ফেলুন প্রপেলার ডিসপ্লে (POV Display) ২য় ইনস্টলমেন্ট…

9

সবাইকে স্বাগত জানাচ্ছি প্রপেলার ডিসপ্লের (POV Display) ২য় ইনস্টলমেন্টে। এই ইনস্টলমেন্টে প্রোগ্রামিং নিয়ে বিস্তারিত (যথাসম্ভব) আলচনা করা হবে।

বিঃ দ্রঃ সাইটের Consultant, Researcher সৈয়দ রাইয়ান ভাই এর আইডিয়াতে কোন প্রকার আকিকা ছাড়াই এই ডিসপ্লের নতুন নামকরণ করা হইল। নতুন নাম, ঘুরান্টি ডিসপ্লে

এই প্রজেক্টের প্রোগ্রাম আরডুইনোতে করা হয়েছে। কারন আরডুইনো বুঝতে সহজ, দামে সস্তা, কাজে ভাল। মজার ব্যাপার হল আপনার কাছে আরডুইনো না থাকলেও আপনি আরডুইনোতে কাজ করতে পারবেন(যদি আরডুইনোতে যে মাইক্রোকনট্রোলার ব্যবহৃত হয়, ঐ মাইক্রোকনট্রোলার আপনার কাছে থাকে)। ইনশাল্লাহ এ বিষয়ে পরে কোন এক পোস্টে আলচনা করব। এখন প্রোগ্রামে নজর দেই। নিচে প্রোগ্রামটি দেয়া হল।

 

int _[] = {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0};

int A[] = {0,1,1,1,1, 1,0,1,0,0, 0,1,1,1,1};

int B[] = {1,1,1,1,1, 1,0,1,0,1, 0,1,0,1,0};

int C[] = {0,1,1,1,0, 1,0,0,0,1, 1,0,0,0,1};

int D[] = {1,1,1,1,1, 1,0,0,0,1, 0,1,1,1,0};

int E[] = {1,1,1,1,1, 1,0,1,0,1, 1,0,1,0,1};

int F[] = {1,1,1,1,1, 1,0,1,0,0, 1,0,1,0,0};

int G[] = {0,1,1,1,0, 1,0,1,0,1, 0,0,1,1,0};

int H[] = {1,1,1,1,1, 0,0,1,0,0, 1,1,1,1,1};

int I[] = {1,0,0,0,1, 1,1,1,1,1, 1,0,0,0,1};

int J[] = {1,0,0,0,0, 1,0,0,0,1, 1,1,1,1,1};

int K[] = {1,1,1,1,1, 0,0,1,0,0, 0,1,0,1,1};

int L[] = {1,1,1,1,1, 0,0,0,0,1, 0,0,0,0,1};

int M[] = {1,1,1,1,1, 0,1,0,0,0, 1,1,1,1,1};

int N[] = {1,1,1,1,1, 0,1,0,0,0, 1,1,1,1,1};

int O[] = {0,1,1,1,0, 1,0,0,0,1, 0,1,1,1,0};

int P[] = {1,1,1,1,1, 1,0,1,0,0, 0,1,0,0,0};

int Q[] = {0,1,1,1,1, 1,0,0,1,1, 0,1,1,1,1};

int R[] = {1,1,1,1,1, 1,0,1,0,0, 0,1,0,1,1};

int S[] = {0,1,0,0,1, 1,0,1,0,1, 1,0,0,1,0};

int T[] = {1,0,0,0,0, 1,1,1,1,1, 1,0,0,0,0};

int U[] = {1,1,1,1,1, 0,0,0,0,1, 1,1,1,1,1};

int V[] = {1,1,1,1,0, 0,0,0,0,1, 1,1,1,1,0};

int W[] = {1,1,1,1,1, 0,0,1,0,0, 1,1,1,1,1};

int X[] = {1,1,0,1,1, 0,0,1,0,0, 1,1,0,1,1};

int Y[] = {1,1,0,0,0, 0,0,1,1,1, 1,1,0,0,0};

int Z[] = {1,0,0,0,1, 1,0,1,0,1, 1,1,0,0,1};

int letterSpace;

int dotTime;

void setup()

  {pinMode(2, OUTPUT);

   pinMode(3, OUTPUT);

   pinMode(4, OUTPUT);

   pinMode(5, OUTPUT);

   pinMode(6, OUTPUT);

  

   letterSpace = 1;

   dotTime = 500;

  }

 

 void printLetter(int letter[])

   {

    int y;

    for (y=0; y<5; y++)

    {

      digitalWrite(y+2, letter[y]);

    }

    delayMicroseconds(dotTime);

   

    for (y=0; y<5; y++)

    {

    digitalWrite(y+2, letter[y+5]);

    }

    delayMicroseconds(dotTime);

   

    for (y=0; y<5; y++)

    {

    digitalWrite(y+2, letter[y+10]);

    }

    delayMicroseconds(dotTime);

   

    for (y=0; y<5; y++)

    {

    digitalWrite(y+2, 0);

    }

    delay(letterSpace);

   }

  

   void loop()

   {

   printLetter(N);

   printLetter(E);

   printLetter(W);

   printLetter(T);

   printLetter(O);

   printLetter(N);

   printLetter(_);

   printLetter(_);

   printLetter(_);

   printLetter(_);

   }

 

আসুন এবার কোড বিশ্লেষন করি। যারা আরডুইনো ব্যবহার করেছেন তারা সহজেই কোডটি বুঝতে পারবেন। যারা নতুন তাঁদের জন্য কোড বিশ্লেষন।

ঘুরান্টি ডিসপ্লে প্রজেক্ট এর প্রোগ্রামিং কোড বিশ্লেষণ

আরডুইনো কোডিং এর মূলত ৩ টি অংশ থাকে-

  1. Variable, constant, Header file declaration.
  2. Void setup (এখানে ইনপুট, আউটপুট পিন নির্ধারণ করা হয়)
  3. Void loop (এই অংশটিই মূলত এক্সিকিউট করবে। অর্থাৎ এখানেই সব স্টেটমেন্ট, কন্ডিশন, ইত্যাদি দেয়া হয়।) লুপের বাইরে মাঝে মধ্যে ফাংশন তৈরির প্রয়োজন পরে।

উপরের প্রোগ্রামের প্রথমেই ইংরেজী A-Z এর অ্যারে ডিক্লেয়ার করা হয়েছে। এই অ্যারেতেই প্রতিটা অক্ষরের ডাটা সংরক্ষিত আছে।

পূর্বেই বলেছিলাম 1 এবং 0 এর একাধিক সমন্বয়কে ডাটা বলা হয়। (এক্ষেত্রে বলে রাখি শুধু 1 ও 0 হচ্ছে ডাটার বাইনারী ফর্ম। অনেক ক্ষেত্রে হেক্সাডেসিমাল বা ডেসিমাল ফর্মও ব্যবহৃত হয়।) এখানে প্রতিটা অ্যারে তে কলামের ৩ টি অবস্থানের জন্য ৫ টি(5 বিটের) করে ডাটা দেয়া আছে।

যদি A এর অ্যারে লক্ষ্য করেন তাহলে দেখবেন, ১ম ৫ টি ডাটা হল 0,1,1,1,1 এর অর্থ আগের পোস্টে Fig:5 এ যেভাবে এলইডি সাজানো আছে, তার ১ম টা বাদে বাকি সবগুলো লজিক্যাল হাই অর্থাৎ এটি (Fig:1)

Fig: 1
Fig: 1

এরপরের ডাটা হল 1,0,1,0,0 অর্থাৎ এটি (Fig:2)

Fig: 2
Fig: 3

এভাবে A থেকে Z পর্যন্ত সবগুলোর ডাটা দেয়া আছে। আপনি চাইলে সংখ্যার ডাটাও যোগ করতে পারেন।

এর পরে letterSpacedotTime নামে দুটি ইন্টিজার টাইপ ভেরিয়েবল নেয়া হয়েছে। letterSpace দ্বারা একটি শব্দে প্রতিটি অক্ষরের মাঝের দূরত্ব নির্দেশ করা হয়েছে যা সেটাপ ফাংশনে ১ মাইক্রোসেকেন্ড নির্ধারণ করা হয়েছে। আর dotTime দ্বারা দুইটি শব্দের মাঝের দুরত্ব নির্দেশ করা হয়েছে যা ৫০০ মাইক্রোসেকেন্ড নির্ধারণ করা হয়েছে।

এরপর Void setup  অংশে আরডুইনোর ২, ৩, ৪, ৫, ও ৬ নং পিনকে আউটপুট হিসেবে নির্ধারণ করা হয়েছে।

সেটআপের পর লুপের আগে printLetter নামে একটি ফাংশন তৈরী করা হয়েছে। এই ফাংশনেই এলইডিতে ডাটা পাঠানোর স্টেটমেন্ট গুলো দেয়া আছে। এখানে for loop  এর সাহায্যে এক এক করে কলামের ডাটা পাঠানো হয়েছে। লক্ষ্য করলে দেখা যাবে এখানে মোট ৪ টি for লুপ নেয়া হয়েছে। ১ম তিনটি হল ৩ টি কলামের ডাটা পাঠানোর জন্য আরেকটি হল স্পেস এর জন্য অর্থাৎ একটি শব্দ থেকে আরেকটি শব্দের দুরত্ব।

শেষ অংশটি হচ্ছে লুপ। এই লুপের ভিতর ফাংশন গুলোকে কল করে দেয়া হয়েছে। এখানে যে অ্যারেকে কল করা হবে ওই অ্যারের ডাটা গুলো printLetter ফাংশনের মাধ্যমে এলইডিতের চলে যাবে।

প্রোগ্রাম শ্যাষ… 😛

কিভাবে প্রোগ্রাম কে আরডুইনো তে লোড করবেন

এবার আসি প্রোগ্রাম কিভাবে লোড করবেন। যদি আপনার কাছে আরডুইনো থাকে  তাহলে প্রোগ্রাম লোড করতে কোন ঝামেলাই নেই-

  • প্রোগ্রাম সেভ করুন,
  • আরডুইনোকে ইউএসবি ক্যাবল দিয়ে কম্পিউটারের সাথে কানেক্ট করুন।
  • Tools অপশনে গিয়ে আরডুইনোর কোন বোর্ডটি ব্যবহার করেছেন সেটা সিলেক্ট করুন (এখানে Arduino UNO R3 ব্যবহার করেছি)।
  • ডাটা কমিউনিকেশন পোর্ট সিলেক্ট করুন।
  • আপলোড বাটনে ক্লিক করে প্রোগ্রাম লোড করুন। ব্যাস…

তবে যাদের আরডুইনো বোর্ড নেই তাঁদের একটু কষ্ট করতে হবে।

  • প্রথমে যে বোর্ডটি ব্যবহার করবেন তার ডায়াগ্রাম সংগ্রহ করুন (গুগল থেকে)।
  • ওই বোর্ডে যে মাইক্রোকন্ট্রোলার ব্যবহৃত হয়েছে সেই মাইক্রোকন্ট্রোলার টি সংগ্রহ করুন।
  • এবার আরডুইনোর যে পিন গুলো আউটপুট হিসেবে নির্ধারণ করা হয়েছে ওই পিন গুলো মাইক্রোকন্ট্রোলার এর কোন পিনের সাথে সংযুক্ত তা সনাক্ত করুন।
  • এলইডি গুলোকে মাইক্রোকন্ট্রোলারের ওই পিনের সাথে কানেক্ট করুন।
  • এখন আরডুইনোর আইডিই/ সফটওয়্যারে প্রোগ্রাম লিখে কম্পাইল করুন।
  • কম্পাইল হয়ে গেলে হেক্স ফাইলটি মাইক্রোকনট্রোলারে লোড করুন

(ইনশাল্লাহ সময় হলে পরবর্তী কোন পোস্টে কিভাবে আরডুইনো ছাড়াই আরডুইনো দিয়ে কজ করা যায়, সে বিষয়ে লিখব।)। আর দেখুন আপনার ঘুরান্টি ডিসপ্লে কেমন কাজ করে। 😉

প্রপেলার ডিসপ্লে বা ঘুরান্টি ডিসপ্লে চালু অবস্থায়
প্রপেলার ডিসপ্লে বা ঘুরান্টি ডিসপ্লে চালু অবস্থায় -১

 

প্রপেলার ডিসপ্লে বা ঘুরান্টি ডিসপ্লে চালু অবস্থায় -২
প্রপেলার ডিসপ্লে বা ঘুরান্টি ডিসপ্লে চালু অবস্থায় -২

আশা করি আপনারা এই ঘুরান্টি ডিসপ্লে প্রজেক্ট টি বাস্তবে তৈরী করে আমাকে এই লেখার ব্যর্থতার হাত থেকে রক্ষা করবেন ইনশাল্লাহ… 🙂

ঘুরান্টি ডিসপ্লের ভিডিও

অবশ্যই ঘুরান্টি ডিসপ্লে বানিয়ে আমাদের কে জানাতে ভুলবেন না যেন। ধন্যবাদ সবাইকে।

রেজিষ্টার- মাইক্রোকন্ট্রলারের সহজ পাঠ (২য় কিস্তি)

7
PIC-Microcontroller-Architecture
PIC-Microcontroller-Architecture - আমাদের ইলেকট্রনিক্স

PIC-Microcontroller-Architecture

(মাইক্রোকন্ট্রোলার রেজিষ্টার/রেজিস্টার সম্পর্কিত নিম্নাক্তো আলোচনায় রূপক ব্যাবহারের স্বার্থে অতি সরলীকরন করা হয়েছে ফলে কিছু ক্ষেত্রে বাস্তবতার সাথে আপাত ভিন্নতা বা সঙ্ঘাত হতে পারে তবে মুল বক্তব্য অক্ষুন্ন রাখার চেষ্টা করা হয়েছে)

বিটঃ ‘ডিজিটাল’ নামটি নিয়ে আমার একটা আপত্তির কথা আগে বলি। দশ ভিত্তিক (Decile) সংখা পদ্ধতি (০ থেকে ৯) এর প্রতিটি অংককে ইংরেজিতে বলে ডিজিট ( যেমন ১ একটা ডিজিট বা ৭ একটা ডিজিট) আর দূই ভিত্তিক (Binary) সংখা পদ্ধতির এক একটি অংককে বলে বিট (যেমন ০ একটি বিট বা ১ একটি বিট)।

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

রেজিষ্টারঃ রেজিষ্টার হচ্ছে একটি ডাটা ধারক ব্যবস্থা যার ভিত্তিতে সিদ্ধান্ত গ্রহন, গননা, নির্দেশনা বা তথ্য লোকেশনে ব্যাবহার করা হয়। MCU বিভিন্ন রকম রেজিষ্টার ব্যাবহার হয় যেমন-ষ্ট্যাটাস রেজিষ্টার, এড্রেস রেজিষ্টার, ডাটা রেজিষ্টার, কাউন্টার রেজিষ্টার।

উদাহরনে ভালো বুঝা যাবে। ধরা যাক বিট মানে একটা এল ই ডি বাতি। এর জ্বলা অবস্থা মানে ১ আর নিভা অবস্থা মানে শুন্য ষ্ট্যাটাস রেজিষ্টারঃ টয়লেটের অবস্থা জানার জন্য ১ বিট রেজিষ্টারের ব্যাবহারঃ টয়লেটের দরজার উপর এল ই ডি লাগানো হয়ছে । ০ (বাতি নিভে আছে)ঃ টয়লেট খালি, ব্যাবহার করা যাবে। ১ (বাতি জ্বলে আছে)ঃ টয়লেটে লোক আছে, বাতি নিভা পর্যন্ত অপেক্ষা করুন। বায়ু প্রবাহের দিক জানতে ৩ বিট রেজিষ্টারের ব্যাবহারঃ আবহাওয়া অফিসের ছাদে তিনটি বিশাল এল ই ডি লাগানো হয়েছে ০০০  বাতাস পুর্বদিকে বইছে ০০১  বাতাস পশ্চিম দিকে বইছে ০১০  বাতাস উত্তরে বইছে … ১১০   বাতাস ঈষান কোনে বইছে ১১১ বাতাস নৈঋত কোনে বইছে MCU এর কোন পিন রিড আর কোন পিন রাইট মোডে আছে তা ঠিক ও তার অবস্থা নির্দেশ করে ষ্ট্যাটাস রেজিষ্টার। কাউন্ট রেজিষ্টারঃ গননা করে এবং গননার কি পর্যায়ে আছে তা নির্দেশ করেঃ ৭ বার সুরা ফাতিহা পরার পর একটি পুশ সুইচ চাপা হয় এবং রেজিষ্টারের ভ্যালু পালটায় ০০০  একবারও পরা হয় নাই ০০১   ৭ বার বা তার বেশী পড়া হয়েছে ০১০  ১৪ বার বা তার বেশী পড়া হয়েছে … MCU এর ক্ষেত্রে স্ট্যাক কাউন্ট করা হয়।

এড্রেস রেজিষ্টারঃ রেজিষ্টার এখানে একটি সূচিপত্র মাত্র। সূচিপত্রে যেমন কোন বিষয়াবলিকে ঠিক কোন পাতায় পাওয়া যাবে তার নির্দেশ করে তেমনি এড্রেস রেজিষ্টার কোন ডাটাকে কোন মেমরী লোকেশনে পাওয়া যাবে তা নির্দেশ করে। সাধারন পদ্ধতিতে রেজিষ্টারে পাতায় পাতায় তথ্য রাখা হয়। পাতা গুলিকে ১ থেকে শুরু করে ২, ৩ ইত্যাদি উর্ধক্রমে ক্রমান্বিত চিহ্ন দেয়া হয়।

নির্দিষ্ট বিষয় গুলি ভিন্ন ভিন্ন পাতায় রাখা হয়। রেজিষ্টারের শুরুতে একটি সূচিতে কোন পাতায় কি আছে তার একটি তালিকা থাকে, যাতে যে কেউ নিমিষে উদ্দিষ্ট হিসাব পাতায় যেতে পারে। ডিজিটাল সিস্টেমে অনুরূপ মেমোরী লোকেশন (পাতা) গুলিকে ক্রমান্বিত করা হয় তার একটা সূচি এড্রেস রেজিষ্টারে সংরক্ষন করা হয় (এক্ষেত্রে ব্যাতিক্রম হলো রেজিষ্টার আর মেমোরী ভিন্ন দুটি ডিভাইস)।

ধরাযাক সূচিটি আলাদা শীটে (যাকে আমরা এখন থেকে রেজিষ্টার বলব) আর বিষয়গুলি আলাদা খাতায় (মেমরী লোকেশন) রাখা বাধ্যতামূলক । আইডিয়াল লাইব্রেরীর বিক্রিত রেজিষ্টারে সর্বোচ্চ ২ ডিজিট এন্ট্রি রাখা যায় (০ থেকে ৯৯) যা এক একটি পাতাকে নির্দেশ করে। রেজিষ্টারটি ১ নং ছবির মতোঃ

পাতা নং

হিসাব
ডিজিট ১ ডিজিট ২
পরিবহন বিভাগ
পরিবহন বিভাগ
পরিচালনা বিভাগ
সেলস বিভাগ
মার্কেটিং বিভাগ

এখন তাহলে খাতায় সর্বোচ্চ কতটি পাতা রাখা যেতে পারে? ১০০টি । অর্থাৎ ২ ডিজিটের জন্য এন্ট্রি হয় ১০০ টি ৩ ডিজিট হলে এন্ট্রি রাখা যেত ১০০০ টি (০ থেকে ৯৯৯)। মানে ২ ডিজিটের ক্ষেত্রেঃ 10^2 = 100 আর ৩ ডিজিটে 10^3=1000। এভাবে ৫ ডিজিটে 10^5= 100000। কম্পিউটার আর্কিটেকচারে অনুরূপে রেজিষ্টারের বিটের সাথে মেমরী লোকেশনের একটা সম্পর্ক আছে। যেমনঃ ২ বিটের মেমোরি লোকেশন = 2^2 = 4 টি ৪ বিটের মেমোরি লোকেশন = 2^4 = 16 টি ৮ বিটের মেমোরি লোকেশন = 2^8 = 256 টি নিচে চিত্রে PIC মাইক্রোর ম্যামোরী লোকেশন দেখানো হলোঃ

অনেক ক্ষেতে ৮ বিট দিয়ে মাত্র ২৫৬ টি লোকেশন যথেষ্ঠ না হওয়ায় ২টি ৮ বিট এড্রেস রেজিষ্টার জোড়া দিয়ে ১৬ বিট এড্রেসিং স্কিম বাস্তবায়ন করা হয়। এভাবে ৩২ বিট বা আরো বেশী বিট বাস্তবায়ন সম্ভব হলেও এই জোড়া তালি এফিসিয়েন্ট হয় না। মেমোরী লোকেশন গুলি হলো এক একটি কুঠরির মতো। প্রতিটি কুঠরিতে কিছু বিট জমা রাখা যায়। এসব বিট ডাটা বিট বা ইনষ্ট্রাকশন বিট হতে পারে। ডাটা বিটগুলি বিভিন্ন I/O Port ম্যাপিং হতে পারে (পরবর্তিতে আলোচ্য)। মেমোরী লোকেশন বলতে শুধু RAM কে বুঝায়না। RAM কে Main Memory বলা হয়। এই Main Memory এর সাথে ROM, I/O পোর্ট রেজিষ্টার, SFR (Special Function Register) ইত্যাদিকে সমন্বিত করে একটা ভার্চুয়াল মেমোরী দাড়া করা হয়। যেমন I/O পোর্টে কমিউনিকেট করতে I/O পোর্টের ম্যাপ যে মেমোরী লোকেশনে আছে তার সাথে কমিউনিকেট করলেই চলে। এভাবে বিভিন্ন বাস সিস্টেম (I2C, SPI ) বাসকেউ ভারচুয়াল মেমোরীতে ম্যাপিং করা যায়।

মাইক্রোকন্ট্রোলারে রেজিষ্টার
মাইক্রোকন্ট্রোলারে রেজিষ্টার

ডাটা রেজিষ্টারঃ ডাটা রেজিষ্টারে গানিতিক প্রক্রিয়া সম্পাদনের জন্য মেমরী লোকেশন থেকে রিড করে ডাটা ষ্টোর করা হয় এবং এক বা একাধিক গানিতিক প্রক্রিয়া সম্পাদনের পর আবার কোন মেমরী লোকেশনে লিখে দেয়া হয়। CPU সাধারনত সরাসরি মেমোরি লোকেশনে ডাটা ম্যানিপুলেশন করতে পারেনা তাই এদের প্রথমে ডাটা রেজিষ্টারে লোড করে প্রক্রিয়াজাত করে আবার ষ্টোর করা হয় (Load-Store system । ফ্রিজার থেকে কাচামাল কিচেনে এনে রান্না করে রিফ্রিজারেটরে ষ্টোর করার মতো)।   কম্পিউটার আর্কিটেকচারের কিছু রেজিষ্টার কোড দ্বারা সরাসরি ম্যানিপুলেট করা যায় এমনই বিট লেভেল এক্সেস করা যায়। আবার কিছু কোড দ্বারা ইউজার লেভেলে এক্সেস নিষিদ্ধ। আবার কিছু হাই লেভেল ল্যাংগুয়েজ যেমন C দ্বারা এক্সেস না করা গেলেউ এসেম্বলি ল্যাংগুয়েজ (লো লেভেল কমান্ড) দ্বারা ম্যানিপুলেট করা যায়।   MCU তে কি কি রেজিষ্টার আছেঃ সাধারনত MCU তে দুই শ্রেনির রেজিষ্টার থাকে ১। সাধারন রেজিষ্টার (General Purpose Register) এই গুলা সাধারনত I/O পিন বা পোর্ট সংক্রান্ত। যেমন কিছু AVR মাইক্রো কন্ট্রোলারে ৩২ I/O পিন আছে। এদের ৪ টি পোর্টে যেমন A, B, C, D ভাগ করা হয় প্রতিটি পোর্টের অধিনে ৮ টি I/O পিন থাকে। আবার প্রতিটি পোর্টের সাথে ৩টি রেজিষ্টার সংশিষ্ট আছে যেমনঃ

  • The DDRx Register
  • The PORTx Register
  • The PINx Register

(এখানে x কে A, B, C, D দ্বারা প্রতিস্থাপিত করলে ঐ পোর্টের রেজিষ্টার পাওয়া যায়। যেমন DDRA) ২। বিশেষ রেজিষ্টার (Special Purpose Register) এই রেজিষ্টারগুলি মূলত MCU –এর আভ্যন্তরিন CPU সংশ্লিষ্ট। যেমন Program Counter Register । এদের সাধারনত প্রোগ্রামেটিকালি নিয়ন্ত্রন করা যায় না।

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