Arduino, P10, DMD максимальное количество модулей
- Войдите на сайт для отправки комментариев
Втр, 07/10/2014 - 06:24
Добрый день. Подключаю к ардуино Модули P10. Когда ставлю
1 |
DMD dmd(18,1); |
То всё работает нормально и 18 модулей у меня горят. Но стоит поставить больше, перестают работать вообще все. Как можно увеличить количество модулей? В моем случае до 30.
Схема подключения
Библиотека, с которой работаю https://github.com/freetronics/DMD
Я вот не пойму а 5 вольт модули откуда берут? С ардуино?
А то у меня похожая проблема. Врубаю 18 лампочек и все работает. Но стоит подсоединить 19 лампочку и сразу прям гаснет половина деревни.
Блок питания подсоединяется.
Ты работал с модулями P10?
Подумайте о нагрузке на выходы ардуино. Можно попробовать подключить через шинный формирователь какой-нибудь.
Проблема в том, что при вызове класса DMD
1
DMD dmd(24,1);
Он перестает работать. Даже если подключены по-прежнему 6 модулей
Думаю, дело не в нагрузке.
Судя по библиотеке, под каждый экран, в памяти резервируется определенное место.
"dmd(24,1);" - это определение 24-ёх экранов?
Вы уверены, что у программы есть столько свободной памяти?
Проблема в том, что при вызове класса DMD
1
DMD dmd(24,1);
Он перестает работать. Даже если подключены по-прежнему 6 модулей
Думаю, дело не в нагрузке.
То 18 модулей работают нормально. То потом вдруг всего 6. Да и библиотека работает по spi. А по апшей картинке вы не используете железный spi. Вы как нибудь определитесь ужо. Что именно не работает , модули или сама ардуина? И блоки питания один на всех?
Судя по библиотеке, под каждый экран, в памяти резервируется определенное место.
"dmd(24,1);" - это определение 24-ёх экранов?
Вы уверены, что у программы есть столько свободной памяти?
Ну в меге2560 памяти должно хватать.
Я использую Arduino UNO. Подключенными по SPI. Ардуино перестает работать если ей прописаться больше 18, а подключен в этот момент может быть хоть один блок, хоть 20. Ардуино перестает отрисовывать вообще.
На картинке мега2560. Заниматься гаданиями по вашему мычанию очень сложно.
Если у вас уно то вам уже сказали что не хватает памяти.
Вот схема подключения Arduino UNO к модулю P10, которая используется у меня. Извиняюсь, сначала не ту скинул.
Я подключал последовательно 18 панелей - работают нормально.
Как только при вызове класса
1
DMD dmd(24,1);
Использую число больше 18, перестает работать. Подключено в этот момент может быть хоть 24 модуля, хоть 6 - не важно. Если модулей не хватает, то просто отрисовывается на имеющихся. Проблема именно в контроллере. Питания хватает.
В DMD.cpp в конструкторе класса создается массив
1
bDMDScreenRAM = (
byte
*) malloc(DisplaysTotal*DMD_RAM_SIZE_BYTES);
Размером КОЛИЧЕСТВО МОДУЛЕЙ * 64
А потом программа где-то валится, толи выход за пределы массива, толи памяти не хватает. Я понять не могу.
Можно попробовать проверить, и в конструкторе класса, уменьшить количество строк в дисплее, что-бы уменьшилось кол-во памяти резервируемое на один дисплей. Потом указать кол-во дисплеев минимально не работающее, у Вас на сколько я понял 18. И посмотреть результат. Если заработает, отображать возможно будет "мусор", но подтвердится, что памяти не хватало.
Судя по библиотеке, под каждый экран, в памяти резервируется определенное место.
"dmd(24,1);" - это определение 24-ёх экранов?
Вы уверены, что у программы есть столько свободной памяти?
В этом не уверен. Я подключаю к Arduino UNO.
К Arduino Mega подключить не получается. Не могу понять почему.
По этой схеме не работает
По схеме Arduino UNO тоже не работает
Не могу понять что не так. Может кто-нибудь подскажет как Мегу подключить правильно?
Можно попробовать проверить, и в конструкторе класса, уменьшить количество строк в дисплее, что-бы уменьшилось кол-во памяти резервируемое на один дисплей. Потом указать кол-во дисплеев минимально не работающее, у Вас на сколько я понял 18. И посмотреть результат. Если заработает, отображать возможно будет "мусор", но подтвердится, что памяти не хватало.
А как уменьшить количество строк на дисплее?
Ржу. Не понятно что дурак. Но вот что бы настолько. Судя по всему собирает какую то комерческую хрень. Но не разбирается ни в железе, не в програмировании.
Выше уже все написали и не один раз. И про spi и про память. Но толи читает через строчку. Толи вообще читать не умеет.
Достал попкорн и сел в уголку. Будем наблюдать этот цирк.
Так, пухлявый. В Arduino UNO Не хватает памяти. Ты можешь предложить способ обхода этой проблемы?
С Ардуино Мега у меня не работает при подключении по указанной схеме. Ты подключал модули к Меге?
Не ну кадр. Я уже даже ржать устал. Мир диградирует со страшной силой.
Специально для жертв ЕГЭ диктую большими буквами БИБЛИОТЕКА РАБОТАЕТ ПО SPI !!!
У уно есть библиотека PROGMEM !!!
2 Translator:
А тебя не смущает, что в меге SPI на других пинах работает?
2 Translator:
А тебя не смущает, что в меге SPI на других пинах работает?
Лучше спросить , а он вообще в курсе про spi и другие шины.
В меге SPI на других шинах. Я ХЗ почему схема такая. Я её нашёл в инете. Других не нашёл.
Для UNO схема рабочая. Так соединино у меня и прекрасно работает.
Получается для меги нужно перевесить 11 пин на 51, а 13 на 53. А остальные оставить также, верно?
P.S. Кто-нибудь подключал эти модули к меге? Товарищ пухлявый, ты подключал? Radjah, ты подключал?
Если кто-то подключал и у него есть рабочая схема, то поделитесь пожалуйста. Буду очень благодарен.
Мега была бы решением моей проблемы, но я не могу заставить её работать.
Жеваный крот, ну неужели это так тяжело почитать где у меша2560 разведен spi. Это же всего пара строчек в описании. Это какой то писец.
Что делается, люди?! Я первый раз с пухлявым согласен.
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
Вот как-то так.
Поправляю. Spi это 4 проводка
Miso передача
Mosi прием
Sck такт ( может быть несколько. Например у due их три)
И последний это cs он вешаеться куда угодно. Но по нему устройство определяет что щас для общения выбрали его.
Спасибо товарищи:) наконец то получилось. Затупил с SPI
А можно как-то сделать, чтобы при изменении определенной части строки, другая оставалась неизменной?
А то когда всё прорисовывается это очень долго. Или может как-то можно еще ускорить?
Частоту SPI поднял, поставил SPI_CLOCK_DIV2
Изменение строки сделал. Еще бы увеличить немного скорость. Может есть какие-нибудь хитрости?
Кто нибудь допилил готовый русский шрифт к DMD.h ?
Всем привет! Я новичок и не могу понять как на одну P10 вывести например цифру 1 или другое число. Или скажем одно двузначное число с левого края, а другое двузначное число с правого края. Подключил к UNO. Использовал библиотеку DMD2. Примеры из библиотеки работают. За любые ответы заранее спасибо!