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

freetronic

Hardware

modulp10kearduino

Jenis konektor DMD antara lain

berikut ini contoh koneksi antara pin pin Arduino Uno  dan pin konektor modul P10  ( hub12 )

soket_p10

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

 Circuit modul  dmdcircuitep10

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:

modulp10cascade

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

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();

dmdXY


Arah Scanning

arahscanning

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

GLDCFontCreatorV1

GLDCFonCreatorV2 

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

https://www.arduinolibraries.info/libraries/dmd2

https://forum.arduino.cc/index.php?topic=260320.0

About pccontrol

Berisi Tutorial Menggunakan PC untuk mengontrol Peralatan dengan cara mudah & praktis untuk pemula.

Posted on 30/04/2016, in Arduino, Daftar isi. Bookmark the permalink. 26 Comments.

  1. artikel disini hanya untuk memulai saja, selanjutnya silahken googling

  2. Saya menyukai program ini ! Perlu artikel yg lebih menfukung

  3. kalau pakai p10 yang smd gimana pak…

  4. Admin mau tanyak nih
    Misal p10 saya yg jalan lednya mati & yg sharusnya mati koq hidup
    Kira kira knpa ya??
    Thanks admin

  5. Gan mau tanya, kalo tipe p10 yang data polrity nya positif dan oe polaritynya positif gmn ngaturnya di lib DMD?

  6. Gan ada artikel tentang memasang nirkabel wireless ke modul LED?

  7. bang minta coding animasi nya selain text

  8. kk untuk coding bluetooth nya dari mana koding diatas

  9. // 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

  10. 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();
    }
    }
    }

  11. Rudi Apriansyah

    Mas untuk pemakaian 2 atau lebih p10 cara masukin programnya biar hasil textnya berjalan berurutan dari p10 pertama terus ke p10 selanjutnya gimana yah?

  12. bisa , mikrokontroler sebagai frekwensi meter.

  13. mas saya mau tanya. untuk pembuatan monitor rpm kecepatan motor dc trus ditampilkan ke led matrix p10 itu bisa gak yaa?? mohon pencerahanya

  14. Gan, cara download dan instal library DMD, bagaiman?
    Saya coba download kok tidak bisa selalu kembali ke https://github.com/freetronics/DMD.
    Terima kasih

  15. Mohon bantuannya..
    Klo hasil display negatif (semua led hidup kecuali text).padahal clearscreen(true) sudh diset true bukan false. Kira” apa penyebabnya ya?

  16. konverter untuk apa gan?

  17. Selain pake konverter…bisa..pake.relay..ngga
    Mohon solusi admin

  18. 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.

  19. sy juga blm pernah coba yg rgb

  20. 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.

  21. Ngilangin kedip karena clear data gmn ya gan?

  22. gan, cahaya p10 apa bisa dibuat redup?
    dan untuk buat font custom gmn?
    trims atas jawabannya.

  23. 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.

  24. 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

  25. Saya pake Led P10 merk brilux sudah mengikuti sesuai tulisan diatas tapi kok hasilnya lampu hanya menyala semua tanpa ada teks, apakah sebabnya?

Komentar ,Saran atau Pertanyaan