Связка Mega2560 с p10 led module

Garik73
Offline
Зарегистрирован: 16.07.2019

 Заработало!!! Большое человеческое спасибо! Маленький нюанс - можно ли из данного примера убрать надпись DMD появляющуюся в начале, чтобы  сразу  появлялась Привет Ардуино? Предполагаю, что нужно удалить какую-то строку из скетча, но знаний по программированию пока не много. 

b707
Offline
Зарегистрирован: 26.05.2017

Garik73 пишет:

можно ли из данного примера убрать надпись DMD появляющуюся в начале

строчки 101-105 закомментируйте

Garik73
Offline
Зарегистрирован: 16.07.2019

Доброго здоровья b707 и всем форумчанам.  Не подскажете где взять пример vertical scrolling text для унки ?, если конечно такой существует. Прикольно поиграться.

b707
Offline
Зарегистрирован: 26.05.2017

Garik73 пишет:

Доброго здоровья b707 и всем форумчанам.  Не подскажете где взять пример vertical scrolling text для унки ?, если конечно такой существует. Прикольно поиграться.

в последней версии этой библы это есть, правда для СТМ. Вечером гляну, трудно ли переделать для Уно.

andy-k
Offline
Зарегистрирован: 14.05.2012

Подскажите пожалуйста, купил RGB панели P10. Подключил одну штуку, вывел на нее окружность, а там вместо окружности что-то похожее на окружность, примерно 1\3 от нее, а дальше рандомно разбросанные пиксели. У всех у них один цвет, который я задал.

Глянул распиновку, а она отличается от того, с чем я работал раньше

На старых панелях в нижней части разъема были пины CLK, STB, OE, GND и с ними у меня окружность нормально рисовалась.

В новой S, L, OE, CS

Верхние части у них совпадают. Разница только в четырех нижних пинах.

Про GNG понятно, про OE тоже. А вот как среди S, L и CS найти STB и CLK чтобы правильно распаять? 

andy-k
Offline
Зарегистрирован: 14.05.2012

Кто управлял панелями с двумя цветами(RG) через DMD2. Подскажите, а как это практически выглядит? Ну я о том, что в разъеме на панели есть пин R и пин G. И вроде как, подключить можно либо то, либо другое. В связи с этим, пока панельки ещё идут мне и не мог пощупать, у меня два вопроса:

1) Как все это подключить и настроить в скетче, чтобы можно было менять зеленый на красный и наоборот. Нет примерчика ни у кого?

2) В один момент времени такая матрица может выводить пиксели только одного увета, или можно выводить комбинированно, к примеру, число 23, где 2 красная, а 3 зеленая?

FoxJone
Offline
Зарегистрирован: 19.04.2019

andy-k пишет:

2) В один момент времени такая матрица может выводить пиксели только одного увета, или можно выводить комбинированно, к примеру, число 23, где 2 красная, а 3 зеленая?

В один момент такая матрица может выводить 3 цвета: красный, зеленый и желтый(красный+зеленый). Соответственно каждый пиксел может иметь любой из этих трех цветов в любой момент времени.

К сожалению, на остальные вопросы ответа не дам. Да и не вижу смысла эту тему ковырять, учитывая, что двухцветных модулей давно уже нет в продаже (в РФ), потому что по цене они сравнимы с полноцветными.

Garik73
Offline
Зарегистрирован: 16.07.2019

b707 пишет:

Garik73 пишет:

Доброго здоровья b707 и всем форумчанам.  Не подскажете где взять пример vertical scrolling text для унки ?, если конечно такой существует. Прикольно поиграться.

в последней версии этой библы это есть, правда для СТМ. Вечером гляну, трудно ли переделать для Уно.

Приветствую. Не получается реализовать пример vertical scrolling text for uno?

b707
Offline
Зарегистрирован: 26.05.2017

Garik73 пишет:

Приветствую. Не получается реализовать пример vertical scrolling text for uno?

Прошу прощения. закрутился и забыл посмотреть. Отвечу вечером или завтра.

b707
Offline
Зарегистрирован: 26.05.2017

Garik73 пишет:

Приветствую. Не получается реализовать пример vertical scrolling text for uno?

привет.

Посмотрел вертикальный скроллинг - вроде должен работать и на Уно вообще без переделок. Во всяком случае, компилируется без ошибок.

Если интересно попробовать - напишите мне на ded собака cur-ex.ru. вышлю вам версию библиотеки с вертикальным скроллом

Garik73
Offline
Зарегистрирован: 16.07.2019

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

b707
Offline
Зарегистрирован: 26.05.2017

Garik73 пишет:

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

а обычный пример уно в той же папке - работает нормально?

Garik73
Offline
Зарегистрирован: 16.07.2019

Нет. Такая же история. Если вводить  одновременно латиницу и кириллицу в сообщении на кириллице абракадабра. 

b707
Offline
Зарегистрирован: 26.05.2017

Garik73 пишет:

Нет. Такая же история. Если вводить  одновременно латиницу и кириллицу в сообщении на кириллице абракадабра. 


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

b707
Offline
Зарегистрирован: 26.05.2017

Игорь, возьмите вот этот код

/*--------------------------------------------------------------------------------------

 dmd_cyrillic_chars

  DMD_STM32 example code for Atmega328 board
  */

/*--------------------------------------------------------------------------------------
  Includes
--------------------------------------------------------------------------------------*/
#include <DMD_STM32.h> 
#include <TimerOne.h> 
//#include "st_fonts/SystemFont5x7.h"
//#include "st_fonts/Arial_Black_16_ISO_8859_1.h"
#include "st_fonts/UkrRusArial14.h";
#include "gfx_fonts/GlametrixLight12pt7b.h"
#include "gfx_fonts/GlametrixBold9pt7b.h"


// We'll use SPI 1   
SPIClass dmd_spi;

//Fire up the DMD library as dmd
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1

// ----- Select pins for P10 matrix connection ------------
// pins A, B, SCLK may be any digital I/O, pin nOE should be PWM pin as PB1,PA8


// --------------------------------------------------------

#define DMD_PIN_A 6
#define DMD_PIN_B 7
#define DMD_PIN_OE 9
#define DMD_PIN_SCLK 8
DMD dmd(DMD_PIN_A, DMD_PIN_B, DMD_PIN_OE, DMD_PIN_SCLK, DISPLAYS_ACROSS, DISPLAYS_DOWN, dmd_spi );


// --- Define fonts ----
// DMD.h old style font
DMD_Standard_Font UkrRusArial_F(UkrRusArial_14);

// GFX font with sepatate parts for Latin and Cyrillic chars
DMD_GFX_Font GlametrixL((uint8_t*)&GlametrixLight12pt7b,(uint8_t*)&GlametrixLight12pt8b_rus,0x80,13);
//DMD_GFX_Font GlametrixBold((uint8_t*)&GlametrixBold9pt7b,(uint8_t*)&GlametrixBold9pt8b_rus, 0x80, 11); 


/*--------------------------------------------------------------------------------------
  UTF8 char recoding
 
--------------------------------------------------------------------------------------*/
int utf8_rus(char* dest, const unsigned char* src) {
  
  uint8_t i, j;
  for ( i =0, j =0; src[i]; i++) {
   if ((src[i] == 0xD0 )&& src[i+1])  { dest[j++] = src[++i] - 0x10;}
    else if ((src[i] == 0xD1 )&& src[i+1]) {dest[j++] = src[++i] + 0x30;  }
    else dest[j++] = src[i];
  }
  dest[j] ='\0';
  return j;
}


/*--------------------------------------------------------------------------------------
  Interrupt handler for Timer1 (TimerOne) driven DMD refresh scanning, this gets
  called at the period set in Timer1.initialize();
--------------------------------------------------------------------------------------*/
void ScanDMD()
{ 
  dmd.scanDisplayBySPI();
}

/*--------------------------------------------------------------------------------------
  setup
  Called by the Arduino architecture before the main loop begins
--------------------------------------------------------------------------------------*/
void setup(void)
{  
   

   //initialize TimerOne's interrupt/CPU usage used to scan and refresh the display
   Timer1.initialize( 3000 );           //period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker.
   Timer1.attachInterrupt( ScanDMD );   //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI()
   
  //clear/init the DMD pixels held in RAM
   dmd.clearScreen( true );   //true is normal (all pixels off), false is negative (all pixels on)
   
}

/*--------------------------------------------------------------------------------------
  loop
  Arduino architecture main loop
--------------------------------------------------------------------------------------*/
void loop(void)
{
   
   const unsigned char m[] = "Привет Ардуино!";
   char k[30];
   dmd.selectFont(&UkrRusArial_F);
   const char *MSG = "DMD STM32";
   dmd.drawString(0, 0, MSG, strlen(MSG), GRAPHICS_NORMAL);
   delay(5000);
   dmd.clearScreen( true ); 
   dmd.selectFont(&GlametrixL);
   utf8_rus(k,m);
   dmd.drawMarquee(k,strlen(k),(32*DISPLAYS_ACROSS)-1,0,1);
   
   long prev_step =millis();
   
   while(1){
     if ((millis() - prev_step) > 30 ) {
       dmd.stepMarquee(-1,0,1);
       prev_step=millis();
      
     }
   }
}

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

 

b707
Offline
Зарегистрирован: 26.05.2017

Игорь, нашел ошибку в коде из прошлого сообщения, поправил. Если уже пробовали - перезалейте

Garik73
Offline
Зарегистрирован: 16.07.2019

Ну вот, совсем другое дело - работает! А то я уже и библу снес и заново установил - а проблема осталась. Спасибо вам. Респект и уважуха.

b707
Offline
Зарегистрирован: 26.05.2017

Garik73 пишет:

Ну вот, совсем другое дело - работает! А то я уже и библу снес и заново установил - а проблема осталась. Спасибо вам. Респект и уважуха.

да, сорри, за излишние хлопоты. Надо будет перезалить новую версию и исправленные примеры на гитхаб. а то уже сам путаюсь. что где исправить надо

Garik73
Offline
Зарегистрирован: 16.07.2019

 не стоит, гуру извиняться не должен...

b707
Offline
Зарегистрирован: 26.05.2017

Garik73 пишет:

 не стоит, гуру извиняться не должен...

я Вас чем-то обидел?

Кстати, либу на Гитхабе перезалил, будут замечания - пишите

Garik73
Offline
Зарегистрирован: 16.07.2019

Вовсе нет Дим. Наоборот помогли. Разбираюсь потихоньку с Ардуинкой по мере свободного времени. Одно из практических заданий - часы, ну или что-то вроде этого. Точность не велика т.к. не использую модуль часов реального времени, да и не нужно. Код кривой и не рациональный, но я же пока только учусь.  Зашел приятель, увидел и спросил нет ли возможности сделать счетчик затраченного времени.  Ввел тактовую кнопку. Пока нажата - счет времени идет, отпущена - стоит. Можно ли сделать так, чтобы при первом нажатии начинался отсчет, а при втором отсчет останавливался? 

[code]

#include <SPI.h>        
#include <DMD.h>        
#include <TimerOne.h>   
#include <SystemFont5x7.h>
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1

DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

unsigned int ui;

void ScanDMD()
{ 
  dmd.scanDisplayBySPI();
}

void ShowClockNumbers( unsigned int uiTime, byte bColonOn )
{
   dmd.clearScreen(true);
   dmd.drawChar(  1,  4, '0'+((uiTime%6000)/600), GRAPHICS_NORMAL );   // час.
   dmd.drawChar(  8,  4, '0'+((uiTime%600) /60),  GRAPHICS_NORMAL );   // дес.мин.
   dmd.drawChar( 19,  4, '0'+((uiTime%60)  /10),   GRAPHICS_NORMAL );   // мин.
   dmd.drawChar( 26,  4, '0'+ (uiTime%10),          GRAPHICS_NORMAL );   // сек.
      dmd.drawChar( 14,  4, ':', GRAPHICS_OR     );   // clock colon overlay on

}
void setup(void)
{
   
  
   Timer1.initialize( 500 );          
   Timer1.attachInterrupt( ScanDMD );   
   dmd.clearScreen( true );   
   dmd.selectFont (System5x7);

     ui = 0000;                    
   ShowClockNumbers( ui, true );  
   delay( 100 );                  

  
  pinMode(2, INPUT);         //  устанавливает режим работы - вход для 1го вход/выхода (pin)
 
 

}
void loop(void)
{
  if(digitalRead(2)==HIGH)//если кнопка нажата ..
   { ui = ui+1; // ход часов
   ShowClockNumbers( ui, true );
   delay(1000);
   }

}
[/code]

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Garik73 пишет:

 Можно ли сделать так, чтобы при первом нажатии начинался отсчет, а при втором отсчет останавливался? 

Можно, пока Клапа не запретил. 

b707
Offline
Зарегистрирован: 26.05.2017
#define KNOB_ON 1    // тип подключения кнопки, кнопка на плюс = 1, на GND - 0
bool prev_knob = ! (KNOB_ON);  // предыдущее состояние кнопки
bool cur_knob = ! (KNOB_ON);    //  текущее  --"--

cur_knob = digitalRead(pin);       // читаем кнопку
// если сейчас кнопка нажата а до того была отпущена
if ((cur_knob == KNOB_ON )  && (prev_knob != KNOB_ON)) {
//меняем состояние переключателя
tunbler = ! tunbler;
//типа антидребезг
delay(50);
}
// сохраняем значение кнопки
if (cur_knob != prev_knob)  prev_knob = cur_knob;

как то так

lean_74
Offline
Зарегистрирован: 22.12.2015

Какое максимальное количество панелей можно подключить к Меге? а к STM32? у кого есть опыт? 

FoxJone
Offline
Зарегистрирован: 19.04.2019

lean_74 пишет:

Какое максимальное количество панелей можно подключить к Меге? а к STM32? у кого есть опыт? 

Мега держит 100% 8 модулей, с легкой задержкой 10 модулей, 12 модулей отчетливо наблюдаются тормоза (текст загружается секунд 30-40). Совершенно столько же держала и мини про - частота то одинаковая.

ЕСПшка у меня держала 48 модулей без проблем.

До СТМки еще не добрался, но по идее тоже должна держать много, не меньше ЕСПшки.

lean_74
Offline
Зарегистрирован: 22.12.2015

FoxJone пишет:

ЕСПшка у меня держала 48 модулей без проблем.

библиотеку под esp допиливал? или "из коробки"? и под ЕСПшку библиотеку dmd2 использовал или dmd? 

FoxJone
Offline
Зарегистрирован: 19.04.2019

Нет, стандартная DMD2.

Единственно, что там не работает SoftDMD, надо использовать SPIDMD

FoxJone
Offline
Зарегистрирован: 19.04.2019

Да блин тупой движок... чего дублит то постоянно?

bwn
Offline
Зарегистрирован: 25.08.2014

FoxJone пишет:

Да блин тупой движок... чего дублит то постоянно?

Чем длиннее тема, тем сильнее тормоза. По "Сохранить", второй раз, щелкать не торопитесь.

1982rodman
Offline
Зарегистрирован: 05.01.2019

Здравствуйте! Кто-нибудь сталкивался с проблемой, что однотипные модули p10 разных производителей не корректно отображают при объединении их в один экран?

FoxJone
Offline
Зарегистрирован: 19.04.2019

1982rodman пишет:
Здравствуйте! Кто-нибудь сталкивался с проблемой, что однотипные модули p10 разных производителей не корректно отображают при объединении их в один экран?

Обычное дело. Разные типы сканирования.

Даже в монохроме это случается, хотя там в основном только инверсия, но встречались и модули с совсем оригинальным сканированием.

1982rodman
Offline
Зарегистрирован: 05.01.2019

А как можно это заранее определить? А не методом тыка

FoxJone
Offline
Зарегистрирован: 19.04.2019

1982rodman пишет:
А как можно это заранее определить? А не методом тыка

Теоретически уточнять заранее у производителя. Фактически только методом тыка.

А с какими модулями у вас проблема?

1982rodman
Offline
Зарегистрирован: 05.01.2019

Да они без названия, с разных магазинов заказаны

1982rodman
Offline
Зарегистрирован: 05.01.2019

Блин, шлейф с косяком оказался

b707
Offline
Зарегистрирован: 26.05.2017

Коллеги, благодаря поддержке lean_74 удалось существенно улучшить работу библиотеки DMD_STM32. Последняя версия при работе на дешевой плате blue pill STM32F103C8T6 использует для вывода на матрицы DMA в асинхронном (фоновом) режиме. Это снизило загрузку контроллера при работе с матрицами в десятки раз. Теоретически библиотека должна работать с 30-40 матрицами на канале, но чтобы проверить это практически - надо иметь много матриц.

Так что если кто-то захочет выcтупить в роли тестера и собрать большое панно на этой библиотеке - обращайтесь, помогу чем могу :)

Komandir
Offline
Зарегистрирован: 18.08.2018

хватит пить пенное пиво !!! "...большое пенно..."

FoxJone
Offline
Зарегистрирован: 19.04.2019

Моя хотеть тестировать! Благо разных матриц у меня как грязи.

b707
Offline
Зарегистрирован: 26.05.2017

FoxJone пишет:

Моя хотеть тестировать! Благо разных матриц у меня как грязи.

буду рад. Код на гитхабе, там есть примеры. Если будут вопросы - пишите в ветке библиотеки http://arduino.ru/forum/proekty/dmdstm32-versiya-biblioteki-dmd-dlya-stm32duino

Если хотите - можем перейти на общение в почте

b707
Offline
Зарегистрирован: 26.05.2017

народ, как дела, ни у кого больше не дошли руки потестировать библиотеку DMD_STM32 ? - lean74 запустил работу 42х матриц на одном канале. Судя по тестам, это явно не предел, хотелось бы попробовать подключить больше, если у кого есть много матриц....

кстати, связка STM32 + ESP-01 позволяет одновременно иметь кучу матриц и WI-Fi управление к ним

FoxJone
Offline
Зарегистрирован: 19.04.2019

Ой у меня руки никак не доходят, завал по проектам. Хотя лежат и STM-ка и ESP-шки.

На ESP только-только сдал 110 штук контроллеров управления климатом, с вебмордой и удаленным мониторингом.

На ДМД еще в сентябре сдал кучу табло в 1 модуль, управляемые по RS485, но до сих пор еще долизываю... Возникли проблемы с дальностью связи. Там данные приходят от древней железки по RS232, в специальной коробке (сделанной специально для моих табло) 232-й преобразуется в 485-й и USB. По USB подключается к компьютеру, по 485 уходят данные на табло (каждому табло свои). Так вот если длина кабеля 485 больше 15-20 метров, то сигнал терялся... Как выяснилось, виноваты не табло, а дешманский китайский преобразователь 232-485, который стоял в этой коробке. Пришлось в срочном порядке ваять собственный преобразователь на 128-й атмеге (там как раз 3 ком-порта). Тестировал на стандартной коробке с UTP (305 метров), сигнал нормальный. Вчера отправил заказчику, жду результатов.

По итогам решил, что неплохо бы разработать универсальный преобразователь 232-485-USB, работающий во все стороны, и настраиваемый на все возможные скорости и режимы. Тем более, большую часть уже сделал.... Вот думаю, будет ли спрос на такую штуку?

b707
Offline
Зарегистрирован: 26.05.2017

FoxJone - мне интересна эта тема, а раз вы этим занимаетесь профессионально -  хотел посоветоваться куда двигаться дальше. Добавлять в библиотеку другие типы матриц - двух- и полноцветные, с разным типом сканирования? Если да, то какие больше всего востребованы? Или дорабатывать более удобный механизм работы с кастомными шрифтами?

Или что-то еще подскажете

 

lean_74
Offline
Зарегистрирован: 22.12.2015

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

FoxJone
Offline
Зарегистрирован: 19.04.2019

Lean прав, двухцветные уже совсем не актуальны.

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

Возиться с фонтами смысла не вижу, лично я сделал себе комплект фонтов под разные размеры (16-32-48-96) и больше к ним не возвращался.

1982rodman
Offline
Зарегистрирован: 05.01.2019

Здравствуйте! Подскажите потянет ли ардуино уно или мега строку 8х2 модулей, т.е. 16 штук. Будет выводиться просто статичный текст. Хочу сделать для вывода названий команд к спортивному табло

b707
Offline
Зарегистрирован: 26.05.2017

1982rodman пишет:
Здравствуйте! Подскажите потянет ли ардуино уно или мега строку 8х2 модулей, т.е. 16 штук. Будет выводиться просто статичный текст. Хочу сделать для вывода названий команд к спортивному табло

см ответ чуть выше, в сообщении #475 этой ветки

1982rodman
Offline
Зарегистрирован: 05.01.2019

Спасибо. Видимо нужно переходить на есп или стм. Подскажите, что попроще после ардуины изучать?

b707
Offline
Зарегистрирован: 26.05.2017

1982rodman пишет:
Спасибо. Видимо нужно переходить на есп или стм. Подскажите, что попроще после ардуины изучать?

если вы остаетесь в рамках концепции ардуино - то есть не полезете в регистры и таймеры всякие - ничего дополнительно можно не изучать, отличия например между Ардуино Нано и СТМ32 минимальны

FoxJone
Offline
Зарегистрирован: 19.04.2019

1982rodman пишет:
Здравствуйте! Подскажите потянет ли ардуино уно или мега строку 8х2 модулей, т.е. 16 штук. Будет выводиться просто статичный текст. Хочу сделать для вывода названий команд к спортивному табло

Я бы не стал заморачиваться ардуиной для такой задачи. Купил бы самый дешевый китайский контроллер за 200-300 рублей и поставил бы. Это если совсем просто и дешево. А если делать красиво, то купил бы подороже (рублей 800-1000) с Ethernet портом и написал бы программу на комп для изменения текста (или использовал штатное ПО, но это не так красиво).

У меня на это ушел бы один вечер (только вывод команд). А тут нужна ардуина + канал связи какой то (485 дешевле, Ethernet дороже но красивее) + ПО на компьютер опять же для ввода названий команд...

Я делал вот так:

b707
Offline
Зарегистрирован: 26.05.2017

FoxJone, добрый день

Получил с Али полноцветные матрицы P10 RGB с 1/8 сканированием

ССылка : https://ru.aliexpress.com/item/1646447634.html

Работали с подобными? - может подскажете, какая из библиотек такие понимает - так сказать, для облегчения старта :)