Перейти к содержанию
    

repstosw

Участник
  • Постов

    2 694
  • Зарегистрирован

  • Победитель дней

    2

Весь контент repstosw


  1. SDK Allwinner V3s

    Актуально.
  2. Добил 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) здесь и рядом не валялись! 🤣
  3. Для нано-поделий, использую дисплеи с разрешениями: 160x128 320x240 400x240 Больше для моих целей не нужно. Для тамагочи выше написал разрешения. Дисплеи разные нужны. Дисплеи разные важны!
  4. Пыхтонрасты. Краем уха услышал, что новые камни Allwinner будут программироваться исключительно на языке Rust. Китайская инициатива. Так что есть вероятность, что C/C++ вскоре будет вытеснен из этой ниши. Ногодрыг очень медленный у AW. даже под голым железом. Искуственный интеллект, распознавание образов, работа с большими пластами данных: парсинг, сортировка... Всё это набирает обороты, чтобы установить тотальный контроль над каждым человеком, и не дать ему уйти в случае чего... Понимаете, куда всё идёт?
  5. Реанимировал свой старый телефон 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/
  6. На счёт кратности высоты 16. На всякий случай лучше проверить, что декодер не пишет в память за пределы буфера. Возможна порча памяти при декодировании, если проигнорировать требование кратности 16: декодер может записать недостающие строки ниже (за пределами выделенного буфера).
  7. Освоил. Всё работает. Теперь кадр читается из видео-памяти автоматически без участия CPU. Кроме этого, доступны все навороты Display Engine: слои, альфа-блендинг и преобразование YUV в RGB. Из-за того, что дисплей от X503 не имеет ножки FMARK или VSYNC, не могу синхронизировать вывод кадра с TCON на дисплей. Поэтому вывод пикселей на дисплей идёт автоматически без синхронизации .
  8. Завитки на денежных купюрах без лупы видите? Я вижу. ))) Сделал чтение ID чипа из регистра. Нужно было запретить вывод на линии D0..D23 перед чтением:
  9. Уже запускал его: Он не IPS. Обычный TN. Но контраст хороший 400:1, достаточно яркий 350 кд/м^2. даже анти-бликовое покрытие есть (обнаружил не сразу - была наклеена защитная плёнка). Но не дотягивает до идеала углами обзора. Если смотреть сбоку, то цвета немного меняются и освещение падает. На Али есть модификации этого дисплея, и даже с пометкой "IPS". Но к сожалению, контакты на шлейфе урезаны - его в Serial RGB надо загонять через инит SPI. Оригинал LQ035NC111 можно использовать в Serial RGB специальными контактами на шлейфе. Да. Подтверждаю: особенно малый угол выходит снизу (если смотреть со стороны шлейфа). С IPS такого безобразия нет. Я бы его поставил в конструкцию, если не найду решения лучше. И 3,5 дюйма диагональ - многовато... Мне бы 2 - 2,4". Нано-девайс хочется Как Nano-Player, который сделал в 2019 г.
  10. Хороший сайт! В своё время нашёл там 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):
  11. Проделал замеры, в ходе которых пришёл к выводу, что 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) Это всё хорошо, но я не увидел где устанавливается ширина стробов чтения, записи. И прочие вещи, которые немаловажны.
  12. Нужно размеры 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-итерфейс.
  13. Учёл конечно! Отдаю себе отчёт в том, что дисплей 240x320. А не 320x240. И это надо учитывать при синхронизации вывода кадра из TCON в GRAM LCD.
  14. Запустил дисплей от телефона 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
  15. Главное, чтобы детали уместили только на одной стороне. Иначе дырку делать придётся на плате. Ну и чтоб от флюса отмыта были. И с отдельной аналоговой землёй )))
  16. На нано-терминал. Только не с почтовую марку, диагональ 3,5" - полностью в ладонь помещается. Но вы правы - мне нужен дисплей ещё меньше. Остановился на 2,4". Нужна IPS матрица с разрешением 320x240, не больше чем 2,4 дюйма диагональ, поддерживающая Serial RGB или i8080 в режиме 8 или 9 бит.
  17. Сделал фоту картинки на LQ035NC111, который запустил: Оригинал картинки: Всё бы ничего, но мне не нравится малый угол снизу - цвета деградируют. При наклонах влево-вправо цвета сохраняются. P.S. Я вижу рисование горизонтальных полосок на этом дисплее, если внимательно присмотреться. Если увеличить частоту обновления с 60 до 90 или 120 Гц, то рисование полосок уже незаметно.
  18. Вот как раз за 100 руб. отдали весь телефон GX500 с этим превосходным дисплеем ))) На али я сделал две удачных покупки с LCD: это маленький OLED 160x128 и большущий LCD от Мерседеса - за 5000 рублей. Остальные дисплеи попадались какие-то трешовые. Особенно из ценовой категории 500 - 1500 р. И ещё, когда брал LCD в маазинах запчастей от телефонов - того же K800i, то качество оптики было настолько ужасным, что я вынужден был взять и найти б/у телефон с оригинальным дисплеем хорошего качества оптики. Ну тоесть китайцы хорошо копируют только контроллер дисплея, а оптику делают говённую, по сравнению с дисплеями от оригинальных телефонов. Найди отличия, как говорится: Вот ещё расписал все списки дефектов в алишных дисплеях, которые на шилдах идут, часто совмещаемые с разъемами на SD-карту: Нет. Форум игровой тематики.
  19. Возвращаясь к теме качества картинки и без пересветов чёрного. Вот как минимум должна выглядеть картинка на LCD, чтобы она радовала мои глаза: Без пересвета чёрного. Отличные насыщенные цвета. Нет полосчатости, под разными углами цвет одинаковый. Анти-бликовое покрытие без переотражений. На фотах - IPS дисплей снятый с телефона GX500. А вы говорите телега... 🤩 Дай такое качество дисплеев, купленных с Али ! 🤣
  20. Пока к счастью, просили HDMI формат с цифровой камеры по MIPI CSI, что я уже научился делать. ))) Захват с камеры, кодирование в H264, упаковка в контейнер (AVI,MP4), мультиплексирование с аудио-потоком... Лично мне хватит 320x240 с камеры ))
  21. И это радует! Только на фото уровень чёрного сильно пересвечен. Этим грешат практически все покупные диплеи - не стоит ждать от них супер-характеристик по оптике. Дисплеи круче и за 100 рублей, я снимал с телефонов, которые скупал пачками на барахолках. Там такого безобразия с пересветом чёрного (из-за плохой системы подсветки) нету. Ну это для хобби, а не для масс-штампинга. ))) Выбираю дисплеи по двум основным критериям: сочная картинка под любым углом - без пересветов и деградаций цветов. И чтобы динамика была не хуже, чем Th, Td <=15 ms (лучше 10 ..12 ms). Потому что мне нужны анимирующиеся изображения. Для масс-штампинга HDMI всякие просят - приходится их тоже делать, чтобы не умереть с голоду... На счёт пикселя с размером кулак )) порадовало такое высказывание))) Покопался у себя в запасах, нашёл LCD 320x240 от телефона, рядом с ним дисплей, который запустил на предыдущей странице. Оба дисплея имеют одинаковое разрешение, но у того что слева - пикселы не с размером кулак ))) Да и вообще, эти брожжения на счёт старой или не старой телеги, или пикселей с размером кулак - это всё второстепенно для обитателей технического форума. К чему вообще такие брожжения? Я к примеру, не критикую элементную базу, кем-то используемую. Потому что как минимум мне это неинтересно, плюс это не моего ума дело. Так почему тогда другие обитатели позволяют себе эти брожжения в адрес меня?
  22. Это смотря какая диагональ дисплея. Те дисплеи, с телефонов старых, с которыми я работал, у них очень маленькая диагональ (для разрешения 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 Гц развёртку.
  23. Кстати, вспомнил. Гамма-коррекцию настраивал в дисплее от K800i LCD. По умолчанию цвета были несколько темнее. Дополнительная фича: контроллер (только Тошибовский! Их две вариации!) поддерживает аппаратный скейлинг в 2 раза по обоим осям (без сглаживания). Тоесть кроме 320x240, доступно ещё и 160x120 - что очень привлекательно для нано-поделок
  24. По своему опыту скажу, что иногда хочется цвета по-насыщеннее вывести, это гамма выше чем по умолчанию. Визуально это видно.
  25. Не обязательно матрица TN. Контроллеры универсальны: тот же самый контроллер может быть в дисплеях с другими типами матриц. Вы сами себе противоречите. Для TN - смеётесь, а для IPS - не надо. Так для чего тогда надо?
×
×
  • Создать...