Arduino, P10, DMD максимальное количество модулей

Translator
Offline
Зарегистрирован: 03.02.2014

Добрый день. Подключаю к ардуино Модули P10.  Когда ставлю 

1 DMD dmd(18,1);

То всё работает нормально и 18 модулей у меня горят. Но стоит поставить больше, перестают работать вообще все. Как можно увеличить количество модулей? В моем случае до 30.

Схема подключения 

Библиотека, с которой работаю https://github.com/freetronics/DMD

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Я вот не пойму а 5 вольт модули откуда берут? С ардуино?
А то у меня похожая проблема. Врубаю 18 лампочек и все работает. Но стоит подсоединить 19 лампочку и сразу прям гаснет половина деревни.

Translator
Offline
Зарегистрирован: 03.02.2014

Блок питания подсоединяется.

Ты работал с модулями P10?

SergKT
Offline
Зарегистрирован: 04.08.2014

Подумайте о нагрузке на выходы ардуино. Можно попробовать подключить через шинный формирователь какой-нибудь.

Translator
Offline
Зарегистрирован: 03.02.2014

Проблема в том, что при вызове класса DMD 

Он перестает работать. Даже если подключены по-прежнему 6 модулей

Думаю, дело не в нагрузке.

SergKT
Offline
Зарегистрирован: 04.08.2014

Судя по библиотеке, под каждый экран, в памяти резервируется определенное место.

"dmd(24,1);" - это определение 24-ёх экранов?

Вы уверены, что у программы есть столько свободной памяти?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Translator пишет:

Проблема в том, что при вызове класса DMD 

Он перестает работать. Даже если подключены по-прежнему 6 модулей

Думаю, дело не в нагрузке.


То 18 модулей работают нормально. То потом вдруг всего 6. Да и библиотека работает по spi. А по апшей картинке вы не используете железный spi. Вы как нибудь определитесь ужо. Что именно не работает , модули или сама ардуина? И блоки питания один на всех?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

SergKT пишет:

Судя по библиотеке, под каждый экран, в памяти резервируется определенное место.

"dmd(24,1);" - это определение 24-ёх экранов?

Вы уверены, что у программы есть столько свободной памяти?


Ну в меге2560 памяти должно хватать.

Translator
Offline
Зарегистрирован: 03.02.2014

Я использую Arduino UNO. Подключенными по SPI. Ардуино перестает работать если ей прописаться больше 18, а подключен в этот момент может быть хоть один блок, хоть 20. Ардуино перестает отрисовывать вообще.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

На картинке мега2560. Заниматься гаданиями по вашему мычанию очень сложно.
Если у вас уно то вам уже сказали что не хватает памяти.

Translator
Offline
Зарегистрирован: 03.02.2014

Вот схема подключения Arduino UNO к модулю P10, которая используется у меня. Извиняюсь, сначала не ту скинул.

Я подключал последовательно 18 панелей - работают нормально.

Как только при вызове класса 

Использую число больше 18, перестает работать. Подключено в этот момент может быть хоть 24 модуля, хоть 6 - не важно. Если модулей не хватает, то просто отрисовывается на имеющихся. Проблема именно в контроллере. Питания хватает.

В DMD.cpp в конструкторе класса создается массив

1bDMDScreenRAM = (byte *) malloc(DisplaysTotal*DMD_RAM_SIZE_BYTES);

Размером КОЛИЧЕСТВО МОДУЛЕЙ * 64

А потом программа где-то валится, толи выход за пределы массива, толи памяти не хватает. Я понять не могу. 

 

 

 

 

 

 

 

SergKT
Offline
Зарегистрирован: 04.08.2014

Можно попробовать проверить, и в конструкторе класса, уменьшить количество строк в дисплее, что-бы уменьшилось кол-во памяти резервируемое на один дисплей. Потом указать кол-во дисплеев минимально не работающее, у Вас на сколько я понял 18. И посмотреть результат. Если заработает, отображать возможно будет "мусор", но подтвердится, что памяти не хватало.

Translator
Offline
Зарегистрирован: 03.02.2014

SergKT пишет:

Судя по библиотеке, под каждый экран, в памяти резервируется определенное место.

"dmd(24,1);" - это определение 24-ёх экранов?

Вы уверены, что у программы есть столько свободной памяти?

В этом не уверен. Я подключаю к Arduino UNO.

К Arduino Mega подключить не получается. Не могу понять почему.

По этой схеме не работает 

По схеме Arduino UNO тоже не работает 

Не могу понять что не так. Может кто-нибудь подскажет как Мегу подключить правильно?

Translator
Offline
Зарегистрирован: 03.02.2014

SergKT пишет:

Можно попробовать проверить, и в конструкторе класса, уменьшить количество строк в дисплее, что-бы уменьшилось кол-во памяти резервируемое на один дисплей. Потом указать кол-во дисплеев минимально не работающее, у Вас на сколько я понял 18. И посмотреть результат. Если заработает, отображать возможно будет "мусор", но подтвердится, что памяти не хватало.

А как уменьшить количество строк на дисплее?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Ржу. Не понятно что дурак. Но вот что бы настолько. Судя по всему собирает какую то комерческую хрень. Но не разбирается ни в железе, не в програмировании.
Выше уже все написали и не один раз. И про spi и про память. Но толи читает через строчку. Толи вообще читать не умеет.

Достал попкорн и сел в уголку. Будем наблюдать этот цирк.

Translator
Offline
Зарегистрирован: 03.02.2014

Так, пухлявый. В Arduino UNO Не хватает памяти. Ты можешь предложить способ обхода этой проблемы?

С Ардуино Мега у меня не работает при подключении по указанной схеме. Ты подключал модули к Меге?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Не ну кадр. Я уже даже ржать устал. Мир диградирует со страшной силой.
Специально для жертв ЕГЭ диктую большими буквами БИБЛИОТЕКА РАБОТАЕТ ПО SPI !!!
У уно есть библиотека PROGMEM !!!

Radjah
Offline
Зарегистрирован: 06.08.2014

2 Translator:

А тебя не смущает, что в меге SPI на других пинах работает?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Radjah пишет:

2 Translator:

А тебя не смущает, что в меге SPI на других пинах работает?


Лучше спросить , а он вообще в курсе про spi и другие шины.

Translator
Offline
Зарегистрирован: 03.02.2014

В меге SPI на других шинах. Я ХЗ почему схема такая. Я её нашёл в инете. Других не нашёл.

Для UNO схема рабочая. Так соединино у меня и прекрасно работает.

Получается для меги нужно перевесить 11 пин на 51, а 13 на 53. А остальные оставить также, верно?

 

P.S. Кто-нибудь подключал эти модули к меге? Товарищ пухлявый, ты подключал? Radjah, ты подключал?

Если кто-то подключал и у него есть рабочая схема, то поделитесь пожалуйста. Буду очень благодарен.

Мега была бы решением моей проблемы, но я не могу заставить её работать.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Жеваный крот, ну неужели это так тяжело почитать где у меша2560 разведен spi. Это же всего пара строчек в описании. Это какой то писец.

Radjah
Offline
Зарегистрирован: 06.08.2014

Что делается, люди?! Я первый раз с пухлявым согласен.

MOSI, MISO, SCK одинаково на всех платах разведены только на розетке ICSP, которая рядом с чипом. Вторая такая есть рядом с переходником COM2USB из atmega16u2, но она тебе не нужна, потому что сложит только для её прошивки. Но CSN (Slave select) и CE (Chip Enable) всё равно ищи на распиновке. CSN у всех устройств один, а CE у каждого свой должен был. Поправьте, если ошибаюсь, потому что больше одного устройства на SPI вешать еще не приходилось.

У UNO и NANO распиновка совпадает. Там еще диод на 13 пине будет мигать при передаче данных. У Mega SPI вынесено на двойную колодку. Я туда вешал и CE тоже, когда с nRF24 разбирался. Как раз все 6 проводов кроме питания помещаются.

Вот еще выдержка из хидера бибилиотеки:

01//Arduino pins used for the display connection
02#define PIN_DMD_nOE 9 // D9 active low Output Enable, setting this low lights all the LEDs in the selected rows. Can pwm it at very high frequency for brightness control.
03#define PIN_DMD_A 6 // D6
04#define PIN_DMD_B 7 // D7
05#define PIN_DMD_CLK 13 // D13_SCK is SPI Clock if SPI is used
06#define PIN_DMD_SCLK 8 // D8
07#define PIN_DMD_R_DATA 11 // D11_MOSI is SPI Master Out if SPI is used
08//Define this chip select pin that the Ethernet W5100 IC or other SPI device uses
09//if it is in use during a DMD scan request then scanDisplayBySPI() will exit without conflict! (and skip that scan)
10#define PIN_OTHER_SPI_nCS 10

Вот как-то так.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Поправляю. Spi это 4 проводка
Miso передача
Mosi прием
Sck такт ( может быть несколько. Например у due их три)
И последний это cs он вешаеться куда угодно. Но по нему устройство определяет что щас для общения выбрали его.

Translator
Offline
Зарегистрирован: 03.02.2014

Спасибо товарищи:) наконец то получилось. Затупил с SPI

А можно как-то сделать, чтобы при изменении определенной части строки, другая оставалась неизменной? 

А то когда всё прорисовывается это очень долго. Или может как-то можно еще ускорить?

Частоту SPI поднял, поставил SPI_CLOCK_DIV2

Translator
Offline
Зарегистрирован: 03.02.2014

Изменение строки сделал. Еще бы увеличить немного скорость. Может есть какие-нибудь хитрости?

zarro
Offline
Зарегистрирован: 26.04.2014

Кто нибудь допилил готовый русский шрифт к DMD.h  ?

HaIvan
Offline
Зарегистрирован: 19.10.2016

Всем привет! Я новичок и не могу понять как на одну P10 вывести например цифру 1 или другое число. Или скажем одно двузначное число с левого края, а другое двузначное число с правого края. Подключил к UNO. Использовал библиотеку DMD2. Примеры из библиотеки работают. За любые ответы заранее спасибо!