تابلو روان ها کاربرد فراوانی در تجهیزات تبلیغاتی دارند . هر تابلو روان یک آرایه از LED ها است . در LED ماتریس ، LED ها به صورت شکل زیر به همدیگر متصل اند :

در واقع در هر سطر تمامی پایه های آند (یا کاتد) LED ها به هم متصل هستند . در هر ستون نیز پایه دوم LED ها با همدیگر مشترک اند . در این حالت برای کنترل LED ها می توان ابتدا با فعال کردن پایه مشترک هر ستون ، داده های مربوط به آن ستون را در پین های سمت چپ LED ماتریس قرار داد . به طور کلی در در راه اندازی دات ماتریس ها برای نمایش یک تصویر باید مقادیر ستون ها تصویر را جدا گانه به نمایش در آورد . در واقع MCU از طریق پین های مشترک هر ستون ، ستون مورد نظر را فعال کرده و سپس داده های مربوط به آن را در در پین های سطری قرار می دهد . سپس ستون بعدی را فعال کرده و داده های آن را در وردی های سمت چپ قرار می دهد . این فرایند به صورت بسیار سریعی صورت میگیرد و لذا چشم انسان متوجه خاموش و روشن شدن هر ستون نمی شود . برای راه اندازی ماتریس ها می توان از واحد تایمر کانتر میکروکنترلر استفاده نمود در این حالت توسط تایمر هر بار پس از سپری شدن زمان خاصی دیتای مربوط به هر ستون در ورودی ماتریس قرار داده می شود . همچنین برای اتصال پایه های کنترل ستون ها می توان از شیفت رجیستر ها استفاده مکرد . این کار از اشغال شدن پین های میکروکنترلر جلوگیری میکند . اما پین های مربوط به کنترل سطر ها به صورت مستقیم به MCU متصل می شود . با افزایش تعداد LED های قرار گرفته در هر ستون ، پین های بیشتری از MCU گرفته می شود . لذا در چنین مواردی می توان از چیپ های درایور دات ماتریس استفاده نمود . این چیپ ها خود هر بار ستون ها را فعال کرده و داده هر سطر را در ورودی دات ماتریس قرار می دهند . MAX7219 از جمله چیپ های درایور دات ماتریس است که می توان داده ها را تنها از طریق سه پین از MCU درقافت کرده و آن را نمایش دهد . این کار نه تنها از اشغال شدن پین های میکرو کنترلر جلوگیری میکند ، همچنین MCU مجبور به کنترل هر بار دات ماتریس نمی باشد .

در تصویر زیر یک ماژول MAX7219 همراه با دات ماتریس 8X8 نشان داده شده است .

 

پایه های ماژول MAX7219 :

این ماژول دار 5 پایه به شرح زیر است

VCC پین تغذیه ماژول که باید به +5V متصل شود .

GND پین زمین ماژول .

DIN پین ورودی داده

پین CS جهت فعال سازی ماژول می باشد

CK پین ورودی پالس ساعت .

از جمله ویژگی های مهم این ماژول قابلیت گسترش آن می باشد به طوریکی می توان چندین MAX7219 را به همدیگر متصل نمود کل آن ها را از طریق سه پین کنترلر نمود .

 

راه اندازی ماژول MAX7219 :

برای راه اندازی ماژول MAX7219 پس از صفر کردن پین CS داده ها را به صورت 16 بیتی و از با ارزش ترین بیت از طریق پین DIN به سمت ماژول شفیت می دهیم . 8 بیت اولی که به ماژول فرستاده می شود مربوط به پین های سط و 8 بیت بعدی مربوط به ستون مورد نظر می باشد .

کد های زیر را بر روی برد آردوینوآپلود کرده و ماژول مطابق شکل زیر به آردوینو متصل کنید :

#include "LedControl.h"

/*
 Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
 pin 12 is connected to the DataIn 
 pin 11 is connected to the CLK 
 pin 10 is connected to LOAD 
 We have only a single MAX72XX.
 */
LedControl lc=LedControl(12,11,10,1);

/* we always wait a bit between updates of the display */
unsigned long delaytime=100;

void setup() {
  /*
   The MAX72XX is in power-saving mode on startup,
   we have to do a wakeup call
   */
  lc.shutdown(0,false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0,8);
  /* and clear the display */
  lc.clearDisplay(0);
}

/*
 This method will display the characters for the
 word "Arduino" one after the other on the matrix. 
 (you need at least 5x7 leds to see the whole chars)
 */
void writeArduinoOnMatrix() {
  /* here is the data for the characters */
  byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};
  byte r[5]={B00111110,B00010000,B00100000,B00100000,B00010000};
  byte d[5]={B00011100,B00100010,B00100010,B00010010,B11111110};
  byte u[5]={B00111100,B00000010,B00000010,B00000100,B00111110};
  byte i[5]={B00000000,B00100010,B10111110,B00000010,B00000000};
  byte n[5]={B00111110,B00010000,B00100000,B00100000,B00011110};
  byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};

  /* now display them one by one with a small delay */
  lc.setRow(0,0,a[0]);
  lc.setRow(0,1,a[1]);
  lc.setRow(0,2,a[2]);
  lc.setRow(0,3,a[3]);
  lc.setRow(0,4,a[4]);
  delay(delaytime);
  lc.setRow(0,0,r[0]);
  lc.setRow(0,1,r[1]);
  lc.setRow(0,2,r[2]);
  lc.setRow(0,3,r[3]);
  lc.setRow(0,4,r[4]);
  delay(delaytime);
  lc.setRow(0,0,d[0]);
  lc.setRow(0,1,d[1]);
  lc.setRow(0,2,d[2]);
  lc.setRow(0,3,d[3]);
  lc.setRow(0,4,d[4]);
  delay(delaytime);
  lc.setRow(0,0,u[0]);
  lc.setRow(0,1,u[1]);
  lc.setRow(0,2,u[2]);
  lc.setRow(0,3,u[3]);
  lc.setRow(0,4,u[4]);
  delay(delaytime);
  lc.setRow(0,0,i[0]);
  lc.setRow(0,1,i[1]);
  lc.setRow(0,2,i[2]);
  lc.setRow(0,3,i[3]);
  lc.setRow(0,4,i[4]);
  delay(delaytime);
  lc.setRow(0,0,n[0]);
  lc.setRow(0,1,n[1]);
  lc.setRow(0,2,n[2]);
  lc.setRow(0,3,n[3]);
  lc.setRow(0,4,n[4]);
  delay(delaytime);
  lc.setRow(0,0,o[0]);
  lc.setRow(0,1,o[1]);
  lc.setRow(0,2,o[2]);
  lc.setRow(0,3,o[3]);
  lc.setRow(0,4,o[4]);
  delay(delaytime);
  lc.setRow(0,0,0);
  lc.setRow(0,1,0);
  lc.setRow(0,2,0);
  lc.setRow(0,3,0);
  lc.setRow(0,4,0);
  delay(delaytime);
}

/*
  This function lights up a some Leds in a row.
 The pattern will be repeated on every row.
 The pattern will blink along with the row-number.
 row number 4 (index==3) will blink 4 times etc.
 */
void rows() {
  for(int row=0;row<8;row++) {
    delay(delaytime);
    lc.setRow(0,row,B10100000);
    delay(delaytime);
    lc.setRow(0,row,(byte)0);
    for(int i=0;i<row;i++) {
      delay(delaytime);
      lc.setRow(0,row,B10100000);
      delay(delaytime);
      lc.setRow(0,row,(byte)0);
    }
  }
}

/*
  This function lights up a some Leds in a column.
 The pattern will be repeated on every column.
 The pattern will blink along with the column-number.
 column number 4 (index==3) will blink 4 times etc.
 */
void columns() {
  for(int col=0;col<8;col++) {
    delay(delaytime);
    lc.setColumn(0,col,B10100000);
    delay(delaytime);
    lc.setColumn(0,col,(byte)0);
    for(int i=0;i<col;i++) {
      delay(delaytime);
      lc.setColumn(0,col,B10100000);
      delay(delaytime);
      lc.setColumn(0,col,(byte)0);
    }
  }
}

/* 
 This function will light up every Led on the matrix.
 The led will blink along with the row-number.
 row number 4 (index==3) will blink 4 times etc.
 */
void single() {
  for(int row=0;row<8;row++) {
    for(int col=0;col<8;col++) {
      delay(delaytime);
      lc.setLed(0,row,col,true);
      delay(delaytime);
      for(int i=0;i<col;i++) {
        lc.setLed(0,row,col,false);
        delay(delaytime);
        lc.setLed(0,row,col,true);
        delay(delaytime);
      }
    }
  }
}

void loop() { 
  writeArduinoOnMatrix();
  rows();
  columns();
  single();
}

 

Tags:
About Author: USER_4