-
Постов
2 694 -
Зарегистрирован
-
Победитель дней
2
Весь контент repstosw
-
Добил TCON и E72 LCD. Сделал синхронизацию TCON с LCD RAM через Tearing Pin (VBlank). TCON здесь в режиме i8080, срабатывание по триггеру. Запуск происходит по возрастающему фронту внешнего прерывания с ножки LCD Tearing. Видеобуферы находятся в памяти Allwinner T113-s3. Доступно несколько слоёв, альфа-блендинг и преобразования CSC (YUV=>RGB). В обработчике прерывания происходит переключение видеобуфера: пока один показывается, во втором можно рисовать. 262K цветов (RGB 6:6:6). Алишные дисплеи с ардуин (OEM и ODM) здесь и рядом не валялись! 🤣
-
Для нано-поделий, использую дисплеи с разрешениями: 160x128 320x240 400x240 Больше для моих целей не нужно. Для тамагочи выше написал разрешения. Дисплеи разные нужны. Дисплеи разные важны!
-
Пыхтонрасты. Краем уха услышал, что новые камни Allwinner будут программироваться исключительно на языке Rust. Китайская инициатива. Так что есть вероятность, что C/C++ вскоре будет вытеснен из этой ниши. Ногодрыг очень медленный у AW. даже под голым железом. Искуственный интеллект, распознавание образов, работа с большими пластами данных: парсинг, сортировка... Всё это набирает обороты, чтобы установить тотальный контроль над каждым человеком, и не дать ему уйти в случае чего... Понимаете, куда всё идёт?
-
Реанимировал свой старый телефон Nokia E72-1, дисплей там как раз имеет хорошие углы обзора, картинка насыщенная. 320x240, 2.4" Landscape orientation. Лучше не придумаешь 🙂 Шина i8080, 8 бит. Есть ножка LCD_TE как раз для синхронизации. Попытаюсь его запустить на TCON T113-s3. Подключение, исходники: https://andybrown.me.uk/2013/05/29/nokia-e73-qvga-lcd/
-
На счёт кратности высоты 16. На всякий случай лучше проверить, что декодер не пишет в память за пределы буфера. Возможна порча памяти при декодировании, если проигнорировать требование кратности 16: декодер может записать недостающие строки ниже (за пределами выделенного буфера).
-
Освоил. Всё работает. Теперь кадр читается из видео-памяти автоматически без участия CPU. Кроме этого, доступны все навороты Display Engine: слои, альфа-блендинг и преобразование YUV в RGB. Из-за того, что дисплей от X503 не имеет ножки FMARK или VSYNC, не могу синхронизировать вывод кадра с TCON на дисплей. Поэтому вывод пикселей на дисплей идёт автоматически без синхронизации .
-
Завитки на денежных купюрах без лупы видите? Я вижу. ))) Сделал чтение ID чипа из регистра. Нужно было запретить вывод на линии D0..D23 перед чтением:
-
Уже запускал его: Он не IPS. Обычный TN. Но контраст хороший 400:1, достаточно яркий 350 кд/м^2. даже анти-бликовое покрытие есть (обнаружил не сразу - была наклеена защитная плёнка). Но не дотягивает до идеала углами обзора. Если смотреть сбоку, то цвета немного меняются и освещение падает. На Али есть модификации этого дисплея, и даже с пометкой "IPS". Но к сожалению, контакты на шлейфе урезаны - его в Serial RGB надо загонять через инит SPI. Оригинал LQ035NC111 можно использовать в Serial RGB специальными контактами на шлейфе. Да. Подтверждаю: особенно малый угол выходит снизу (если смотреть со стороны шлейфа). С IPS такого безобразия нет. Я бы его поставил в конструкцию, если не найду решения лучше. И 3,5 дюйма диагональ - многовато... Мне бы 2 - 2,4". Нано-девайс хочется Как Nano-Player, который сделал в 2019 г.
-
Хороший сайт! В своё время нашёл там IPS LCD 400x240 для консоли Cobura Portable на Parallel RGB interface. Но вот на разрешение 320x240 IPS с интерфейсом Serial RGB выдаёт около десятка результатов, и ни один не ищется на aliexpress ((( Поэтому - озадачился освоением TCON в режиме CPU IF i8080. Так как для маленьких разрешений подавляющее большинство дисплеев на i8080. И на телефонах типа Nokia E71/E72, Samsung S5230 - отличные IPS дисплеи, но все на i8080 :))) Когда делал H264 кодер для V3s, то попробовал убрать требование кратности 16 по высоте - заработало. 1080 не кратно 16 ))) Итак, я запустил TCON в режиме i8080 🙂 По крайней мере, инит контроллера дисплея(от телефона Philips Xenium X503) и картинка выводится. Пока в "ручном" режиме - запись данных через регистр. В перспективе - довести до ума: сделать чтобы кадр читался из видео-памяти и автоматически рисовался на дисплей. Что касается времянок(запись в регистры с помощью CPU i8080), то они завязаны на DCLK. И ничего менять нельзя: Исходя из описания: строб WR - проинвертированная копия DCLK. Остальные сигналы привязаны к нему. Тоесть, пространства для манёвра - нет. А строб RD всё время =1. Тоесть чтение запрещено. И это непонятно: как тогда делать чтение? Пробовал считать ID с регистра 0 дисплея - не возвращается код 0x9328, возвращается 0. Максимальная частота DCLK = 24 МГц. Выше, данный дисплей уже не работает. Далее надо освоить AUTO/FLUSH, чтобы заполнять картинки не через запись регистра, а автоматически с памяти. В спойлере рабочий код для дисплея X503 (контроллер ILI9328) через TCON CPU/i80 (не включая настройку TCON):
-
Проделал замеры, в ходе которых пришёл к выводу, что TCON пишет отдельным байтом. Он не производит аппаратного расщепления слова на байты шины. Выясняется элементарно: путём записи в регистр LCD_CPU_WR_REG значений: 0xFF, 0xFF00 и 0xFFFF. И вольтметром смотрим напряжения на ножках, в программе циклическая запись. Кроме того, обнаружен бит-свопинг на шине данных (что я собственно и предвидел): при записи и чтения команд/данных нужно учитывать положения бит. Тоесть чтобы послать байт на шину дисплея через TCON, нужно сделать следующие манипуляции над байтом: #define CONVERT(b) ((((b)&0x1F)<<3)|(((b)&0xE0)<<5)) Биты идут так: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 D7 D6 D5 0 0 D4 D3 D2 D1 D0 0 0 0 - биты байта в регистре LCD_CPU_WR_REG D7 D6 D5 D4 D3 D2 D1 D0 - биты байта на шине LCD_D12/LCD_D11/LCD_D10/LCD_D7/LCD_D6/LCD_D5/LCD_D4/LCD_D3 Хотя они могли этот свопинг делать аппаратно, с учётом битов 28...31 регистра LCD_CPU_IF_REG : 1110 - 8 bit 65K mode. При чтении из регистров биты нужно просвопать в обратном порядке. Кроме того, обнаружено следующее: CS,RD,WR вначале всегда =1, D0..D7 = 0, RS = 0. Никаких Z-состояний шины данных! RS - устанавливается только при начале цикла чтения/записи (запись в регистр LCD_CPU_WR_REG или чтение регистра LCD_CPU_RD0_REG) Это всё хорошо, но я не увидел где устанавливается ширина стробов чтения, записи. И прочие вещи, которые немаловажны.
-
Нужно размеры JPEG округлить в бОльшую сторону до 16. А на дисплей вывести через BitBlt G2D, вырезав ровно нужную область под дисплей. Пытаюсь запустить TCON в режиме IF CPU/i80. Чё-т пока не получается((( Дисплей рабочий - через ногодрыг работает, а через TCON не хочет. Осциллографа нет, времянки и сигналы посмотреть не могу. Пытался вольтметром определить уровни активного: делал цикл чтения и цикл записи. Определил, что линии должны быть проинвертированы: pdat.timing.h_sync_active = 1; //RD ---\___/--- pdat.timing.v_sync_active = 1; //CS ---\___/--- pdat.timing.den_active = 1; //RS pdat.timing.clk_active = 1; //WR ---\___/--- Мэпинг для 8-битной шины такой: IO0 VSYNC => CS (выбор устройства, активный 0) IO1 HSYNC => RD (строб чтения, активный 0) IO2 DCLK => WR (строб записи, активный 0) IO3 DE => RS (0 - индекс(команда), 1 - данные) D12 - R4,G2 - LCD D15 (в дисплее используются линии D15..D8 для шины 8 бит) D11 - R3,G1 - LCD D14 D10 - R2,G0 - LCD D13 D7 - R1,B4 - LCD D12 D6 - R0,B3 - LCD D11 D5 - G5,B2 - LCD D10 D4 - G4,B1 - LCD D9 D3 - G3,B0 - LCD D8 Проверил уровни в моменты чтения и записи вольтметром. Они соответствуют тем, что в программе. Цикл записи: void LCD_Index(u32 index) { LCD_Wait(); LCD_CPU_IF_REG&=~(1<<25); //CA=0 LCD_CPU_WR_REG=index; } Цикл чтения: void LCD_Data(u32 data) { LCD_Wait(); LCD_CPU_IF_REG|= (1<<25); //CA=1 LCD_CPU_WR_REG=data; } Запись в регистр: void LCD_IndexData(u32 index,u32 data) { LCD_Index(index); LCD_Data(data); } Всё остальное: #define LCD_CPU_IF_REG (*((IO u32*)(T113_TCONLCD_BASE+0x60))) #define LCD_CPU_WR_REG (*((IO u32*)(T113_TCONLCD_BASE+0x64))) void LCD_Wait(void) { while(LCD_CPU_IF_REG&(1<<23)); //WR wait while(LCD_CPU_IF_REG&(1<<22)); //RD wait } И ещё непонятно, этот TCON самостоятельно разруливает 16-битные записи на две 8-битные, или надо самому это делать? Ну тоесть чтобы отправить 16-битную команду через 8-битную шину: надо сначала отправить старший байт команды, потом младший байт команды. Затем отправить старший байт данных, потом младший байт данных. Тоесть - 4 записи. Столько же записей должно быть и через TCON? Или он сам разделяет одну 16-битную запись в две 8-битных? И вообще, учитывая бешеную популярность матриц на шине i8080 у китайцев, особенно на контроллерах ILI9325 и им подобных, неужели никто не озадачился как их подружить с Allwinner ? Может есть фрагменты кода в Линуксе, которые подскажут как работать с TCON в режиме CPU/i80 ? Второй немаловажный вопрос: как установить времянки через TCON в режиме CPU/i80 ? Ширина стробов чтения, записи. И прочие вещи. Вижу там только времянки развёртки дисплея через RGB-итерфейс.
-
Учёл конечно! Отдаю себе отчёт в том, что дисплей 240x320. А не 320x240. И это надо учитывать при синхронизации вывода кадра из TCON в GRAM LCD.
-
Запустил дисплей от телефона Philips Xenium X503, который по описанию должен быть IPS. Но что-то не похож на IPS: картинка деградирует на углах: пересвечивается. Качество картинки субъективно намного хуже чем у LQ035NC111. Кроме того, в этом дисплее не выведены ноги VSYNCO или FMARK, что делает невозможной синхронизацию с олвиннеровским TCON для движущихся изображений. Проще говоря, пригоден только для статической картинки. Для динамических картинок, чтобы синхронизировать - надо опрашивать соответствующий регистр, что неудобно, так как срывает DMA обмен или аппаратный обмен кадром через TCON. Контроллер в дисплее ILI9328 (читается ID чипа), а не ILI9325, как это было указано в отладочной инфе в прошивке телефона. И пришлось ещё отреверсить распиновку этого дисплея, так как схемы телефона нет, есть только мануал на трабл-шотинги. Обмен с дисплеем пока идёт через ногодрыг, следующий шаг - разобраться с TCON в режиме i8080 и попытаться проинитить дисплей через него и сделать вывод кадра. Знания даром не пропадут, так как можно потом поставить дисплей по-лучше. Наличие i8080 расширяет поле выбора качественного дисплея, так как на разрешение 320x240 подавляющая часть дисплеев с i8080 интерфейсом, и лишь только малая часть с RGB интерфейсом. Распиновка дисплея от телефона Philips Xenium X503: 1,2 GND 3 VCI (до 3,3V) 4 IOVCC (до 3,3V) 5 ~CS 6 RS 7 ~WR 8 ~RD 9..24 D0..D15 25 ~Reset 26 IM0 27 IM3 28..31 тач: D,L,U,R (отсутствует) 32..34 LEDK (-) три светодиода подсветки параллельно 35 LEDA (+) 36 LEDK (-) четвёртый светодиод подсветки 37,38 ? на плате телефона подключены к GND (проверял их на наличие сигналов VSYNCO и FMARK - неудачно). 39 GND 8-битная шина (D8..D15) IM3=0, IM0=1 16-битная шина (D0..D15) IM3=0, IM0=0
-
Главное, чтобы детали уместили только на одной стороне. Иначе дырку делать придётся на плате. Ну и чтоб от флюса отмыта были. И с отдельной аналоговой землёй )))
-
На нано-терминал. Только не с почтовую марку, диагональ 3,5" - полностью в ладонь помещается. Но вы правы - мне нужен дисплей ещё меньше. Остановился на 2,4". Нужна IPS матрица с разрешением 320x240, не больше чем 2,4 дюйма диагональ, поддерживающая Serial RGB или i8080 в режиме 8 или 9 бит.
-
Сделал фоту картинки на LQ035NC111, который запустил: Оригинал картинки: Всё бы ничего, но мне не нравится малый угол снизу - цвета деградируют. При наклонах влево-вправо цвета сохраняются. P.S. Я вижу рисование горизонтальных полосок на этом дисплее, если внимательно присмотреться. Если увеличить частоту обновления с 60 до 90 или 120 Гц, то рисование полосок уже незаметно.
-
Вот как раз за 100 руб. отдали весь телефон GX500 с этим превосходным дисплеем ))) На али я сделал две удачных покупки с LCD: это маленький OLED 160x128 и большущий LCD от Мерседеса - за 5000 рублей. Остальные дисплеи попадались какие-то трешовые. Особенно из ценовой категории 500 - 1500 р. И ещё, когда брал LCD в маазинах запчастей от телефонов - того же K800i, то качество оптики было настолько ужасным, что я вынужден был взять и найти б/у телефон с оригинальным дисплеем хорошего качества оптики. Ну тоесть китайцы хорошо копируют только контроллер дисплея, а оптику делают говённую, по сравнению с дисплеями от оригинальных телефонов. Найди отличия, как говорится: Вот ещё расписал все списки дефектов в алишных дисплеях, которые на шилдах идут, часто совмещаемые с разъемами на SD-карту: Нет. Форум игровой тематики.
-
Возвращаясь к теме качества картинки и без пересветов чёрного. Вот как минимум должна выглядеть картинка на LCD, чтобы она радовала мои глаза: Без пересвета чёрного. Отличные насыщенные цвета. Нет полосчатости, под разными углами цвет одинаковый. Анти-бликовое покрытие без переотражений. На фотах - IPS дисплей снятый с телефона GX500. А вы говорите телега... 🤩 Дай такое качество дисплеев, купленных с Али ! 🤣
-
Пока к счастью, просили HDMI формат с цифровой камеры по MIPI CSI, что я уже научился делать. ))) Захват с камеры, кодирование в H264, упаковка в контейнер (AVI,MP4), мультиплексирование с аудио-потоком... Лично мне хватит 320x240 с камеры ))
-
И это радует! Только на фото уровень чёрного сильно пересвечен. Этим грешат практически все покупные диплеи - не стоит ждать от них супер-характеристик по оптике. Дисплеи круче и за 100 рублей, я снимал с телефонов, которые скупал пачками на барахолках. Там такого безобразия с пересветом чёрного (из-за плохой системы подсветки) нету. Ну это для хобби, а не для масс-штампинга. ))) Выбираю дисплеи по двум основным критериям: сочная картинка под любым углом - без пересветов и деградаций цветов. И чтобы динамика была не хуже, чем Th, Td <=15 ms (лучше 10 ..12 ms). Потому что мне нужны анимирующиеся изображения. Для масс-штампинга HDMI всякие просят - приходится их тоже делать, чтобы не умереть с голоду... На счёт пикселя с размером кулак )) порадовало такое высказывание))) Покопался у себя в запасах, нашёл LCD 320x240 от телефона, рядом с ним дисплей, который запустил на предыдущей странице. Оба дисплея имеют одинаковое разрешение, но у того что слева - пикселы не с размером кулак ))) Да и вообще, эти брожжения на счёт старой или не старой телеги, или пикселей с размером кулак - это всё второстепенно для обитателей технического форума. К чему вообще такие брожжения? Я к примеру, не критикую элементную базу, кем-то используемую. Потому что как минимум мне это неинтересно, плюс это не моего ума дело. Так почему тогда другие обитатели позволяют себе эти брожжения в адрес меня?
-
Это смотря какая диагональ дисплея. Те дисплеи, с телефонов старых, с которыми я работал, у них очень маленькая диагональ (для разрешения 320x240). К тому же есть ряд приложений, где нужны крупные пикселы. Например, при разработке своих игровых консолей с Pixel-Art играми: там чем крупнее пиксел, тем лучше. У телефона K800i прошивка могла определять тип контроллера дисплея. Есть двa способа - отдельная ножка или регистр с ID. По моему, там вторая модификация с контроллером Epson, и она уже не может аппаратно масштабировать. Swirl. Это есть не у всех Allwinner. G2D в T113-s3 может поворачивать на ортогональные углы. А вообще, в другом форуме меня вдохновили вернуться к LCD от телефонов с i8080 интерфейсом. Они бывают сильно мелкими - 320x240 не с 3,5", а меньше раза в 2...3. И просто обалденное качество! Анти-бликовое покрытие, и изображение как-будто насыщенными чернилами нарисовано! По-моему это IPS. Но они все i8080 : 8/9/16/18 бит. Я покурил китайскую доку на TCON от Allwinner и понял, что по ходу наклёвывается нехилый шанс запустить дисплей с i8080 интерфейсом через олвиннеровский TCON. При этом, сохраняются все преобразования при выводе картинки с видеобуфера на LCD (преобразование YUV в RGB через CSC, альфа-блендинг видео-плоскостей и приоритеты). Как я понял из той доки, инит контроллера делается традиционно - через пару адресов: Index/Data. А изображение отрисовывается из памяти Allwinner в LCD командой TCON_CPUIF_FLUSH. Конечно, можно заполнять через Index/Data/Data/... и даже натравив DMA. Но это будет только одна плоскость без аппаратного блендинга слоёв и преобразования YUV в RGB. Интересно, откуда он возмёт тайминги - ширина стробов и прочее? Возможно, это завязано на параметры развёртки. И придётся городить двойную синхронизацию (это только для анимированных картинок, чтобы избежать эффекта разрезания изображения) - ловить сигнал VSYNCO от ноги LCD, затем включать TCON FLUSH на отрисовку однократно 1 кадра, затем отловить завершение отрисовки от TCON и отключить отрисовку. И так по кругу по мере надобности. Аналогично так сделал с OLED 160x128, у которого своя память и развёртка, в режиме RGB TCON. Тоесть - нужно 2 прерывания(внешнее от LCD и внутреннее от TCON). Дисплей на таких маленьких разрешениях можно сделать не 60, а 120 или 180 Гц развёртку.
-
Кстати, вспомнил. Гамма-коррекцию настраивал в дисплее от K800i LCD. По умолчанию цвета были несколько темнее. Дополнительная фича: контроллер (только Тошибовский! Их две вариации!) поддерживает аппаратный скейлинг в 2 раза по обоим осям (без сглаживания). Тоесть кроме 320x240, доступно ещё и 160x120 - что очень привлекательно для нано-поделок
-
По своему опыту скажу, что иногда хочется цвета по-насыщеннее вывести, это гамма выше чем по умолчанию. Визуально это видно.
-
Не обязательно матрица TN. Контроллеры универсальны: тот же самый контроллер может быть в дисплеях с другими типами матриц. Вы сами себе противоречите. Для TN - смеётесь, а для IPS - не надо. Так для чего тогда надо?