Подключение светодиодной матрицы к платформе Arduino, не представляет ни какой сложности, если имеется драйвер, через который непосредственно осуществляется подключение. В данной статье речь пойдет о драйвере MAX7219, через который будет осуществляться подключениесветодиодной матрицы КЕМ-15088-ASR.
Светодиодная матрица представляет собой ряд взаимосвязанных между собой светодиодов. Матрица могут содержать различное количество светодиодов, размер матрицы может отличаться и не только от количества светодиодов, а от их размера.
Что касается драйвера MAX7219 – то через него осуществляется подключение не только светодиодной матрицы, но и несколько сегментных индикаторов. Драйвер позволяет управлять пинами подключенных к нему светодиодных индикаторов. Конечно, осуществить подключение матрицы можно на прямую к Arduino и все будет работать, только тогда будут заняты почти все пины микроконтроллера, подключить другие устройства к AVR микроконтроллеру будет не возможно. Поэтому в цели экономии пинов, используется драйвер управления светодиодными индикаторами MAX7219.
Подключение светодиодной матрицы к Arduino осуществляется через драйвер MAX7219 по следующей схеме.
На первом рисунке изображено подключение светодиодной матрицы КЕМ-15088-ASR к драйверу MAX7219. (первая цифра – это номер пина драйвера, вторая – номер пина светодиодной матрицы, в сторону которой направлена стрелка).
При подключении светодиодной матрицы к драйверу, нужно быть очень внимательным, так как легко запутаться. При ошибочном подключении, матрица может отображать неверный результат. Пины светодиодной матрицы КЕМ-15088-ASR расписаны в DataSheet (см. в конце поста).
Подключение драйвера MAX7219 к Arduino UNO осуществляется через 10 (SS), 11 (MOSI) и 12 (MISO) пин.
Для проверки работы схемы был использован пример, который входит в состав библиотеки LedControl.h. Функции данная библиотека позволяют управлять светодиодными индикаторами.
Код проверочного скетча выглядит следующим образом (пример LEDemoMatrix).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
//We always have to include the library #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(); } |
Документация
DataSheet Led-Control 8.72 KB
DataSheet MAX7219-MAX7221 940.34 KB
Скачать DataSheet MAX7219-MAX7221
DataSheet Led-Matrix 235.05 KB