Programming Dot matrix

Dot matrix ni sebenarnye gabungan banyak led untuk membentuk satu komponen paparan.... sama seperti kita susun bepuluh led dalam baris yg teratur(membentuk bit atau resolution).. tujuannya jelas, untuk memaparkan sesuatu secara animasi atau huruf biasa(membentuk ayat).... sape2 yg noob sgt tak pernah tengok bnda ni... dibawah aku sediakan gambarnye... mari kita lihat bagaimana nk program dot matrix ni dengan menggunakan ccs software(pic) dan juga perbezaan bnda ni dgn lcd dan led....




Dot matrix dikenali dengan kilang yg mengeluarkanya dan size nye pulak dibezakan dengan bilangan column dan row.... untuk tutorial nih kita gune 5x7(5 column dan 7 row) dot matrix.. lebih besar size dot matrix tuh.. lebih byk kepelbagaian dalam paparan dia dan resoulution pon makin tinggi...

Konsep:

konsep dot matrix ni mudah je.. same seperti LED memerlukan +voltage dan ground utk hidupkan.. tetapi dalam dot matrix biasanya column memerlukan +voltage dan ground di setiap rownye... maksudnye di tempat column yg mendapat logic 1(5v) dan row yg mendapat logic 0(ground), tempat tulah led pada badan dot matrix ni menyala atau aktif... untuk mencari pin mne yg mengawal row dan column dan pin mne yg common, anda bolehlah mentelaah datasheet dot matrix tu sendiri... dalam proteus, setiap pin keluaran dia dah tersusun baik utk row dan column(kalau sebenar sedikit kusut (terabur),kena pndai cari).... contoh dot matrix SD-1357:



Aktifkan dot matrix:

Untuk tutorial nih semua kaki column disambung ke pin B dalam pic dan row ke pin D dlm pic....
Sperti yg kita tahu, dot matrix boleh memaparkan huruf.. tapi camne nk buat??


kita ambik contoh utk paparkan huruf "A"... huruf "A" bagi aku mcm kat bwah ni dlm dot matrix.. :P

Semua column dan row digunakan.. maksudnye semua column kita kena hantar logic 1 dan semua row logic 0.... apa jadi kalau kita buat gitu? semua led di dot matrix tu akan menyala.... jadi apa yg kita patut buat ialah nyalakan dot marix step by step dengan delay 5ms.... 5ms delay menghasilkan frequency yg sgt tinggi tanpa dapat dilihat oleh mata kita... jadi kita cuma dapat lihat huruf "A" di dot matrix tanpa menyedari blingking 5ms delay yg terhasil... meh tgok cara nk buat...



mula-mula tiang di tepi A dulu....

Di sini Row 1 dan 2 off(hantar logic 1) dan row lain aktif(logic 0)... column 1 dan 5 sahaja aktif (logic 1) manakala yg lain off...  jadi hex nye..
nota:column di pin B dan row di pin D..


"x" ialah "dont care" maksudnye x kisah 1 ke 0.... jadi hex nye ialah:
column:11
Row:03

dalam program:


output_b(0x11);
output_d(0x03);
delay_ms(5);



seterusnya ialah:

Hex nye:

column:04
Row:FE

program:


output_b(0x11);
output_d(0x03);
delay_ms(5);
output_b(0x04);
output_d(0xFE);
delay_ms(5);



tambah hex seterusnya selepas 5ms delay.. :)

seterus dan seterusnya:

dia nye palang lak:

program akhir:


output_b(0x11);
output_d(0x03);
delay_ms(5);
output_b(0x04);
output_d(0xFE);
delay_ms(5);
output_b(0x0A);
output_d(0xFD);
delay_ms(5);
output_b(0x04);
output_d(0xFE);
delay_ms(5);
output_b(0x1F);
output_d(0xF7);
delay_ms(5);

dah terbentuk huruf "A".. :)
ok.. macam mane nk paparkan byk huruf pula sedangkan kita dah gune delay punye command..
gunakan sistem loop... pilih je sama ada for, do, while, goto dan lain-lain....

macam program main kat bawah ni:


void main(){
int a;
set_tris_b(0x00);
set_tris_d(0x00);

while(true){
for(a=0;a<=100;a++){
huruf_A();
// huruf A berada di subroutine.. paparkan "A".. nota: xnk guna subroutine, direct je pon xpe... noob..
}
for(a=0;a<=100;a++){
huruf_N();  // selepas looping, huruf N plak.....
}
}

Program penuh yg aku dah try:

#include <18f4620.h>
#fuses HS,NOWDT,NOLVP,NOPROTECT
#device adc=10
#use delay(clock=20M) 

#define row1 PIN_D0
#define row2 PIN_D1                                   
#define row3 PIN_D2                                   
#define row4 PIN_D3                                   
#define row7 PIN_D4                                  
#define row6 PIN_D5                                  
#define row5 PIN_D6

#define col1 PIN_B0
#define col2 PIN_B1                                   
#define col3 PIN_B2                                   
#define col4 PIN_B3                                   
#define col5 PIN_B4 

void huruf_A(){
output_b(0x11);
output_d(0x03);
delay_ms(5);
output_b(0x04);
output_d(0xFE);
delay_ms(5);
output_b(0x0A);
output_d(0xFD);
delay_ms(5);
output_b(0x04);
output_d(0xFE);
delay_ms(5);
output_b(0x1F);
output_d(0xF7);
delay_ms(5);
}
void huruf_O(){
output_b(0x11);
output_d(0x11);
delay_ms(5);
output_b(0x0E);
output_d(0xEE);
delay_ms(5);
}
void huruf_N(){
output_b(0x11);
output_d(0x03);
delay_ms(5);
output_b(0x02);
output_d(0xF7);
delay_ms(5);
output_b(0x04);
output_d(0xBF);
delay_ms(5);
output_b(0x08);
output_d(0xDF);
delay_ms(5);
}
void huruf_Y(){
output_b(0x04);
output_d(0x07);
delay_ms(5);
output_b(0x0A);
output_d(0xFB);
delay_ms(5);
output_b(0x11);
output_d(0xFC);
delay_ms(5);
}
void huruf_L(){
output_b(0x01);
output_d(0x00);
delay_ms(5);
output_b(0xFE);
output_d(0xEF);
delay_ms(5);
}
void huruf_F(){
output_b(0x01);
output_d(0x00);
delay_ms(5);
output_b(0xFE);
output_d(0xF6);
delay_ms(5);
}
void huruf_B(){
output_b(0x01);
output_d(0x00);
delay_ms(5);
output_b(0xEE);
output_d(0xE6);
delay_ms(5);
output_b(0x10);
output_d(0x99);
delay_ms(5);
}
void huruf_R(){
output_b(0x01);
output_d(0x00);
delay_ms(5);
output_b(0xEE);
output_d(0xF6);
delay_ms(5);
output_b(0x10);
output_d(0xC9);
delay_ms(5);
output_b(0x08);
output_d(0xBF);
delay_ms(5);
}
void clear(){
output_b(0x00);
output_d(0xFF);
}




void main(){
int a;
set_tris_b(0x00);
set_tris_d(0x00);

while(true){
for(a=0;a<=100;a++){
huruf_O();
}
for(a=0;a<=100;a++){
huruf_N();
}
for(a=0;a<=100;a++){
huruf_L();
}
for(a=0;a<=100;a++){
huruf_Y();
}
clear();
delay_ms(250);
for(a=0;a<=100;a++){
huruf_F();
}
for(a=0;a<=100;a++){
huruf_O();
}
for(a=0;a<=100;a++){
huruf_R();
}
clear();
delay_ms(250);
for(a=0;a<=100;a++){
huruf_N();
}
for(a=0;a<=100;a++){
huruf_O();
}
clear();
delay_ms(100);
for(a=0;a<=100;a++){
huruf_O();
}
for(a=0;a<=100;a++){
huruf_B();
}
clear();
delay_ms(300);
}
}


Program ni akan tulis "onlyfornoob" secara beturutan.. gunekan litar di bawah:


kenapa aku parallelkan dgn dot matrix yg besar tu...? sebab dot matrix yg kecik tu x brapa jelas dlm proteus.. :P

Nota:Dot matrix nih bleh buat animasi juga.. konsep nye same je mcm tutorial.. cuma kena kreatif sikit dan byk bersabar bermain dengan nombor hex .... ok.. trima kasih.. cau cin cau noob.. :)

Video:



Download:


Proteus nye file klik sini:Dot matrix.DSN

ccs punye file klik sini:Dot matrix.c

Popular posts from this blog

Pendahuluan:Peripheral Interface Controller(PIC microcontroller)

Pengenalan Interrupt

Pendahuluan: Proteus simulasi yg berguna