দ্বাদশ অধ্যায়
12.1 Draw the pin diagram of LCD.
এলসিডিঃ LCD এর পূর্নরুপ হল Liquid crystal display. ইতোমধ্যে আমরা সেভেন সেগমেন্টের ব্যবহার দেখেছি। সেভেন সেগমেন্টের সীমাবদ্ধতা হল একটি সেভেন সেগমেন্ট দিয়ে শুধু একটি সংখ্যাই দেখানো যায়। ইংরেজি বর্নমালার খুবই অল্পকিছু বর্ণ সাতটি সেগমেন্ট দিয়ে তৈরী করা গেলেও বেশিরভাগই তৈরী করা যায় না। এলসিডি এই সীমাবদ্ধতা থেকে মুক্ত। এলসিডিতে ইংরেজি বর্নমালার সবগুলো বর্ণ, সংখ্যা, কাস্টমাইজড ক্যারেক্টার দেখানো সম্ভব। এক বা একাধিক পূর্ন বাক্যও লিখে দেখানো সম্ভব। মাল্টিমিটারসহ যেকোনো মিটার, ক্যালকুলেটর এবং ডিসপ্লেভিত্তিক অ্যাপ্লিকেশনগুলোতে এলসিডির ব্যাবহার বহুল প্রচলিত।
- >>পিন ১কে গ্রাউন্ডের সাথে কানেক্ট করতে হয়, পিন ২ এ ৫ ভোল্ট দিতে হয়।
>>৩ নং পিনে ভোল্টেজ বাড়িয়ে কমিয়ে এলসিডির কনট্রাস্ট এডজাস্ট করা যায়। সাধারণত একটি পটেনশিওমিটার (ভেরিয়েবল রেজিস্টর) দিয়ে এ কাজটি করা হয়।
>>৪ নং পিনটি হচ্ছে রেজিস্টার সিলেক্ট (R/S) মোড, যেটায় ডেটা পাঠিয়ে বলা হয় যে এলসিডির ডিজিটাল ইনপুট পিনগুলোতে লেখা পাঠানো হবে না ইন্সট্রাকশন পাঠানো হবে। লেখা বলতে এলসিডিতে কি লেখা উঠবে সেটা, আর ইন্সট্রাকশন বলতে এলসিডির সব লেখা মুছে ফেলা, কিংবা যেই লেখা এখন পাঠানো হবে ওটা ২য় লাইনে দেখানো এরকম।
- >>পিন ৫ হচ্ছে R/W ( Read/Write) মোড। এই পিনে মাইক্রোকন্ট্রোলার দিয়ে ক্যারেকটার পাঠানো যায় অথবা ডিসপ্লেতে এই মুহূর্তে কি লেখা আছে তা পড়াযায়। এ পিনটি সাধারণত গ্রাউন্ড করে রাখা হয়। পিন ৬ হচ্ছে Clock Enable Pin, এই পিনের মাধ্যমে এলসিডি ডিসপ্লে ড্রাইভারের ক্লক চালু করা হয়, যেটার সাহায্যে ড্রাইভার বুঝতে পারে কখন ইন্সট্রাকশন এক্সিকিউট করতে হবে।
>>D0 থেকে D7 পর্যন্ত ডিজিটাল পিনগুলোয় ক্যারেকটার (লেখা) ও ইন্সট্রাকশন পাঠানো হয়। যদি ৮ বিট মোড ব্যবহার করা হয়, তাহলে সবগুলো পিন ব্যবহার করতে হয়। তবে আরডুইনোতে বাই ডিফল্ট ৪ বিট মোড ব্যবহার করা হয়। তাই D4-D7 পিন আরডুইনোতে লাগালেই কাজ হয়।
>>A পিনে এলসিডির ব্যাকলাইটের পাওয়ার দেয়া হয়। এখানে ৫ ভোল্ট দিলে লাইট পুড়ে যেতে পারে তাই ৩.৩ ভোল্ট অথবা একটা রেজিস্টর দিয়ে ৫ ভোল্টে কানেক্ট করতে হবে।
>>K পিনে এলসিডির ব্যাকলাইটের পাওয়ার সোর্সের গ্রাউন্ড কানেক্ট করতে হবে। আরডুইনো থেকে ব্যাকলাইট পাওয়ার করা হলে এই পিনটি আরডুইনোর গ্রাউন্ড এর সাথে লাগিয়ে দিলেই চলবে।
12.2 Describe the Instruction register, data register and busy flag.
Instruction register
কম্পিউটিংয়ে, নির্দেশিকা রেজিস্টার (আইআর) একটি সিপিইউর নিয়ন্ত্রণ ইউনিটের অংশ যা বর্তমানে নির্দেশটি কার্যকর করা হয় বা ডিকোড করা হচ্ছে।
সাধারণ প্রসেসরগুলিতে প্রতিটি মৃত্যুদন্ড কার্যকর করা উচিত নির্দেশিকা রেজিস্ট্রারে লোড করা হয় যা এটি ডিকোড করা, প্রস্তুত এবং শেষ পর্যন্ত সম্পাদন করা হয়, যা বেশ কয়েকটি পদক্ষেপ নিতে পারে।
কিছু জটিল প্রসেসর ইন্সট্রাকশন রেজিস্ট্রারগুলির পাইপলাইনটি কোথাও পাইপলাইনের প্রতিটি পর্যায়ে ডিকোডিং, প্রস্তুতি বা সম্পাদনের অংশ করে এবং তারপরে তার পদক্ষেপের জন্য পরবর্তী পর্যায়ে পৌঁছে দেয়। সমান্তরালে বেশ কয়েকটি নির্দেশাবলীর ডিকোডিং করায় আধুনিক প্রসেসরগুলি এমনকি অর্ডার থেকে বাইরে কয়েকটি পদক্ষেপও করতে পারে।
data register
মেমোরি ডেটা রেজিস্টার (এমডিআর) বা মেমোরি বাফার রেজিস্টার (এমবিআর) এমন একটি কম্পিউটারের নিয়ন্ত্রণ ইউনিট যার মধ্যে কম্পিউটার স্টোরেজ (যেমন র্যাম) সংরক্ষণ করার তথ্য রয়েছে বা কম্পিউটার স্টোরেজ থেকে আনার পরে ডেটা রয়েছে
12.3 Mention the LCD command codes
কম্যান্ড বাইট ফাংশন
0x0F LCD মডিউল অন করা এবং কার্সর ব্লিঙ্ক করা
0x01 LCD এর স্ক্রিন ক্লিয়ার করা
0x02 কার্সর একদম শুরুতে নিয়ে যাওয়া
0x04 কার্সর একধাপ বামে সরানো
0x05 LCD এর ক্যারাক্টার একধাপ ডানে সরানো
0x06 কার্সর একধাপ ডানে সরানো
0x07 LCD এর ক্যারাক্টার একধাপ বামে সরানো
0x0E LCD এর ডিসপ্লে অন রাখা এবং কার্সর অন রাখা
0x38 LCD এর দুই সারিই এবং প্রত্যেক ছোট বক্সের ৫x৭ ডট একটিভেট করা
0x80 কার্সরকে প্রথম লাইনের শুরুর পজিশনে নিয়ে যাওয়া
0x81 কার্সরকে প্রথম লাইনের ২ নম্বর বক্সে নিয়ে যাওয়া
0x82 কার্সরকে প্রথম লাইনের ৩নম্বর বক্সে নিয়ে যাওয়া
0x83 কার্সরকের প্রথম লাইনের ৪ নম্বর বক্সে নিয়ে যাওয়া
0x3C দ্বিতীয় সারি একটিভেট করা
0xC0 কার্সরকে দ্বিতীয় লাইনের শুরুর পজিশনে নিয়ে যাওয়া
0xC1 কার্সরকে দ্বিতীয় লাইনের ২ নম্বর বক্সে নিয়ে যাওয়া
0xC2 কার্সরকে দ্বিতীয় লাইনের ৩ নম্বর বক্সে নিয়ে যাওয়া
0xC3 কার্সরকে দ্বিতীয় লাইনের ৪ নম্বর বক্সে নিয়ে যাওয়া
0x0F ডিসপ্লে অন, কার্সর অন এবং কার্সর ব্লিঙ্কিং
0x0C ডিসপ্লে অন এবং কার্সর অফ
12.4 Write Program for displaying data to LCD.
#include<reg52.h> //header file for at89s52 microcontroller
#include<intrins.h> //header file for _nop_() function
#define LCD_register P2 //make port 2 data byte
sbit EN = P0^0; //enable pin of LCD,this pin act as output pin of 8051
sbit RS = P0^1; //register select pin of LCD,this pin act as output pin of 8051
void delay_uS(unsigned int t) //pass value to get desired microsecond delay
{
while((t--) > 0)
{
_nop_(); //doing nothing one machine cycle
}
}
void send_cmd(unsigned char cmd)
{
LCD_register = cmd; //put command code in LCD_register pin which act as data pin
RS = 0; //keep RS low for selecting data register
EN = 1; //keep high EN pin of lcd for minimum 490 nano second
delay_uS(10); //we keep this action for 10 micrpseconds
EN = 0; //clear this EN pin
}
void send_data(unsigned char dt)
{
LCD_register = dt; //put data code in LCD_register pin which act as data pin
RS = 1; //keep RS high for selecting data register
EN = 1; //keep high EN pin of lcd for minimum 490 nano second
delay_uS(10); //we keep this action for 10 microseconds
EN = 0; //clear this EN pin
}
void init_LCD()
{
send_cmd(0x38); //use 8bit,two lines & 5x7 matrix
delay_uS(1000); //delay 1 milliseconds after sending data byte
send_cmd(0x0F); //Display on, Cursor on, blinking
delay_uS(1000); //delay 1 milliseconds after sending data byte
send_cmd(0x01); //clearing the screen
delay_uS(1000); //delay 1 milliseconds after sending data byte
send_cmd(0x80); //cursor return at home
delay_uS(1000); //delay 1 milliseconds after sending data byte
}
void send_string(const char *s) //this function takes string as argument
{
while(*s)
send_data(*s++); //just keep increasing to the next character's position
}
void main()
{
init_LCD(); //initialize the LCD funtion very begining
send_string("Sarful Hassan"); //put whatever you want to show in 1st line of LCD
delay_uS(1000); //wait here 1 millisecond to settle down everything
send_cmd(0xC0); //push the cursor two the second line
delay_uS(1000); //delay 1 millisecond to settle down everything
send_string("Mechatronics, "); //put whatever you want to show in 2nd line of LCD
while(1)
{
//never ending loop
}
}
12.5 Describe the organization of a matrix Keyboard.
যখন কোনও কী টিপিত হয় না, সমস্ত কলামগুলি উচ্চ পঠিত হয়। যে কোনও কী চাপলে তা কলামগুলির মধ্যে একটিকে কমিয়ে দেবে (যে কলামটি চাপানো হয়েছিল তাতে কী রয়েছে)। সুতরাং, কোনও কী টিপছে কিনা তা দেখার জন্য, কোনও মাইক্রোপ্রসেসর কেবল ইনপুট লাইনগুলির কোনও কম কিনা তা দেখতে হবে। একবার মাইক্রোপ্রসেসর সনাক্ত করে যে একটি কী চাপানো হয়েছে, এটি কেবল কীটি ছিল তা খুঁজে বের করা উচিত। এই প্রক্রিয়াটি বেশ সহজ। উল্লিখিত হিসাবে, মাইক্রোপ্রসেসর প্রথমে কলামটি সনাক্ত করে এবং তারপরে এটি চাপা কীটির কলামটির সারি সনাক্ত করে। কীটি কেবলমাত্র একটি সারিটিতে থাকতে পারে, তাই মাইক্রোপ্রসেসর কেবলমাত্র একটি সারিতে কম আউটপুট দেয়। যদি ইনপুট পোর্টটিতে এটি একটি 0 (নিম্ন) সন্ধান করে তবে মাইক্রোপ্রসেসর জানে যে নির্বাচিত সারিটিতে চাপানো কীটি ঘটেছে। বিপরীতে, যদি ইনপুট পোর্টটির সমস্ত উচ্চতা থাকে তবে কীটি টিপানো সেই সারিটিতে ছিল না এবং মাইক্রোপ্রসেসর পরবর্তী সারিটি নির্বাচন করে, সারিটি সন্ধান না করা পর্যন্ত প্রক্রিয়াটি পুনরাবৃত্তি করে। একবার সারিটি চিহ্নিত হয়ে গেলে, ইনপুট পোর্টে একক নিম্ন বিটের অবস্থান চিহ্নিত করে চাপ দেওয়া কীটির নির্দিষ্ট কলামটি স্থাপন করা যেতে পারে।
No comments