DMD_STM32 - версия библиотеки DMD для СТМ32Дуино

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

FoxJone пишет:

Да это не рисовал, просто разъемов накидал на плату без дорог...

Но в принципе за час разведу - там ничего нету кроме разъемов и дорог.

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

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

уря, пршлогодний код для RGB 64x32 запустил. Панель 80x40 имеет ровно такую же разводку, как 64х32, только линий сканирования больше.  Поправил в коде 16 сканов на 20 - заработала и 80х40

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

ProTim
Offline
Зарегистрирован: 26.04.2021

b707 Добрый вечер. Повторяю ваш пример с UARTTransfer из 207 поста. Вывожу статичный текст- для теста две разные строки каждую секунду. Всё работает и выводится чуть больше минуты, потом зависает. После ресета Стм32 тоже минуту работает. Отправляет Уно, монитор порта показывает, что отправка произходит. В этом деле новичок, не могу найти причину.

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

  dmd_uart_dispkay

  DMD_STM32 example code for STM32F103xxx board
  ------------------------------------------------------------------------------------- */

/*--------------------------------------------------------------------------------------
  Includes
  --------------------------------------------------------------------------------------*/
#include <DMD_STM32.h>
#include "FreeSansBold12pt7b.h"
#include "UARTTransfer.h"

//Fire up the DMD library as dmd
// Number of DMD matrices
#define DISPLAYS_ACROSS 3
#define DISPLAYS_DOWN 2

// ----- 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

// SPI specific pins as CLK and R_DATA has predefined values:
//   for SPI(1) CLK = PA5  R_DATA = PA7
//   for SPI(2) CLK = PB13  R_DATA = PB15
// --------------------------------------------------------

// We'll use SPI 1

SPIClass dmd_spi(1);

#define DMD_PIN_A PB11
#define DMD_PIN_B PB10
#define DMD_PIN_nOE PB1
#define DMD_PIN_SCLK PB0
DMD dmd(DMD_PIN_A, DMD_PIN_B, DMD_PIN_nOE, DMD_PIN_SCLK, DISPLAYS_ACROSS, DISPLAYS_DOWN, dmd_spi );


// --- Define fonts ----

DMD_GFX_Font FreeSansBold12((uint8_t*)&FreeSansBold12pt7b, 24);



// library for Serial transfer
UARTTransfer UT;

// ID for serial messages
#define STRING 66


void setup(void)
{ Serial2.begin(19200);
  UT.begin(&Serial2);
  dmd.init(700);
  dmd.clearScreen( true );   //true is normal (all pixels off), false is negative (all pixels on)
  // set matrix brightness (0-255)
  dmd.setBrightness(50);
  dmd.selectFont(&FreeSansBold12);
 }
void loop(void)
{
  // if new string received
  if (UT.receiveData()) {
    char tt[25];
    uint8_t m_id = UT.getMessageID();
    if ((m_id == STRING) && (UT.getDataLength() > 3 )) {
      UT.getData((uint8_t*)&tt, UT.getDataLength());
      dmd.clearScreen( true );
      dmd.drawString(0, 0, tt, strlen(tt), GRAPHICS_NORMAL );
    }
    UT.clearMessage();
  }
}
// library for Serial transfer
#include "UARTTransfer.h"
UARTTransfer UT; 

// ID for serial messages
#define STRING 66
void setup() {
  // put your setup code here, to run once:
 Serial.begin(19200);
 UT.begin(&Serial);
// const unsigned char msg[] = "Hello world!";
//  UT.sendData(STRING, sizeof(msg), (uint8_t*) msg);
 //delay(15000);

}

void loop() {
  // put your main code here, to run repeatedly:
unsigned char  msg1[] = " 2 Laps";
  UT.sendData(STRING, sizeof(msg1), (uint8_t*) msg1);
   delay(1000);
  unsigned char msg2[] =  "00:00:00";
  UT.sendData(STRING, sizeof(msg2), (uint8_t*) msg2);
   delay(1000);
}

 

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

пока не могу сказать, в коде вроде ошибок нет.

Попробуйте увеличить интервал посылки данных (просто для теста) - изменится время до зависания или нет?

ProTim
Offline
Зарегистрирован: 26.04.2021

Поменял на 2000 - 18 циклов, 5000 - 10 циклов. Немного дольше, но тоже самое. При перезагрузке Уно пару раз срабатывает . После зависания тоже редко несколько раз срабатывает 

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

версия библиотеки - с гитхаба?

Какая версия аддона СТМ32?

 

Попробую на выходных воспроизвести вашу проблему.

ProTim
Offline
Зарегистрирован: 26.04.2021

DMD с гитхаба, если неошибаюсь, 0.4.2

ArduinoIDE - SMT32duino, прошиваю ST-link

Плата STM как у вас на часах с дополнительными гнездами

ProTim
Offline
Зарегистрирован: 26.04.2021

Собрал на Уно часы, посылаю каждую секунду. На СТМ в лооп добавил deley (100), теперь  показывает и после минуты, но много пропусков. В библиотеку поставил принт.

boolean UARTTransfer::receiveData() {
	uint8_t mess_len = 0;
	uint8_t in_char;

	if (rx_stage > 5) return false;
 
	if ((rx_stage) && ((millis() - rx_time) > rx_timeout)) {
       Serial1.println(rx_stage);
		clearMessage();

Нашёл возможную причину, переменная rx_stage при пропуске отличается от нуля . Не понимаю причину, после приёма она же обнуляется. 

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

ProTim пишет:

Нашёл возможную причину, переменная rx_stage при пропуске отличается от нуля . Не понимаю причину, после приёма она же обнуляется. 

это не причина, это следствие. Насколько я помню эту библиотеку, когда сообщение принимается частично, эта переменная остается отличной от нуля.

Судя по происходящему, у вас проблемы с приемом. Но не вполне понимаю, почему. 6 матриц такой нагрузки давать не должны, это совсем немного. Приведенный Вами код - это все? или в программе есть что-то еще?

 

 

ProTim
Offline
Зарегистрирован: 26.04.2021

На принимающеи стороне это всё. Ещё обнаружил,что переменная rx_time с каждым приёмом некапливается до примерно 60 000 , потом резко падает до 600 и опять растёт. Но это несовпадает с пропусками. Возможно так и должно быть.

ProTim
Offline
Зарегистрирован: 26.04.2021

Передаётся всё коректно, как мне посмотреть, что приходит, можно както переправить все с Serial2 на Serial1?

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

ProTim пишет:

Передаётся всё коректно, как мне посмотреть, что приходит, можно както переправить все с Serial2 на Serial1?

Serila.print() ?

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

ProTim
Offline
Зарегистрирован: 26.04.2021

Вывел на монитор переменную in_char, в принципе принятая строка с буфера. Вот что получилось, мои добавления st(rx_stage)и значение и С (clear message)

183 - header 1, 7- header 2, 51-header 3, 66- STRING, 10- ?, дальше время hh:mm:ss, cs 

18375166104848584953585253012C
183751661048st5C
4818375166104848584953585255014C
1837st2C
511837516610484858495358525700C
1837516610484858495358534808C
183751st3C
6618375166104848584953585350010C
18375166104848584953585351011C
183751661048st5C
4818375166104848584953585353013C
1837st2C
5118375166104848584953585355015C
1837516610484858495358535600C
183751661048st5C
4818375166104848584954584848014C
1837st2C
5118375166104848584954584850012C
18375166104848584954584851013C
1837st2C
5118375166104848584954584853011C
1837516610484858495458485408C
183751661048st5C
481837516610484858495458485606C
1837st2C
5118375166104848584954584948015C
18375166104848584954584949014C
183751661048st5C
4818375166104848584954584951012C
18375166104848584954584952011C
18375166104848584954584953010C
1837516610484858495458495409C

 

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

Наконец запустил Ваш пример. Вроде нашел ошибку, в файле UARTTransfer.h тип переменной rx_time поменяйте на uint32_t.

После этого у меня уже 10 минут не виснет, а исходный вариант вис через минуту.

Все остальные изменения (задержки и прочее) - не нужны, можете убрать.

 

Добавка - мигало 35 минут, так и не зависло. Дальше выключил.

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

 

ProTim
Offline
Зарегистрирован: 26.04.2021

Спасибо, всё работает уже 3 часа, ни одного пропуска. Пустил даже через RS 485 и 30 метров кабеля - всё чётко. Работает даже Ваша регулировка яркости из часов, на приём и отображение не влияет.

Вопрос. Если я данные буду брать прямо из ПК через RS 485 флешку, как прицепить эту библиотеку, или как сформировать строку с подщетом cs?

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

ProTim пишет:

Вопрос. Если я данные буду брать прямо из ПК через RS 485 флешку, как прицепить эту библиотеку, или как сформировать строку с подщетом cs?

надо больше подробностей, какой протокол у вас бегает по 485

ProTim
Offline
Зарегистрирован: 26.04.2021

Сейчас изпользую две платки TTL - RS485, хочу с ПК без Уно такой

  • Кабель USB-RS485-это usb-кабель RS485 с последовательным преобразователем UART, включающий FTDI FT232R USB в последовательный UART ИНТЕРФЕЙС IC, который обрабатывает все сигналы и протоколы USB.

 

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

это вы мне железо показываете. А я вас спросил про протокол.

Какая программа и в каком виде будет данные по этому кабелю посылать?

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

Обновление  - новый релиз v0.5.0 (для СТМ32)

Выложил на гитхаб новый релиз. По сути это на 70% новая библиотека, поэтому завел на гитхабе новую ветку (branch) и изменил название базового класса с DMD_STM32 на DMD_STM32a.

Основные изменения:

- Главное - добавлена поддержка многоцветных RGB панелей.
- графическая система библиотеки теперь наследуется от известной либы Adafruit GFX, что позволяет использовать большое число встроенных в эту либу функций.
- добавлена двойная буферизация, что уменьшает мерцание на быстроменяющихся картинках, а так же позволяет проворачивать кое-какие визуальные эффекты.
- для монохромных матриц введен новый "параллельный" тип подключения, когда каждый горизонтальный ряд матриц подключается к своему отдельному DATA пину, позволяя выводить изображение на все ряды одновременно. Имеет смысл на больших многорядных панелях.
- сильно переписан код, библиотека получила модульную структуру с одним базовым классом и кучей дочерних для разных типов матриц.

Пока поддерживаются следующие типы RGB матриц: 32x16 8scan, 64x32 16 scan, 80x40 20scan и 64x64 32scan. В ближайшее время добавятся еще два или три типа с 2s и 4s. Дальнейшее расширение парка поддерживаемых матриц зависит от спроса и наличия у меня таковых матриц для тестов.

Документация по новой версии пока полностью отсутствует. Пины для подключения описаны в примерах. По остальному спрашивайте.

Новая версия лежит на гитхабе в отдельной ветке. Чтобы скачать код, необходимо выбрать ветку dev-V2 в выпадающем списке выше слева над списком файлов или воспользоваться прямой ссылкой: https://github.com/board707/DMD_STM32/tree/dev-V2 Стабильная версия 0.4.2 остается доступна как основная ветвь "master".

Важное замечание -  для работы требуется библиотека Adafruit-GFX версии 1.7.х или старше (то есть 1.6, 1.5 и тд). Более новые версии Adafruit-GFX пока не поддерживаются.

Поскольку базовые классы новой и старой версии называется немного по разному (DMD_STM32 и DMD_STM32a), обе ветки можно устанавливать в Ардуино ИДЕ одновременно, не опасаясь конфликтов.

 

Отдельное спасибо FoxJone за предоставленные для тестов матрицы.

Antsanv
Offline
Зарегистрирован: 18.12.2018
Пытаюсь запустить тестовый пример на PlatformIO с флагом
ib_ldf_mode = deep+
и 
lib_deps =              adafruit/Adafruit GFX Library @ ^1.10.7
Получаю ошибку
.pio\libdeps\genericSTM32F103C8\Adafruit GFX Library\Adafruit_GrayOLED.h:30:10: fatal error: Adafruit_I2CDevice.h: No such file or directory
 
Добавляю библиотеку adafruit/Adafruit BusIO @ ^1.7.3
Ошибка
.pio\libdeps\genericSTM32F103C8\Adafruit BusIO/Adafruit_I2CDevice.h:1:10: fatal error: Wire.h: No such file or directory
 
Явно указываю 
#include <Wire.h>
 
и пошли ошибки несоответсвия типов
.pio\libdeps\genericSTM32F103C8\Adafruit BusIO\Adafruit_I2CDevice.cpp:88:47: error: invalid conversion from 'const uint8_t* {aka const unsigned char*}' to 'uint8* {aka unsigned char*}' [-fpermissive]
и
.pio\libdeps\genericSTM32F103C8\Adafruit BusIO\Adafruit_SPIDevice.cpp:133:31: error: no matching function for call to 'SPIClass::transfer(uint8_t*&, size_t&)'
 
Понимаю что можно поправить в библиотеках, но это как-то неправильно будет.
Знаю что Вы с PlatformIO не работаете, но может подскажите где правильно копать?
 
b707
Offline
Зарегистрирован: 26.05.2017

Попробовал - и правда с последними версиями Adafruit-GTX не собирается. Они там начиная с 1.8.х поменяли структуру библиотеки. Скачал версию 1.7.0 - с ней все нормально. Попробуйте пока с ней, а я может потом разберусь, как с новыми версиями запустить

Версию 1.7.0 можно скачать с гитхаба Адафруита: https://github.com/adafruit/Adafruit-GFX-Library/releases/tag/1.7.0

Библиотека Adafruit BusIO тогда не нужна.

 

Antsanv
Offline
Зарегистрирован: 18.12.2018

Спасибо, попробую.

(в PlatformIO удобно что можно версию в ini файле указать)

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

FoxJone пишет:

понял, чего не хватает в библиотеке!

Не хватает метода вывода картинки из байтового массива! То есть я в курсе, что в библиотеке все делается через дравпиксель и можно сделать самому... Но было бы круто иметь готовый метод drawimage, где на входе координаты и байтовый массив.

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

можно монохром, можно цвет:

void drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w,
                  int16_t h, uint16_t color);

void drawRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[], int16_t w,
                     int16_t h);

 

Результат вывода  drawRGBBitmap в разрешении 32х32

В таком разрешении, конечно, зернисто, но картинка вполне узнаваема :)

Antsanv
Offline
Зарегистрирован: 18.12.2018

Собирается с Adafruit-GTX 1.7.5, с 1.8 уже ошибки.

Antsanv
Offline
Зарегистрирован: 18.12.2018

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

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

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

Antsanv пишет:

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

на картинке плохо видно номера пинов, но вроде так. Кстати. практичка не очень подтверждает необходимость резисторов R1 R2 - я в начале их ставил, а потом перестал - разницы не вижу. Если ставить, то 3к маловато, лучше 6.8 - 10К

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

да, схема правильная.

При таком подключении резисторы включены параллельнj  и мое замечание в предыдущем сообщении тем более актуально.  Достаточно одного резистора на все каналы.

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

Вам то хорошо, есть время поиграться...

Кстати, вот этот шунтирующий резистор для меня новость. Он откуда взялся и вообще зачем нужен? То есть я примерно представляю (вот теперь, когда увидел его), но хотелось бы точную версию услышать.

Antsanv
Offline
Зарегистрирован: 18.12.2018

Да, забыл убрать резисторы.

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

FoxJone пишет:

Вам то хорошо, есть время поиграться...

Евгений, Вы как-то слишком мрачно настроены :) Я по Вашему заказы битмапы добавил :), видели?

Цитата:
Кстати, вот этот шунтирующий резистор для меня новость. Он откуда взялся и вообще зачем нужен? То есть я примерно представляю (вот теперь, когда увидел его), но хотелось бы точную версию услышать.

Я тоже представляю только примерно. Уже не помню, в каком из DMD проектов на гите есть такая рекомендация. Как я уже писал выше - в принципе отлично работает и без него. Я этот резистор не ставлю.

Antsanv
Offline
Зарегистрирован: 18.12.2018

Подскажите плз по соединению с RGB.
У Вас в скетче
#define DMD_PIN_SCLK PB7
Это на других обозначениях LAT (STB) (14 пин)?

#define DMD_PIN_A PB6
#define DMD_PIN_B PB5
#define DMD_PIN_C PB4
#define DMD_PIN_D PB3
#define DMD_PIN_E PB9
С A-D понятно, а E какой пин?
 
R0, G0, B0, R1, G1, B1
это в некоторых обозначениях R1, G2, B1, R2, G2, B2?
b707
Offline
Зарегистрирован: 26.05.2017

Antsanv пишет:

Подскажите плз по соединению с RGB.
У Вас в скетче
#define DMD_PIN_SCLK PB7
Это на других обозначениях LAT (STB) (14 пин)?

да, это то же самое что LAT, обозначение осталось от монохромных матриц.

Цитата:

#define DMD_PIN_A PB6
#define DMD_PIN_B PB5
#define DMD_PIN_C PB4
#define DMD_PIN_D PB3
#define DMD_PIN_E PB9
С A-D понятно, а E какой пин?

пин Е есть только на матрицах высотой более 32 пикселей (например 80х40 или 64х64). Вообще, в зависимости от типа матрицы у вас может быть от двух (А и В) до пяти (А - Е) микшерных пинов. Значения тех пинов. что у вас нет - можете ставить любые, они не используются, библиотека их не инициализирует и ничего в них не пишет.
В примере обозначены все пины вплоть до Е, чтобы один и тот же пример подходил на любые поддерживаемые матрицы.
 
Цитата:
R0, G0, B0, R1, G1, B1
это в некоторых обозначениях R1, G2, B1, R2, G2, B2?

да, это цветовые каналы

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

шкала из соседней ветки :) 4 матрицы 64х32, один бит на цвет, подключение зигзагом с поворотом на 180 градусов (поворот, потому что положил на диван вверх ногами и вертеть 4 матрицы с проводами было сложно :)

Antsanv
Offline
Зарегистрирован: 18.12.2018

Пытаюсь запустить параллельное соединение.

#define DMD_PARA
/*--------------------------------------------------------------------------------------
  Includes
--------------------------------------------------------------------------------------*/
#if defined(DMD_PARA)
#include "DMD_Monochrome_Parallel.h"
#else
#include "DMD_MonoChrome_SPI.h"
#endif

// Fonts includes
#include "st_fonts/UkrRusArial14.h";
#pragma GCC diagnostic ignored "-Wnarrowing"
#pragma GCC diagnostic ignored "-Woverflow"
#include "gfx_fonts/GlametrixLight12pt7b.h"
#include "gfx_fonts/GlametrixBold12pt7b.h"
#pragma GCC diagnostic warning "-Wnarrowing"
#pragma GCC diagnostic warning "-Woverflow" 
#include "my_fonts/FranklinGotMC18.h" //'°C' & (#38 symbol); ° ~ (#126 symbol) 'mm Hg' symbol '}' #125

//Number of panels in x and y axis
#define DISPLAYS_ACROSS 3
#define DISPLAYS_DOWN 2

// Enable of output buffering
// if true, changes only outputs to matrix after
// swapBuffers(true) command
// If dual buffer not enabled, all output draw at matrix directly
// and swapBuffers(true) cimmand do nothing
#define ENABLE_DUAL_BUFFER true

// ----- Select pins for P10 matrix connection ------------
// pins A, B, SCLK may be any digital I/O, pin nOE should be Timer3 PWM pin as PB0,PB1
// if connect as SPI, do not use corresponding MiSO pin - PA6 for SPI1 and PB14 for SPI2
#if defined(DMD_PARA)
#define DMD_PIN_A PA1
#define DMD_PIN_B PA4
#define DMD_PIN_nOE PB1
#define DMD_PIN_SCLK PA15
#else
#define DMD_PIN_A PB11 
#define DMD_PIN_B PB12 
#define DMD_PIN_nOE PB1
#define DMD_PIN_SCLK PB10
#endif


// pins for SPI connect
// SPI specific pins as CLK and R_DATA has predefined values:
//   for SPI(1) CLK = PA5  R_DATA = PA7
//   for SPI(2) CLK = PB13  R_DATA = PB15
// --------------------------------------------------------

//=== Config for Parallel connect ====
#if defined(DMD_PARA)
//pins for rows at x axis
// example for two rows
// all those pins must be selected from same port!
uint8_t pins[] = { PA5, PA7, PA8 };  // CLK , row1, row 2

//Fire up the DMD object as dmd
DMD_Monochrome_Parallel dmd(DMD_PIN_A, DMD_PIN_B, DMD_PIN_nOE, DMD_PIN_SCLK, pins, DISPLAYS_ACROSS, DISPLAYS_DOWN,ENABLE_DUAL_BUFFER);
#else

//=== Config for SPI connect ====
SPIClass dmd_spi(1);
DMD_MonoChrome_SPI dmd(DMD_PIN_A, DMD_PIN_B, DMD_PIN_nOE, DMD_PIN_SCLK, DISPLAYS_ACROSS, DISPLAYS_DOWN, dmd_spi, ENABLE_DUAL_BUFFER);
#endif

// --- 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 fontMiddle((uint8_t*)&FranklinGothicMediumCond18pt7b,(uint8_t*)&FranklinGothicMediumCond18pt8b_rus, 0x80, 22);

 

 

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

Antsanv, добрый день!

если вопрос еще актуален - пишите мне в почту

Antsanv
Offline
Зарегистрирован: 18.12.2018

Здравствуйте.

Актуален. Напомните плиз первую строку адреса.

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

нашли причины бага, указанного в #335

Для монохрома при параллельном соединении панелей пины CLK и пины R-DATA всех рядов должны располагаться на одном порту МК в его младшем байте, то есть выбираться из диапазонов A0-A7 или B0-B7. А я сам в примере указал пины  А5 А6 _А8_ - поэтому и не работало. Пример в библиотеке поправил.

Чтобы снять это ограничение и заработал весь порт целиком - надо поменять тип элементов массива буфера с uint8 на uint16 - что приведет к увеличению расхода памяти в два раза и будет неэффективно для матриц менее чем 7 строк по горизонтали.

Поэтому пока осталяю так, На сегодня максимальное число горизонтальных строк матриц при таком подключении составляет 7.    Кому 7 строк мало - пишите отдельно.

 

 

 

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

   Обновление - версия v0.6.3

  https://github.com/board707/DMD_STM32/tree/v0.6.3

   Изменния:

   - добавил поддержку однобитного цвета для RGB панелей. Режим предназначен для табло и вывесок, где не нужно сложных цветов и достаточно 2-3 основных цвета. Занимает меньше места в памяти и работает быстрее. Управление яркостью в этом режиме сделано аналогично монохромным панелям - ШИМ-ом на пин ОЕ. Соответственно к выбору пина применяются те же требования - то есть для ОЕ нужно использовать PWM пин Таймера3. Подробнее см. пример dmd_rgb

 - серьезно переписан вывод текста и функции бегущей строки. Скорость вывода фонтов увеличилась в 6-10 раз по сравнению с версией 0.5.1. Относится ко всем типам матриц, но особенно должно быть заметно на RGB.

 - добавлена поддержка соединения панелей зигзагом

 - куча мелких исправлений

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

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

Antsanv
Offline
Зарегистрирован: 18.12.2018

Стартовое табло для гоночных лодок. Три панели вертикально.

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

Antsanv пишет:

Стартовое табло для гоночных лодок.

круто :)

Antsanv
Offline
Зарегистрирован: 18.12.2018

b707 пишет:

   Обновление - версия v0.6.3

  https://github.com/board707/DMD_STM32/tree/v0.6.3

   

Эта версия тоже работает только с 
Adafruit GFX Library @ 1.7.5
?

На 10-й выдает ошибку

libdeps\genericSTM32F103C8\Adafruit GFX Library\Adafruit_GrayOLED.h:30:10: fatal error: Adafruit_I2CDevice.h: No such file or directory

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

Antsanv пишет:

Эта версия тоже работает только с 
Adafruit GFX Library @ 1.7.5?

да

sansanich
Offline
Зарегистрирован: 12.04.2018

Отличная библиотека! столько возможностей, подумываю попробовать стм32 ради неё. 

Сейчас делаю проект на 8266 DMD2, всё получается, но вот потребовалось подключить СД карту и встал вопрос. SPI занят, а со вторым я так и не понял, в общем стал смотреть на esp32 а затем и сюда попал ))

Спасибо автору за труд!

Анатолий89
Offline
Зарегистрирован: 16.03.2021

B707,я вам вопрос задавал здесь http://arduino.ru/forum/proekty/imitatsiya-razlichnykh-shkal-na-displee-12864?page=6#comment-615567

ответ будет?

sansanich
Offline
Зарегистрирован: 12.04.2018

если можно я тоже вопрос задам - смогу ли я на СТМ32 подключить при работающей DMD2 модуль GPS по уарту и SD карту для файла конфигурации (считывается при загрузке передавая значения в переменные)?

Я сделал на ESP8266 свой проект, он определяет координаты и по уарту передаёт в еоп и тот исходя из заложенной программы -  воспроизводит,  значения вводим через веб интерфейс (файловая система, редактор, есть урок на эту тему в сети на основе примеров библиотек 8266) в контроллер (но одновременной работы DMD2 бегин и вай фай я не смог добиться и сделал в сетапе по кнопке или то или это), но мне показалось что перспективнее ваша библиотека, она живая(развивается активнее. универсалььнее) думаю что смогу перестроится на стм 32 (даже платки есть в шкафу, на всякий брал, простые и дискавери) но мне хотелось бы обойтись одним МК и чтоб пригодилось не раз ))

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

sansanich ESP8266 не работает с ДМД и вайфаем одновременно - проверено уже неоднократно.

С другой стороны у меня СТМ (а до этого атмеги) прекрасно работает с ДМД + RS485 (который подключен как раз через уарт). Так что не вижу никаких проблем для работы любого оборудования через уарт.

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

Анатолий89 пишет:

B707,я вам вопрос задавал здесь http://arduino.ru/forum/proekty/imitatsiya-razlichnykh-shkal-na-displee-12864?page=6#comment-615567

ответ будет?


уточните, что за вопрос? - а то там уже много понаписали. Если про русские фонты - то вроде ответил. Если про размер фонта - то был неправ, обсчитался.
Еще что-то?

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

Сегодня часа два пытался запустить две независимые марикуе (бегущие строки) на одном экране. В принципе дошел до того момента, где Дмитрий попиксельно сдвигает миррор экрана и понял что этот мирор надо делить на области и сдвигать независимо. Так стало лениво, что плюнул и сделал простым дравстрингом со смещением (да, знаю что низкий класс - но лень).

Если вдруг кто то сделал две бегучки на одном экране, поделитесь?

 

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

Евгений, параметр

bool use_shift = true;

базового класса DMD отвечает за перемещение бегущей строки сдвигом всего экрана (true) или перерисовкой строки заново если false

Опишите его как public и тогда сможете прямо в коде вызывать dmd.use_shift = false;

и отключать этот режим.