বিগত Tutorial এ আমি PIC Microcontroller দ্বারা LCD Display নিয়ন্ত্রণ দেখিয়েছিলাম। এছাড়াও Entry Level এর কিছু আলোচনাও ছিল। এই Tutorial এ একটি গুরুত্বপূর্ণ এবং চিত্তাকর্ষক বিষয় নিয়ে আলোচনা করা হবে। আর টা হল Segment Display এবং Multiplexing।
প্রথমেই 7 Segment Display এর গঠন সম্পর্কে খুঁটিনাটি জেনে নেই।
7 Segment Display সুসজ্জিত Pattern এ বিন্যস্ত কয়েকটি LED ছাড়া আর কিছুই নয়। এতে বিন্যস্ত ৭ টি LED Segment 0 থেকে 9 পর্যন্ত ১০ টি অংক প্রদর্শন করতে সক্ষম। ক্ষেত্র বিশেষে একটি Decimal Point সহ মোট ৮ টি Segment উপস্থিত থাকে।


Segment গুলকে যথাক্রমে a, b, c, d, e, f, g এবং dp দ্বারা সূচিত করা হয়। ক্ষেত্রবিশেষে dp কে h দ্বারাও সূচিত করা হয়। বিভিন্ন Number প্রদর্শনের জন্য LED গুলোকে বিভিন্ন Pattern এ জ্বালান হয়।
ধরুন Display তে 5 অংক টি প্রদর্শন করতে হবে। তাহলে Microcontroller এর একটি 8 Bit Register এর Phase হবে “01101101”।

অর্থাৎ 5 অংকটি প্রদর্শনের জন্য;
bit_1 = 0 > Logic State = Low > LED of Segment “dp” Is Off
bit_2 = 1 > Logic State = High > LED of Segment “g” Is On
bit_3 = 1 > Logic State = High > LED of Segment “f” Is On
bit_4 = 0 > Logic State = Low > LED of Segment “e” Is Off
bit_5 = 1 > Logic State = High > LED of Segment “d” Is On
bit_6 = 1 > Logic State = High > LED of Segment “c” Is On
bit_7 = 0 > Logic State = Low > LED of Segment “b” Is Off
bit_8 = 1 > Logic State = High > LED of Segment “a” Is On
তাহলে প্রতিটি Number প্রদর্শনের জন্য MCU এর ৮ টি করে PIN ব্যবহার হচ্ছে। তার মানে আমরা একটি 16 Bit Microcontroller ব্যবহার করে সর্বোচ্চ ২ টি Digit প্রদর্শন করতে পারব! এর বেশি যেতে হলে আমাদের 32 Bit Microcontroller ব্যবহার করতে হবে! ইহা অত্যন্ত অযৌক্তিক একটি কাজ হবে! আমরা MCU এর মূল্যবান PIN এর সবগুলোই অপচয় করে ফেলতে পারি না!
এই সমস্যা সমাধানের জন্য একটি দারুন পদ্ধতি ব্যবহার করা হয়। যার নাম Multiplexing।

মানুষের চোখ কোন কিছু দেখার পর তার রেশ মস্তিষ্কে 1/10 Second (100 millisecond) স্থায়ী থাকে। এই সময় এর মধ্যে দৃশ্যের কোন পরিবর্তন হলে তা Vision এ কোন প্রভাব ফেলে না। এই কৌশল কে কাজে লাগিয়ে একাধিক 7 Segment Display এর মধ্যে Multiplexing ঘটান হয়।
এক্ষেত্রে সবগুলো Display এর ৮ টি বিট একসাথে সংযুক্ত থাকে। এবং Common Ground PIN গুলো আলাদা আলাদাভাবে নিয়ন্ত্রণ করে একটি নির্দিষ্ট সময়ে একটিমাত্র Digit জ্বালান হয়। সবগুলো Digit কেই এভাবে আলাদা করে জালান নেভান হয়। তবে এই প্রক্রিয়া এত দ্রুত করা হয় যে আমাদের মনে হয় সবগুলো Digit ই একসাথে দিপ্তমান।
এখানে একটি Sample Project দেওয়া হল:
int a=6; int b=91; int c1=79; int d1=102; int e=109; int f1=125; int g=7; int h=127; int i=111; int j=63; void main() { TRISB=0; TRISC=0; for( ; ; ) { PORTB=a; PORTC=0b00000001; delay_ms(20); PORTB=b; PORTC=0b00000010; delay_ms(20); PORTB=c1; PORTC=0b00000100; delay_ms(20); PORTB=d1; PORTC=0b00001000; delay_ms(20); } }
এখানে শুরুতেই Common Cathode Display এর জন্য, 1 থেকে 10 পর্যন্ত Number এর সাথে সম্পৃক্ত Register এর Phase সমূহ Declare করা হয়েছে। সুবিধার জন্য 1 থেকে 10 পর্যন্ত Number গুলোকে a, b, c1, d1, e, f1, g, h, i এবং j Variable দ্বারা প্রথিস্থাপিত করা হয়েছে। ইতোপূর্বে “5” অংকটি প্রদর্শনের জন্য Register এর Binary State বিস্তারিত দেখান হয়েছে। আর Binary “01101101” এর Decimal হল “109” ।
“TRISB=0;” এবং “TRISC=0;” দ্বারা MCU এর B এবং C Register কে Output হিসেবে Declare করা হয়েছে। এখানে B Register কে Number প্রদর্শনের কাজে এবং C Register কে Multiplexing এর কাজে ব্যবহার করা হয়েছে।
20 millisecond পর পর Display পরিবর্তন করা হবে এবং 4 টি Display (20×4) = 80 millisecond এর মধ্যে আন্তঃপরিবর্তন ঘটান হবে। যা আমাদের Vision Delay, 100 millisecond অপেক্ষা কম।
এখানে Circuit এর সম্পূর্ণ Schematic দেওয়া হল।
(বি. দ্র: Diagram এ Vss এবং Vdd Pin গুলো দেখান হয়নি।)

এখানে Source Code এবং Programmable HEX File অন্তর্ভুক্ত করা আছে।
Password: PC16F877AAE
Credits:
MCU : Microchip
7 Segment Display: MikroElektronika
Software: MikroElektronika, Labcenter Electronics