Scrolling Text Pada Led Dot Matrix

13
Scrolling Text pada Led Dot Matrix Berbasis Mikrokontroler & Komunikasi Serial Kebutuhan akan media penyampai informasi yang menarik seperti untuk kebutuhan iklan membutuhkan kreativitas tersendiri. Awalnya banyak menggunakan lampu hias berupa lampu neon yang dibentuk karakter khusus yang disesuaikan kebutuhan. Teknologi dengan lampu neon terdapat banyak kekurangan diantaranya adalah tidak dapat diupdate informasinya dan membutuhkan tenaga listrik yang relativ besar. Teknologi led dotmatrix yang dikendalikan dengan mikrokontroller menutup kekurangan tersebut, informasi dapat dengan mudah diupdate melalui PC dan led tidak membutuhkan daya listrik besar. Blok diagram Blok diagram sistem yang dibangun sebagai berikut Gambar 1. Blok diagram sistem

Transcript of Scrolling Text Pada Led Dot Matrix

  • Scrolling Text pada Led Dot MatrixBerbasis Mikrokontroler & Komunikasi Serial

    Kebutuhan akan media penyampai informasi yang menarik seperti untuk kebutuhan iklan membutuhkan kreativitas tersendiri. Awalnya banyak menggunakan lampu hias berupa lampu neon yang dibentuk karakter khusus yang disesuaikan kebutuhan. Teknologi dengan lampu neon terdapat banyak kekurangan diantaranya adalah tidak dapat diupdate informasinya dan membutuhkan tenaga listrik yang relativ besar. Teknologi led dotmatrix yang dikendalikan dengan mikrokontroller menutup kekurangan tersebut, informasi dapat dengan mudah diupdate melalui PC dan led tidak membutuhkan daya listrik besar.

    Blok diagramBlok diagram sistem yang dibangun sebagai berikut

    Gambar 1. Blok diagram sistem

  • Hardware Dot matrix 5x7, Led yang tersusun dalam 5 kolom dan 7 baris. Mikrokontroller dengan eeprom internal, dalam hal ini digunakan

    ATMega 8535 Untuk mengendalikan led yang akan dinyalakan dibutuhkan driver

    baris dan kolom. Pada driver kolom menggunakan shift register untuk menggilir led mana yang akan dinyalakan, sedangkan pada driver baris yang dikuatkan arusnya.

    Interface ke serial port

    Software

    Gambar 2. Diagram alir program utama dapat dilihat pada gambar di samping.

    Fungsi untuk memasukkan, mengubah dan menghapus text dari PC ke eeprom mikrokontroller

    Fungsi untuk menyusun index text pada eeprom dengan library font

    1

    2

    Start

    Inisisalisasi Port Serial

    Tekan m untuk masuk ke menu

    utama

    End

    Buat Index Text

    Buat Index Scroll

    KonsoleY

    N

    3Tampilkan karakter ke dot matrix

    Data

  • Fungsi untuk menyusun array berupa library font yang telah disusun sesuai dengan text yang dimasukkan pengguna melalui PC ke eeprom

    Fungsi untuk menampilkan array ke led dot matrix Fungsi untuk memberikan animasi scroll

    Cara Kerja SistemAlat penampil karakter maupun animasi yang dapat diinput dari suatu PC yang terhubung dengan mikrokontroler melewati port serial. Karakter diinput pada suatu aplikasi di PC dimana aplikasi tersebut telah di set untuk dapat menerima dan mengirimkan data melalui port serial. Aplikasi tersebut mengirimkan data yang membuat mikrokontroler yang terhubung komunikasi serial tersebut merespon dengan mengirimkan data yang membentuk suatu kalimat (karakter) dan menu untuk memasukan karakter. Di dalam menu tersebut terdapat beberapa pilihan yaitu :

    Lihat Text, yaitu untuk melihat text yang telah dimasukan, Ganti Text, yaitu untuk meng-input, menambahkan dan

    mengganti suatu karakter yang akan ditampilkan pada dot matrix,

    Hapus Text, adalah pilihan yang berguna untuk menghapus karakter atau kalimat yang telah kita masukan sebelumnya.

    Setelah karakter diinput pada aplikasi tersebut, karakter yang berupa data tersebut dikirim melalui port serial menuju mikrokontroler. Mikrokontroler yang diset untuk menerima data dari PC akan mengolah data yang akan disimpan pada memori yang ada pada mikrokontroler. Hasil dari proses pada mikrokontroler tersebut adalah output hexa yang akan dikeluarkan pada Port A sebagai pengaturan baris dot matrix dan Port B mikrokontroler sebagai pengaturan data yang akan diproses kembali pada driver kolom. Data yang dikirim pada Port A inilah yang dapat menghidupkan dot matrix. Ledled yang menyala akan membentuk suatu karakter dan karakter tersebut akan sama dengan karakter yang diinputkan pada aplikasi di PC.

  • Gambar 3. Memasukkan text melalui PC ke mikrokontroller

    Adapun untuk memberikan efek scroll, maka dibuat array yang akan dipanggil dengan index yang increment sehingga karakter yang muncul di led dot matrix tampil secara bergeser.

    Rangkaian Skematik

    Gambar 4. Rangkaian skematik display dot matrix

    Source Code

    #include

    #include

    #include

    #include

    int a,i,n,k,l,y,x,c,z;

    int n_font=96; //STATIS

  • int jumlah_urutan;

    int flag=0;

    char data;

    eeprom int n_text,j=0;

    eeprom char text[80]={'0','1'};

    unsigned char scroll[250]={'0','1'};

    flash char font_greeting1[] = {

    0x00,

    0x7F, 0x20, 0x18, 0x20, 0x7F, 0x00,// W

    0x7E, 0x11, 0x11, 0x11, 0x7E ,0x00,// A

    0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,// H

    0x03, 0x04, 0x78, 0x04, 0x03, 0x00,// Y

    0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,// U

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// SPASI

    0x7F, 0x09, 0x09, 0x01, 0x01, 0x00,// F

    0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,// I

    0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,// R

    0x7F, 0x41, 0x41, 0x22, 0x1C, 0x00,// D

    0x7E, 0x11, 0x11, 0x11, 0x7E ,0x00,// A

    0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,// U

    0x46, 0x49, 0x49, 0x49, 0x31, 0x00,// S

    0x00

    };

    flash char font_greeting2[] ={

    0x00, 0x00, 0x00,

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// SPASI

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// SPASI

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// SPASI

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// SPASI

    0x00, 0x00, 0x00, 0x00, 0x00, 0x08,

    0x08, 0x08, 0x08, 0x08, 0x7F, 0x3E,// Diode

    0x1C, 0x08, 0x7F, 0x08, 0x08, 0x08,

    0x08, 0x00, 0x00, 0x00, 0x00, 0x00,

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// SPASI

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// SPASI

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// SPASI

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// SPASI

    0x00, 0x00, 0x00, 0x00, 0x00

    };

    flash char font[] = {

    0x9C, 0xBE, 0xFC, 0xBE, 0x9C,0x00,//heart (~)

    0x08, 0x08, 0x2A, 0x1C, 0x08,0x00,// ->

    0x08, 0x1C, 0x2A, 0x08, 0x08,0x00,//

  • 0x02, 0x04, 0x08, 0x10, 0x20,0x00,// \

    0x41, 0x41, 0x7F, 0x00, 0x00,0x00,// ]

    0x04, 0x02, 0x01, 0x02, 0x04,0x00,// ^

    0x40, 0x40, 0x40, 0x40, 0x40,0x00,// _

    0x00, 0x01, 0x02, 0x04, 0x00,0x00,// `

    0x00, 0x07, 0x00, 0x07, 0x00,0x00,// "

    0x00, 0x00, 0x5F, 0x00, 0x00,0x00,// !

    0x14, 0x7F, 0x14, 0x7F, 0x14,0x00,// #

    0x24, 0x2A, 0x7F, 0x2A, 0x12,0x00,// $

    0x23, 0x13, 0x08, 0x64, 0x62,0x00,// %

    0x36, 0x49, 0x55, 0x22, 0x50,0x00,// &

    0x00, 0x1C, 0x22, 0x41, 0x00,0x00,// (

    0x00, 0x41, 0x22, 0x1C, 0x00,0x00,// )

    0x08, 0x2A, 0x1C, 0x2A, 0x08,0x00,// *

    0x08, 0x08, 0x3E, 0x08, 0x08,0x00,// +

    0x00, 0x50, 0x30, 0x00, 0x00,0x00,// ,

    0x08, 0x08, 0x08, 0x08, 0x08,0x00,// -

    0x00, 0x30, 0x30, 0x00, 0x00,0x00,// .

    0x20, 0x10, 0x08, 0x04, 0x02,0x00,// /

    0x3E, 0x51, 0x49, 0x45, 0x3E,0x00,// 0

    0x00, 0x42, 0x7F, 0x40, 0x00,0x00,// 1

    0x42, 0x61, 0x51, 0x49, 0x46,0x00,// 2

    0x21, 0x41, 0x45, 0x4B, 0x31,0x00,// 3

    0x18, 0x14, 0x12, 0x7F, 0x10,0x00,// 4

    0x27, 0x45, 0x45, 0x45, 0x39,0x00,// 5

    0x3C, 0x4A, 0x49, 0x49, 0x30,0x00,// 6

    0x01, 0x71, 0x09, 0x05, 0x03,0x00,// 7

    0x36, 0x49, 0x49, 0x49, 0x36,0x00,// 8

    0x06, 0x49, 0x49, 0x29, 0x1E,0x00,// 9

    0x00, 0x36, 0x36, 0x00, 0x00,0x00,// :

    0x00, 0x56, 0x36, 0x00, 0x00,0x00,// ;

    0x00, 0x08, 0x14, 0x22, 0x41,0x00,//

    0x02, 0x01, 0x51, 0x09, 0x06,0x00,// ?

    0x32, 0x49, 0x79, 0x41, 0x3E,0x00,// @

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// SPASI

    0x7E, 0x11, 0x11, 0x11, 0x7E ,0x00,// A

    0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,// B

    0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,// C

    0x7F, 0x41, 0x41, 0x22, 0x1C, 0x00,// D

    0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,// E

    0x7F, 0x09, 0x09, 0x01, 0x01, 0x00,// F

    0x3E, 0x41, 0x41, 0x51, 0x32, 0x00,// G

    0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,// H

    0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,// I

    0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,// J

    0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,// K

    0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,// L

    0x7F, 0x02, 0x04, 0x02, 0x7F, 0x00,// M

    0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,// N

  • 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,// O

    0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,// P

    0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,// Q

    0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,// R

    0x46, 0x49, 0x49, 0x49, 0x31, 0x00,// S

    0x01, 0x01, 0x7F, 0x01, 0x01, 0x00,// T

    0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,// U

    0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,// V

    0x7F, 0x20, 0x18, 0x20, 0x7F, 0x00,// W

    0x63, 0x14, 0x08, 0x14, 0x63, 0x00,// X

    0x03, 0x04, 0x78, 0x04, 0x03, 0x00,// Y

    0x61, 0x51, 0x49, 0x45, 0x43, 0x00,// Z

    0x20, 0x54, 0x54, 0x54, 0x78, 0x00,// a

    0x7F, 0x48, 0x44, 0x44, 0x38, 0x00,// b

    0x38, 0x44, 0x44, 0x44, 0x20, 0x00,// c

    0x38, 0x44, 0x44, 0x48, 0x7F, 0x00,// d

    0x38, 0x54, 0x54, 0x54, 0x18, 0x00,// e

    0x08, 0x7E, 0x09, 0x01, 0x02, 0x00,// f

    0x08, 0x14, 0x54, 0x54, 0x3C, 0x00,// g

    0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,// h

    0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,// i

    0x20, 0x40, 0x44, 0x3D, 0x00, 0x00,// j

    0x00, 0x7F, 0x10, 0x28, 0x44,0x00,// k

    0x00, 0x41, 0x7F, 0x40, 0x00,0x00,// l

    0x7C, 0x04, 0x18, 0x04, 0x78,0x00,// m

    0x7C, 0x08, 0x04, 0x04, 0x78,0x00,// n

    0x38, 0x44, 0x44, 0x44, 0x38,0x00,// o

    0x7C, 0x14, 0x14, 0x14, 0x08,0x00,// p

    0x08, 0x14, 0x14, 0x18, 0x7C,0x00,// q

    0x7C, 0x08, 0x04, 0x04, 0x08,0x00,// r

    0x48, 0x54, 0x54, 0x54, 0x20,0x00,// s

    0x04, 0x3F, 0x44, 0x40, 0x20,0x00,// t

    0x3C, 0x40, 0x40, 0x20, 0x7C,0x00,// u

    0x1C, 0x20, 0x40, 0x20, 0x1C,0x00,// v

    0x3C, 0x40, 0x30, 0x40, 0x3C,0x00,// w

    0x44, 0x28, 0x10, 0x28, 0x44,0x00,// x

    0x0C, 0x50, 0x50, 0x50, 0x3C,0x00,// y

    0x44, 0x64, 0x54, 0x4C, 0x44,0x00// z

    };

    char font_index[96]={'~','-

    >','

  • void buat_index_scroll(void);

    void cek_scroll(void);

    void tampilkan_index_text(void);

    void buat_index_text(void);

    void cek_index_text(void);

    void konsole(void);

    void tampilkan_greeting1(void);

    void tampilkan_greeting2(void);

    void tampilkan_dot_matrix(void);

    void main(void)

    {

    // USART 9600

    UCSRA=0x00;

    UCSRB=0xD8;

    UCSRC=0x86;

    UBRRH=0x00;

    UBRRL=0x47;

    DDRC=0xFF; // Driver Baris

    PORTC=0xFF;

    DDRA=0xFF; // Driver Kolom

    PORTA=0xFF;

    buat_index_text();

    buat_index_scroll();

    while(1)

    {

    delay_ms(50);

    data=UDR;

    delay_ms(50);

    if(data=='m')

    {

    konsole();

    }

    tampilkan_greeting1();

    tampilkan_greeting2();

    tampilkan_dot_matrix();

    };

    }

    void buat_index_text(void)

    {

    for (i=0; i < n_text;i++)

    {

    //printf("\n\r");

    for (j=0;j

  • {

    //printf(" %c",text[i]);

    //printf("->%c",font_index[j]);

    if(text[i]==font_index[j])

    {

    //printf(" Match"); // cek karakter yg match

    index_text[i]=j;

    }

    }

    }

    }

    // Temukan Indek Text

    void cek_index_text(void)

    {

    printf("\n\r");

    printf("Index:");

    for (i=0; i < n_text; i++)

    {

    printf(" %d",index_text[i]); // Unsigned dalam desimal

    }

    }

    void tampilkan(void)

    {

    for (n=0;n

  • }

    }

    void cek_scroll(void)

    {

    for (i=0;i

  • printf("Masukan Text:");

    flag=1;

    }

    if((flag==0)&&(data=='3'))

    {

    n_text=0;

    j=0;

    printf("\n\r");

    printf("Text telah dihapus:");

    flag=0;

    }

    if(data==0x1b)

    {

    printf("\n\r");

    printf("Data telah tersimpan");

    flag=0;

    }

    };

    };

    }

    void tampilkan_dot_matrix(void)

    {

    for(l=0; l

  • else

    {

    PORTC=~scroll[c];

    }

    // KOLOM,nyala jika 0

    if(k==0)

    {

    PORTA.0=0;

    }

    else

    {

    PORTA.0=1;

    }

    // Generate clock

    PORTA.1=0; //Clock

    PORTA.2=1; //Latch

    PORTA.1=1; //Clock

    PORTA.2=0; //Latch

    delay_us(100);

    } //end looping for shift register

    }; //end while setelah 100

    if(l==(n_text*6))

    {

    l=0;

    }

    } //end for

    }

    void tampilkan_greeting1(void)

    {

    z=0;

    while(z

  • PORTA.1=0; //Clock

    PORTA.2=1; //Latch

    PORTA.1=1; //Clock

    PORTA.2=0; //Latch

    delay_us(100);

    } //end looping for shift register

    }; //end while setelah 200

    }

    void tampilkan_greeting2(void)

    {

    z=0;

    while(z