বাড়ি ব্লগ পৃষ্ঠা 14

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

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 । এদের সাধারনত প্রোগ্রামেটিকালি নিয়ন্ত্রন করা যায় না।

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

এফ এম ট্রান্সমিটার তৈরী করুন সহজেই

8

আসুন প্রথমেই এফ এম ট্রান্সমিটার (FM Transmitter) সার্কিট টি দেখে নেই –

এফ এম ট্রান্সমিটার

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

এবার আসা যাক কয়েলের ব্যাপারে। এই কয়েল তৈরী করা নিয়ে সবাই ঝামেলাতে থাকে। এই সার্কিটে একটি কয়েল রয়েছে যা পিসিবি দিয়ে তৈরী করলে বিল্টইন হিসাবে পিসিবিতেই থাকবে। এমনিতে তৈরী করতে চাইলে ১৮-২৪ গেজ তার একটি কলমের উপর ৬ প্যাচ দিলেই  হবে এবং এর ৫ প্যাচ পরে একটি প্রান্ত বের করে নিতে হবে।

এফ এম  ট্রান্সমিটার পিসিবি কেমন হবে দেখি –

ট্রান্সমিটার_আমাদের-ইলেকট্রনিক্স

 

ট্রান্সমিটার

 

বি. দ্র: ১০০ মিটারের অধিক রেঞ্জের ট্রান্সমিটার ব্যবহার করা আইনত অবৈধ এবং কোন প্রকার বাণিজ্যিক কাজে ব্যবহার করাও অবৈধ। এই পোষ্টটি শুধুমাত্র শিক্ষা ও গবেষণা কাজে ব্যবহার করা যাবে।

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

13
Matrix Display

প্রপেলার ডিসপ্লে (POV Display) কি? 

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

ডিসপ্লে সম্পর্কে কিছু কথা

POV Display এর নাম অনেকেই শুনে থাকবেন। এই POV এর  পূর্ণ অর্থ হল Persistence Of Vision . অর্থাৎ দৃষ্টির স্থায়ীত্বতা। বিষয়টা একটু ভেঙ্গে বলি। মানুষের দৃষ্টির স্থায়ীত্বকাল ৬-১০ মিলিসেকেন্ড।

অর্থাৎ এই সময়ের মধ্যে কোন বস্তু আমাদের চোখের সামনে একাধিকবার চলাচল করলে আমাদের মস্তিস্ক সেটাকে একবারই ধরতে পারে। অর্থাৎ মনে হবে বস্তুটি একবারই চলাচল করল।

এই তত্ত্বকে কাজে লাগিয়েই POV Display তৈরী করা হয়েছে। আমরা LED Moving Message Display দেখেছি। এই ডিসপ্লে বিভিন্ন Alphanumeric মেসেজ দেখায় এবং এক পাশ থেকে আরেক পাশে মুভ করে যায়। নিচের মত দেখতে।

Matrix Display - মেট্রিক্স ডিসপ্লে
Matrix Display – মেট্রিক্স ডিসপ্লে

কিন্তু এখানে অনেক এলইডির প্রয়োজন হয়। এতে একটি অক্ষর প্রদর্শন করতে 7×5 = 35 টা এলইডি প্রয়োজন। এতে খরচও তুলনামূলক বেশি।

কিন্তু এই লেখাই দেখানো সম্ভব শুধুমাত্র ৫ টা এলইডির মাধ্যমে। জ্বি হ্যাঁ, ঠিক দেখেছেন, আমি ৫ টাই লিখেছি।

এই পাঁচটা এলইডিতে আমরা চোখের ধাঁধা (POV – Persistence of vision) কে কাজে লাগিয়ে একটা শব্দ বা বাক্য প্রদর্শন করব।

আগেই বলে রাখি এই POV প্রজেক্ট তৈরীকারীকে অবশ্যই প্রোগ্রামিং জানতে হবে, এবং ডিজিটাল ইলেকট্রনিক্সমাইক্রোকন্ট্রোলার সম্পর্কে ব্যাসিক ধারণা থাকতে হবে। তা ছাড়া এই প্রজেক্টের আগা গোড়া বোঝা অনেকটা বোঝা হয়ে দাঁড়াবে!!!

ডিসপ্লে গুলো কিভাবে কাজ করে

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

Fig: 1
Fig: 1

ধরুন আমরা ডিসপ্লেতে A অক্ষরটি প্রদর্শন করব। তাহলে নিচের মত করে এলইডি গুলোকে জ্বালাতে হবে।

Fig: 2
Fig: 2

কলাম আর রো এর সংখ্যা কমিয়ে দিলে বুঝতে আরো সুবিধা হবে।

Fig: 3
Fig: 3

এখন সবগুলো এলইডিকে জ্বালাতে হলে এলইডির পজেটিভ প্রান্তে ব্যাটারীর পজেটিভ আর নেগেটিভ প্রান্তে ব্যাটারীর নেগেটিভ সংযোগ করতে হবে। তাহলে চিন্তা করুন তো কত গুলো পিন লাগবে? জ্বী আপনার হিসাব ঠিক। ১০ এলইডির জন্য ১০ টা পজেটিভ আর সবগুলো নেগেটিভ একখানে করে একটা নেগেটিভ মোট ১১ টা পিন বের হবে!!! তাহলে চিন্তা করেন এরকম অক্ষর যদি ১০০ টা…

এতগুলো এলইডি’র পিন!!

 আরে রাখেন!!! ৫০ টাই ধরেন, তাহলে কমপক্ষে ৫০×১০ = ৫০০+১= ৫০১ টা পিন!!! মাথা খারাপ!!!

এত গুলা পিন ক্যামনে কন্ট্রোল করবেন???

সহজ সমাধান কী?

এখানেই আসল ট্রিকটা খাটিয়েছেন ইঞ্জিনিয়াররা। 😉

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

ম্যাট্রিক্স কানেকশন এলইডি কানেকশন
ম্যাট্রিক্স কানেকশন এলইডি কানেকশন

এখানে ৩ টা কলাম আর ৫ টা রো আছে। প্রতিটা কলামের সবগুলো এলইডির পজেটিভ প্রান্তকে একখানে করে একটা প্রান্ত বা পিন বের করা হয়েছে। আবার প্রতিটা রো এর সবগুলো নেগেটিভ একখানে করে একটি প্রান্ত বা পিন বের কর হয়েছে। তাহলে মোট পিন সংখ্যা দাঁড়াল-

কলামের ৩ টা + রো এর ৫ টা = ৮ টা।

এখন শুধু পিন কমিয়ে ৮ টা করলেই হবে না, এটাতে অক্ষরও শো করাতে হবে।

এখন আসুন দেখি এই ৮ পিন কনট্রোল করে কিভাবে অক্ষর প্রদর্শন করা যায়।

ম্যাট্রিক্স ব্যবস্থায় এলইডি ডিসপ্লেতে অক্ষর প্রদর্শন

Fig: 5 এ লক্ষ্য করুন, A অক্ষর টি প্রদর্শনের জন্য প্রথম কলামের R2 থেকে R5 পর্যন্ত এলইডি জ্বালানো হয়েছে। আবার কলাম ২ এর R1 ও R3 এবং কলাম ৩ এর R2 থেকে R5 পর্যন্ত এলইডি জ্বালানো আছে। এখন কলাম ১ এর R2 থেকে R5 পর্যন্ত এলইডি গুলো জ্বালাতে হলে C1 পিনে পজেটিভ এবং R2 থেকে R5 পর্যন্ত সবগুলো পিনে নেগেটিভ দিতে হবে।

Fig: 5
Fig: 5

এরপর C2 তে পজেটিভ এবং R1 ও R3 তে নেগেটিভ দিলে নিচের মত দেখাবে।

Fig: 6
Fig: 6

এবং সবশেষে C3 তে পজেটিভ এবং R2 থেকে R5 পর্যন্ত সবগুলোতে নেগেটিভ দিলে নিচের মত দেখাবে।

Fig: 7
Fig: 7

চোখের ধাঁধা বা POV ব্যবহার পদ্ধতি

এখন যদি চোখের ধাঁধার প্রক্রিয়াকে কাজে লাগাই তাহলে কি হয় দেখুন। প্রথমে ১ নাম্বার কলাম জ্বালাই। তারপর ২ নাম্বার এবং শেষে ৩ নাম্বার কলাম। এবং এই জ্বলানোর গতি যদি খুব দ্রুত করি তাহলে আমাদের চোখ বুঝতে পারবে না যে প্রতিটা কলাম আলাদা ভাবে জ্বলছে, আমাদের চোখ সম্পূর্ণটাকে একটাই দেখবে। ইলেকট্রনিক্সের ভাষায় একে বলে মাল্টিপ্লেক্সিং (Multiplexing) 😉

কিন্তু দাঁড়ান, আমাদের তো শুধু ৫ টা এলইডি দিয়া অক্ষর প্রদর্শনের কথা ছিল!!!

জ্বী এখন এটা নিয়েই লিখা শুরু করব। POV বোঝার জন্য উপরের বিষয় গুলো জানা জরুরী ছিল। চিন্তা করবেন না, এই লেখা তেমন দীর্ঘ হবে না। যদি উপরের অংশ বুঝে থাকেন। তাহলে এই অংশ অল্প কথাতেই বুঝতে পারবেন।

POV বা প্রপেলার ডিসপ্লে তে এলইডি এর সংযোগ

তো আমাদের কাছে আছে ৫ টা এলইডি। এই এলইডি গুলোকে নিচের মত করে সংযোগ করুন।

Fig: 8
Fig: 8

এখন দেখি এই ৫ টা এলইডি দিয়ে কিভাবে আমরা অক্ষর প্রদর্শন করতে পারি?

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

১ম এ ৫ টা , এর পরে ৫ টা, তার পরেও ৫টা।

এখন Fig: 8 কে যদি একটা কলাম হিসেবে বিবেচনা করি, এবং যত সময় পর পর Fig: 5, Fig: 6 ও Fig: 7 এর কাজ করেছি অর্থাৎ যত সময় পর পর কলামের ইনপুট পরিবর্তন করেছি, ঠিক তত সময় পর পর যদি Fig: 8 এর মত এলইডি কলামের অবস্থানের পরিবর্তন করি তাহলে কিন্তু বিষয়টা ঠিক একই দাঁড়াবে। নিচের চিত্রটি দেখলে বিষয়টি আরও পরিস্কার হয় যাবে।

Fig: 9
Fig: 9

এখানে এলইডি ৫ টাই আছে। শুধু সময়ের সাথে এর অবস্থানের পরিবর্তন করা হয়েছে। এখনে এলইডির নেগেটিভ গুলো সবসময়ই ব্যাটারীর নেগেটিভে লাগানো থাকবে।

এখন ১ম অবস্থানে যদি ২ থেকে ৫ নং এলইডিতে পজেটিভ ভোল্টেজ দেই তাহলে ওই এলইডি গুলো জ্বলে উঠবে।

(ডিজিটাল ইলেকট্রনিক্সে এই পজেটিভ ভোল্টেজ দেয়াকে বলা হয় লজিক্যাল হাই বা 1. আর যদি লজিক্যাল লো দেয়া হয় তবে সেটা হবে নেগেটিভ বা গ্রাউন্ড বা 0। এই 1 ও  0 এর একাধিক সমন্বয়কে ডাটা বলে)

দ্বিতীয় অবস্থানে ১ ও ৩ নং এলইডিতে হাই দিলে এলইডি জ্বলে উঠবে। আবার ৩য়  অবস্থানে ২ থেকে ৫ এ হাই ডাটা দিলে এলইডি গুলো জ্বলে উঠবে। এখন এই কাজকে অনেক দ্রুত করলে অর্থাৎ ডাটা পরিবর্তনের সাথে সাথে এলইডি কলামের অবস্থার পরিবর্তন করলে A অক্ষর টি দেখা যাবে।

এত দ্রুত এই এলইডি গুলোর অবস্থান পরিবর্তন করবেন কিভাবে? কিছুই না, এলইডির কলামটি একটি মোটরে স্থাপন করুন, ব্যাস। ঠিক নিচের ভিডিও টির মত-

প্রপেলার ডিসপ্লে বা POV Displa এর মূল কাঠামো
প্রপেলার ডিসপ্লে বা POV Displa এর মূল কাঠামো

আশাকরি এই প্রজেক্টের হার্ডওয়্যার সম্পর্কে ধারণা একটু হলেও পরিষ্কার করতে পেরেছি।

(না বুঝলে কমেন্ট অপশন তো চালুই আছে)

এখন প্রশ্ন হল এই লজিক্যাল হাই বা ডাটা গুলোকে এত দ্রুত কিভাবে পরিবর্তন করব। সহজ উত্তর মাইক্রোকন্ট্রোলার এর সাহায্যে। আমরা মাইক্রোকন্ট্রোলার কে প্রোগ্রামের মাধ্যমে বলে দেব কোন অবস্থানে এলইডি গুলোতে কোন ডাটা পাঠাতে হবে।

নিচে এই প্রপেলার ডিসপ্লের জন্য সার্কিট ডায়াগ্রাম টি দেখুন-

POV বা প্রপেলার ডিসপ্লের জন্য সার্কিট ডায়াগ্রাম
POV বা প্রপেলার ডিসপ্লের জন্য সার্কিট ডায়াগ্রাম

আজকের ইনস্টলমেন্ট এ পর্যন্তই। পরের ইনস্টলমেন্টে প্রোগ্রাম নিয়ে আলচনা করা হবে। ততক্ষন পর্যন্ত সার্কিটটি বানিয়ে ফেলুন। আর ডিসপ্লের সাথে ঘুরতে থাকুন।  😉
টা টা …

এই POV Display – প্রপেলার ডিসপ্লে লেখার –২য় ইনস্টলমেন্ট।