PRAKTIKUM 9 ANTARMUKA MIKROKONTROLER DENGAN LED DOT MATRIK
A. TUJUAN 1. Membuat aplikasi system tampilan karakter yang berupa LED Dot Matrik dengan menggunakan mikrokontroler Arduino 2. Membuat program untuk menampilkan karekter pada media LED Dot Matrik
B. DASAR TEORI
LED Dot Matrix merupakan salah satu aplikasi dari LED yang disusun secara Matrix dan dapat berfungsi untuk menampilkan berbagai macam karakter. Terdapat berbagai macam tampilan yang dapat dihasilkan melalui LED Dot Matrix. Pada LED Dot Matrix 5×7 terdapat 5 pin kolom dan 7 pin baris yang digunakan di gunakan untuk menentukan menen tukan kondisi masing-masing LED. Jika salah satu bagian menjadi input maka bagian yang lain harus sebagai output atau sebaliknya. Maksudnya salah satu bagian akan menjadi tempat masuknya arus dan bagian yang lain akan menjadi tempat keluarnya arus tergantung pada kondisi posisi Anoda/katoda LED yang terpasang didalamnya. Jika Anoda dari LED terpasang pada bagian kolom maka semua pin pada bagian kolom merupakn tempat temp at masuknya arus dan bagian baris bar is merupakan tempat keluarnya arus.
Apabila bagian kolom diberi arus atau diberi data 1 (high) maka kolom tersebut aktif
atau LED pada kolom tersebut siap menyala. LED yang menyala akan tergantung pada bagian baris yang diberi data 0 (low).
. Gambar 9.1 LED dot matrik
Dot matrik 5 x7 memilki arti bahwa 1 dot matrik berukuran 5 kolom x 7 baris susunan LED. Jadi 1 dot matriki terdapat 35 buah LED. Berikut adalah ilustrasi 3 buah dot matrik yang sudah terpakai untuk menampilkan beberapa karakter. Setiap karakter antar dot matrik sebaiknya diberi spasi agar karakter yang tampil terlihat jelas dan tidak tampak berdekatan.
Dalam setiap display dotmatrik selalu terdapat istilah baris dan kolom. Jumlah baris selalu sama dengan 7. Namun jumlah kolom sebanyak jumlah dot matrik dikali dengan 5 kolom/dot matrik. Pada gambar 1 di atas terdapat 15 kolom. Prinsip kerja dot matrik sebenarnya menggunakan system Scanning kolom. Scanning kolom adalah pada satu waktu dari sekian banyak kolom pada gambar 1 hanya satu kolom yang menyala merah. Karena proses pengulangan penyalaan kolom dari kolom 1 sampai kolom 15 begitu cepat dan berulang-ulang maka huruf ABH tampak nyala bersamaan. Proses scanning kolom yang cepat menipu mata atau penglihatan manusia sehingga mata menangkap huruf ABH seolah-olah menyala secara bersamaan. Apabila proses scanning kolom dipelankan sampai mata dapat melihat, maka pergeseran penyalaan kolom akan terlihat satu persatu.
Gambar 9.2 LED Dot Matrik 5 x 7
Prinsip kerja LED Dot Matriks
›
saat kolom pertama ( scan kolom 1 = 1 / high/2.4 v) maka bit yg diberi pada baris berupa “1110000”, sehingga jika ketemu 1 vs 1 ga ada arus
mengalir, jadi LED mati, jika 1 ketemu 0 maka arus mengalir, led menyala
›
Begitu juga untuk kolom kedua, ketika kolom kedua diberi tegangan maka pada baris bit yg diberikan adalah “1101011”
›
Dan seterusnya, ketika kolom nya mencapai ujung maka akan diulang ke kolom 1 lagi
›
Untuk melakukan scanning biasanya dilakukan dengan memanfaatkan shift register, atau paling sederhana dengan menggunakan IC 4017 yang di cascade menjadi led berjalan yang panjang.
Dot Matriks Led Display Menampilkan (display) dari sebuah program yang dikirim secara paralel. Misalnya, 8 × 8 matriks LED Anoda bersama-sama dalam baris (R1 - R8), dan katoda dalam kolom (C1 - C8), jumlah yang diperlukan pin I /O = 16. Scanning Led
1. LED dot matrix 8x8 (Data Sheet)
Gambar 9.3 Scanning LED dot matriks 8 x 8 (Data Sheet)
Nilai data karakter dalam variabel array : {{0x18,0x24,0x24,0x24,0x24,0x24,0x24,0x18}, // 0
{0x08,0x18,0x08,0x08,0x08,0x08,0x08,0x1C}, // 1 {0x18,0x24,0x04,0x08,0x10,0x20,0x20,0x3C}, // 2
{0x18,0x24,0x04,0x18,0x04,0x04,0x24,0x18}, // 3 dst}
2. LED dot matrix 8x8 dua warna
Gambar 9.4 Scanning LED dot matriks 8 x 8 dua warna Nilai data karakter dalam variabel array : {0x00, 0x84, 0x86, 0xFF, 0xFF, 0x80, 0x80, 0x00,// 1
0x00, 0xFC, 0xFE, 0x37, 0x37, 0xFE, 0xFC, 0x0, // A}
3. LED dot matrix 8x8 (dua data) Gambar 9.4 Scanning LED dot matriks 8 x 8 dua data
DRIVER ›
IC driver : UDN2981A dan ULN2803A
›
UDN2981A : driver ke transistor sekaligus mengatur anoda LED.
›
ULN2803A : driver ke transistor sekaligus mengatur katoda LED.
Gambar 9.5 Driver Anode dan Katode
C. LANGKAH PERCOBAAN ›
Rangkaian
›
›
-
Interface Led Dot Matriks dengan Driver
-
Interface Led Dot Matriks dengan Arduino
Hardware
Arduino Uno Board
1x Breadboard
1x LED Dot Matrik 5x7
Kabel jumper
Program 1 int idx = 0; unsigned long last; void setup() { last = millis(); //Kolom pinMode( 9, OUTPUT ); pinMode( 10, OUTPUT ); pinMode( 11, OUTPUT ); pinMode( 12, OUTPUT ); pinMode( 13, OUTPUT ); //Baris pinMode( 2, OUTPUT );
pinMode( 3, OUTPUT ); pinMode( 4, OUTPUT ); pinMode( 5, OUTPUT ); pinMode( 6, OUTPUT ); pinMode( 7, OUTPUT ); pinMode( 8, OUTPUT ); for( int r = 0; r < 7; r++) { digitalWrite( r + 2, LOW ); } for( int c = 0; c < 5; c++) { digitalWrite( c + 9, HIGH); } } byte leds[7][5]; void setPattern( byte pattern[20][5], int idx ) { for( int r =0; r < 7; r++) { for( int c = 0; c < 5; c++) { leds[r][c] = pattern[r + idx][c]; } } } void draw() { for( int r =0; r < 7; r ++ ) { digitalWrite( r + 2, HIGH ); for( int c=0; c < 5; c ++ ) { digitalWrite( 13 - c, ( leds[r][c] == 1 ? LOW : HIGH )); } delayMicroseconds(900); digitalWrite( r + 2, LOW ); } } void loop() { if ( millis() - last > 400 ) { idx = (idx == 0 ? 7 : 0); last = millis(); } byte tmp[14][5] = { { 0,0,0,0,0}, { 0,1,0,1,0}, { 0,0,0,0,0}, { 0,1,1,1,0}, { 0,1,0,1,0}, { 0,1,1,1,0}, { 0,0,0,0,0}, { 0,0,0,0,0}, { 0,1,0,1,0}, { 0,0,0,0,0}, { 0,0,0,0,0}, { 0,1,1,1,0}, { 0,0,0,0,0}, { 0,0,0,0,0}, }; setPattern( tmp, idx ); draw(); }
›
Program 2 #include #define SPACE { \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0} \ } #define H { \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 1, 1, 1, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1} \ } #define E { \ {1, 1, 1, 1, 1}, \ {1, 0, 0, 0, 0}, \ {1, 0, 0, 0, 0}, \ {1, 1, 1, 1, 0}, \ {1, 0, 0, 0, 0}, \ {1, 0, 0, 0, 0}, \ {1, 1, 1, 1, 1} \ } #define small_E { \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 1, 1, 1, 0}, \ {1, 0, 0, 0, 1}, \ {1, 1, 1, 1, 0}, \ {1, 0, 0, 0, 0}, \ {0, 1, 1, 1, 0} \ } #define L { \ {1, 0, 0, 0, 0}, \ {1, 0, 0, 0, 0}, \ {1, 0, 0, 0, 0}, \ {1, 0, 0, 0, 0}, \ {1, 0, 0, 0, 0}, \ {1, 0, 0, 0, 0}, \ {1, 1, 1, 1, 1} \ } #define small_L { \ {0, 1, 1, 0, 0}, \ {0, 0, 1, 0, 0}, \ {0, 0, 1, 0, 0}, \ {0, 0, 1, 0, 0}, \ {0, 0, 1, 0, 0}, \ {0, 0, 1, 0, 0}, \ {0, 1, 1, 1, 0} \ }
#define O { \ {0, 1, 1, 1, 0}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {0, 1, 1, 1, 0} \ } #define small_O { \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 1, 1, 1, 0}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {0, 1, 1, 1, 0} \ } #define small_W { \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 1, 0, 1}, \ {1, 0, 1, 0, 1}, \ {0, 1, 0, 1, 0} \ } #define small_R { \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 1, 0, 1, 1}, \ {0, 1, 1, 0, 0}, \ {0, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0} \ } #define small_D { \ {0, 0, 0, 0, 1}, \ {0, 0, 0, 0, 1}, \ {0, 1, 1, 0, 1}, \ {1, 0, 0, 1, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {0, 1, 1, 1, 1} \ } byte col = 0; byte leds[5][7]; // columns x rows int pins[13]= {-1, 2, 9, 3, 11, 12, 13, 5, 6, 10, 4, 8, 7}; int cols[5] = {pins[1], pins[3], pins[10], pins[7], pins[8]}; int rows[7] = {pins[12], pins[11], pins[2], pins[9], pins[4], pins[5], pins[6]}; const int numPatterns = 12; byte patterns[numPatterns][7][5] = { SPACE, H, small_E, small_L, small_L, small_O, SPACE, small_W, small_O, small_R, small_L, small_D }; int pattern = 0;
void setup() { for (int i = 1; i <= 12; i++) { pinMode(pins[i], OUTPUT); } for (int i = 1; i <= 5; i++) { digitalWrite(cols[i - 1], LOW); } for (int i = 1; i <= 7; i++) { digitalWrite(rows[i - 1], LOW); } clearLeds(); FrequencyTimer2::disable(); FrequencyTimer2::setPeriod(2000); FrequencyTimer2::setOnOverflow(display); setPattern(pattern); } void loop() { pattern = ++pattern % numPatterns; slidePattern(pattern, 100); } void clearLeds() { // Clear display array for (int i = 0; i < 5; i++) { for (int j = 0; j < 7; j++) { leds[i][j] = 0; } } } void setPattern(int pattern) { for (int i = 0; i < 5; i++) { for (int j = 0; j < 7; j++) { leds[i][j] = patterns[pattern][j][i]; } } } void slidePattern(int pattern, int del) { for (int newcol = 0; newcol <= 4; newcol++) { // shift the first 4 columns left for (int row = 0; row <= 6; row++) for (int col = 0; col <= 3; col++) leds[col][row] = leds[col+1][row]; for (int row = 0; row <= 6; row++) leds[4][row] = patterns[pattern][row][newcol]; delay(del); } } void display() { // Turn whole previous column off: digitalWrite(cols[col], LOW); col++;
if (col == 5) { col = 0; } for (int row = 0; row < 7; row++) { if (leds[col][row] == 1) { digitalWrite(rows[row], LOW); // Turn on this led } else { digitalWrite(rows[row], HIGH); // Turn off this led } } digitalWrite(cols[col], HIGH); }
Latihan : 1. Buatlah program untuk tulisan (huruf A) berjalan dari kiri ke kanan. 2. Buatlah program untuk menampilkan 2,T,A,B 3. Buatlah program satu angka paling belakang dari NRP anda menggunakan metode scanning 4. Buatlah program untuk menampilkan karakter menggunakan IC Driver
HASIL PERCOBAAN PRAKTIKUM LED DOT MATRIKS 1. PROGRAM 1
Source Code : int idx = 0; unsigned long last; void setup() { last = millis(); //Kolom pinMode( 9, OUTPUT ); pinMode( 10, OUTPUT ); pinMode( 11, OUTPUT ); pinMode( 12, OUTPUT ); pinMode( 13, OUTPUT ); //Baris pinMode( 2, OUTPUT ); pinMode( 3, OUTPUT ); pinMode( 4, OUTPUT ); pinMode( 5, OUTPUT ); int idx = 0; unsigned long last; void setup() { last = millis(); //Kolom pinMode( 9, OUTPUT ); pinMode( 10, OUTPUT ); pinMode( 11, OUTPUT ); pinMode( 12, OUTPUT ); pinMode( 13, OUTPUT ); //Baris pinMode( 2, OUTPUT ); pinMode( 3, OUTPUT ); pinMode( 4, OUTPUT ); pinMode( 5, OUTPUT ); pinMode( 6, OUTPUT ); pinMode( 7, OUTPUT ); pinMode( 8, OUTPUT ); for( int r = 0; r < 7; r++) { digitalWrite( r + 2, LOW ); } for( int c = 0; c < 5; c++) { digitalWrite( c + 9, HIGH); } } byte leds[7][5]; void setPattern( byte pattern[20][5], int idx ) { for( int r =0; r < 7; r++) { for( int c = 0; c < 5; c++) {
Hasil :
leds[r][c] = pattern[r + idx][c]; } } } void draw() { for( int r =0; r < 7; r ++ ) { digitalWrite( r + 2, HIGH ); for( int c=0; c < 5; c ++ ) { digitalWrite( 13 - c, ( leds[r][c] == 1 ? LOW : HIGH )); } delayMicroseconds(900); digitalWrite( r + 2, LOW ); } } void loop() { if ( millis() - last > 400 ) { idx = (idx == 0 ? 7 : 0); last = millis(); } byte tmp[14][5] = { { 0,0,0,0,0}, { 0,1,0,1,0}, { 0,0,0,0,0}, { 0,1,1,1,0}, { 0,1,0,1,0}, { 0,1,1,1,0}, { 0,0,0,0,0}, { 0,0,0,0,0}, { 0,1,0,1,0}, { 0,0,0,0,0}, { 0,0,0,0,0}, { 0,1,1,1,0}, { 0,0,0,0,0}, { 0,0,0,0,0}, }; setPattern( tmp, idx ); draw(); }
2. PROGRAM 2
Source Code : #include #define SPACE { \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0} \ } #define H { \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 1, 1, 1, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1} \ } #define E { \ {1, 1, 1, 1, 1}, \ {1, 0, 0, 0, 0}, \ {1, 0, 0, 0, 0}, \ {1, 1, 1, 1, 0}, \ {1, 0, 0, 0, 0}, \ {1, 0, 0, 0, 0}, \ {1, 1, 1, 1, 1} \ } #define small_E { \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 1, 1, 1, 0}, \ {1, 0, 0, 0, 1}, \ {1, 1, 1, 1, 0}, \ {1, 0, 0, 0, 0}, \ {0, 1, 1, 1, 0} \ } #define L { \ {1, 0, 0, 0, 0}, \ {1, 0, 0, 0, 0}, \ {1, 0, 0, 0, 0}, \ {1, 0, 0, 0, 0}, \ {1, 0, 0, 0, 0}, \ {1, 0, 0, 0, 0}, \ {1, 1, 1, 1, 1} \ } #define small_L { \ {0, 1, 1, 0, 0}, \ {0, 0, 1, 0, 0}, \ {0, 0, 1, 0, 0}, \ {0, 0, 1, 0, 0}, \ {0, 0, 1, 0, 0}, \ {0, 0, 1, 0, 0}, \ {0, 1, 1, 1, 0} \ } #define O { \ {0, 1, 1, 1, 0}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \
{0, 1, 1, 1, 0} \ } #define small_O { \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 1, 1, 1, 0}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {0, 1, 1, 1, 0} \ } #define small_W { \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 1, 0, 1}, \ {1, 0, 1, 0, 1}, \ {0, 1, 0, 1, 0} \ } #define small_R { \ {0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0}, \ {0, 1, 0, 1, 1}, \ {0, 1, 1, 0, 0}, \ {0, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0} \ } #define small_D { \ {0, 0, 0, 0, 1}, \ {0, 0, 0, 0, 1}, \ {0, 1, 1, 0, 1}, \ {1, 0, 0, 1, 1}, \ {1, 0, 0, 0, 1}, \ {1, 0, 0, 0, 1}, \ {0, 1, 1, 1, 1} \ } byte col = 0; byte leds[5][7]; // columns x rows int pins[13]= {-1, 2, 9, 3, 11, 12, 13, 5, 6, 10, 4, 8, 7}; int cols[5] = {pins[1], pins[3], pins[10], pins[7], pins[8]}; int rows[7] = {pins[12], pins[11], pins[2], pins[9], pins[4], pins[5], pins[6]}; const int numPatterns = 12; byte patterns[numPatterns][7][5] = { SPACE, H, small_E, small_L, small_L, small_O, SPACE, small_W, small_O, small_R, small_L, small_D }; int pattern = 0;
void setup() { for (int i = 1; i <= 12; i++) { pinMode(pins[i], OUTPUT); } for (int i = 1; i <= 5; i++) { digitalWrite(cols[i - 1], LOW); } for (int i = 1; i <= 7; i++) { digitalWrite(rows[i - 1], LOW); } clearLeds(); FrequencyTimer2::disable(); FrequencyTimer2::setPeriod(2000); FrequencyTimer2::setOnOverflow(di splay); setPattern(pattern); } void loop() { pattern = ++pattern % numPatterns; slidePattern(pattern, 100); } void clearLeds() { // Clear display array for (int i = 0; i < 5; i++) { for (int j = 0; j < 7; j++) { leds[i][j] = 0; } } } void setPattern(int pattern) { for (int i = 0; i < 5; i++) { for (int j = 0; j < 7; j++) { leds[i][j] = patterns[pattern][j][i]; } } } void slidePattern(int pattern, int del) { for (int newcol = 0; newcol <= 4; newcol++) { // shift the first 4 columns left for (int row = 0; row <= 6; row++) for (int col = 0; col <= 3; col++) leds[col][row] = leds[col+1][row]; for (int row = 0; row <= 6; row++) leds[4][row] =
patterns[pattern][row][newcol]; delay(del); } } void display() { // Turn whole previous column off: digitalWrite(cols[col], LOW); col++; if (col == 5) { col = 0; } for (int row = 0; row < 7; row++) { if (leds[col][row] == 1) { digitalWrite(rows[row], LOW); // Turn on this led } else { digitalWrite(rows[row], HIGH); // Turn off this led } } digitalWrite(cols[col], HIGH); }
Hasil :
HASIL PERCOBAAN LATIHAN LED DOT MATRIKS 1. LATIHAN 1 : TULISAN A BERJALAN KIRI KE KANAN
Source Code : #include int DIN = 12; int CS = 11; int CLK = 10; byte a1[8]= {0x00,0x00,0x80,0x80,0x80,0x80,0x80 ,0x80}; byte a2[8]= {0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0 ,0xC0}; byte a3[8]= {0x80,0xC0,0x60,0x60,0xE0,0xE0,0x60 ,0x60}; byte a4[8]= {0xC0,0xE0,0x30,0x30,0xF0,0xF0,0x30 ,0x30}; byte a5[8]= {0x60,0xF0,0x98,0x98,0xF8,0xF8,0x98 ,0x98}; byte a6[8]= {0x30,0x78,0xCC,0xCC,0xFC,0xFC,0xCC ,0xCC}; byte a7[8]= {0x18,0x3C,0x66,0x66,0x7E,0x7E,0x66 ,0x66}; byte a8[8]= {0x0C,0x1E,0x33,0x33,0x3F,0x3F,0x33 ,0x33}; byte a9[8]= {0x06,0x0F,0x19,0x19,0x1F,0x1F,0x19 ,0x19}; byte a10[8]= {0x03,0x07,0x0C,0x0C,0x0F,0x0F,0x0C ,0x0C}; byte a11[8]= {0x01,0x03,0x06,0x06,0x07,0x07,0x06 ,0x06}; byte a12[8]= {0x00,0x01,0x03,0x03,0x03,0x03,0x03 ,0x03}; byte a13[8]= {0x00,0x00,0x01,0x01,0x01,0x01,0x01 ,0x01};
Hasil :
LedControl lc=LedControl(DIN,CLK,CS,0); void setup(){ lc.shutdown(0,false); //The MAX72XX is in power-saving mode on startup lc.setIntensity(0,15); // Set the brightness to maximum value lc.clearDisplay(0); // and clear the display } void loop(){ printEduc8s(); lc.clearDisplay(0); delay(1000); } void printEduc8s() { printByte(a1);delay(500); printByte(a2);delay(500); printByte(a3);delay(500); printByte(a4);delay(500); printByte(a5);delay(500); printByte(a6);delay(500); printByte(a7);delay(500); printByte(a8);delay(500); printByte(a9);delay(500); printByte(a10);delay(500); printByte(a11);delay(500); printByte(a12);delay(500); printByte(a13);delay(500); } void printByte(byte character []) { int i = 0; for(i=0;i<8;i++) { lc.setRow(0,i,character[i]); } }
2. LATIHAN 2 : MENAMPILKAN 2,T,A,B
Source Code : #include int DIN = 12; int CS = 11; int CLK = 10; byte Dua[8]= {0x7C,0x7C,0x0C,0x7C,0x7C,0x60,0x 7C,0x7C}; byte T[8]= {0x7E,0x7E,0x18,0x18,0x18,0x18,0x 18,0x18}; byte A[8]= {0x18,0x3C,0x66,0x66,0x7E,0x7E,0x 66,0x66}; byte B[8]= {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x 7E,0x7C}; LedControl lc=LedControl(DIN,CLK,CS,0); void setup(){ lc.shutdown(0,false); //The MAX72XX is in power-saving mode on startup lc.setIntensity(0,15); // Set the brightness to maximum value
Hasil :
lc.clearDisplay(0); and clear the display }
//
void loop(){ printEduc8s(); lc.clearDisplay(0); delay(1000); } void printEduc8s() { printByte(Dua);delay(500); printByte(T);delay(500); printByte(A);delay(500); printByte(B);delay(500); } void printByte(byte character []) { int i = 0; for(i=0;i<8;i++) { lc.setRow(0,i,character[i]); } }
DUINO1
U1 m ic
1
ro
12
c o
13
n tr o la
AREF
s
PB5/SCK
n d o .b lo
RESET
PB4/MISO
g p
~PB3/MOSI/OC2A ~ PB2/SS/OC1B
o
PB0/ICP1/CLKO
s o t. c
A
m
A0 A1 A2 A3 A4 A5
N A L O
PC0/ADC0
G
PC1/ADC1 PC2/ADC2 PC3/ADC3
IN
PC4/ADC4/SDA PC5/ADC5/SCL
~ PB1/OC1A
D
1 U 2 P 1 1 P 8 2 3 A G E M T A
PD7/AIN1
L
~ PD6/AIN0 PD5/T1 ~
(~
A
IT
IG
PD4/T0/XCK
)
M
W
P
~ PD3/INT1 PD2/INT0 TX PD1/TXD RX PD0/RXD
DIN
A
LOAD
B
CLK
C D E
13
F
12
G
11
DP
10 9
DIG0
8
DIG1 DIG2
7
DIG3
6
DIG4
5 4
18
3
24
2 1
DIG5 ISET
DIG6
DOUT
DIG7
14 16 20 23 21 15 17 22 2 11 6 7 3 10 5 8
MAX7219
0
ARDUINO UNO R3
3. LATIHAN 3 : MENAMPILKAN NRP PALING BELAKANG
Source Code : #include
}
int DIN = 12; int CS = 11; int CLK = 10;
void loop(){ printEduc8s(); lc.clearDisplay(0); delay(1000); }
byte Tiga[8]= {0x7C,0x7E,0x06,0x7E,0x7E,0x06,0x 7E,0x7C}; LedControl lc=LedControl(DIN,CLK,CS,0); void setup(){ lc.shutdown(0,false); //The MAX72XX is in power-saving mode on startup lc.setIntensity(0,15); // Set the brightness to maximum value lc.clearDisplay(0); // and clear the display
Hasil :
void printEduc8s() { printByte(Tiga);delay(500); } void printByte(byte character []) { int i = 0; for(i=0;i<8;i++) { lc.setRow(0,i,character[i]); } }
DUINO1
U1 m ic
1
ro
12
c o
13
n tr o la
AREF
s
PB5/SCK
n d o .b lo
RESET
PB4/MISO
g
~PB3/MOSI/OC2A ~ PB2/SS/OC1B
s p o t. c
~ PB1/OC1A
o
A
m
A0 A1 A2 A3 A4 A5
N A L O
PC0/ADC0
G
PC1/ADC1 PC2/ADC2 PC3/ADC3
IN
PC4/ADC4/SDA PC5/ADC5/SCL
D PB0/ICP1/CLKO
1 U 2 P 1 1 P 8 2 3 A G E M T A
PD7/AIN1
L
~ PD6/AIN0 PD5/T1 ~
W
~ PD3/INT1 PD2/INT0
(~
A
IT
IG
PD4/T0/XCK
)
M
P
TX PD1/TXD RX PD0/RXD
DIN
A
LOAD
B
CLK
C D E
13
F
12
G
11
DP
10 9
DIG0
8
DIG1 DIG2
7
DIG3
6
DIG4
5 4
18
3
24
2 1
DIG5 ISET
DIG6
DOUT
DIG7
14 16 20 23 21 15 17 22 2 11 6 7 3 10 5 8
MAX7219
0
ARDUINO UNO R3
4. LATIHAN 4 : MENAMPILKAN ABJAD A-Z
Source Code : #include int DIN = 12; int CS = 11; int CLK = 10; byte A[] = {B00000000,B00011000,B00100100,B0 0100100,B00111100,B00100100,B0010 0100,B00000000}; byte B[] = {B01111000,B01001000,B01001000,B0 1110000,B01001000,B01000100,B0100 0100,B01111100}; byte C[] = {B00000000,B00011110,B00100000,B0 1000000,B01000000,B01000000,B0010 0000,B00011110}; byte D[] = {B00000000,B00111000,B00100100,B0 0100010,B00100010,B00100100,B0011 1000,B00000000}; byte E[] = {B00000000,B00111100,B00100000,B0 0111000,B00100000,B00100000,B0011 1100,B00000000}; byte F[] = {B00000000,B00111100,B00100000,B0 0111000,B00100000,B00100000,B0010 0000,B00000000}; byte G[] = {B00000000,B00111110,B00100000,B0 0100000,B00101110,B00100010,B0011 1110,B00000000}; byte H[] = {B00000000,B00100100,B00100100,B0 0111100,B00100100,B00100100,B0010 0100,B00000000}; byte I[] = {B00000000,B00111000,B00010000,B0 0010000,B00010000,B00010000,B0011 1000,B00000000}; byte J[] = {B00000000,B00011100,B00001000,B0 0001000,B00001000,B00101000,B0011 1000,B00000000}; byte K[] = {B00000000,B00100100,B00101000,B0
0110000,B00101000,B00100100,B0010 0100,B00000000}; byte L[] = {B00000000,B00100000,B00100000,B0 0100000,B00100000,B00100000,B0011 1100,B00000000}; byte M[] = {B00000000,B00000000,B01000100,B1 0101010,B10010010,B10000010,B1000 0010,B00000000}; byte N[] = {B00000000,B00100010,B00110010,B0 0101010,B00100110,B00100010,B0000 0000,B00000000}; byte O[] = {B00000000,B00111100,B01000010,B0 1000010,B01000010,B01000010,B0011 1100,B00000000}; byte P[] = {B00000000,B00111000,B00100100,B0 0100100,B00111000,B00100000,B0010 0000,B00000000}; byte Q[] = {B00000000,B00111100,B01000010,B0 1000010,B01000010,B01000110,B0011 1110,B00000001}; byte R[] = {B00000000,B00111000,B00100100,B0 0100100,B00111000,B00100100,B0010 0100,B00000000}; byte S[] = {B00000000,B00111100,B00100000,B0 0111100,B00000100,B00000100,B0011 1100,B00000000}; byte T[] = {B00000000,B01111100,B00010000,B0 0010000,B00010000,B00010000,B0001 0000,B00000000}; byte U[] = {B00000000,B01000010,B01000010,B0 1000010,B01000010,B00100100,B0001 1000,B00000000}; byte V[] = {B00000000,B00100010,B00100010,B0 0100010,B00010100,B00010100,B0000 1000,B00000000}; byte W[] = {B00000000,B10000010,B10010010,B0
1010100,B01010100,B00101000,B0000 0000,B00000000}; byte X[] = {B00000000,B01000010,B00100100,B0 0011000,B00011000,B00100100,B0100 0010,B00000000}; byte Y[] = {B00000000,B01000100,B00101000,B0 0010000,B00010000,B00010000,B0001 0000,B00000000}; byte Z[] = {B00000000,B00111100,B00000100,B0 0001000,B00010000,B00100000,B0011 1100,B00000000}; LedControl lc=LedControl(DIN,CLK,CS,0); void setup(){ lc.shutdown(0,false); //The MAX72XX is in power-saving mode on startup lc.setIntensity(0,15); // Set the brightness to maximum value lc.clearDisplay(0); // and clear the display } void loop(){ printEduc8s(); lc.clearDisplay(0); delay(1000); }
printByte(A);delay(500);printByte (B);delay(500);printByte(C);delay (500);printByte(D);delay(500);pri ntByte(E);delay(500);printByte(F) ;delay(500); printByte(G);delay(500);printByte (H);delay(500);printByte(I);delay (500);printByte(J);delay(500);pri ntByte(K);delay(500);printByte(L) ;delay(500); printByte(M);delay(500);printByte (N);delay(500);printByte(O);delay (500);printByte(P);delay(500);pri ntByte(Q);delay(500);printByte(R) ;delay(500); printByte(S);delay(500);printByte (T);delay(500);printByte(U);delay (500);printByte(V);delay(500);pri ntByte(W);delay(500);printByte(X) ;delay(500); printByte(Y);delay(500);printByte (Z);delay(500); } void printByte(byte character []) { int i = 0; for(i=0;i<8;i++) { lc.setRow(0,i,character[i]); } }
void printEduc8s() {
Hasil : DUINO1
U1 m ic
1
ro
12
c o
13
n tr o la
AREF
s
PB5/SCK
n d o .b lo
RESET
PB4/MISO
g p
~PB3/MOSI/OC2A ~ PB2/SS/OC1B
o
PB0/ICP1/CLKO
s o t. c
A
m
A0 A1 A2 A3 A4 A5
N A L O
PC0/ADC0
G
PC1/ADC1 PC2/ADC2 PC3/ADC3
IN
PC4/ADC4/SDA PC5/ADC5/SCL
ARDUINO UNO R3
~ PB1/OC1A
D
1 U 2 P 1 1 P 8 2 3 A G E M T A
PD7/AIN1
L
~ PD6/AIN0 PD5/T1 ~
(~
A
IT
IG
PD4/T0/XCK
)
M
W
P
~ PD3/INT1 PD2/INT0 TX PD1/TXD RX PD0/RXD
DIN
A
LOAD
B
CLK
C D E
13
F
12
G
11
DP
10 9
DIG0
8
DIG1 DIG2
7
DIG3
6
DIG4
5 4
18
3
24
2 1 0
DIG5 ISET
DIG6
DOUT
DIG7
MAX7219
14 16 20 23 21 15 17 22 2 11 6 7 3 10 5 8
5. LATIHAN 5 : MEMBUAT BENTUK-BENTUK UNIK
Source Code : #include int DIN = 12; int CS = 11; int CLK = 10; byte gerak1[8]= {0xFF,0x81,0xBD,0xA5,0xA5,0xBD,0x 81,0xFF}; byte gerak2[8]= {0x00,0x7E,0x42,0x5A,0x5A,0x42,0x 7E,0x00}; LedControl lc=LedControl(DIN,CLK,CS,0); void setup(){ lc.shutdown(0,false); //The MAX72XX is in power-saving mode on startup lc.setIntensity(0,15); // Set the brightness to maximum value lc.clearDisplay(0); // and clear the display } void loop(){ printEduc8s(); delay(100); } void printEduc8s() { printByte(gerak1);delay(100); printByte(gerak2);delay(100); } void printByte(byte character []) { int i = 0; for(i=0;i<8;i++) { lc.setRow(0,i,character[i]); } }
Hasil :
Analisa: Pada percobaan antarmuka mikrokontroller dengan LED Dot Matrik, kita membuat aplikasi sistem tampilan karakter yang berupa LED Dot Matrik dengan menggunakan mikrokontroler arduino dan membuat program untuk menampilkan karakter pada media LED Dot Matrik. Pada percobaan pertama, dilakukan inisialisasi untuk baris dan kolom dari LED Dot Matrik. Pada percobaan ini, ditampilkan suatu pola pad LED dengan melakukakn scanning LED untuk nilai bit untuk membentuk pola yang dapat dilihat pada hasil percobaan. Pada perobaan kedua, digunakan program untuk menamilkan tulisan hello world yang dapat berjalan. Pada program, dilakukan scanning LED untuk nilai data dari tiap tiap karakter yang membentuk Hello World. Selanjutnya dilakukan inisialisasi pin untuk baris dan kolom. Kemudian pada void serup dan void loop dilakukan beberapa looping yang mengatur jalannya karakter Hello World dari kanan ke kiri. Selanjutnya untuk latihan pertama, kita membuat animasi tulisan berjalan dari kiri ke kanan pada LED Dot Matrik. Pada program, dilakukan scanning pada LED untuk dapat menampilkan karakter, sehingga terdapat variabel array a1[], a[2], dan seterusnya yang merupakan nilai data dari karakter. Pada void setup, digunakan fungsi dari library LedControl.h seperti lc.shutdown untuk mengatur power saving mode, lc.setIntensity(0,15) untuk mengatur kecerahan dari LED dan lc.clearDisplay untuk mengapus isi dari layar LED. Pada void loop, dipanggil fungsi printEduc8s, lalu setelah itu layar di clear dengan delay sebesar 1000 ms. Pada fungsi printEduc8s, dipanggil fungsi printByte dengan parameter array dari nilai data karakter yaitu a1,a2, dan seterusnya dengan delay 500 ms. Selanjutnya di fungsi printByte, dilakukan looping dari 0 sampai 8 untuk dapat menggeser karakter. Kemudian untuk latihan kedua yaitu untuk menampilkan karakter 2,T,A, dan B. Untuk menampilkan karakter tersebut, dilakukan scanning LED seperti sebelumnya yaitu dengan menggunakan nilai data dari masing masing karakter. Lalu pada void loop ditampilkan seperti sebelumnya dengan memanggil fungsi lain yang mengatur tampilan tiap tiap karakter. Latihan ini hampir sama dengan latihan latihan selanjutnya yaitu untuk menampilkan nrp belakang, menampilkan huruf abjad A-Z dan menampilkan karakter unik. Hanya saja terdapat perbedaan saat scanning LED untuk nilai data dari masing masing karakter yang ingin ditampilkan.
Kesimpulan : Pada percobaan antarmuka mikrokontroller dengan LED Dot Matrik dapat disimpulkan bahwa :
Untuk menampilkan suatu karakter pada LED Dot Matrik dilakukan scanning pada LED dengan mengatur nilai data dari karakter yang ingin ditampilkan
Dalam membuat program untuk LED Dot matrik, terdapat file library yang memiliki beberapa fungsi seperti lc.clearDisplay, lc.shutdown, lc.setIntensity, dan lain lain yang dapat digunakan untuk mengatur tampilan pada LED