[Advanced] মাইক্রোকন্ট্রোলার দিয়ে LED Moving Matrix Display

আসসালামু আলাইকুম, আমি আবরার অন্তর। আশা করি সবাই ভালো আছেন। ইতিমধ্যে আমি আমার মাইক্রোকন্ট্রোলার টিয়টরিয়াল টিউন গুলোতে ভালই সাড়া পেয়েছি। কিন্তু আমার HSC টেস্ট পরিক্ষার কারনে আমি চালিয়ে যেতে পারিনি। যাইহোক এখন কাজের কথায় আসি...। অনেক ভাইয়ারা আমাকে LED Matrix নিয়ে লিখার জন্য অনুরধ করেছেন তাই আমি আজ LED Matrix এর basic theory  এবং simple project নিয়ে কিছু লিখলাম। শুরু করা যাকঃ

আপনারা যারা আমার আগের tutorial গুলো মিস করেছেন তাদের বুঝতে অসুবিধা হতে পারে তাই আপনারা আগে আমার আগের টিউন গুলো একবার দেখেনিন। 

 

উপরে আমরা 5x7 "A" character এর ধাপ দেখতে পাচ্ছি। কিন্তু কথা হল এই "A" টা কিভাবে LED Matrix এ যাবে?? আচ্ছা এখন আমরা ছবিটা আবার একটু লক্ষ্য করে শুরু (১) এ দেখি,  আমরা জানি কোন বিন্দু(X) থেকে সোজা বরাবর গেলে কলাম(column) এবং নিচে গেলে রো(Row)। এখন আমরা প্রতিটি ঘর কে  LED মনে করি। আর আমরা জানি LED নেগেটিভ ও পজিটিভ দিয়ে জ্বলে। এখন একটু লক্ষ্য করে গ্রাফ এর নিচে দেখুন প্রথম কলামের নিচে '১' আবার বাম সাইডে দেখুন শুরু প্রথম ঘরটা '১' বাকি গুলো '০'। এখন দেখুন প্রথম কলামের যে ঘর গুলো '১' ও '০' সেগুলোই লাল বেশি তার মানে এই LED গুলো ON.  এবার (২) চিত্রে এ জান দেখেন একই ভাবে  যে ঘর গুলো '১' ও '০' সেগুলোই লাল বেশি তার মানে এই LED গুলো ON। এভাবে ১-৫ পর্যন্ত জাওয়ার পর সব গুলোর কে একটিতে পরিণত করে দেখুন (চিত্র ৬) এ পুরপুরি "A" তৈরি হয়েছে। আসলে LED Matrix এ ১-৫ পর্যন্তই ঘটে কিন্তু তা এত দ্রুত ঘটে যে আমরা সরাসরি 'A' দেখতে পাই।

এখন proteus ওপেন করে নিচের মত ডিজাইন করে দেখুনঃ

Download Simple LED Matrix

proteus এর Matrix গুলোর উপরের পিন গুলো হল রো(Row) এবং নিচের পিন গুলো হল কলাম(column)। এবং রো গুলো নেগেটিভ(-) এবং কলাম গুলো পজিটিভ(+)।

নিজে করুনঃ Row(6), col(4) এর LED টা অন করুন। 

আশা করি এখন আপনারা বুঝতে পারছেন LED Matrix এর ৬৪টা LED মাত্র ১৬টা পিন দিয়ে কিভাবে কাজ করে।

নিচের ছবিতে দেখুন আমি matrix এর row গুলো এক করেছি। মানে প্রথমটার ১ম পিনের সাথে দ্বিতীয়টার ১ম পিন এভাবে ৮টি পিন। এর কারণ আপনি নিজেই ভাবুন, উপরে আমরা 'A' হওয়া দেখেছি এখন আবার একটু লক্ষ্য করে দেখুন (১)-(৫) পর্যন্ত কলাম গুলোর যথাক্রমে ১০০০০, ০১০০০, ০০১০০, ০০০১০, ০০০০১ পরিবর্তন। কিন্তু row এর ক্ষেত্রে তা নয়। তার মানে আমরা row কে ডাটা হিসেবে নিয়েছি। (এখন একবার আমার 7 segment tutorial টা মনে করতে চেষ্টা করুন এবং 7 segment এর সাথে Matrix এর তুলনা করুন।) হুম, আপনি যত Matrix-ই বাড়ান row pin ৮টাই বার হবে(যদি ৮x৮ হয়)।

এখন রো(row) তহ পেয়েগেলাম, কিন্তু কলাম!! ২টা matrix এর জন্যই তহ ১৬টা কলাম মানে ১৬টা পিন!!! তার পর আরও matrix যোগ করলে তখন কি হবে!!! মাইক্রোকন্ট্রোলার এ এত পিন পাব কই?? ভয় নেই shift register আছে তহ। 😀

74HC595 একটি কমদামি shift register যা ব্যবহার করে আপনি microcontroller থেকে মাত্র ৩টা পিন নিয়েই যত খুশি কলাম বানাতে পারেন। উপরের ছবিতে দেখানো হয়েছে কিভাবে matrix এর সাথে shift register সংযোগ করতে হয়।

এখন দেখুন কিভাবে microcontroller এর সাথে সংযোগ করবেনঃ

আপনি microcontroller এর যেকোনো I/O পিনের সাথেই সংযোগ করতে পারেন। আমি আমার সুবিধার জন্য RC0, RC1, RC3 পিন ব্যবহার করেছি। কিন্তু আপনি যখন কলাম বাড়াবেন আপনার ১টা করে shift register IC ও বারবে এবং নতুন IC টার পিন-১৪ আসবে আগের IC-র পিন-৯ থেকে।(উপরের ছবিতে লক্ষ্য করে দেখুন আমি লাল করে দেখিয়ে দিয়েছি) এবং বাকি পিন গুলো সব একসাথে microcontroller এ।

নিচে 74HC595 shift register IC-র datasheet এর একটা অংশতে দেখুন, ১০, ১৩ পিন গুলো Active low লিখা আছে। মানে low হলে কাজ করবে। পিন-১০ active হলে master reset হয়ে যাবে তাই ডিজাইন এ আমরা পিন-১০ কে (+) এবং পিন-১৩ কে (-) কারণ আমাদের output enable রাখতে হবে।

যারা এখনও shift register বুঝতে পারেন নি তারা একটু নিজে চেষ্টা করুন, আমি বলছি এখন বুঝে যাবেন।

DS pin = 1, এখন যদি SH pin অন হয়ে অফ এবং ST pin অন হয়ে অফ হয় তাহলে Q0 = 1 হবে। আবার,

DS pin = ০, এখন যদি SH pin অন হয়ে অফ এবং ST pin অন হয়ে অফ হয় তাহলে Q0 = ০ হবে এবং Q1 = 1 হবে কারণ আগের Q0 এর value টা Q1 এ shift করবে। এভাবে Q7 পর্যন্ত হয়ে যদি Q7' এ অন্য আরেকটা shift register থাকে তাহলে তাতে shift করবে।

Download Simple LED Matrix

এটা আমাদের simple LED Matrix Project:

আসুন এবার প্রোগ্রামিং করা যাকঃ

Author: Abrar Antor.
Note: Educational perposes only.

sbit SH at RC0_bit; //attach shift register's (74HC595) 'SH_CP' pin.
sbit DS at RC1_bit; //attach shift register's (74HC595) 'DS' pin.
sbit ST at RC3_bit; //attach shift register's (74HC595) 'ST_CP' pin.

unsigned const font[] = {
124, 126, 19, 19, 126, 124, 0, 0, //'A'
65, 127, 63, 72, 72, 120, 48, 0, //'b'
68, 124, 120, 76, 4, 28, 24, 0, //'r'
32, 116, 84, 84, 60, 120, 64, 0, //'a'
68, 124, 120, 76, 4, 28, 24, 0, //'r'
0, 0, 0, 0, 0, 0, 0, 0, //' '
124, 126, 19, 19, 126, 124, 0, 0, //'A'
124, 124, 4, 4, 124, 120, 0, 0, //'n'
0, 4, 62, 127, 68, 36, 0, 0, //'t'
56, 124, 68, 68, 124, 56, 0, 0, //'o'
68, 124, 120, 76, 4, 28, 24, 0, //'r'
0, 0, 0, 0, 0, 0, 0, 0, //' '
0, 0, 0, 0, 0, 0, 0, 0, //' '
};
void main() {
unsigned scroll, refresh, col;
TRISB = 0x00; //set PortB register for Output.
TRISC = 0x00; //set PortC register for Output.
PORTB = 0x00; //clear PortB pin.
PORTC = 0x00; //clear PortC pin.

while(1){ //infinite loop.
for(scroll=0;scroll<104;scroll++){ //we have 13 character in font. 13 x 8[8x8 matrix] = 104.
for(refresh=0;refresh<20;refresh++){ //its use only for control scrolling speed. you can change '20'.
SH = 1; SH = 0; DS = 1; ST = 1; ST = 0; //shifting '1' bit once.
for(col=0;col<16;col++){ //We used only 2 shift register so that 8x2=16.
portb =~ font[col + scroll]; //sending row value from font.
delay_us(300); //some delay.
SH = 1; SH = 0; DS = 0; ST = 1; ST = 0; //shifting '0' bit continuously.
}
}
}
}
}

আমি প্রগ্রামেই টিউমেন্টে সংক্ষেপে আলোচনা করেছি। তাও আপনাদের কার কোন লাইনে কোন সমস্যা থাকলে নিচে টিউমেন্ট করে জেনে নিবেন। আমি basic নিয়ে কাজ করতে পছন্দ করি তাই কারও basic এ প্রবলেম থাকলে জানাবেন আমি চেস্তা করবো ক্লিয়ার করতে।

Simulation in Proteus:

Download Simple LED Matrix

Level New

আমি আবরার অন্তর। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 10 বছর 6 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 13 টি টিউন ও 26 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 1 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস

অনেক অপেক্ষার অবশান ঘটলো। কতটা ধন্যবাদ দিবো বলার ভাষা নেই। you are best. Just continue Bos…………

good brother. chaliye jan.

বস দুইটা বিষয় ক্লিয়ার করে দিবেন প্লিজ,,,,,,,,,,

১) যদি ১৬*১৬ ম্যাট্রিক্স ব্যবহার করি তবে পিন গুলোর সংযোগ করবো।
২) পাওয়ার সাপ্লাই কেমন হবে? ( ১৬*১৬ ৫ টি ম্যাট্রিক্স যদি ব্যবহার করতে চাই)
প্লিজ জানাবেন।

    ১) দুই উপায়ে করতে পারেন। ক) Row তেও কলামের মত shift register ব্যবহার করে(তবে এটা slow process )। খ) microcontroller-এর আরেকটি PORT ব্যবহার করে(২৮পিন এর PIC দিয়েও হবে, shift register PIC এর PortA এ attach করতে হবে)।

    ২) যেহেতু প্রতি কলাম এ ১৬টি LED(row) এবং কলাম পজিটিভ (+), তার মানে আপনার ১৬টি LED অন করার মত volt ও amp প্রয়োজন। আপনি কয়টা matrix ব্যবহার করছেন তার উপর power supply কেমন হবে তা নির্ভর করে না কারণ matrix প্রতিটা কলাম বিত্তিক row এর LED গুলোতে ডাটা দেয় একসাথেই সব কলাম/matrix এ ডাটা দেয় না তাই পাওয়ার সাপ্লাই নির্ভর করে কয়টা row আছে তার অপর।

    আশা করি বুঝতে পেরেছেন।

Level 0

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

    আমি পরে সময় পেলে আরও অনেক পোস্ট করব। কিন্তু আপনি যদি আমার থিওরিটা বুঝেন তাহলে নিজেই ১৬x১৬ এবং বাংলা লিখা করতে পারবেন। আমি অনুরধ করছি আপনারা একটু নিজে চেস্টা করুন না পারলে আমি help করব।

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

10 & 13 pin a jodi 5v and 8,13 pin a ak e 5v dei tahole ki kaj hobe