Распиновка vga монитор proview 700p ма718кс
Данная статья не является исследованием, это, скорее, отчет о проделанной работе, в котором я постарался показать основную идею и наиболее интересные и сложные на мой взгляд места. По сложности этот проект следует за «поморгать светодиодом», но имеет огромный потенциал к расширению. В проекте намеренно не используются готовые IP-ядра и стандартные интерфейсы, так как проект изначально планировался как рукописный. Также это поможет немного выиграть по ресурсам и быстродействию. Надеюсь, эта статья будет интересна читателям, а желание увидеть себя на экране через «самодельную камеру» сподвигнет к изучению FPGA.
В некоторых местах проекта архитектура и синтаксис кода могут быть не оптимальны. Это связанно с тем, что реализацией проекта я занимался в свободное время, и между подходами иногда были перерывы в несколько месяцев: старые мысли забывались, но появлялись новые. Так, например, сильно был упрощен центральный автомат: от первоначального монстра осталось лишь название «global». Перед публикацией я провел рефакторинг кода, но если будут обнаружены недостатки, прошу указать на них в комментариях.Проблемы и способы их решения
Для того чтобы понимать, что нас ждет, взглянем на железо и оценим, с какими проблемами нам предстоит столкнуться. Камера OV7670. Камера способна выдавать изображение разрешением 640х480 точек с частотой 30 кадров в секунду в формате RGB565. Для работы камеры необходимо подавать на нее клок частотой 24 МГц. Камера передает пользователю данные по 8 битной шине, а также стробы синхронизации VSYNC и HSYNC. Временные диаграммы работы камеры представлены на рисунке 1.
Рис.1
Информация о цвете передается за 2 такта побайтно. Упаковка данных в байты представлена на рисунке 2.
Рис.2
VGA монитор. VGA это аналоговый сигнал, поэтому подавать цифровые данные на его вход не получится. Но на борту DE-1 имеются 4-х разрядные ЦАП, их мы и задействуем для преобразования цифрового сигнала в аналоговый. VGA с разрешением 640х480 имеет частоту обновления 60 кадров в секунду. Необходимо выставлять данные на ЦАП с частотой 25.175 МГц, а также формировать стробы синхронизации VSYNC и HSYNC. Тайминги для VGA можно посмотреть здесь.
Становится ясно, что частота поступления данных с камеры и частота вывода данных на монитор отличаются, что исключает возможность прямого подключения. Выход из этой ситуации — использование кадрового буфера. Выделим в памяти две равные области: в одну будет записываться текущий кадр с камеры, а из второй извлекаться предыдущий, после окончания записываемого кадра буферы меняются местами. Для хранения одного кадра требуется 640*480*16 = 4.915*10^6 бит, что гораздо больше имеющейся на борту Cyclone II памяти on-chip. Поэтому будем использовать для хранения кадров память SDRAM, расположенную отдельным чипом на плате DE-1. Это позволит нам организовать фрейм буфер для решения технической задачи и даст возможность потренироваться в написании контроллера SDRAM.
Следующая проблема вытекает из решения предыдущей. При использовании памяти SDRAM в нашем проекте необходимо учитывать два важных момента: во-первых, работает память на высокой для нашего дизайна частоте 120 МГц и перед нами появляется новая проблема — передача данных из клокового домена камеры в клоковый домен SDRAM; во-вторых, для достижения максимального быстродействия писать в SDRAM следует целыми транзакциями, которые называются burst. Для решения этих проблем наилучшим способом подходит FIFO, организованное в on-chip памяти FPGA. Основная идея такова: камера на низкой частоте заполняет FIFO, после чего контроллер SDRAM считывает данные на высокой частоте и сразу одной транзакцией записывает их в память.
Вывод данных на монитор организован то такому же принципу. Данные из SDRAM записываются в FIFO, а затем извлекаются на частоте 25 МГц для подачи на ЦАП. После опустошения FIFO операция повторяется.
Самой мелкой проблемой является то, что настройки камеры «из коробки» нас не устраивают, и необходимо их изменить. Самый важный момент, камера выдает данные в формате YUV422, и необходимо поменять его на RGB444. Для обращения к внутренним регистрам OV7670 необходимо будет описать модуль передатчика I2C.
Теперь можно сказать, какие модули нам придётся реализовать, и какие задачи они будут решать.
- cam_wrp – модуль принимает данные с камеры и записывает их во входное FIFO;
- hvsync – модуль вырабатывает стробы для VGA, принимает данные из SDRAM, записывает их во входное FIFO и по стробу подает на ЦАП;
- sdram_cntr – контроллер SDRAM;
- FSM_global – автомат управления;
- camera_configure – модуль конфигурации и управления камерой.
Рис.3
Рассмотрим подробнее каждый из модулей.
Модуль cam_wrp
Один из самых простых модулей. Его задача в момент действия строба hsync камеры принимать последовательно по два байта, формировать из них одно двухбайтовое слово и записывать его в FIFO. По сигналу от SDRAM контроллера передать ему все содержимое FIFO.
Для «упаковки» 2-х последовательных байт в одно слово используем сигнал wr_fifo, который инвертируем по клоку (делим частоту на 2). Когда этот сигнал в логической 1, записываем данные в младший байт, когда в логическом 0 — в старший. Также используем wr_fifo, как сигнал записи в FIFO. Кроме шины данных из FIFO выведена шина, на которую выставляется число записанных в него данных. Эта шина подключена к автомату управления. На рисунке 4 представлена временная диаграмма «упаковки» байт в двухбайтовые слова.
Рис.4
Модуль FSM_global
Модуль имеет весьма пафосное название, на деле это несложный автомат всего на 4 состояния, но выполняет он очень важную функцию. Отслеживая сигнал готовности sd_ready SDRAM контроллера, наполненность входного и выходного FIFO, автомат выдает в команды SDRAM контроллеру забрать данные из входного или записать в выходное FIFO. Чтение и запись происходят несколько раньше, чем FIFO полностью заполнится или опустошится. Необходима правильно выбрать уровень заполненности FIFO, чтобы операции с FIFO на высокой частоте не закончились раньше, чем на низкой, — это гарантированно приведет к ошибкам. В части, посвященной SDRAM контроллеру, я приведу рисунок, иллюстрирующий эту особенность.
Модуль SDRAM_contr
Контроллеров SDRAM написано уже много, изобретать велосипед в очередной раз не хотелось, поэтому я решил изобрести велосипед на гусеничном ходу. А именно, SDRAM контроллер, заточенный под этот конкретный проект. Это упростит управление и чуть-чуть ускорит работу. Граф переходов автомата для полноценного SDRAM контроллера представлен на рисунке 5.
Рис.5
Подумаем, что мы сможем из него исключить.
Во-первых, не будем рефрешить данные. Это допущение абсолютно точно не подойдет для контроллера общего назначения, но в нашем случае мы задействуем одну и ту же область памяти, постоянно обращаясь к ней. Данные не будут успевать деградировать.
Во-вторых, так как мы всегда будем записывать и считывать данные вектором длиной 640, можно отказаться от возможности работы с отдельными числами, будем писать только burst.
В-третьих, не надо думать над адресом, мы просто будем инкрементировать его после каждого burst и обнулять в конце каждого кадра. Получившийся граф переходов представлен на рисунке 6.
Рис.6
Стартует контроллер в состоянии idle. Перед началом нормальной работы необходимо провести инициализацию микросхемы памяти (состояние автомата s0_MRS), после чего выставляется флаг mode_flag, контроллер переходит в состояние ожидания, и мы можем записывать и считывать данные. Для этого из модуля fsm_global поступает команда начала чтения или записи, открываем необходимый столбец в выбранном банке (состояние s0_ACT), и далее должно происходить чтение или запись (состояния s0_WRIT, s0_READ). К сожалению, обойтись одним burst не выйдет, глубина столбца в нашем чипе памяти всего 256 16-ти битных слов, а нам необходимо записывать вектор длиной 640. Придется писать за 3 burst, два по 256 и одни на 128. Видно, что половина третьей строки остается пустой, то есть мы нерационально используем ресурсы, но так как недостатка в них у нас нет, я решил не усложнять автомат и смириться с этим.
Что касается адресов, для них выделены разные регистры для чтения и записи, которые инкрементируются перед каждым bust. Таким образом, для записи вектора длиной 640 мы проходим 640*4=1440 адресов. Стробом вертикальной синхронизации камеры или VGA адреса обнуляются для записи и чтения соответственно.
Мы используем двойную буферизацию: в один буфер пишем из другого читаем. Для упрощения один буфер я разместил в банке 0, а второй в банке 1 чипа SDRAM. Банки для чтения и записи меняются местами после окончания приема кадра с камеры. На рисунке 7 представлены временные диаграммы записи одного вектора. Видно, что запись разбита на 3 части: после каждой адрес инкрементируется, вся передача происходит под стробом cur_wr. Для чтения диаграмма аналогична.
Рис.7
На рисунке 8 показано, как происходит запись в SDRAM данных с камеры в сравнении со временем заполнения FIFO. Обратите внимание, что мы начинаем писать в SDRAM, не дожидаясь окончательного заполнения FIFO.
Рис.8
Модуль hvsync
Модуль camera_configure
Изначально позволив себе вольность домашнего проекта и невнимательно прочитав документацию, я хотел запустить камеру с настройками «по умолчанию», но оказалось, что без настройки OV7670 передает информацию в формате не RGB565, а в YUV422. Переписывать ничего не хотелось, и я решил, что надо делать все по уму и нормально проинициализировать камеру. Так как камера управляется по I2C, в голову пришла идея использовать NIOS. NIOS с коркой I2C с opencore завести с полпинка не удалось, но я случайно наткнулся на Verilogовский модуль инициализации именно для OV7670. Он так легко встроился в код, что не пришлось практически ничего менять, изменил только одну строку: вместо RGB565 активировал режим RGB444, так-как на плате стоят именно 4 разрядные ЦАП. На рисунке 9 представлена временная диаграмма программного сброса камеры записью числа 0х80 по адресу 0х12.
Рис.9
Демонстрация результата
После того, как все модули написаны, соединяем их вместе в топ-модуле, собираем в Quartus, и можно тестировать. Видео демонстрирует полученный результат.
Мной было выбрано не очень удачное время для съемки — закат и очень яркое солнце, — камера неадекватно реагирует на слишком яркие солнечные блики. Видно, что движущиеся объекты отображаются корректно, дерганий и шлейфов нет. Именно этого я и добивался, используя FPGA, которая позволяет обрабатывать все 30 (а возможности камеры больше) fps малой кровью. Если говорить о четкости изображения, то могу сказать, что текст с листа А4 читается без сложностей, к сожалению, фото с монитора получаются хуже, чем в реальности. На рисунке 10 показан фрагмент листа А4 с документацией на камеру.
"
На представленных видео и фото видны некоторые недостатки: первый с резкостью и второй с цветом.
Проблему с резкостью на видео я связываю с неидеально выставленным фокусом. Фокус настраивается на камере механически, вкручиванием или выкручиванием находящейся на резьбе линзы. Резьба пластиковая и имеет довольно большой люфт, даже от небольшой тряски резкость может ухудшаться.
Проблема с чрезмерной зеленожелтостью белого листа, мне кажется, связана с проблемой с балансом белого: съемка производилась в помещении с освещением, далеким от естественного. Также на ситуацию с цветностью могут влиять настройки камеры. Я практически не экспериментировал сними, использовал как magic number.
Заключение
Поставленная задача — вывод изображения с камеры OV7670 на VGA монитор в реальном времени, — решена. Если сравнить результат, полученный в данном проекте с результатом, полученным другими разработчиками, использующими микроконтроллеры или Arduino, видно, что они уступают в скорости отображения движущихся объектов. По трудоёмкости данный проект не превосходит аналогичные, выполненные с использованием микроконтроллера. Человек, обладающий начальными знаниями в разработке дизайна FPGA, может реализовать его за несколько дней. Проект имеет большой потенциал к расширению, возможна фильтрация полученного изображения, распознавание предметов и прочее. Дизайн на чипе Cyclone II занимает следующие ресурсы: LE – 745(4%), memory bits – 32768 (14%), PLL – 1 (25%), Embedded Multiplier — 0(0%), — таким образом, разработчикам остается еще достаточно ресурсов для реализации своих идей.
Послесловие
Что дальше? В дальнейшем я планирую расширять проект, добавив обработку изображения в реальном времени с использованием матричных фильтров.
Выражаю благодарность ishevchuk за советы по содержанию и оформлению статьи и моей девушке за проверку орфографии.
При первом включении на экране монитора появились загадочные узоры. Долго думал, что это может быть такое. В итоге оказалось, что в камере не был выставлен фокус. После того, как я покрутил линзу на объективе, все встало на свои места.
" alt=«image»/>
При втором включении камера была неправильно проинициализированна, что привело к неожиданному селфи.
"
контакт разъема мамы VGA
1 15
2 12
3,4 земля
5 14
6 13
13 9
Переводить распиновку VGA думаю не надо. А обрезанный кабель это вся проблема?
Информация Неисправности мониторов Прошивки мониторов Схемы мониторов Программаторы для мониторов Справочники Маркировка компонентов
Это информационный блок по ремонту мониторов
Блок очень краткий и предназначен для тех, кто случайно попал на эту страницу. В разделах форума размещена следующая информация по ремонту:
- диагностика;
- измерение;
- методы ремонта;
- схемы;
- прошивки;
- замена компонентов;
- советы и секреты мастеров;
Какие типовые неисправности в мониторах?
Если у вас есть вопрос по устранению неисправности монитора и в определении дефекта, Вы должны создать свою, новую тему. Перед этим ознакомьтесь с наиболее частыми решениями проблем:
- не включается;
- ремонт блока питания;
- нет подсветки;
- неисправность инвертора;
- нет изображения;
- нет сигнала;
- замена ЖК матрицы;
- замена компонентов;
Где скачать прошивку монитора ?
Файлы прошивок (дампы памяти) и информация как обновить ПО в мониторах (ЖК, CRT) находятся как непосредственно в вопросных темах, так и в отдельных разделах:
Где скачать схему монитора ?
Схемы (Shematic Diagram) и сервисные мануалы (Service Manual) находятся как в вопросных темах, так и в отдельных разделах по мониторам:
Как прошить монитор?
Наиболее часто это делается с помощью программатора. Programmer (программатор) - устройство для записи (считывания) информации в память или другое устройство. Ниже список наиболее популярных программаторов, которые выбирают мастера при ремонте мониторов:
- Postal-2,3 - универсальный программатор по протоколам I2C, SPI, MW, IСSP и UART. Подробно - Postal - сборка, настройка
- TL866 (TL866A, TL866CS) - универсальный программатор через USB интерфейс
- RT809H - универсальный программатор микросхем EMMC-Nand, FLASH EEPROM памяти через интерфейсы ICSP, I2C, UART, JTAG
- CH341A - самый дешевый (не дорогой) универсальный программатор через USB интерфейс
Где скачать справочник ?
В процессе ремонта часто возникает необходимость в справочных данных электронных компонентов - распиновка, маркировка, режимы работы, итд. На форуме масса этой информации:
Как определить компонент ?
В первую очередь конечно по маркировке. Marking (маркировка) - обозначение на корпусе электронного компонента (радиодетали). Некоторые темы:
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.
Последние посетители 0 пользователей онлайн
Объявления
@dasZebra , я знаю и всегда помню про это - работа обязывает. Видишь ли. не зря же в некоторых кругах говорят, что против взлома нет приёма, окромя другого взлома. Был в моей жизни однажды случай - один недоделанный индивидуй, возомнив себя супер хакером, полез пошерстить мою служебную почту. Что он там хотел найти и какие цели преследовал, я уже не скажу - не знаю; но закончилось всё тем, что моя "легавая", почуяв неладное, будучи выдрессированной на подобные эксцессы, пошла по его следочкам, вычислила засранца, и в его же логове придавила. Уточняю - придавила его конечно не физически(а то "всевидяще око" опять узрит в моих действиях насилие над двуногим, и, возомнив себя всемогущим божеством, начнёт угрожать санкциями). Однако тот умник теперь совершенно безвреден - посидев полгода в заперти в своей конуре, добровольно предложил соответствующим органам своё сотрудничество; и наверное теперь даже доволен жизнью на свободе, служа Отечеству. Ну да ладно. опять отвлёкся от темы. Так что там у нас-у вас на фронте с пандемией? Функционеров от медицины, угрожающих под страхом уголовного преследования обязательным вакцинированием всех поголовно еще не обезвредили? Почему интересуюсь этим. Ка-то на днях сети встретилось выступление одного околоправительственного пилюлькина. Вещал, что непривитые, отказываясь от вакцинации не думают том, что лечение одного больного ковидом-19 обходится бюджету в 200 тыс. руб., а закуп оборудования для лечения одного пациента ещё в пол лимона. Дохтура ви-шь ли бюджет беспокоит. Попробовал бы он не лечить - быстренько пошёл бы по соответствующей ст. УК РФ.
Т.е., если вставил кому-то. в "кассу", то надо подождать, чтобы и тебе вставили? Мля. ну и логика!
значит барыга Алик накрутил полштуки за t0-сенсор, как за доп опцию Мне из-за Амура этот мультик передал знакомый китаец-челнок, а забрал он его тоже у Алика; ну а ссыль, где оне го взял, скинул мне на гаджет, чтобы показать его цену, якобы для того,чтобы я убедился в том, что он ничего лишнего себе с меня не взял. Такштаа. мапед не мой. ЗЫ. Мультик, кстати, тоже в такой же комплектации.
Медленно заболевал мой второй монитор и в итоге заболел. Видео поломки не мое, но моя неисправность идентичная.
Полазил я по шасси со щупом осциллографа, посмотрел напряжения и осциллограммы. Пока проводил эти мероприятия спалил ШИМ в источнике питания. Это не беда, съездил на рынок купил микросхему, впаял. Потом было установлено, что при подключенном проводнике накала кинескопа к плате кинескопа происходит такое:
напряжение накала 5,2…5,4 В
80 В скачет 79-81 В с периодом приблизительно 1,5 с
Сигнал G1 напряжение скачет -60 …-150 В
Сигнал G +60…+80 В
осциллограмма WF12 скачет амплитуда импульсов 300 В…1,1 кВ
осциллограмма WF15 скачет амплитуда импульсов 7…12 В.
При отключении накала от кинескопа все сигналы и осциллограммы приходят в порядок и соответствуют тех документации.
Раз так, видимо дело в питании накала!
Выпаял я конденсатор.
Измерил параметры старого конденсатора
Большое ESR!
Взял из своих запасов аналогичный конденсатор и измерил его параметры
Разница видна 100%
Впаял новый конденсатор и монитор заработал. Попутно заменил несколько конденсаторов на плате кинескопа и в схеме X-RAY на более свежие и пропаял некоторые элементы, т.к. у этих мониторов плохая заводская пайка и часто становится причиной неисправности.
Читайте также: