roboforum.ru

Технический форум по робототехнике.

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

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

Translator » 07 окт 2014, 14:03

Код: Выделить всёРазвернуть
DMD dmd(18,1);

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

Подключал к Arduino UNO. Использую такую схему.

Изображение
Работаю с помощью такой библиотеки https://github.com/freetronics/DMD

Эксперементальным петём добился корректной работы 22 модулей.

Изменив в DMD.h размер массива marqueeText

Код: Выделить всёРазвернуть
 //Marquee values
    char marqueeText[2]; // было  //  char marqueeText[256];

Если добиться работы 24 модулей, то было бы уже хорошо. Но в идеале 30 модулей нужно.

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

Angel71 » 07 окт 2014, 17:40

в документации и на их форуме по поводу большого количества модулей смотрели? может частоту spi поднять, может блок питания не справляется, может еще каких деталюжек нужно на шлейф докинуть, может памяти не хватает или ещё что в коде поменять нужно. вариантов же слегка не один.
если не секрет, а чего именно эти модули? у них же цены уропейские. самые дешовые китавайские (частенько они на копиях mbi микр, т.е. взаимозаменяемые и дока/код легко найт) 16*32 примерно от 10$. те, что получше немного дороже.

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

Translator » 08 окт 2014, 06:37

Я подключал последовательно 18 панелей - работают нормально.
Вот схема подключения ардуино UNO
Изображение

В документации не нашёл ничего по поводу большого количества модулей.

Как только при вызове класса
Код: Выделить всёРазвернуть
DMD dmd(24,1);

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

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

Код: Выделить всёРазвернуть
bDMDScreenRAM = (byte *) malloc(DisplaysTotal*DMD_RAM_SIZE_BYTES);

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

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

Частота SPI меняется вот так?
Код: Выделить всёРазвернуть
SPI.setClockDivider(SPI_CLOCK_DIV128);

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

Angel71 » 08 окт 2014, 13:24

тфу блин это ваше работает не работает, там же сдвиговые регистры. как же лень в их коде копаться.
в общем подключаете все нужные модули, настраиваете в коде на 2-3 модуля, выводите что-нибудь в последнем и смотрите. выведенное должно повторятся на куче модулей.
время. частота spi задаётся делителем относительно частоты мк. в данном случае у вас SPI.setClockDivider(SPI_CLOCK_DIV128), т.е. 125кгц. можно прикинуть какая минимальная частота нужно и выставить. можно сразу выставить побольше, глюки вывода будут только при слишком низкой. отрисовка выплёвывание данных происходит в ф-и ScanDMD (вызывает dmd.scanDisplayBySPI). вызывается постоянно в таймере. менять частоту вызова, думайте сами.
память. у 328й меги 2кб озу. матрица 32*16, т.е. 512 бит, т.е. 64 байта. 18 матриц это 1152 байта, 30 матриц уже 1920 байт. +остальная часть программы и прочего память на что-то использует.
:) получается куча вариантов. можно просто взять плату, у которой будет мк с большем ко-вом памяти. можно всякие ухищрения. вогнать в буфер данные, отрисовывать первую часть, вогнать в буфер данные для второй части и выплюнуть. можно внешнюю флеш подкинуть и просто гнать поток данных. можно подключить внешнюю флеш или фрам и использовать как внешний буфер. и т.д. сами подумайте, что вы там отрисовываете и как, знаете только вы.
Последний раз редактировалось Angel71 08 окт 2014, 14:14, всего редактировалось 1 раз.

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

elmot » 08 окт 2014, 14:14

Человека уже на других форумах 100 раз послали. Памяти у него не хватает.

Добавлено спустя 1 минуту 40 секунд:
Надо взять мощный контроллер и код туда портировать. Напр у stm32f4-discovery объем памяти во много раз больше и spi шин там штуки 3.

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

Angel71 » 08 окт 2014, 14:17

ну да, в конце тоже склонялся, что дело скорей всего в памяти.

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

avr123.nm.ru » 09 окт 2014, 10:40

Возможно нагрузка большая для выводов АВР. надо посмотреть осцилограммы сигналов, похоже их амплитуда снижается при 18 мод. И использовать мощные буферы на сигнальные линии, они наверняка однонаправленные.

либо каждые 10 модулей ставить в разрыв обычные буферы типа 74hc244

а первое дело это попробовать понизить частоту такта и команд.

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

Angel71 » 09 окт 2014, 12:15

не тормозим, сначала память. остальное скорей всего в норме.

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

Translator » 10 окт 2014, 14:24

Спасибо мужики. Я работаю с UNO, если бы подключить Mega, то всё бы наверное получилось.
Но что-то у меня с подключением меги проблема.
Кто-нибудь подключал мегу к таким модулям? Есть рабочая схема?

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

Angel71 » 10 окт 2014, 16:39

смотрите распиновку, правите пару строк кода и через пару минут оно работает на меге. :pardon: ничего сложного.

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

Translator » 11 окт 2014, 20:50

С мегой получилось подключить 30 модулей. Всё работает. Спасибо за советы мужики.
А не подскажите, можно ли сделать, чтобы при изменении определенной части строки, остальная часть не менялась?
Просто когда прорисовывается вся строка - это очень долго.
Или может можно как-то ускорить работу?
Частоту SPI поднял, поставил SPI_CLOCK_DIV2

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

Angel71 » 11 окт 2014, 22:54

можно менять любой пиксель независимо от все других. быстрей "прорисовывайте". :) учебник си, калькулятор

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

Translator » 12 окт 2014, 07:14

Можешь пояснить как это сделать?

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

Angel71 » 12 окт 2014, 10:52

ответ был выше, учить элементарные базовые вещи (как минимум работу с памятью и битовые операции кто-то пропустил) и используя элементарные расчеты высчитывать, на что хватит тактов мк, памяти, пропускной интерфейса.


cron
Rambler\'s Top100 Mail.ru counter