Видеовыход Raspberry Pi Pico
TL;DR
Raspberry Pi Pico - это невероятный маленький микроконтроллер. Хотя у него нет встроенного интерфейса видеовыхода, как у его более крупных собратьев Raspberry Pi Zero / 1 / 2 / 3 / 4 / 400 (HDMI / двойной HDMI в их случае), можно добавить видеовыход на Pico! (Как VGA или DVI через разъем HDMI, подробности читайте далее)
В этом посте мы расскажем, почему видеовыход - это особенная функция для микроконтроллеров, и какие типы видеовыходов можно собрать или купить для вашего Pico. Мы также покажем вам пример кода - уже предварительно скомпилированного, так что вы можете скачать его напрямую, а затем поговорим о том, что нужно изменить, чтобы он заработал.
Наш сестринский магазин, buyzero.deКомпания продает различные аксессуары для Pico, включая носок DVI, и Несущая плата VGA для Pico.
Примечание: на Pico не установлена операционная система Linux, как на Raspberry Pi Zero W например. Поэтому, скорее всего, вам придется немного углубиться в изучение того, как писать и загружать свои приложения на Pico. Если это не ваш конек, Pi Zero W может быть, лучше начать играть 🙂 .
Если вам удалось сделать свой собственный видеопроект с помощью Raspberry Pi Pico, сообщите нам об этом в комментариях!
Почему добавление видеовыхода Raspberry Pi Pico является сложной задачей?
Raspberry Pi 400например, базируется на SoC BCM2711. Эта система-на-кристалле имеет специализированное аппаратное обеспечение, которое заботится о выводе видео, идеально подготавливая его в формате, определенном для конкретного видеоинтерфейса (интерфейсов), два порта HDMI в случае Пи 400. Он также обладает огромной памятью (4 Гб), в которой хранятся выходные видеоданные.
Чтобы лучше понять это, нам нужно рассмотреть некоторые основы компьютерного видеовывода:
Отображение и передача видео
Мы видим изображение на экране "сразу". Наш мозг имеет массово-параллельную схему, при которой он получает информацию сразу от всех доступных клеток сетчатки (колбочковых и палочковых).
(* механизм передачи информации в мозг объединяет несколько клеток сетчатки, но факт остается фактом - множество информации передается параллельно. Загляните в биполярные клетки если вам интересно узнать больше)
Мозг, однако, имеет задержки - он не в состоянии разрешить изменения в зрительных стимулах быстрее 13 мс. (что составляет примерно 1 к 75 кадрам в секунду).
Для нас это означает, что если мы хотим показать действительно плавную анимацию, нам нужно показывать около 60 различных статичных картинок в секунду. Наш мозг будет воспринимать эти статичные картинки как плавное и реалистичное воспроизведение.
Как правило, мы хотим, чтобы эти фотографии были цветными.
У нас три разных фоторецептора для цвета, поэтому на экране отображаются только эти три разных цвета с разной яркостью. И опять же, наш мозг синтезирует промежуточные цвета на основе полученной информации. (В качестве примечания, фиолетовый не существует как отдельная длина волны - это смесь красного и синего).
Существует три основных цвета:
- красный
- зеленый
- голубой
Вместе они известны как RGB. При добавлении всех трех цветов получается белый. При добавлении красного к зеленому получается желтый, при добавлении зеленого к синему - голубой, при добавлении синего к красному - пурпурный.
Итак, что мы действительно хотим получить в результате:
- три разных цвета,
- каждый с разным значением яркости
- в идеале около 60 различных значений в секунду (60 Гц)
- определенное разрешение экрана - например, 640 x 480
Давайте посчитаем, сколько это данных в секунду:
- 3 цвета
- x 8-битная глубина цвета
- x 60
- x 640 x 480
= 442.368.000 бит в секунду = ок. 422 МБит/с
(Учтите, что, например, интерфейс USB v1.1 на Pico имеет скорость около 10 Мбит/с - примерно в 40 раз меньшую пропускную способность!)
Для вывода этой информации в идеале нужно хранить ее в виде растрового изображения в оперативной памяти - одна часть вашего приложения будет обновлять изображение в оперативной памяти, а другая позаботится о доставке данных в формате, с которым может работать монитор. Это должна быть оперативная память, поскольку мы работаем на высоких скоростях и должны иметь возможность надежно считывать данные с небольшими задержками, чего Flash-память не обеспечит.
Давайте подсчитаем, сколько оперативной памяти нам нужно:
- 640 x 480 (разрешение)
- x 3 (цвета)
- x 8 бит (глубина цвета)
= 7372800 бит = 900 кБайт (примечание: 1 байт = 8 бит)
Хотя 900 кБайт многократно превышают объем оперативной памяти компьютера. Raspberry Pi 400, Pico имеет только 264 КБ оперативной памяти.
Как видите, нам придется уменьшить некоторые параметры (например, разрешение, глубину цвета, ...), если мы хотим вместить растровое изображение в оперативную память, или придумать, как заставить его работать, не сохраняя все!
Pico RP2040 PIO позволяет выводить видеоданные
Наконец, если Raspberry Pi 400 и другие модели Raspberry Pi имеют специальные аппаратные схемы для обработки всей этой информации и ее надежного вывода, то Pico не имеет специальных схем, предназначенных только для вывода видео.
Но у него есть одна хитрость в рукаве! RP2040 поддерживает PIO (программируемый ввод-вывод). PIO предназначен для эмуляции различных интерфейсов с точной синхронизацией, и он очень мощный! Его можно запрограммировать на чтение из оперативной памяти и вывод данных на высоких скоростях.
Мы будем использовать PIO для вывода видео на некоторые пины GPIO, и будем использовать некоторые дополнительные схемы (резисторы) для приведения сигнала в нужное состояние, в зависимости от интерфейса вывода видео, к которому мы хотим подключить Pico.
История форматов вывода видео
Прежде чем перейти к рассмотрению вопроса о том, как добавить видеовыход в Raspberry Pi Pico, давайте посмотрим на историю форматов видеовыхода.
Как уже говорилось, человеческий глаз не способен распознать изменения в изображении быстрее, чем за 13 мс. Поэтому одним из первых подходов к созданию компьютерных мониторов был ЭЛТ (катодно-лучевая трубка) монитор.
ЭЛТ имеет три лучевые пушки, которые прочесывают пиксель за пикселем, строка за строкой. (и затем им требуется некоторое время, чтобы вернуться в исходную точку). На экране есть разноцветные люминофоры, которые продолжают излучать свет еще некоторое время после того, как через них прошел луч. При следующем прохождении лучевой пушки через данный пиксель интенсивность луча может измениться, что мы увидим как более темный пиксель. Наш мозг объединяет соседние разноцветные пиксели люминофора в один пиксель и не способен заметить изменения яркости между проходами луча.
Таким образом создается иллюзия движущегося изображения.
По сути, им не нужно, чтобы все данные присутствовали в начале изображения, но только текущее значение жесткости пикселя. В зависимости от этого будет изменяться интенсивность луча. Для этого мы можем использовать аналоговый сигнал - например, увеличение напряжения приведет к увеличению яркости.
Нам нужно три разных провода для разных цветов (чтобы управлять каждой лучевой пушкой по отдельности), и нам нужно иметь способ сообщить монитору, когда нужно начать новую строку, и когда нужно начать новое изображение (когда все строки уже показаны).
VGA (видеографическая матрица)
VGA был разработан именно для таких ЭЛТ-мониторов. Он до сих пор довольно часто используется в качестве входа на мониторах, хотя все больше устаревает по мере перехода на полностью цифровую передачу данных (подробнее об этом позже).
Это также самый простой стандарт видеовыхода для работы на Pico.
Рядом со спецификацией (с режимами разрешения по умолчанию) указан разъем - VGA:
Он имеет 15 контактов:
- RED (красное видео)
- ЗЕЛЕНЫЙ (зеленое видео)
- СИНИЙ (синее видео)
- ID2/RES (зарезервировано)
- GND (земля HSync)
- RED_RTN (возврат красного цвета, аналоговая земля для красного цвета)
- GREEN_RTN (возврат зеленого цвета, аналоговая земля для зеленого цвета)
- BLUE_RTN (возврат синего цвета, аналоговая земля для синего цвета)
- KEY/PWR (+5 В постоянного тока питает микросхему EDID EEPROM на некоторых мониторах)
- GND (заземление VSync, DDC)
- ID0/RES (зарезервировано)
- ID1/SDA (данные I2C с DDC2)
- HSync (горизонтальная синхронизация)
- VSync (вертикальная синхронизация)
- ID3/SCL (тактовый генератор I2C с DDC2)
Примечание: Кабели VGA могут поддерживать различные разрешения, глубину цвета и частоту обновления, в то время как слово "VGA" при упоминании разрешения обычно означает 640 x 480.
Как видите, есть три провода с данными изображения, по одному на каждый цвет. Сигнал передается с пиковым (максимальным) напряжением 0,7 В. Сигналы, передаваемые для цветов, являются аналоговыми по своей природе - более высокое напряжение увеличивает яркость, напряжение 0 означает, что пиксель темный / выключен.
Обеспечение работы VGA-выхода на Pico
Это означает, что Pico с его цифровым выходом 3,3 В имеет достаточно высокое напряжение, чтобы подавать его на контакты RGB в VGA-кабель (который ожидает напряжения 0-0,7 В). На самом деле нам нужно снизить напряжение с помощью резисторов.
Мы можем построить простой ЦАП (цифровой аналоговый преобразователь), объединив несколько резисторов и контакты GPIO. В зависимости от комбинации контактов GPIO, которые активны в каждый момент времени, мы имеем различные уровни напряжения (= уровни яркости):
Как видно на рисунке выше, пять GPIO (0 -4) управляют одним каналом (в данном случае красным), что дает нам пятибитную глубину. Резисторы взвешены 1:2:4:8:16, например, наименее значимый бит (LSB) красного цвета имеет резистор 8,06K.
При попытке собрать эту схему вам следует выбрать 1 резистор с допуском % чтобы получить хороший снимок.
Обратитесь к разделу "Проектирование аппаратного обеспечения с помощью RP2040", чтобы понять, как были рассчитаны значения резисторов. Короче говоря, если мы будем управлять всеми ими одновременно, то получим напряжение 0,74 В, что вполне подходит для наших целей.
Если говорить более конкретно, то данный эталонный дизайн предполагает поддержку широко используемого 16-битного формата данных RGB (RGB-565), в котором используется по 5 бит для красного и синего цветов и 6 - для зеленого. Мы можем сократить фактический физический выход на зеленый до 5 выводов GPIO, как и для других цветов, чтобы сэкономить один вывод.
Кроме того, еще 2 вывода необходимы для синхронизации горизонтального и вертикального бланкирования (HSYNC и VSYNC).
Таким образом, для управления выходом VGA нам потребуется всего 17 выводов GPIO. К счастью, Pico имеет 26 доступных контактов GPIO, что позволяет нам управлять выходом VGA.
Как уже упоминалось ранее, Pico также способен управлять этими выводами на необходимых частотах и с точной синхронизацией, благодаря функции RP2040 PIO (программируемый ввод/вывод).
Оборудование для вывода видеосигнала Raspberry Pi Pico VGA
Компания Raspberry Pi разработала и выложила в открытый доступ плату-носитель для Pico, которая демонстрирует различные возможности:
- Выход VGA
- кнопки
- слот microSD
- аудиовыходы (аналоговый ШИМ, цифровой I2S)
Приобрести плату Pico VGA / Audio / microSD
Мы (buyzero.de) в настоящее время находится в процессе разработки и сборки этой платы референсного дизайна для нас. Свяжитесь с нами, если хотите получить уведомление, когда доску можно будет купить!
Сайт Плата Pico VGA теперь доступна для покупки у нас, первоначальный запас ограничен!
Тем временем компания Pimoroni также создала свою версию этой доски, они называют ее Pimoroni Pico VGA Demo Base.
Примечание: каждый из 15 выводов rgb-выхода должен работать со скоростью около 17,58 Мбит/с, что все равно впечатляет, но гораздо более управляемо!
Программное обеспечение, необходимое для управления выходом VGA
Поскольку мы работаем на Pico, нет никаких "графических драйверов", которые мы могли бы просто установить. Нам придется писать код самим... или нет 🙂 .
К счастью, люди, разработавшие для нас аппаратную плату, уже предоставили некоторый код, который мы можем использовать, так что мы можем сосредоточиться на нашем проекте.
Примеры кода, которые вы можете использовать, можно найти в репозитории pico-playground:
В этом репозитории находится простой проигрыватель фильмов под названием попкорн (который воспроизводит фильмы в пользовательском формате). A большой кролик, размером 1,6 Гб можно скачать здесь. Обратите внимание, что это необработанные образы дисков для записи на SD-карту - этот пример предполагает, что у вас есть демонстрационная плата VGA, которая имеет слот SD. Инструкции для конвертирование фильмов также приведены.
В коде используется pico_scanvideo библиотеку (pico/scanvideo.h) из pico_extras репозиторий. Также посмотрите в этом репозитории примеры кода аудио!
- pico_scanvideo - включает в себя обширную документацию!
API выводит параллельные данные RGB и сигнал синхронизации на выводы для DPI VGA (с использованием резисторных ЦАП, как описано выше).
Это очень важно:
- Программа PIO scanline по умолчанию принимает данные с кодировкой длины пробега - это означает, что вы можете экономить оперативную память для создания плоских цветовых областей (я думаю об играх!).
Как правило, лучше всего использовать Библиотека pico_scanvideo вместо того, чтобы разрабатывать код вывода VGA с нуля 🙂 .
хорошая практика кодирования
Больше демонстраций
Проверьте каталог scanvideo в репозитории pico-playground:
- Мандельброт: генератор Мандельброта, использующий фреймбуфер 320x240x16
- sprite_demo: прыгающие головы Эбена (видео в верхней части нашей страницы!)
- тестовый_шаблон: Отображение цветных полос
Использование платы VGA
При компиляции необходимо передать CMake дополнительный параметр:
-DPICO_BOARD=vgaboard
TBD: Добавить пошаговые руководства
DVI: Цифровой визуальный интерфейс
Технологии идут вперед. Жизнь идет вперед. ЭЛТ все больше и больше устаревают, их вытесняют более современные плоские экраны с цифровыми интерфейсами. Никаких движущихся лучей, только пиксели.
Некоторое время сигналы продолжали оставаться аналоговыми, но это не очень желательно, поскольку нам приходится брать что-то цифровое, преобразовывать его в аналоговое, а затем снова преобразовывать в цифровое. Изображение будет менее точным, и у нас появятся дополнительные схемы, от которых мы могли бы отказаться.
Появился DVI. В нем предусмотрительно предусмотрена возможность передачи и аналоговых сигналов, поэтому можно было создавать простые адаптеры/кабели DVI - VGA. Конечно, графическая карта должна была выводить как аналоговые, так и цифровые данные. Но это помогло принять стандарт и сделать его широко распространенным.
Здесь нас интересуют цифровые сигналы (DVI-D), так как мы хотим использовать их в бит-банкинге с Raspberry Pi Pico.
При использовании DVI-D данные изображения передаются последовательно.
Одноканальное (самое простое) соединение DVI состоит из четыре так называемые каналы TMDS (дифференциальная сигнализация с минимизацией перехода):
- красный
- зеленый
- голубой
- пиксельные часы
Дифференциальная сигнализация используется для минимизации помех (т.к.
Всего на пиксель приходится 24 бита (8 бит x 3 цвета), а кодируются данные с помощью кодировки 8b10b (8 бит отображаются на 10-битные символы на реальной физической линии, чтобы, помимо прочего, достичь баланса постоянного тока).
DVI обращается с пикселями так же, как и VGA: все передается заново каждый раз, когда изображение "запускается" снова, и данные точно синхронизируются. Это похоже на телефонную линию, которая постоянно используется, когда два человека разговаривают.
Примечание: в отличие от этого, DisplayPort рассматривает данные как пакеты - что имеет ряд преимуществ.
В отличие от примера с VGA, рассмотренного выше, поскольку данные передаются в цифровом виде, а не в виде аналоговых значений яркости, это означает гораздо больший объем данных.
Люк РенИнженер, работающий с Raspberry Pi, считает, что RP2040 (сердце Pico) также сможет управлять DVI-выходом, опять же используя PIO.
В результате Хранилище PicoDVI & проекты, и Pico DVI Sock.
Люк Рен подсчитал, что около Последовательные данные 252 Мбит/с должен управляться через цифровые колодки GPIO - дифференциальный последовательный, который эмулируется двумя односторонними колодками.
Выше вы видите схему, используемую для управления выходом DVI (с помощью разъема HDMI, подробнее об этом ниже) - это просто несколько 270 Ом резисторы.
Люк Рен пошел еще дальше и добавил двойной выход DVI к своей схеме PicoDVI с помощью платы-плагина:
HDMI: совместим с DVI в сторону уменьшения
HDMI - это следующая эволюция разъемов (и конкуренция с DisplayPort). Он полностью совместим с цифровыми сигналами DVI по нисходящей линии - таким образом, вы можете использовать простые, чисто пассивные конвертеры DVI / HDMI.
Pico DVI Sock
Pico DVI Sock - это простое и недорогое решение для добавления цифрового видеовыхода к вашему Pi. Он был разработан Люком Реном (см. описание выше). Он представляет собой выход DVI с разъемом HDMI. Поскольку HDMI совместим с DVI по нисходящей, вы можете использовать HDMI-кабель для подключения Pico к HDMI-дисплеям:
Программирование Pico DVI Sock
TL;DR
Вы можете скачать наш picodvi-test.zip и начните играть с компиляцией примеров .UF2 в нем. В комплект также входит PDF-файл с пошаговым руководством.
Примеры кода
Люк Рен предоставляет примеры кода в его репозитории. Однако, чтобы использовать их с Pico DVI Sock, вам нужно установить правильный конфиг. Мы покажем вам, как это сделать в этом мини-руководстве.
Необходимые условия установки
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
Клонируйте репо PicoDVI от Люка Рена:
cd ~
mkdir pico
cd pico
git clone https://github.com/raspberrypi/pico-sdk
cd pico-sdk
git submodule update --init
cd ~/pico
git clone https://github.com/Wren6991/PicoDVI.git
Чтобы использовать примеры кода с Pico DVI Sock, вам нужно установить параметр правильная конфигурация контактов использовать. Добавьте следующую строку в common_dvi_pin_configs.h просто до первый #ifndef
#define DEFAULT_DVI_SERIAL_CONFIG pico_sock_cfg
Создание примеров
cd PicoDVI/software/
mkdir build
cd build
export PICO_SDK_PATH=~/pico/pico-sdk
make -j$(nproc)
Установите примеры на Pico
Собранные примеры будут находиться в папке software/build/apps.
Нажмите и удерживайте клавишу BOOTSEL на Pico, затем подключите плату к компьютеру с помощью разъема microUSB. Скопируйте и вставьте соответствующий файл .uf2, который вы хотите попробовать - например, sprite_bounce.uf2 - на Pico.
Pico автоматически перезагрузится, и вы сможете увидеть выход на разъеме HDMI (помните, что на самом деле это DVI :-)).
Скачать
Вы можете скачать наш picodvi-test.zip и начните играть с компиляцией примеров .UF2 в нем. В комплект также входит PDF-файл с пошаговым руководством. Если в sprite_bounce.uf2 не работает, попробуйте использовать другой монитор - возможно, не все мониторы совместимы с этим видеовыходом.
Если вы дошли до этого момента, сообщите нам в комментариях, как это сработало для вас и какие идеи проектов вы придумали!
Приобретите носок Pico DVI Sock
На нашей странице, buyzero.de, представлены Pico DVI Sock в двух вариантах:
- Только Pico DVI Sock (для самостоятельной пайки) @ 6,58 € в настоящее время
- Pico DVI Sock на Pico, с предварительно распаянными разъемами @ 17,89 € в настоящее время
Sidenote: DBI и DSI дисплеи
Кстати, в репозитории Raspberry Pi Pico Extras есть места для DBI (16-битные дисплеи MIPI DBI - с параллельной передачей данных) и DSI (последовательные дисплеи MIPI), так что в будущем мы можем увидеть поддержку и этих дисплеев.
Есть ли пример композитного выхода с genlock?
Я думаю, что композитный выход должен быть возможен, но пока не видел ничего об этом в природе.
В качестве альтернативы scanvideo я реализовал другую библиотеку VGA/TV для Raspberry Pico - 'PicoVGA', которая, на мой взгляд, проще в использовании: http://www.breatharian.eu/hw/picovga/index_en.html
Спасибо, что поделились информацией о своей библиотеке!
Эй, можно ли использовать этот HDMI в качестве входного устройства и обрабатывать данные.
так как он запрограммирован, и поскольку резисторы ограничивают выходной сигнал Raspberry Pi - нет.
Возможно, вы могли бы использовать адаптацию дизайна, с чем-то, что повышает уровень сигнала, а не понижает его / и, конечно, адаптированный код для выходов, чтобы работать как входы, чтобы иметь возможность обрабатывать видеоданные внутри Pico.
Несколько практических советов. Благодаря кремниевой лотерее ваше конкретное устройство может разгоняться не пропорционально графическому и центральному процессорам. Поэтому, если вам не нужна более быстрая графика, не разгоняйте его GPU. Это увеличит ваши шансы на более высокий разгон и стабильную работу системы. Кроме того, меньшее энергопотребление и меньший ток питания означают лучшую стабильность. Raspberry Pis с 4 ядрами процессора могут столкнуться с проблемой энергопотребления при нагрузке на все 4 ядра. Встроенный PMIC (микросхема управления питанием) может не обеспечить необходимый ток для всех ядер и отключиться на короткий промежуток времени, что приведет к перезагрузке Pi. Охлаждайте PMIC тоже. Не перенапрягайтесь на максимуме, если вам нужна нагрузка на все ядра (компиляция ядра, тяжелые операции с числами и т.д.). Здесь у нас RPI4, который может работать на частоте 1850 МГц со всеми ядрами при напряжении over_voltage=2, но при более высоком over_voltage=3 он перезагружается при нагрузке. Более высокое over_voltage означает и более высокий ток, а схема PMIC имеет ограниченный выходной ток. Чем сильнее нагревается PMIC и окружающие его индукторы, тем меньший ток он может выдать. Это ограничение микросхемы PMIC, а не чипсета BCM. Поэтому, если вы сталкиваетесь с периодическими перезагрузками при большой нагрузке, это может быть связано с перегревом PMIC. Если ваш Pi заблокируется, это будет не эта конкретная проблема, а, возможно, потеря кремниевой лотереи. Разгон GPU может быть интересным способом повышения разгоняемости (более стабильная система), но, по некоторым данным, в старых Raspberry Pis кэш L2 был привязан к GPU, поэтому разгон может замедлить работу CPU. Я задокументировал, как нагревается PMIC в Raspberry Pi 4 - все остальные чипы охлаждаются непосредственно радиатором. Вид с нижней стороны, то есть вы видите нагретую печатную плату. В левом нижнем углу находится PMIC.
Большое спасибо за эти практические советы!
Привет,
Я здесь новичок... Кто-нибудь может предоставить схему вывода на дисплей cvbs. И какие-либо необходимые изменения в исходном коде?
Извините, но я не знаю, что делать с квадроциклами.
Здравствуйте
Спасибо за прекрасный пост. Я прочитала его от начала и почти до конца 😉 .
Однако у меня есть несколько глупых вопросов:
1. В RPi Pico есть ШИМ. Возможно ли использовать один контакт с ШИМ для вывода аналогового сигнала, который будет подаваться на контакты VGA? Так будет использоваться меньше контактов. А также более простые и маленькие схемы.
2. Возможно ли снова получить аналоговый AV-выход с RPi Pico, используя ШИМ? Думаю, большинство телевизоров это поддерживают. Возможно, используя модуль типа https://thecaferobot.com/store/pub/media/catalog/product/cache/14d1897c7f1bd4f35a7de1523300314a/l/c/lcd-01-057-1.jpg можно приобрести в местном магазине, к которому у меня есть доступ. Однако на картинке, которую я прислал, изображен модуль для Arduino, но, полагаю, его можно использовать и с Pico.
3. Если кто-то хочет использовать VGA или DVI в сочетании с Pico, можно ли не использовать эти вспомогательные платы VGA или DVI? Потому что в моем регионе они недоступны для покупки, а мои навыки недостаточно хороши, чтобы создать их самостоятельно.
1. ШИМ-пины, вероятно, не будут иметь той точности синхронизации, которую вы хотели бы иметь для вывода видео (именно поэтому мы используем PIO, который имеет очень точную синхронизацию). Но почему бы не попробовать 🙂 .
2. Я предполагаю, что должна быть возможность генерировать аналоговый AV-выход с Raspberry Pi Pico. Я сомневаюсь, что ШИМ будет "достаточным" для этого (буду рад, если кто-нибудь с большим опытом выскажется по этому поводу!).
Обратите внимание, что ШИМ просто включает и выключает сигнал, в то время как лестница резисторов, используемая, например, в плате VGA, дает непрерывный уровень сигнала. Поэтому для работы ШИМ-решения оно должно работать на гораздо более высоких частотах, чем требуется для реального сигнала. Я также не уверен, как внешнее оборудование отреагирует на то, что сигнал будет ШИМ, а не непрерывным аналоговым сигналом.
Возможно, его можно сгладить с помощью очень маленького конденсатора, для чего необходимо произвести соответствующие расчеты.
3. вспомогательные платы VGA / DVI содержат все необходимое (в основном резисторы). Вы можете посмотреть на схему и собрать свою собственную установку на макетной плате, возможно, я видел, как кто-то делал это для VGA.
При этом мы осуществляем международную доставку:
https://buyzero.de/products/raspberry-pi-pico-vga-audio-sd-expansion-board?variant=39412666335412
Pico DVI Sock @ buyzero.de магазин
Отличная информация. Спасибо.
Также нашел вот это: Композитный видеовыход на Raspberry pico
http://www.breakintoprogram.co.uk/projects/pico/composite-video-on-the-raspberry-pi-pico
Мне удалось собрать picoDVI от Wren6991 и интегрировать его с тройным АЦП для сканирования RGB 15Khz (640×240).
В 320×240, где используется только одно ядро, второе остается в покое, получая прерывания HSYNC /VSYNC и готовя dma-передачи без проблем, но в 640×480 использование двух ядер блокирует нормальную работу системы.
Поскольку мне нужна половина линий, есть ли способ иметь всегда готовую черную линию для нечетных линий? С помощью этого я освобождаю одно ядро для моих дел.
Я не думаю, что вам нужно отправлять пустые строки. Вы посылаете все нечетные строки, посылаете сигнал vsync с дополнительной половиной строки и посылаете четные строки. Проведите исследование "импульсы синхронизации чересстрочного видео".
Кто-нибудь знает, как загрузить видео, сделанное самостоятельно, а не из примеров? Заранее спасибо!
Я хочу использовать его для создания уникального аудиовизуального дисплея. Пожалуйста, кто-нибудь может мне подсказать:
Можно ли подать питание на Pico через кабель HDMI, даже если он находится на стороне вещания?
Можете ли вы установить цветовое пространство Rec2100 (цветовое пространство rec 2020 HDR)?
Можно ли подключить к HDMI дополнительные линии для передачи звука (и сигнала rec2020/HDR)?
Можете ли вы вывести видео через один из форматов USB-видео (видео с неизменного Pico через адаптер USB to Pico)?
Используя беспроводной Pico, может ли он работать с Miracast?
Можно ли сделать обычный растровый видеорежим и манипулировать им для игровой графики, используя оставшиеся циклы?
Seedstudio выпускает мини-плату RP2040. Может ли плата интерфейса HDMI и программное обеспечение работать на ней. У них также есть версия RiscV с wifi, так что было бы хорошо, если бы она могла перекомпилироваться для этого.
https://www.seeedstudio.com/XIAO-RP2040-v1-0-p-5026.html?queryID=31d59a67f7c148df996ba9c1bb7563e3&objectID=5026&indexName=bazaar_retailer_products
Меня интересуют игровые приложения, например, использование игровых часов.
Какой-нибудь JavaScript минимально жизнеспособную платформу времени выполнения поставить туда?
Извините, что много спрашиваю, но
Самое интересное.
Спасибо.
Могу ли я использовать вашу карту вместе с интерпретатором MMBasic от Geoff? Существуют ли какие-либо аппаратные ограничения для моих программ, связанные с вашей картой?
Великие умы мыслят одинаково, я тоже думал об этом! Я уже собрал компьютер MMBASIC на базе Raspberry Pico с VGA-выходом, и это не что иное, как фантастика! Однако выход DVI-D (псевдо-HDMI) выводит графические возможности на новый уровень! Конечно, MMBASIC не обязательно полностью использовать большую глубину цвета или разрешение, но работа в режиме 640×480, скажем, с 64 цветами была бы довольно приятной.
С учетом сказанного, я вижу две ближайшие проблемы.
1. Решение VGA также использует контакты PIO, а затем одно из ядер используется для управления спрайтами, буферизации кадров и т.д. Я полагаю. Как минимум, потребуется изменение кода, по крайней мере, для замены реализации VGA PIO. Что касается API, то я тоже буду удивлен, если интерфейс между PIO (VGA) и кодом ядра фреймбуфера будет таким же, как и в решении DVI PIO, но я могу ошибаться. В любом случае, придется менять код.
2. ОПЕРАТИВНАЯ ПАМЯТЬ. Ее не хватает, поэтому большие разрешения и глубина цвета будут проблемой. Но я думаю, что у меня есть решение. Использовать внешнюю PSRAM, и, возможно, использовать один RP2040/Pico в качестве "GPU", и у него есть своя собственная выделенная PSRAM. Затем он общается со вторым RP2040, который обеспечивает "CPU" или мозг системы, работая под управлением MMBASIC, и он может манипулировать/перемещать графические активы, давая указания GPU с минимальными накладными расходами (скажем, по I2C-связи). Я хочу/нужно это 😉
64 евро за "Плата расширения Raspberry Pi Pico VGA Audio SD"? Лучше бы использовали ноль...
У Pimoroni есть менее дорогой (30 €), но все равно много. DVI Sock стоит всего несколько евро ...