Pengetahuan Dasar Pemrograman Modul Led/Dot Matrik Display (DMD) P10 P4.75 p7.62 dengan Arduino
Pendahuluan
Modul Display Led Matrik yg populer saat ini antara lain P10 .Kita dapat dengan mudah memprogram modul tersebut dengan Arduno karena telah tersedia library untuk itu. library tsb antara lain DMD, DMD2, DMD3 dibuatkan oleh salah satu pembuat dmd P10 yaitu Freetronic.
Hardware
Jenis Jenis DMD
- Jenis dmd (dot matrix display ) antara lain : P10, P4.75 , P76.2, P13.33 dll , perbedaanya adalah jarak antar dot/led misal P10 10cm, P4.75 4,75 cm dst..
- Jenis dmd berdasar warnanya : red, green,blue dan red green blue(RGB)
Dimensi modul P10: 16 led x 32 Led
Hardware
Jenis konektor DMD antara lain
- HUB08 untuk panel dmd P4,75 dan P7,62
- HUB12 untuk panel dmd P10 Single Color
- HUB 75 untuk panel dmd P10 RGB
berikut ini contoh koneksi antara pin pin Arduino Uno dan pin konektor modul P10 ( hub12 )
penjelasan pin pada konektor
- OE: Output Enable untuk on/off semua LED
- A, B : memilih kolom yg aktif.
- CLK: SPI clock
- SCLK: Latch data register
- Data: SERIAL DATA SPI
sedangkan pin hub08 untuk modul dmd P4.75 dan P7.62 adalah sebagai berikut :
penjelasan pin pada konektor
- OE: Output Enable untuk on/off semua LED
- A, B, C, D: memilih kolom yg aktif.
- CLK: SPI clock
- LAT: Latch data register
- R1: SERIAL DATA SPI
berikut ini koneksi antara HUB08 (matrix led) ke ARDUINO Uno pin :
* LA / A -> Digital Pin 4
* LB / B -> Digital Pin 5
* LC / C -> Digital Pin 6
* LD / D -> Digital Pin 7
* S / CLK -> Digital Pin 13
* R1 / R -> Digital Pin 11
* OE / EN -> Digital Pin 3
* L / LAT / STB -> Digital Pin 2
Penjelasan :
Data akan dikirm dari arduino secara serial melalui soket HUB1.2 kemudian diterima oleh IC serial to paralel 74595. jika ada tambahan modul akan diambil dari keluaran 74595 yg terakhir yg dihubungkan ke soket X2-OUT. Untuk suply arus diberikan oleh ic driver penguat daya VT1,VT2..dst. Untuk memilih kolom mana yg menyala diaktifkan oleh IC multiplexer.
Rangkain Modul dmd P10 lebih dari 1 (Cascade )
Jika module P10 lebih dari 1 , maka rangkaian dibentuk cascade spt gambar berikut:
Gambar dilihat dari arah belakang modul P10
untuk konfigurasi panel diatas maka inisialisasi DMD :
DMD dmd(2,2); // dmd(wide, high) artinya 2 modul P10 ke samping , 2 modul P10 ke bawah.
Software
Library DMD untuk arduino
Step by step install library DMD arduino untuk menjalankan dmd P10
- Download DMD Libray untuk arduino di https://github.com/freetronics/DMD
- Extraxt dan simpan DMD library di folder ” arduino/libraries”
- download TimerOne library untuk arduino di http://code.google.com/p/arduino-timerone/downloads/list
- Extraxt dan tempatkan TimerOne di folder arduino/libarries
- Restart IDE arduino
- lihat di Arduino IDE File>Examples>DMD
- buka salah satu contoh & compile.
Header file yg digunakan :
#include <SPI.h>
#include <DMD.h>
#include <TimerOne.h>
#include “SystemFont5x7.h”
#include “Arial_Black_16_ISO_8859_1.h”
Fungsi fungsi yg ada di library DMD yang digunakan antara lain:
//Instantiate the DMD
DMD(byte panelsWide, byte panelsHigh);
//Set or clear a pixel at the x and y location (0,0 is the top left corner)
void writePixel( unsigned int bX, unsigned int bY, byte bGraphicsMode, byte bPixel );
//Draw a string
void drawString( int bX, int bY, const char* bChars, byte length, byte bGraphicsMode);
//Select a text font
void selectFont(const uint8_t* font);
//Draw a single character
int drawChar(const int bX, const int bY, const unsigned char letter, byte bGraphicsMode);
//Find the width of a character
int charWidth(const unsigned char letter);
//Draw a scrolling string
void drawMarquee( const char* bChars, byte length, int left, int top);
//Move the maquee accross by amount
boolean stepMarquee( int amountX, int amountY);
//Clear the screen in DMD RAM
void clearScreen( byte bNormal );
//Draw or clear a line from x1,y1 to x2,y2
void drawLine( int x1, int y1, int x2, int y2, byte bGraphicsMode );
//Draw or clear a circle of radius r at x,y centre
void drawCircle( int xCenter, int yCenter, int radius, byte bGraphicsMode );
//Draw or clear a box(rectangle) with a single pixel border
void drawBox( int x1, int y1, int x2, int y2, byte bGraphicsMode );
//Draw or clear a filled box(rectangle) with a single pixel border
void drawFilledBox( int x1, int y1, int x2, int y2, byte bGraphicsMode );
//Draw the selected test pattern
void drawTestPattern( byte bPattern );
//Scan the dot matrix LED panel display, from the RAM mirror out to the display hardware.
//Call 4 times to scan the whole display which is made up of 4 interleaved rows within the 16 total rows.
//Insert the calls to this function into the main loop for the highest call rate, or from a timer interrupt
void scanDisplayBySPI();
Arah Scanning
Contoh Kode program:
/*–Includes——-*/
#include <SPI.h>
#include <DMD.h>
#include <TimerOne.h>
#include “SystemFont5x7.h”
#include “Arial_Black_16_ISO_8859_1.h”
//Fire up the DMD library as dmd
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
/*
Interrupt handler for Timer1 (TimerOne) driven DMD refresh scanning, this gets
called at the period set in Timer1.initialize();
*/
void ScanDMD()
{
dmd.scanDisplayBySPI();
}
/*————————————————————————-
setup
Called by the Arduino architecture before the main loop begins
————————————————————————-*/
void setup(void)
{
//initialize TimerOne’s interrupt/CPU usage used to scan and refresh the display
Timer1.initialize( 3000 ); //period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker.
Timer1.attachInterrupt( ScanDMD ); //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI()
//clear/init the DMD pixels held in RAM
dmd.clearScreen( true ); //true is normal (all pixels off), false is negative (all pixels on)
Serial.begin(115200);
}
/*————————————————————————-
loop
Arduino architecture main loop
————————————————————————-*/
void loop(void)
{
dmd.clearScreen( true );
dmd.selectFont(Arial_Black_16_ISO_8859_1);
const char *MSG = “apa kabar”;
dmd.drawMarquee(MSG,strlen(MSG),(32*DISPLAYS_ACROSS)-1,0);
long start=millis();
long timer=start;
while(1){
if ((timer+30) < millis()) {
dmd.stepMarquee(-1,0);
timer=millis();
}
}
}
saat tulisan diupdate versi library sdh ada DMD2 dan DMD3 oleh karena itu berikut ini diberikan contoh sketch menggunakan library DMD2. salah satu kelebihan DMD2 kita bisa dengan mudah mengganti pin arduino yg akan di koneksi ke papan dmd dgn mudah.
Menggunakan Library DMD2
libary bisa di download disini https://www.arduinolibraries.info/libraries/dmd2
Untuk saat ini sudah tersedia library DMD2 dengan library ini kita bisa menggunakan Arduino Mega2560 dengan mudah .
berikut inii Contoh sketch Arduino Mega2560 untuk dikoneksi dgn P10 .
#include <SPI.h>
#include <DMD2.h>
#include <fonts/Arial14.h>
const int COUNTDOWN_FROM = 12;
int counter = COUNTDOWN_FROM;
//SoftDMD(Wide, High, OE, A, B, SCK, CLK, DATA)
SoftDMD dmd(1, 1, 9, 6, 7,8,13,11); // rubah nilai parameter jika ingin menggunakan pin yg lain
DMD_TextBox box(dmd, 0, 2); // “box” provides a text box to automatically write to/scroll the display
// the setup routine runs once when you press reset:
void setup() {
Serial.begin(9600);
dmd.setBrightness(1);
dmd.selectFont(Arial14);
dmd.begin();
}
// the loop routine runs over and over again forever:
void loop() {
Serial.print(counter);
Serial.println(F(“…”));
box.print(‘ ‘);
box.print(counter);
box.println(F(“…”));
counter–;
delay(1000);
if(counter == 0) {
for(int i = 0; i < 3; i++) {
dmd.fillScreen(true);
delay(500);
dmd.clearScreen();
delay(500);
}
box.clear();
counter = 12;
}
}
Merubah Font
pertama simpan file header font yg akan digunakan di folder fonts sbb:
kedua : tambahkan / include file header di scketch misal include<fontSaya.h>
ketiga : gunakan perintah dmd.selectFont(jenisFont); misal dmd.selectFont(fontSaya);
file header jenis jenis font bisa di download disini :
https://fareedish.blogspot.com/2019/12/kumpulan-font-header-library-dmd-arduino.html
Sofware library untuk Hub08
library untuk hub08 bisa didownload disini
https://github.com/emgoz/HUB08SPI
https://github.com/fahroniganteng/Arduino_HUB08_Matrix_Led
************************* selesai ***************************************
referensi:
https://fareedish.blogspot.com/2018/10/cara-membuat-font-dmd-arduino.html
http://cdn.shopify.com/s/files/1/0045/8932/files/DMD_Getting_Started.pdf?100647
http://www.freetronics.com.au/pages/using-your-freetronics-dmd#.VyRQANSLTI
https://github.com/freetronics/DMD
https://www.arduinolibraries.info/libraries/dmd2
https://forum.arduino.cc/index.php?topic=260320.0
http://cdn.shopify.com/s/files/1/0045/8932/files/DMD_Getting_Started.pdf?100647
http://www.freetronics.com.au/pages/using-your-freetronics-dmd#.VyRQANSLTI
https://github.com/freetronics/DMD
Posted on 30/04/2016, in Arduino, Daftar isi. Bookmark the permalink. 26 Comments.
artikel disini hanya untuk memulai saja, selanjutnya silahken googling
Saya menyukai program ini ! Perlu artikel yg lebih menfukung
kalau pakai p10 yang smd gimana pak…
Admin mau tanyak nih
Misal p10 saya yg jalan lednya mati & yg sharusnya mati koq hidup
Kira kira knpa ya??
Thanks admin
Gan mau tanya, kalo tipe p10 yang data polrity nya positif dan oe polaritynya positif gmn ngaturnya di lib DMD?
Gan ada artikel tentang memasang nirkabel wireless ke modul LED?
bang minta coding animasi nya selain text
kk untuk coding bluetooth nya dari mana koding diatas
// scanDMD adalah fungsi ISR timer1, yg di exsekusi berulang.
void ScanDMD() {
dmd.scanDisplayBySPI();
}
void setup(void) {
Timer1.initialize( 5000 ); //set interval ISR 0.005 detik
Timer1.attachInterrupt( ScanDMD ); // fungsi scanDmd akan di eksekusi tiap 0.005detik
}
jika ada data dari serial di simpan di var message dan ditampilkan ke display led matrix p10
kak mnta tolong jelaskan kalo ada waktu terima kasih
#include
#include
#include
#include “SystemFont5x7.h”
#include “Arial_black_16.h”
#define DISPLAYS_ACROSS 2
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
#define max_char 100
char message[max_char];
char r_char;
byte index = 0;
int i;
void ScanDMD() {
dmd.scanDisplayBySPI();
}
void setup(void) {
Timer1.initialize( 5000 );
Timer1.attachInterrupt( ScanDMD );
dmd.clearScreen( true );
Serial.begin(9600);
}
void loop(void) {
if(Serial.available()){
for(i=0; i 0){
if(index < (max_char-1)) {
r_char = Serial.read();
message[index] = r_char;
index++;
message[index] = '\0';
}
}
dmd.clearScreen( true );
dmd.selectFont(Arial_Black_16);
dmd.drawMarquee(message, max_char,(32*DISPLAYS_ACROSS)-1 ,0);
long start=millis();
long timer=start;
boolean ret=false;
while(!ret){
if ((timer+30) < millis()) {
ret=dmd.stepMarquee(-1,0);
timer=millis();
}
}
}
Mas untuk pemakaian 2 atau lebih p10 cara masukin programnya biar hasil textnya berjalan berurutan dari p10 pertama terus ke p10 selanjutnya gimana yah?
bisa , mikrokontroler sebagai frekwensi meter.
mas saya mau tanya. untuk pembuatan monitor rpm kecepatan motor dc trus ditampilkan ke led matrix p10 itu bisa gak yaa?? mohon pencerahanya
https://github.com/freetronics/DMD/archive/master.zip
Gan, cara download dan instal library DMD, bagaiman?
Saya coba download kok tidak bisa selalu kembali ke https://github.com/freetronics/DMD.
Terima kasih
Mohon bantuannya..
Klo hasil display negatif (semua led hidup kecuali text).padahal clearscreen(true) sudh diset true bukan false. Kira” apa penyebabnya ya?
konverter untuk apa gan?
Selain pake konverter…bisa..pake.relay..ngga
Mohon solusi admin
kalo pake modul laen ada gak gan tutornya, saya coba pake adafruit_RGB tapi waktu running sketch demo dari arduino panel justru kebagi jadi dua, panel 16×32 hasilnya 16×16, dan kordinat x0y0 nya ada di dot ke 8 dari setiap 16×16 itu sendiri, dan skema matriks bakal berubah kalo pake sample 32×32.
sy juga blm pernah coba yg rgb
gan ane mau nanya, DMD digunain untuk jenis panel p10 RGB/7colour bisa gak ya ?
karena waktu ane nyoba nyala lampu malah berantakan gak sesuai dengan hasil yang diharap.
Ngilangin kedip karena clear data gmn ya gan?
gan, cahaya p10 apa bisa dibuat redup?
dan untuk buat font custom gmn?
trims atas jawabannya.
ada mahasiswa datang ke tempat sy terus sy kasih petunjuk spt di atas. kemuidna dia coba2 dirumahnya katanya sdh bisa.trus sy minta dia datang lagi ke tempat sy dgn membawa P10 nya sy mau liat sendiri,tapi ga direspon sms sy.
Saya pake Led P10 merk brilux sudah mengikuti sesuai tulisan diatas tapi kok hasilnya lampu hanya menyala semua tanpa ada teks, apakah sebabnya?
terima kasih respon nya
Saya pake Led P10 merk brilux sudah mengikuti sesuai tulisan diatas tapi kok hasilnya lampu hanya menyala semua tanpa ada teks, apakah sebabnya?