Форум РадиоКот https://radiokot.ru/forum/ |
|
Не могу найти документацию по RGB-LED модулю P4 https://radiokot.ru/forum/viewtopic.php?f=61&t=176610 |
Страница 1 из 1 |
Автор: | Eddy_Em [ Ср апр 14, 2021 19:26:29 ] |
Заголовок сообщения: | Не могу найти документацию по RGB-LED модулю P4 |
Купил на али вот такой модуль. У меня уже был опыт работы с монохромным P10, думал, что здесь так же просто. А оказалось все не так. Распиновку обнаружил и появилась уйма вопросов: судя по данным из интернетов, дисплей делится на две половинки, а каждая из них — на 2⁴=16 блоков (в отличие от монохромных, где было одно целое и 4 блока). Не нашел даже схемы, в каком порядке загораются пиксели. Я уж молчу о временных диаграммах! В найденных даташитах есть лишь физические данные, ничего о подробном описании протокола и особенностей адресации нет. В общем, меня как будто бы в гугле забанили: на запросы "P4 led module protocol" и "p4 led module pinout" вылезает всякий разнообразный абдуриновский бред. А я хочу при помощи DMA по таймеру дрыгать ногами, отправляя 6 битов данных за раз. (жаль, конечно, что так через одно место китайцы все сделали, лучше бы напаяли 100500 сдвиговых регистров, чтобы по SPI можно было за один присест отправить данные на весь экран целиком). |
Автор: | AAX [ Пт апр 16, 2021 02:22:40 ] |
Заголовок сообщения: | Re: Не могу найти документацию по RGB-LED модулю P4 |
P10, P4 и т.д. это всего лишь сокращение от pitch 10 mm, pitch 4 mm и т.д. Искать способы коммуникации со светодиодной панелью исходя из расстояния между светодиодами - смело. Но, видимо, не очень эффективно :rofl: Возможно, если внимательно осмотреть плату Вашего модуля, на ней будет написано что-то вроде hub75e или hub75f - это название интерфейса. Его-то и нужно было просить у гугла ![]() ![]() |
Автор: | Eddy_Em [ Вс апр 18, 2021 22:12:31 ] |
Заголовок сообщения: | Re: Не могу найти документацию по RGB-LED модулю P4 |
На панели ничего, что могло бы натолкнуть на протокол, не написано. Мне подсказали в ЖЖ, что скорей всего, у нее HUB75E. Попробовал, набросал пробный код. Однако, вместо того, чтобы получить вертикальные линии, вижу вот такую жесть! Схему панели в интернете найти не смог. Я вообще не понимаю, что происходит! Может, нужно поставить буферные мосфеты и дергать управляющие электроды пятью вольтами, а не 3.3В? Или же китаец подсунул фуфло? |
Автор: | AAX [ Вс апр 18, 2021 23:35:37 ] |
Заголовок сообщения: | Re: Не могу найти документацию по RGB-LED модулю P4 |
Ваш пробный код сложночитаем, имхо нет смысла разбираться с ним, намного проще рассказать Вам, как должно быть ![]() Первая попавшаяся мне в гуглокартинках фоточка интерфейсного разъёма: https://4.bp.blogspot.com/-P3auvkuEEO4/ ... necotr.jpg Делать ннада так: 1) ставим на R1R2G1G2B1B2 интересующий нас цвет. Для начала, к примеру, 0xFFFFFF upd: сорри, размечтался чот ![]() ![]() 2) подаём стробирующий импульс на CLK. Таким образом мы фиксируем цвет первой точки в строке (полустроке, четвертьстроке, и т.д. - в зависимости от организации матрицы) 3) повторяем пп 1, 2 необходимое количество раз (опять же, зависит от организации матрицы) 4) ставим на выводах ABCDE разъёма адрес (порядковый номер) строки. Тут опять же могут быть варианты, зависящие от организации матрицы. 5) подаём стробирующий импульс на LAT 6) ... 7) профит! По поводу "буферных мосфетов" и согласования уровней - у Вас повторяющаяся картина, хоть и не та, которой Вы ждёте, очевидно ![]() ![]() А, про пункт 0 чуть не забыл - подать питание, прижать OE к земле... ![]() |
Автор: | Eddy_Em [ Пн апр 19, 2021 00:00:03 ] |
Заголовок сообщения: | Re: Не могу найти документацию по RGB-LED модулю P4 |
Все ноги настроены в режиме push-pull, логика от ряда к ряду не меняется. Я даже пробовал один и тот же буфер передавать все 16 раз. И все равно картина была абсолютно той же самой! Попробовал поменять режим ШИМ (у меня это режим 2: 0->1, но так стало еще хуже, т.е. явно клоку нужен нарастающий фронт). Пока что единственное, что приходит на ум — уровни нужно разогнать до пяти вольт. Т.е. поставить буферы, преобразующие уровень. Отложу пока в долгий ящик. А там, глядишь, напаяю буферы и проверю. Правда, в этом случае характеристики станут еще хуже, вряд ли получится хотя бы 300fps получить на трехбитном цвете… Добавлено after 2 minutes 38 seconds: Вот, как у меня настройки выполнены. GPIO: Код: static inline void gpio_setup(){ // Enable clocks to the GPIO subsystems, turn on AFIO clocking to disable SWD/JTAG RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPCEN | RCC_APB2ENR_AFIOEN; // turn off JTAG (PB3/4 is in use) AFIO->MAPR = AFIO_MAPR_SWJ_CFG_JTAGDISABLE; // turn off USB pullup USBPU_OFF(); // Set led as opendrain output GPIOC->CRH = CRH(13, CNF_ODOUTPUT|MODE_SLOW); // SCREEN color PINs: PA0..PA5 GPIOA->CRL = CRL(0, CNF_PPOUTPUT|MODE_FAST) | CRL(1, CNF_PPOUTPUT|MODE_FAST) | CRL(2, CNF_PPOUTPUT|MODE_FAST) | CRL(3, CNF_PPOUTPUT|MODE_FAST) | CRL(4, CNF_PPOUTPUT|MODE_FAST) | CRL(5, CNF_PPOUTPUT|MODE_FAST); // USB pullup - opendrain output GPIOA->CRH = CRH(15, CNF_PPOUTPUT|MODE_SLOW); // A..D, LAT, nOE: PB4..PB9 GPIOB->CRL = CRL(4, CNF_PPOUTPUT|MODE_FAST) | CRL(5, CNF_PPOUTPUT|MODE_FAST) | CRL(6, CNF_PPOUTPUT|MODE_FAST) | CRL(7, CNF_PPOUTPUT|MODE_FAST); GPIOB->CRH = CRH(8, CNF_PPOUTPUT|MODE_FAST) | CRH(9, CNF_PPOUTPUT|MODE_FAST); } Таймер с DMA: Код: static inline void tim_setup(){ SET(nOE); // turn off output GPIOA->CRL |= CRL(6, CNF_AFPP|MODE_FAST); RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; // 72MHz & 7ARR = 9MHz TIM3->PSC = 20000; TIM3->ARR = 7; TIM3->CCMR1 = TIM_CCMR1_OC1M; // PWM mode 2 (inactive->active) //TIM3->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; // PWM mode 1 (active->inactive) TIM3->CCER = TIM_CCER_CC1E; // output 1 enable TIM3->DIER = TIM_DIER_UDE; // enable DMA requests RCC->AHBENR |= RCC_AHBENR_DMA1EN; // memsize 32bit, periphsize 32bit, memincr, mem2periph, full transfer interrupt DMA1_Channel3->CCR = DMA_CCR_PSIZE_1 | DMA_CCR_MSIZE_1 | DMA_CCR_MINC | DMA_CCR_DIR | DMA_CCR_TCIE; DMA1_Channel3->CMAR = (uint32_t)dmabuf; DMA1_Channel3->CPAR = (uint32_t)&GPIOA->BSRR; NVIC_EnableIRQ(DMA1_Channel3_IRQn); } Ну и передача данных: Код: static uint8_t blknum_curr = 0;
void TIM_DMA_transfer(uint8_t blknum){ TIM3->CR1 = 0; // turn off timer transfer_done = 0; COLR_port->BSRR = dmabuf[0]; DMA1_Channel3->CNDTR = SCREEN_WIDTH; DMA1_Channel3->CCR |= DMA_CCR_EN; // start DMA TIM3->CCR1 = 4; // 50% PWM TIM3->CR1 = TIM_CR1_CEN; // turn on timer blknum_curr = blknum; } void dma1_channel3_isr(){ TIM3->CR1 |= TIM_CR1_OPM; // set one pulse mode to turn off timer after last CLK pulse DMA1_Channel3->CCR &= ~DMA_CCR_EN; // stop DMA while(TIM3->CNT < 7); SET(nOE); // clear main output ADDR_port->ODR = (ADDR_port->ODR & ~(ADDR_pin)) | (blknum_curr << ADDR_roll); // set address SET(LAT); // activate latch DMA1->IFCR = DMA_IFCR_CGIF3; transfer_done = 1; CLEAR(LAT); CLEAR(nOE); // activate main output } |
Автор: | AAX [ Пн апр 19, 2021 00:04:35 ] |
Заголовок сообщения: | Re: Не могу найти документацию по RGB-LED модулю P4 |
не-не-не, не сдаёмся! ![]() У Вас кагбэ две матрицы составные. И R1G1B1 - цвет точки на первой матрице, а R2G2B2 - на второй. Т.е. нужно строку делать из 64-х тактов CLK, а если надо один пиксел зажечь - ставить 101010 на R1R2G1G2B1B2. R1G1B1 N-я точка, R2G2B2 - N+64-я. Чуть сумбурно получилось, но я надеюсь, Вы поймёте, о чём я ![]() |
Автор: | Eddy_Em [ Пн апр 19, 2021 00:18:08 ] |
Заголовок сообщения: | Re: Не могу найти документацию по RGB-LED модулю P4 |
Цитата: И R1G1B1 - цвет точки на первой матрице, а R2G2B2 - на второй. Нет, первый канал - строка из верхней половины, вторая - из нижней (на 16 строк ниже). Это я уже экспериментальным путем понял. Иначе столбцы бы вообще не горели. Здесь именно похоже на шум в стробе: иногда проскакивают "духи", а строки сдвигаются. Посмотрю завтра осциллограммы стробирующего импульса. |
Автор: | AAX [ Пн апр 19, 2021 00:27:32 ] |
Заголовок сообщения: | Re: Не могу найти документацию по RGB-LED модулю P4 |
Нет, первый канал - строка из верхней половины, вторая - из нижней ну, или так, да. А канал E адреса строк не используется? А он физически на землю притянут? Мошт, наводки какие ловит? По видосу такое ощущение, что 1 CLK лишний, что ли... Надо анализатором вешаться, и смотретьUPD: чот я нипайму, а где CLK вообще в коде у Вас управляется? |
Автор: | Eddy_Em [ Пн апр 19, 2021 00:45:25 ] |
Заголовок сообщения: | Re: Не могу найти документацию по RGB-LED модулю P4 |
Клок генерируется таймером - TIM3CH1 (ШИМ с заполнением 50%). По событию UEV таймера DMA отправляет очередную порцию данных цвета (через регистр BSRR), а после этого ШИМ-выход генерирует клок. |
Автор: | Eddy_Em [ Пн апр 19, 2021 23:29:09 ] |
Заголовок сообщения: | Re: Не могу найти документацию по RGB-LED модулю P4 |
Сейчас посмотрел осциллограмму, блок питания просто ужас что выдает на выходе! Вот, видимо, откуда и появились все эти мусорные точки. Поставил БП послабей (но не такой мусорный), уже почти никаких артефактов. В общем, нужно тщательно фильтровать питание и таки спаять буфер, чтобы оно не пыталось "кормиться" от МК. Добавлено after 8 hours 55 minutes 33 seconds: В общем, решил проблему: распаял на макетке два буфера CD4050, а т.к. они всего лишь шестиканальные, 13-й канал (nOE) инвертировал на мосфете 2N7000 (с удивлением обнаружил, что хоть 7000 — самые поганые по силовым характеристикам, зато у них маленькая емкость затвора и они не заваливают фронты так, как более компактные мосфеты с меньшим Rdson). Теперь никаких посторонних пикселей не вылезает. Правда, почему-то икран изредка мерцает. Непонятно, как это может быть, когда частота обновления кадров 77 в секунду (а сам кадр состоит из семи последовательных изображений - эдакий ШИМ на восемь уровней). В ЖЖшке |
Автор: | Eddy_Em [ Ср апр 28, 2021 18:39:33 ] |
Заголовок сообщения: | Re: Не могу найти документацию по RGB-LED модулю P4 |
Сделал на этом модуле игры "змейка" и "тетрис" (пока в преальфа-стадии, надо там еще шрифт помельче нарисовать, чтобы надпись GAME over! Score:... влезала на экран, да и на бета-тестере — дочке — потренировать). Напишу в ЖЖ и выложу видео на тытрубу, как закончу. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |