DMD_STM32 - библиотека DMD матриц для СТМ32 и RP2040

Сложно переключить? Если да - можно попробовать задействовать Таймер2, у него один выход как раз на PA0…
Но проще пин

Да переключил на PA6
Всё ок…Отмучались… :star_struck:

1 лайк

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

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

Нет спасибо, я Это делал для Вас,
В Stm32CubeIde я уже всё сделал, что мне нужно 7 цветов, буквы выводятся пока без Шим, но мне не особо надо…

1 лайк

Спасибо.

Добрый день. Помогите с панелью.
Сканирование S2.


DMD_RGB <RGB32x16_S2, COLOR_4BITS>
какой информации добавить, что сфотографировать.




Есть еще вот такая панель. Даташита нетю, Р10.ру контора (нехороших человеков). Но деньги потрачены и надо как то их отбить…

Добрый день
По первой панели - Вам нужно запустить пример dmd_rgb_pattern_test.ino, выбрав в нем тип матрицы RGB32x16plainS2_DIRECT, снять на видео процесс заполнения панели точками и выложить куда-то в сеть.

Вторая панель сложная, сомневаюсь что у меня получится запустить ее удаленно. Давайте сначала с первой разберемся.

спасибо.
Что-то не так…
А можно тоже самое, но тип матрицы RGB32x16plainS2 ?

Закончилось количество ответов)
К сожалению сейчас одна осталась, наверное не стоит сейчас заморачиваться, новая партия может приехать вообще не такой, до конца недели пойму какие приедут. Спасибо. По панелям 2.5 мм напишите мне в телеграмм @Hiderstv есть о чем поговорить).

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

Хм… спьяну ее китайцы собирали, что ли? :slight_smile: Первый раз такое вижу, чтобы в первой, второй и четвертой четверти было одно соединение, а в третьей - другое…

У вас одна такая матрица или их много? Если несколько, снимите, если не сложно, другую такую же…

Раз вы пока больше не картинок не присылаете, попробуем с этой матрицей

Добавьте в начало скетча сразу после строки

#include "DMD_RGB.h"

такой кусок:

#define RGB32x16_S2_OKSingra		1,32,16,2,55	// 32x16 1/2 

template<int COL_DEPTH>
class DMD_RGB<RGB32x16_S2_OKSingra, COL_DEPTH> : public DMD_RGB_BASE2<COL_DEPTH>
{
public:
	DMD_RGB(uint8_t* mux_list, byte _pin_nOE, byte _pin_SCLK, uint8_t* pinlist,
		byte panelsWide, byte panelsHigh, bool d_buf = false) :
		DMD_RGB_BASE2<COL_DEPTH>(1, mux_list, _pin_nOE, _pin_SCLK, pinlist,
			panelsWide, panelsHigh, d_buf, COL_DEPTH, 2, 32, 16)
	{
		this->fast_Hbyte = false;
		this->use_shift = false;
	}
	// Fast text shift is disabled for complex patterns, so we don't need the method
	void disableFastTextShift(bool shift) override {}

protected:
	uint16_t get_base_addr(int16_t x, int16_t y) override {
		this->transform_XY(x, y);
		uint8_t pol_y = y % this->pol_displ;
		x += (y / this->DMD_PIXELS_DOWN) * this->WIDTH;

		static const uint8_t A_tbl[8] = { 0,1,0,1,0,1,0,1 };
		static const uint8_t B_tbl[8] = { 3,3,2,2,1,1,0,0 };
		static const uint8_t C_tbl[16] = { 0,4,10,12,
								           1,5,11,13,
								           2,6,8,14,
								           3,7,9,15 };
		static const uint8_t Pan_Okt_cnt = this->DMD_PIXELS_ACROSS / 8;
		uint8_t Oktet_m = B_tbl[pol_y] * Pan_Okt_cnt + (x / 8) % Pan_Okt_cnt;

		uint16_t base_addr = this->x_len * A_tbl[pol_y] + (x / this->DMD_PIXELS_ACROSS) * this->DMD_PIXELS_ACROSS * this->multiplex + C_tbl[Oktet_m] * 8;
		if (!(B_tbl[pol_y] % 2)) { base_addr += (7 - x % 8); }
		else base_addr += x % 8;
		
		return base_addr;
	}

};

при инициализации класса DMD_RGB тоже используйте тип матрицы RGB32x16_S2_OKSingra

@OKSingra ау, получилось что-нибудь?

Закончились ответы

Свяжитесь со мной в telegram @Hiderstv

Такая же панель только свежее версии



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

Код попробуйте такой:

#define RGB32x16_S2_OKSingra		1,32,16,2,55	// 32x16 1/2 

template<int COL_DEPTH>
class DMD_RGB<RGB32x16_S2_OKSingra, COL_DEPTH> : public DMD_RGB_BASE2<COL_DEPTH>
{
public:
	DMD_RGB(uint8_t* mux_list, byte _pin_nOE, byte _pin_SCLK, uint8_t* pinlist,
		byte panelsWide, byte panelsHigh, bool d_buf = false) :
		DMD_RGB_BASE2<COL_DEPTH>(1, mux_list, _pin_nOE, _pin_SCLK, pinlist,
			panelsWide, panelsHigh, d_buf, COL_DEPTH, 2, 32, 16)
	{
		this->fast_Hbyte = false;
		this->use_shift = false;
	}
	// Fast text shift is disabled for complex patterns, so we don't need the method
	void disableFastTextShift(bool shift) override {}

protected:
	uint16_t get_base_addr(int16_t x, int16_t y) override {
		this->transform_XY(x, y);
		uint8_t pol_y = y % this->pol_displ;
		x += (y / this->DMD_PIXELS_DOWN) * this->WIDTH;

		static const uint8_t A_tbl[8] = { 0,1,0,1,0,1,0,1 };
		static const uint8_t B_tbl[8] = { 3,3,2,2,1,1,0,0 };
		static const uint8_t C_tbl[16] = { 0,4,10,12,
								           1,5,11,13,
								           2,6,8,14,
								           3,7,9,15 };
		static const uint8_t Pan_Okt_cnt = this->DMD_PIXELS_ACROSS / 8;
		uint8_t Oktet_m = B_tbl[pol_y] * Pan_Okt_cnt + (x / 8) % Pan_Okt_cnt;

		uint16_t base_addr = this->x_len * A_tbl[pol_y] + (x / this->DMD_PIXELS_ACROSS) * this->DMD_PIXELS_ACROSS * this->multiplex + C_tbl[Oktet_m] * 8;
		if ((B_tbl[pol_y] % 2)) { base_addr += (7 - x % 8); }
		else base_addr += x % 8;
		
		return base_addr;
	}

};

По красному идет засвет верха панели.

Можете в примере dmd_rgb_pattern_test.ino поставить в setup() красный цвет :

fg = dmd.Color888(255, 0, 0);

и посмотреть как заполнение пойдет?

ИМХО - это железячная проблема…