
আসসালামু আলাইকুম, আমি আবরার অন্তর। আশা করি সবাই ভালই আছেন। আমি লাস্ট টিউনে ৮x LED Matrix এর টিউটোরিয়াল করেছিলাম। আমার খুব ভালো লেগেছে আপনাদের সাড়া পেয়ে এবং আমি আপনাদের বুঝাতে পেরেছি তা ভেবে। অনেকের ১৬x LED Matrix নিয়ে সমস্যা হচ্ছে বলে আমাকে জানিয়েছেন। তাই আজ আমি মূলত ১৬x নিয়েই টিউনটি করেছি। আশা করি সবাই উপকৃত হবেন।
আমি যেহেতু আগেই LED Matrix নিয়ে বেসিক কথা বলেছি তাই আজ আর কিছু বলবো না। সতরাং যারা প্রথম আমার টিউন পরতেছেন তারা আগে আমার LED Matrix এর প্রথম টিউনটি গুরে আসুন।
[note: ১৬x LED Matrix কয়েক উপায়েই করা যায়। যার কাছে যেভাবে সহজ মনে হয় সেভাবেই করে। আমি এখানে যেভাবে দেখাতে যাচ্ছি সেটাও খুব সহজ একটি উপায়। যদিও আমার এই প্রক্রিয়ায় আমি আগে কাউকে করতে দেখিনি এবং ইন্টারনেটেও পাইনি কিন্তু আমি এভাবে ফিজিক্যাল্লি করেছি এবং এটা ১০০% কাজ করে]

আজ আমরা উপরের প্রোজেক্টটি করবো এবং কিভাবে এটা কাজ করে টা শিখব। তাহলে চলুন শুরু করিঃ
(১)

(২)

(৩)

Proteus এ Matrix গুলো উপরের ছবির মত করে PIC এবং 74HC595 এর সাথে সংযোগ করা হয়েছেঃ
(১) নং ছবিতে ৪টা ম্যাট্রিক্স ব্রেক করে দেখানো হয়েছে।
(২) নং ছবিতে প্রথম ৮ বিট রো (row) PIC এর PORTB রেজিস্টার এর সাথে সংযোগ এবং নিচের ৮ বিট কলামের(column) 74Hc595 এর সাথে সংযোগ দেখানো হয়েছে।
(৩) নং ছবিতে নিচের ৮ বিট রো(row) PIC এর PORTC রেজিস্টার এর সাথে সংযোগ এবং উপরের ৮ বিট কলামের(column) 74HC595 এর সাথে সংযোগ দেখানো হয়েছে।
লক্ষ্য করুন, (২) নং ছবিতে উপরের ১ম ম্যাট্রিক্স এর রো(row) এর সাথেই ২য় ম্যাট্রিক্স এর রো(row) এর সংযোগ। এবার দেখুন, (৩) নং ছবিতে "r1" লেবেলিং নিচের ১ম ম্যাট্রিক্স এর রো(row) এবং ২য় ম্যাট্রিক্স এর রো(row) তেই করা হয়েছে। তার মানে এখানেও উপরের ম্যাট্রিক্স এর মতই সংযোগ করা হয়েছে।
আবার, নিচের ১ম এবং ২য় ম্যাট্রিক্স এর কলাম 74HC595 এর সাথে সরাসরি সংযোগ করা হয়েছে। কিন্তু উপরের ম্যাট্রিক্স দুটোর কলাম লেবেলিং করে 74HC595 এর সাথে সংযোগ করা হয়েছে। মূলত উপরের এবং নিচের ম্যাট্রিক্স একসাথে করার জন্য লেবেলিং করে সংযোগ করা হয়েছে।
এবার চলুন দেখে নেই কিভাবে 74HC595 সংযোগ করা হয়েছেঃ

ছবিতে আমরা দুই সাইডে 74HC595 shift register দেখতে পাচ্ছি। বামসাইডের shift register গুলো উপরের দুটি ম্যাট্রিক্স এর জন্য এবং ডানসাইডের shift register গুলো নিচের ম্যাট্রিক্স এর সাথে সংযোগ করাই আছে। এখন বুঝতেই পারছেন কলাম বাড়ানোর জন্য কি করতে হবে।।
বামসাইডের ১ম shift register এর সাথে ডানসাইডের ১ম shift register সংযোগ। তার মানে যখন উপরের ম্যাট্রিক্স এর রো(row) তে ডাটা দিতে তখনই নিচের ম্যাট্রিক্স এও ডাটা দিবে। বামসাইডের shift register বাড়ালে উপরের ৮ বিট কলাম বাড়বে এবং ডানসাইডের shift register বাড়ালে নিচের ৮ বিট কলাম বাড়বে।
আমার মনে হয় আর কিছু বুঝার নেই এখানে। কারণ আমি প্রথম টিউনটিতে shift register নিয়ে বর্ণনা করেছি।
কোড টা একটু জটিল কিন্তু আমি প্রত্যেক লাইনেই সাইডটিউমেন্ট দিয়েছি আশা করি জটিলতা কম হবে।
MikroC code for 16x(unlimited column) LED Matrix:
Author: Abrar Antor.
Note: Educational perposes only.sbit SH at RA0_bit; //attach shift register's (74HC595) 'SH_CP' pin.
sbit DS at RA1_bit; //attach shift register's (74HC595) 'DS' pin.
sbit ST at RA2_bit; //attach shift register's (74HC595) 'ST_CP' pin.unsigned const font[] = {
0x08, 0x00, 0xC8, 0x07, 0x08, 0x08, 0x08, 0x10, 0x08, 0x10,
0x28, 0x10, 0x58, 0x10, 0x18, 0x10, 0x28, 0x10, 0xC8, 0x0F,
0x08, 0x02, 0xF8, 0x1F, 0x08, 0x00, 0x08, 0x00, 0xF8, 0x1F,
0x08, 0x00, 0x08, 0x00, 0x08, 0x03, 0x88, 0x04, 0x48, 0x08,
0x28, 0x10, 0x18, 0x10, 0xF8, 0x3F, 0x08, 0x00, 0x08, 0x00,
0x08, 0x63, 0x88, 0x64, 0x48, 0x08, 0x28, 0x10, 0x18, 0x10,
0xF8, 0x3F, 0x08, 0x00, 0x08, 0x00, 0xF8, 0x1F, 0x08, 0x00,
0x08, 0x00, 0x08, 0x63, 0x88, 0x64, 0x48, 0x08, 0x28, 0x10,
0x18, 0x20, 0xF8, 0x3F, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0xC8, 0x07, 0x08, 0x08,
0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x28, 0x10, 0x58, 0x10,
0x18, 0x10, 0x28, 0x10, 0xC8, 0x0F, 0x08, 0x02, 0xF8, 0x1F,
0x08, 0x00, 0x08, 0x00, 0x08, 0x1C, 0x68, 0x20, 0xD8, 0x40,
0x18, 0x80, 0x18, 0x81, 0xA8, 0x82, 0x48, 0x83, 0x78, 0x80,
0x48, 0x80, 0x88, 0x40, 0x08, 0x3F, 0x08, 0x00, 0x08, 0x00,
0x08, 0x63, 0x88, 0x64, 0x48, 0x08, 0x28, 0x10, 0x18, 0x20,
0xF8, 0x3F, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
void main() {
unsigned int scroll, temp;
unsigned short refresh, col;
adcon1 = 0x07; //Convert ADC pin to I/O.
TRISA = 0x00; //set PortA register for Output.
TRISB = 0x00; //set PortB register for Output.
TRISC = 0x00; //set PortC register for Output.
PORTA = 0x00; //clear PortA pin.
PORTB = 0x00; //clear PortB pin.
PORTC = 0x00; //clear PortC pin.while(1){
for(scroll=0;scroll<200;scroll+=2){ /*size of tatal number of value in font arrey.
[20 lines and 10 per lines = 200]
here scroll increased by 2. cause our aim is
to fill double ROW*/
for(refresh=0;refresh<40;refresh++){ //its use only for control scrolling speed.
temp = 0; //clear temp to 0. temp used to send data to second 8 bit ROW.
SH = 1; SH = 0; DS = 1; ST = 1; ST = 0; //shifting '1'.
for(col=0;col<16;col++){ //We used only 2 shift register so that 8x2=16.
portb =~ font[scroll + temp]; //sending to 1st 8 bit row value from font.
temp++; //temp = temp + 1, if scroll = 1 and temp = 1, then font[2] = 0xC8.
portc =~ font[scroll + temp]; //sending to second 8 bit row value from font.
temp++; //plus 1 again.
delay_us(200); //some delay. (It is necessary to control LED bright in real.)
SH = 1; SH = 0; DS = 0; ST = 1; ST = 0; //shifting '0'.
}
}
}
}
}
LED ম্যাট্রিক্স এর ফন্ট ডিজাইন করতে এই সফটওয়্যার টা বাবহার করতে পারেনঃ GLCD Font Creator [আমি এইটা use করি]
আশা করি সবাই Enjoy করেছেন। 🙂 🙂 🙂 😀
পরবর্তী টিউন করবো আপনাদের দেয়া কোন Topics এ। 😛 😛 আপনাদের যেটা খুব বেশি সমস্যা আমাকে বলবেন আমি চেষ্টা করবো সেটা নিয়ে টিউন করতে।
আজ আপাতত এখানেই শেষ করি। যাদের বুঝতে অসুবিধা হচ্ছে নিচে টিউমেন্ট করবেন। 🙂
আমি আবরার অন্তর। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 10 বছর 6 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 13 টি টিউন ও 26 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 1 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
আবরার অন্তর ভাই আপনাকে হাজার হাজার ধন্যবাদ
১৬এক্স১৬ নিয়ে টিউন করার জন্য।
প্লিজ চালিয়ে যাবেন ভাই।