Closed SilentWalker9 closed 3 months ago
Добрый день Пожалуйста выложите код, которым тестируете
Добрый день Пожалуйста выложите код, которым тестируете
/*-------------------------------------------------------------------------------------- Demo for RGB panels
DMD_STM32a example code for STM32 and RP2040 boards
The example shows the use of a multi_color scrolling and fixed text.
In multicolor mode each letter of the text prints in different color. If string contains more chars than there are colors in the list - the list restarts from beginning. ------------------------------------------------------------------------------------- */
// Fonts includes
//Number of panels in x and y axis
// 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
// ==== DMD_RGB pins ==== // mux pins - A, B, C... mux pins must be consecutive in ascending order
// put all mux pins at list uint8_t mux_list[] = { DMD_PIN_A, DMD_PIN_B, DMD_PIN_C, DMD_PIN_D, DMD_PIN_E };
// pin OE must be one of PB0 PB1 PA6 PA7
// Pins for R0, G0, B0, R1, G1, B1 channels and for clock.
// By default the library uses RGB color order.2
// If you need to change this - reorder the R0, G0, B0, R1, G1, B1 pins.
// All this pins also must be consecutive in ascending order
uint8_t custom_rgbpins[] = { 6, 12, 13, 14, 15, 16, 17 }; // CLK, R0, G0, B0, R1, G1, B1
// Fire up the DMD object as dmd<MATRIX_TYPE, COLOR_DEPTH>
// We use 64x32 matrix with 16 scans and 4bit color:
DMD_RGB<RGB128x64plainS32, COLOR_4BITS> dmd(mux_list, DMD_PIN_nOE, DMD_PIN_SCLK, custom_rgbpins, DISPLAYS_ACROSS, DISPLAYS_DOWN, ENABLE_DUAL_BUFFER);
// other options are:
//
// --- Define fonts ---- // DMD.h old style font DMD_Standard_Font Arial_F(Arial_14);
void setup(void) { // initialize DMD objects dmd.init(); // Disable scrolling method by moving entire screen dmd.disableFastTextShift(true); for (int x = 0; x < 100; x++) { dmd.fillScreen(dmd.Color888(255, 255, 255)); dmd.fillScreen(dmd.Color888(0, 0, 0)); } for (int x = 0; x < 100; x++) { for (int x = 0; x < 128; x++) { for (int y = 0; y < 64; y++) { dmd.drawPixel(x, y, 0xFFFF); } } }
delay(1000); }
void loop(void) { // create foreground colors for mono-color text uint16_t col[] = { dmd.Color888(255, 0, 0), // red //dmd.Color888(0, 128, 128), dmd.Color888(0, 255, 0), // green dmd.Color888(0, 0, 255) // blue }; int col_cnt = 3; // color count uint16_t bg = 0; // background - black
// create colors for multicolor strings // The 1st color of the list used as background uint16_t colors[] = { bg, col[0], col[1], col[2] }; DMD_Colorlist multicolor(4, colors);
// select standard font dmd.selectFont(&Arial_F);
// text // We do not recode it when use standard fonts. // Transcode non-English messages to UTF needs for use with GFX fonts only. //editor.maxTokenizationLineLenght(800); char g[] = "созерцания этого великого фрактального подобия, и от вот этого замечательного всеединства существа, бесконечно-вечного, куда ни посмотри: хоть вглубь - в бесконечно малое, хоть ввысь - в бесконечно большое."; char s[] = "как эта Земля. Мне этот мир уже во многом понятен, и ищу я здесь только одного - покоя, умиротворения, и вот этой гармонии, от слияния с бесконечно-вечным, от "; char t[] = "Я, в своем познании настолько преисполнился, что как будто бы уже сто триллионов миллиардов лет, проживаю на триллионах и триллионах таких же планет. Планет, "; char year[] = "BOBRE";
// shift steps in pixels for running text (positive - shift right, negative - left) int8_t step[] = { -1 }; // running text shift interval uint16_t interval = 8;
long prev_step = millis(); uint16_t col_ptr = 0; uint16_t i = 0; uint16_t test = 800; uint16_t test_cnt = 3; dmd.setBrightness(255);
// Cycle for tests: // -- running texts moving left and right with single and double speed
while (1) {
//dmd.drawFastHLine(0,0,50,0b1111111111111);
if ((millis() - prev_step) > interval) {
prev_step = millis(); // moved to the start of the loop to prevent "scroll not smooth" issue
if (test >= test_cnt) {
test = 0;
// draw library name as mono-color message
dmd.setMarqueeColor(col[0], bg);
dmd.drawMarqueeX(g, -1 * (dmd.stringWidth(g)), 0);
dmd.swapBuffers(true);
}
switch (test) {
// moving text at x axis
case 0:
if (dmd.stepMarquee(step[i], 0) & 1) { // if text is reached screen bounds
dmd.clearScreen(true);
// set next text color
col_ptr++;
if (col_ptr >= col_cnt) col_ptr = 0;
// set text in single color
//dmd.setMarqueeColor(col[col_ptr], bg);
// set color list for multicolor
dmd.setMarqueeColor(&multicolor);
// set new text speed
i++;
// if all moving finished
if (i > 3) { // return to start
i = 0;
}
if (step[i] < 0) dmd.drawMarqueeX(t, dmd.width() - 1, 0);
else dmd.drawMarqueeX(s, -1 * dmd.stringWidth(s), 0);
}
// renew fixed text
uint8_t text_start = (dmd.width() - dmd.stringWidth(year)) / 2; // center aligned text
dmd.drawStringX(text_start, 15, year, col[2]);
DrawRect(0, 0, 127, 63, 0xFFFF, 0);
// output mem buffer to matrix
dmd.swapBuffers(true);
break;
}
}
}
}
void DrawRect(int x1, int y1, int x2, int y2, uint16_t color, uint8_t filled) { if(filled != 0) { /*uint32_t i;
for ( i = y1; i <= y2; i ++ )
dmd.drawFastHLine ( x1, i, x2, i, color );*/
} else { dmd.drawFastHLine(x1, y1, x2-x1, color); dmd.drawFastVLine(x2, y1, y2-y1, color); dmd.drawFastHLine(x1, y2, x2-x1, color); dmd.drawFastVLine(x1, y1, y2-y1, color); } }
На первый взгляд никаких проблем не вижу. У Вас одна такая панель или несколько? Если много - пробовали другие панели, на всех такой эффект?
На первый взгляд никаких проблем не вижу. У Вас одна такая панель или несколько? Если много - пробовали другие панели, на всех такой эффект?
К сожалению только одна. Никаких графических дефектов за исключением этого.
Ну раз одна, то проще будет поменять местами пины нижней и верхней половины. Только надо делать это не в коде, а непосредственно на панели:
Пины 12, 13, 14 - подключите к R1, G1, B1 а 15, 16, 17 - к R0, G0, B0
Настройки в коде НЕ МЕНЯЙТЕ.
Отпишитесь потом, помогло или нет.
Ну раз одна, то проще будет поменять местами пины нижней и верхней половины. Только надо делать это не в коде, а непосредственно на панели:
Пины 12, 13, 14 - подключите к R1, G1, B1 а 15, 16, 17 - к R0, G0, B0
Настройки в коде НЕ МЕНЯЙТЕ.
Отпишитесь потом, помогло или нет.
Другое дело.
Возможно мой косяк, не правильно понял как подключать, возник небольшой косяк на краю, но нужно отмыть сначала от флюса.
На обратной стороне матрицы обычно есть стрелочки, показывающие вверх. Интересно - они совпадают с ориентацией вашего изображения?
А так вроде похоже проблема решена?
На обратной стороне матрицы обычно есть стрелочки, показывающие вверх. Интересно - они совпадают с ориентацией вашего изображения?
А так вроде похоже проблема решена?
Да, стрелочки совпадают
https://mega.nz/file/DGwASRaI#6hQD6Df1A8srJMmFC99rQvJPfFtRC5J6U7AfHUxJotE По ссылке видео. Красные пиксели - большое напряжение, а вот что за артефакты. Они только на максимальной яркости.
Красные пиксели - большое напряжение, а вот что за артефакты.
Как вы определили про напряжение?
Под артефактами вы имеете в виду иногда мигающую строчку по центру панели?
Красные пиксели - большое напряжение, а вот что за артефакты.
Как вы определили про напряжение?
Под артефактами вы имеете в виду иногда мигающую строчку по центру панели?
Не только, если присмотреться, то и под буквами промелькивает. А по напряжению, потому что от лабораторника запитан, провода на 10AWG поменял. https://mega.nz/file/2bp33BoY#pqK7TMMz9QTjeioJGA3Xn9qqDL67E0slqtaMJYD7G9M
Попробуйте поиграть интервалом прокрутки текста - 8мс для такой матрицы мало. Изменится что-то или нет?
И также снизьте яркость от 255 до 200 - вы разницу скорее всего не заметите, а с артефактами может и помочь.
Попробуйте поиграть интервалом прокрутки текста - 8мс для такой матрицы мало. Изменится что-то или нет?
И также снизьте яркость от 255 до 200 - вы разницу скорее всего не заметите, а с артефактами может и помочь.
Да так уже и сделал, но странно, ранее она у меня тоже была на максимальной яркости, а артефактов не было. А на счёт скорости, да, великовата, плавает. Но это не основная задача этого экрана, поэтому сойдёт.
ранее она у меня тоже была на максимальной яркости, а артефактов не было.
Эти матрицы работают на высоких частотах (до 25 МГц) - поэтому они крайне чувствительны к качеству соединений и длине проводов. Если артефакты то появляются. то изчеазают - это практически 100% плохие контакты.
ранее она у меня тоже была на максимальной яркости, а артефактов не было.
Эти матрицы работают на высоких частотах (до 25 МГц) - поэтому они крайне чувствительны к качеству соединений и длине проводов. Если артефакты то появляются. то изчеазают - это практически 100% плохие контакты.
Тогда не было бы зависимости от яркости. Только от содержимого. Разводка платы экрана, возможно, немного кривая. У меня экран, тоже использует pio, на ili9486, больше 40МГц работает на лапше спаянной на коленке. Кстати, как я понял, запись данных в экран идёт вне зависимости от обращения к библиотеке?
Тогда не было бы зависимости от яркости. Только от содержимого.
Это разные факторы. Контакты - аппаратная проблема, зависимость от яркости - программная. Я не могу сказать издалека, в чем у вас дело - одно, другое, а может и то и то разом, поэтому даю рецепты наугад.
как я понял, запись данных в экран идёт вне зависимости от обращения к библиотеке?
Принцип работы ХАБ75 панелей требует обновления данных тысячи раз в секунду
Тогда не было бы зависимости от яркости. Только от содержимого.
Это разные факторы. Контакты - аппаратная проблема, зависимость от яркости - программная. Я не могу сказать издалека, в чем у вас дело - одно, другое, а может и то и то разом, поэтому даю рецепты наугад.
как я понял, запись данных в экран идёт вне зависимости от обращения к библиотеке?
Принцип работы ХАБ75 панелей требует обновления данных тысячи раз в секунду
Ну я понял, что он организован на сдвиговых регистрах. Теперь такой вопрос, тактовая экрана зависит от частоты проца?
Кажется я нашёл проблему.
Это моя обычная настройка фиолетовых плат. И на такой настройке артефакты имеются.
Это стандартная настройка частоты, на ней нет артефактов. Не зависит от частоты процессора, но зависит от выставленного делителя на QSPI, что очень странно.
Тактовая частота, что интересно, не меняется при смене делителя скорости флеш. А при смене частоты процессора меняется. При том, я сейчас очень внимательно последил, это не просто артефакты, а кратковременное смещение пикселей вниз, на один. А полоса по середине, это что-то непонятное.
зависит от выставленного делителя на QSPI, что очень странно.
Насколько я помню, на QSPI висит внутренний флеш. Возможно что память дает артефакты при оверклоке?
такой вопрос, тактовая экрана зависит от частоты проца?
Прямой зависимости нет.
зависит от выставленного делителя на QSPI, что очень странно.
Насколько я помню, на QSPI висит внутренний флеш. Возможно что память дает артефакты при оверклоке?
такой вопрос, тактовая экрана зависит от частоты проца?
Прямой зависимости нет.
QSPI при разгоне процессора из-за делителя становится ещё ниже, чем в стоке. Измерить нормально не смогу, ибо ослик на 25МГц.
Насчет "зависиморсти нет" - был неправ, зависит. Делитель частоты PIO машины задан явно - и выбран из расчета дефолтной частоты проца. При оверклокинге Пико в два раза клок на матрице тоже будет в два раз быстрее, при таких значениях некоторые панели уже начинают сбоить.
Насчет "зависиморсти нет" - был неправ, зависит. Делитель частоты PIO машины задан явно - и выбран из расчета дефолтной частоты проца. При оверклокинге Пико в два раза клок на матрице тоже будет в два раз быстрее, при таких значениях некоторые панели уже начинают сбоить.
Тут проблема с доступом к флешу возникает, по всей видимости.
Тактовая QSPI в стоке.
В разгоне.
Для проверки попробуйте поменять делитель pio_clkdiv
со значения 3 на 5 или 6 и запустить с оверклоком. Если дело в этом - артефакты должны уйти.
pio_clkdiv
задается в файле DMD_STM32a.h
line 472
Для проверки попробуйте поменять делитель
pio_clkdiv
со значения 3 на 5 или 6 и запустить с оверклоком. Если дело в этом - артефакты должны уйти.
pio_clkdiv
задается в файлеDMD_STM32a.h
line 472
Нет, не влияет. Я это и пытался донести, что проблема не в тактировании экрана, а в районе кода. Попробую отключить двойной буфер. Двойной буфер не влияет.
это не просто артефакты, а кратковременное смещение пикселей вниз, на один.
на самом деле это один из самых типичных артефактов на подобных библиотеках (моей в том числе). Он связан с расинхроном вывода данных и переключения строк. Если грубо, матрица работает по типу динамической индикации. В каждый конкретный момент на панели светится только одна горизонтальная строка. Матрица имеет на борту память только на одну строчку. Чтобы засветить следующую строчку, нужно сначала загрузить данные этой строки, а потом переключить вывод. Если переключить строчку чуть раньше или чуть позже, данные засветят соседнюю строчку. В общем, это проблема скорее всего где-то в моем коде, но найти проблему без тестов на реальной матрице непросто.
это не просто артефакты, а кратковременное смещение пикселей вниз, на один.
на самом деле это один из самых типичных артефактов на подобных библиотеках (моей в том числе). Он связан с расинхроном вывода данных и переключения строк. Если грубо, матрица работает по типу динамической индикации. В каждый конкретный момент на панели светится только одна горизонтальная строка. Матрица имеет на борту память только на одну строчку. Чтобы засветить следующую строчку, нужно сначала загрузить данные этой строки, а потом переключить вывод. Если переключить строчку чуть раньше или чуть позже, данные засветят соседнюю строчку. В общем, это проблема скорее всего где-то в моем коде, но найти проблему без тестов на реальной матрице непросто.
Перетекание оптимизации на fast почти избавило от артефактов. Я готов предоставить помощь удаленно, единственное в свободное время от работы. Сам писал либу на свой экран, правда через sio, а не pio, поэтому понимаю.
Спасибо. У меня сейчас нет ни одной стандартной матрицы такого размера, только всякая экзотика :) Так что мне может понадобится Ваша помощь для проверки на реальной панели, влияют ли мои исправления на артефакты или нет. И хорошо что Вы подняли эту тему, я всегда рад баг-репортам :)
Спасибо. У меня сейчас нет ни одной стандартной матрицы такого размера, только всякая экзотика :) Так что мне может понадобится Ваша помощь для проверки на реальной панели, влияют ли мои исправления на артефакты или нет. И хорошо что Вы подняли эту тему, я всегда рад баг-репортам :)
Не за что, тестером быть забавно, можно находить то, что не должно выплывать)
Привет, возвращаясь к проблеме - если честно, каких-то явных причин для артефактов я не нашел. Кое-какие шероховатости поправил в коде, хотя не уверен, что они как-то повлияют. Можете в последней версии библиотеки заменить файлы из приаттаченного архива и снова запустить тест? dmd_rgb_dma_clk_test.zip
Привет, возвращаясь к проблеме - если честно, каких-то явных причин для артефактов я не нашел. Кое-какие шероховатости поправил в коде, хотя не уверен, что они как-то повлияют. Можете в последней версии библиотеки заменить файлы из приаттаченного архива и снова запустить тест? dmd_rgb_dma_clk_test.zip
Через пару часов, вернусь после работы и отпишусь. Кстати, появилась проблема с SPI.
https://mega.nz/file/nH4yQITI#fNdRTfgLmg97ElaNyPObOrLwlHwppnwZTxSoAotQaOc Это после замены файлов вашими. Артефакты ушли, но я не уверен, ибо мог и я до этого что-нибудь накрутить. https://mega.nz/file/jfxDwBTZ#2AGppFo-NVzSdTooWo6t2kKB5ab5P0xtv9eDuyuf5TI А это при попытке включения SPI, но отсутствия общения по нему, ибо модуль NRF24L01 принимает данные, но они по какой-то причине искажённые до неузнаваемости.
мог и я до этого что-нибудь накрутить
Можете мне прислать код библиотеки, который у Вас получился после Ваших и моих изменений?
А это при попытке включения SPI,
Честно говоря, не вижу разницы с предыдущим видео...
Что касается проблем с SPI - можете мне выложить полный код скетча, на котором это проявляется?
мог и я до этого что-нибудь накрутить
Можете мне прислать код библиотеки, который у Вас получился после Ваших и моих изменений?
А это при попытке включения SPI,
Честно говоря, не вижу разницы с предыдущим видео...
Что касается проблем с SPI - можете мне выложить полный код скетча, на котором это проявляется?
Я только что выяснил, что проблема не со стороны вашей либы. Если интересно: https://github.com/nRF24/RF24/issues/983 Но при подключении модуля по экрану очень много артефактов, только в разгоне. https://mega.nz/file/qfw31ZzS#OqIIUXmt0qXCogRw12K1ERqc9CBmlgFwKiP99YLtr34
Panel description
Dimensions (in pixels) : 128*64
Scan factor: 1/32
Chips on rear side: ICN2037BP, 74HC245KAJ, 74HC04D, RUC7258D
Panel photos
Specifications