Monday, August 22, 2011

Светодиодная матрица от Sure Electronics

Недавно таки пришла посылка из Гонконга с заветной матрицей. Это практически моя последняя надежда потому как те электронные компоненты, из которых более-менее реально самостоятельно собрать аналогическую матрицу, продаются в Китае только оптом и с доставкой DHL, что подразумевает попадание на растаможку, выход за рамки бюджета и затягивание сроков.
В этой части расскажу про проблемы, возникшие при подключении матрицы к Arduino.

Пара слов о посылке - был приятно удивлен стильной упаковкой, не ожидал такого от китайцев.

Сама матрица имеет размеры 640х1280, сзади находятся два разъема для управления (SPI-like) и питания платы. Для управления используются контакты:
1 - CS1
2 - CS2
5 - WR
7 - DATA

Питание:
11 - GND
12 - +5V

Первым делом я принялся искать готовые библиотеки для работы с этой матрицей, были найдены проекты HT1632-for-Arduino и ht1632c, но они у меня упорно отказывались работать - на матрице попросту ничего не выводилось. В какой-то момент я даже подумал что матрица испорчена. Искал по форумам, пробовал разные скетчи и наткнулся на архив в котором находился код, таки заставивший засиять матрицу тремя цветами. Судя по комментариям в исходном коде - используется переделанная библиотека Sure Electronics для другой матрицы.
Убрал из кода все лишнее (благо лицензия позволяет) и оформил в виде отдельного модуля, попутно сделав тест матрицы. Вот как это выглядит:

Схема подключения матрицы к Arduino Mega 2560:
На всякий случай распиновка:
49pin - DATA (7)
47pin - WR (5)
48pin - CS (1)
46pin - CLK (2)

В самом модуле основной функцией является включения одного светодиода определенного цвета по указанным координатам:
// x 0-31
// y 0-15
// color: 0 - black, 1 - green, 2 - red, 3 - orange
ht1632_plot(int x, int y, int color);
Весь скетч:
#include "ht1632.h"

void setup () {
  ht1632_setup();

  Serial.begin(115200);

  ht1632_clear();
}

int color = 1;

void loop () {
  
  for (int i=0; i<32; i++){
    for (int j=0; j<16; j++){
      ht1632_plot(i, j, color);      
    }
  }
  
  if (color < 3){
    color++;
  }else{
    color = 1;
  }
}

После теста меня начала беспокоить скорость обновления матрицы, надеюсь там есть куда оптимизировать код.

9 comments:

  1. привет красивая работа! или я попытался сделать это, но я не могу программировать Arduino борту программе дает мне много проблем, а библиотеки или intallate! Я использую плату Arduino, но я не думаю, что это проблема! помогите мне! аспект вашего ответа, спасибо!

    ReplyDelete
  2. Aleksey ZhurbitskyMay 10, 2012 at 12:09 PM

    Check your email

    ReplyDelete
  3. thanks for the answer! but I still can not get it to work I use Arduino 2009! can you send me your program with the arduino libraries already made​​? thank you!
    beautiful project!

    ReplyDelete
  4. Aleksey ZhurbitskyMay 25, 2012 at 10:53 AM

    You can find all project files at https://github.com/azhurb/LedMatrix

    ReplyDelete
  5. what are the pins if you use Arduino 2009? thanks

    ReplyDelete
  6. Aleksey ZhurbitskyMay 29, 2012 at 6:53 AM

    im using Arduino mega 2560 with pins:
    49pin - DATA (7)
    47pin - WR (5)
    48pin - CS (1)
    46pin - CLK (2)

    on Arduino 2009 i believe you must use other digital pins and change it in led_matrix/ht1632.cpp

    ReplyDelete
  7. hello! nice project! I have the problem that the variable bytes in c pp is not declared! I use the program arduino 1.01 and my arduino arduino is two thousand! look forward to your answers

    ReplyDelete
  8. Which file has the problem?

    ReplyDelete