Pengetahuan Dasar Pemrograman Modul Led/Dot Matrik Display (DMD) P10 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  dibuatkan oleh salah satu pembuat P10 yaitu Freetronic.

Dimensi modul  P10: 16 led x 32 Led

freetronic

Hardware

modulp10kearduino

konektor antara Arduino dan modul P10

soket_p10

penjelasan pin pada konektor

  • OE: Output Enable untuk on/off semua LED
  • A dan B: memilih kolom yg aktif.
  • CLK: SPI clock
  • SCLK: Latch data register
  • Data: SERIAL DATA SPI

 

 Circuit modul P10circuitep10

 

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 P10lebih 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);  // 2 modul P10 ke samping , 2 modul P10 ke bawah.

software

 

Step by step install library 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();

kordinat_p10


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


referensi:

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://forum.arduino.cc/index.php?topic=260320.0

Advertisements

About pccontrol

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

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

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

  2. kk untuk coding bluetooth nya dari mana koding diatas

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

    • // 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

  4. 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?

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

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

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

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

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

    • sy juga blm pernah coba yg rgb

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

  10. Ngilangin kedip karena clear data gmn ya gan?

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

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

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

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

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: