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

VGA адаптер для микропроцессорного устройства

Можете попробовать сделать что нибудь из OSD (On Screen Display) микросхем. Они еще где то должны остаться (на стадии вымирания :) )

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

когда-то давно делал выход на TV с монохромного дисплея с контроллером T6963.

Altera 7064 и 1/8 ОЗУ 62256, один день заняло достаточное для реализации освоение ПЛИС.

Одна строка ЖК дисплея 2 раза отображалась на TV, 4 раза для VGA.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут есть следующий вопросик. я тут прикинул и получилось, что для частоты 60гц и разрешения 800*600 необходимая частота выдачи пикселей получилась - 25 Мгц.. Что будет проблематичным для большинства недорогих процессоров.... Смущает, то что в примерах с процессорным выводом стоят кварцы с более низкой частотой, и производительноастью...

Может я не правильно пощитал, или вывод можно организовать каким либо "хитрым образом"???

За пример для расчета брал следующую диаграмку...(прилогаю в файле)

post-51621-1331105824_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1056*628*60=39790080 Гц. Т.е. порядка 40 Мгц. Можно конечно уменьшить частоту кадров вдвое, но это все равно порядка 20Мгц. Можно пойти путем сокращения количества blanking строк и пикселей. Но все это полу-меры - какие-то LCD мониторы такие режимы будут поддерживать а какие-то нет.

 

Попутно нашел вот такое решение. http://www.microvga.com

Что характерно на снимке просматривается Xilinx для разветки изображения. Вторая микросхема - судя по всему микроконтроллер но какой не разобрать.

Для Вас вопрос использования только микроконторллера - вопрос принципиальный? По тому как решение типа "микроконтролле+FPGA" достаточно простое.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может я не правильно пощитал, или вывод можно организовать каким либо "хитрым образом"???

Правильным решением будет сделать развёртку картинки из отдельной памяти с помощью любой FPGA, а вот заполнение этой памяти процессор может вести в любом удобном ему темпе. Для этого видеобуфер делится на 2 части - одна часть разворачивается на экране, другую в этот момент заполняет процессор, и это два независимых друг от друга процесса.

Как только процессор заполнил "теневую" память - он ждёт от FPGA импульса вертикальной развертки (прерывание), и в этот момент просто меняет местами теневой и текущий буфер. Это делается одной записью в регистр, без копирования всех данных. После этого FPGA начинает разворачивать на экране вновь созданное процессором изображение.

Таким образом можно выводить картинки даже самыми медленными процессорами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Использование встроенного SPI контроллера дает возможность понизить тактовую частоту в 8 или 16 раз. Но проблема часто бывает в том что у микроконтроллера "на борту" часто бывает только один SPI контроллер. Чтобы организовать хотя-бы двухбитовый цвет таких нужно два.

Как выход из такой ситуации - можно извне микроконтроллера поставить 2...N сдвиговых регистра c параллельной загрузкой и последовательным выходом. Внутренний SPI использовать параллельно внешним сдвиговым регистрам для простоты синхронизации. По прерыванию от SPI произвести Update внешних сдвиговых регистра и загрузить их новыми значениями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильным решением будет сделать развёртку картинки из отдельной памяти с помощью любой FPGA, а вот заполнение этой памяти процессор может вести в любом удобном ему темпе. Для этого видеобуфер делится на 2 части - одна часть разворачивается на экране, другую в этот момент заполняет процессор, и это два независимых друг от друга процесса.

 

Да полностью с вами согласен.... Скорее всего єто самый правильный путь для решения поставленной задачи... вопросик... Как я понимаю из ваших слов "видеобуфер делится на 2 части" - ето не делиться на 2 части, а является 2мя физически разделенними микросхемами...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да полностью с вами согласен.... Скорее всего єто самый правильный путь для решения поставленной задачи... вопросик... Как я понимаю из ваших слов "видеобуфер делится на 2 части" - ето не делиться на 2 части, а является 2мя физически разделенними микросхемами...

Совсем необязательно - микросхема памяти может быть одна, в ней два логических видеобуфера, ну, условно, с адреса 0 первый буфер, с адреса 0x100000 второй буфер. В регистре FPGA нужно предусмотреть бит, который указывает, из какого буфера FPGA разворачивает изображение на экран, 0 или 1, таким образом, в противоположный буфер можно процессором записывать картинку, затем, по кадровому импульсу синхронизации процессор переключает этот бит.

Тут вам придётся решать вопрос с разделением циклов доступа к памяти, чтобы процессор и FPGA корректно обращались к одной и той же памяти. И разнесение буферов в 2 разные микросхемы не решает этой проблемы. Видимо, арбитражем доступа будет заниматься та же FPGA - в свободные от циклов чтения моменты разрешать процессору запись в память. Также на FPGA можно возложить синхронизацию переключения буферов с вертикальной развёрткой.

Как видите, довольно запутаная история ... :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут вам придётся решать вопрос с разделением циклов доступа к памяти

Вот именно єто я и имел ввиду.... Хотя можно и позпморачиватся с арбитражем, всетаки это более дешевый (1 микросхема + место на плате) вариант, хотя и более торудоемкий.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обратите внимание на хмегу, много SPI и DMA имеется.

Когда вы определитесь с VGAрежимом, разрешением экрана и глубиной цвета тогда и нужно думать на чём можно реализовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

P.S. Выводить на экран необходимо текст (хотябы 2 величины шрифта с русскими символами), желательно с возможностью указания цвета шрифта, простейшие графические фигуры (прямоугольные рамки, линии), и по возможности простейшие небольшые 2х (8ми) битные изображения (хотя и не обязательно).

основная проблема - вывод графики, так как потребуется буфер таких размеров что во внутреннюю память МК не влезет.

с выводом текста гораздо проще (стандартный текстовый режим 80х40 = 3200 байт, еще на 2 помножить если текст цветной плюс буфер на одну строку)

можно ногодрыганием практически из любого МК десяток мегагерц получить. если ограничиться 1, 8/16 цветами то с несложной внешней логикой эффективная частота вывода в 2/8 раз повышается если порт 8 бит.

 

т.е. даже на авр можно попробовать приготовить буфер на одну строку (успеть бы за время обратного хода луча) а потом выплёвывать с тактовой частотой/3 (ld два такта?): забив память парами команд ld r0, y+; out portx, r0; если хотя бы уполовинить разрешение по горизонтали, то можно успеть.

 

а если взять арм с 16/32 разрядными портами io, то тем более.

за раз выдавать в порт 4/8 точек, а простой внешней логикой выталкивать их последовательно в VGA.

stm32 / lpc11xx (правда как у них с быстродействием io - я хз) стоит от 1.5$ + 5m40Z - стоит еще дешевле.

 

еще как вариант - adsp-bf592, стоит 6$, но зато есть человеческий параллельный порт 16бит х 66МГц. можно даже hi color - 65536 цветов сделать r-2r цапом :) но опять же только для текста, под графику памяти маловато. хотя на небольшие картинки вроде 100х100, например - хватит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PIC или AVR при наличии SPI)получается только монохром 16 символов в строке

Очень давно сделал вывод на VGA 32*22 символов c фонтом 13*20 и 16 цветов на mega128 16мгц без каких-либо внешних чипов. Сомтрелоссь просто супер, но только на CRT, на LCD было хуже. Для вывода на LCD частота генератора должна совпадать с VGA, иначе вертикальные линии размазывает.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для вывода на LCD частота генератора должна совпадать с VGA, иначе вертикальные линии размазывает.

 

А не подскажите, например, для 800*600 (640*480) какая должна быть частота генератора?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А не подскажите, например, для 800*600 (640*480) какая должна быть частота генератора?

VGA Signal Timing

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

получилось, что для частоты 60гц и разрешения 800*600 необходимая частота выдачи пикселей получилась - 25 Мгц.. Что будет проблематичным для большинства недорогих процессоров
можно снизить разрешение до 320х200, частота пикселей сильно упадет. У многих контроллеров есть параллельные порты с DMA (FSMC у STM32, Paralel port у PIC). 8 бит на точку - 3+3+2, и нужен контроллер с минимум 64К ОЗУ.
Изменено пользователем zöner

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...