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

Адресация может быть сделана через сдвиговый регистр.
Посмотрите в библиотеке - самый последний шаблон в файле RGB.h описывает матрицу как раз с такой адресацией.
Но тогда все равно надо три линии управления - клок, дата и латч.

Мало что понял, мне б алгоритм на пальцах , что подавать на А В С D

Сейчас у меня такие симптомы, если писать в строки 0, 2, 4, 6, 8 каким то цветом ,то заполняются все строки но по две одним цветом. если писать в 1, 3, 5, 7, 9 другим цветом то заменится то что записано ранее.Вобщем строки пишутся по две с одинаковыми адресами
0,1 2,3 4,5 и т.д.

Может это не скан 1/10, а 1/20 ? Тогда надо еще линию Е задействовать.

А что касается управлением через регистр - принцип простой. Стоит сдвиговый с числом выходов по числу строчек, каждый выход включает свою строку. Если ваша матрица 1/10 - значит регистр с 10 линиями. Чтобы включить, например, пятую линию - надо в регистр задвинуть одинарный бит, сдвинутый на 5 позиций влево, то есть число 32 = 0b00100000
Управление как любым другим сдвиговым регистром - защелку подняли, подали на вход сигнал, подали тактовый импульс…

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

По поводу скана 1/20 не думаю, если пишу только R1G1B1 то работаю как раз с половиной матрицы, если добавляю R2G2B2 то подключается вторая нижняя половина…

теми же A B C D E

это ни о чем не говорит, абсолютно у всех матриц с любыми типами скана R1G1B1 управляет одной половиной матрицы, а R2G2B2 другой

А , B, C, D
А какой из них обычно бывает “защёлкой”, “data”, “тактовый импульс”

см пост 61

Попробовал вот так выбрать строку(думаю вторую)


GPIOA->BSRR = (1 << 2);//B high 
 GPIOA->BSRR = (1 << 3);//C 1
 GPIOA->BSRR = (1 << 1);//A high
 GPIOA->BRR =  (1 << 1);//A Low
GPIOA->BRR = (1 << 2);//B Low

пусто…
По поводу скана 1/20 Если у меня заполнение идёт 4 бита в одной строке, а потом 4 бита ровно на 10 строк ниже, разве может быть 1/20 ?

Заметил на распиновке(к сожалению только сейчас) модуля есть вход DI он находится между между G0 и G1 что это за вход может быть…?

вы правы, это вряд ли может быть 1/20, похоже на 1/10

не встречался с таким

Померил его , короткое с землёй, наверное просто опечатались,
Попробовал другое отсоединил B от контроллера и подсоединял к земле и к +3.3В
ничего не менялось похоже матрицу прислали неисправную…

Добрый вечер профессионалам .
Матрица не даёт покоя сегодня попробовал следующие
сделал выбор строки статическим, то есть чтобы адрес не менялся вообще и всё выводилось в одну строку

 GPIOA->BSRR = (1 << 1); например PA1 у меня младший бит выбора строки

перепробовал все варианты от 000 до 111 ничего не выводится
из чего делаю вывод что строка выбирается , как то по другому…

Вадим, вы не хотите попробовать матрицу с моей библиотекой?

Интересная мысль, сейчас буду пробовать…

DMD_PIN_SCLK PA5 Это Lat ???

Выбрал RGB80x40plainS20

горят несколько вертикальных полос синих(3 по 10п и 2 по 20п) в правой нижней части экрана…

как вы быстро…

Нет. так не выйдет. Нужно создать новый шаблон под 80х40 скан10 матрицу.
Сейчас не могу, попробую ближе к вечеру.

Спасибо, не торопитесь,
Зашёл на сайт QiangLi пытаюсь Даташит найти…

Кьянгли - это тема… Помню, со своей тоже долго мучался, пока разгадал.

Обещанный шаблон для вашей матрицы

Вставьте это в скетч (не в библиотеку!) сразу после строчки #include "DMD_RGB.h"

#define RGB80x40plainS10     38			// 80x40 s10
template<int COL_DEPTH>
class DMD_RGB<RGB80x40plainS10, 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>(4, mux_list, _pin_nOE, _pin_SCLK, pinlist,
			panelsWide, panelsHigh, d_buf, COL_DEPTH, 10, 80, 40)
	{}

};

Инициализацию матрицы, соответствено, заменить на это:

DMD_RGB <RGB80x40plainS10 , COLOR_4BITS> dmd(mux_list, DMD_PIN_nOE, DMD_PIN_SCLK, custom_rgbpins, DISPLAYS_ACROSS, DISPLAYS_DOWN, ENABLE_DUAL_BUFFER);

Больше ничего менять не надо.
Запустите тестовый скетч, который последовательно зажигает все точки на матрице. Точка может бегать зигзагами, пока это не важно - главное чтобы она пробегала все точки строго по одному разу.

Сделал как Вы сказали запустил dmd_rgb_pattern_test.ino
Не работает.
Но есть интересный эффект ,если нажимать Reset , то матрица начиная справа начинает при каждом нажатии постепенно заполнятся вертикальными линиями по 10px синего цвета. Нижняя часть матрицы 20-40 заполняется плотно, верхняя, редкими линиями…
P.S. Попросил у китайцев Даташит, пока не прислали…

Можете переписать обозначения всех микросхем на матрице?