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

Мастерю свой RAMDAC для VGA, есть проблемы


Рекомендуемые сообщения

Добрый день! Это мой первый пост на этом форуме, хочу поделиться своими соображениями по сабжу и попросить совета. Опыт работы с электроникой не очень большой и то по сути только в логикой, всего пару месяцев как засел за avr-микроконтроллеры, так что далеко не все тонкости могу знать. В общем...

Хочу сделать типа "видеокарту" для вывода картинки по VGA 640x480x60гц. А точнее фрейм-буфер (или как он там правильно называется) данные из которого преобразуется в аналоговые цветовые сигналы для монитора. Чтобы чуток упростить требование к железу решил, что мне достаточно будет разрешения картинки в 4 раза меньше (320х240) но при этом стандарт таймингов для синхросигналов остается как для  640x480, то есть просто буду 4 пикселя брать за один, это позволит мне сэкономить на частоте пикселей, вместо 25мгц получается ~12.5мгц. Цвет каждого пикселя удобнее всего кодировать одним байтом по схеме 3R-3G-2B (8 значений красного, 8 зеленого и 4 синего, всего 256 цветов). Таким образом мне нужно как минимум 76800 байт на буфер, то есть микросхемку памяти на 128К*8bit (выбрал CY7C109D). Я даже написал консольную утилиту, которая конвертирует любую картинку в нужный формат и на выходе выдает готовый массив байтов. Я звял Atmega664P, не без проблем, но настроил нормальный и достаточно четкий ШИМ для h-sync и v-sync, подключил к монитору и проверил на одном красном цвете, что все работает и все строчки заливаются красным. Осталось дело за малым, я подключил оперативку к МК, подключив все 17 ног адреса, 8 ног данных и 4 для управления памятью заняв практически все выводы мк кроме SPI интерфейса. Теперь надо только по нужным таймингам выставлять на портах адрес для оперативки, а 8 бит данных от нее через нехитрую схему с резисторами (ЦАП) выдавать на монитор. И да, перед этим я предварительно закинул часть картинки во flash-память контроллера, который при запуске "заливает" ее в sram, осталось только бегать по всем адресам и снимать картинку. Но ничего не работало. Перебор адресов на атмеге слишком медленный, в идеале переключение адресов должно происходить с интервалами 79.4 нс а это всего 2 процессорных такта и то при условии, что мк будет работать кварце 25мгц, а судя по отладке в AtmelStudio один цикл тратил 57(!) тактов. При этом надо изменить значения в трех портах (2 целых порта и один бит на еще одном порту), инкрементировать счетчик, переключить управляющие оперативкой пины, чтобы записать значение. Короче, никакой avr тут не справиться, даже если упороться, все переписать на асм и забустить частоту, все равно будет мало.

Ну собственно думать долго не пришлось, сразу пришла идея использовать отдельные битовые счетчики (например SN74HC4040D, на 12 бит) поставить два таких, подать высокочастотный сигнал на нужные мне 12.5 мгц (хотя тут опять-таки всплывается, что есть синхронные и асинхронные счетчики, и типа асинхронные на высоких частотах работают не так как хотелось бы, мне тут пока не все понятно). Я соорудил схему с таким счетчиком в Протеусе, вроде все работает, НООООО...

И тут я наконец-то подошел к вопросу, который уже несколько дней не могу решить. Дело в том, что как я сказал в начале, изначальное разрешение 640х480 я решил уменьшить до 320х240, то есть вместо 640 пикселей на одну строку мне за этот же период времени нужно вывести в 2 раза меньше с меньшей частотой, таким образом пиксели "растянутся" в два раза на одну строку. Но нам так же нужно растянуть пиксель и по вертикали, то есть сделать так чтобы две горизонтальные линии идущие друг за другом были одинаковые, потом еще две одинаковые и так далее до конца кадра. Но наш битовый счетчик считает все по порядку строку за строкой, по идее пройдя по одной линии нужно было бы вычесть из адреса 320 и инкрементировать дальше, чтобы получить две одинаковые строки. Но из счетчика нельзя вычитать, тем более произвольные значения. Можно забить память одинаковой информацией, чтобы не было манипуляций с адресами, но тогда и понадобится в 2 раза больше памяти (стоит сильно дороже) и вообще хранить одну и туже информацию ну совсем не вариант. Я еще рассматривал, что если использовать sram с организацией 64к*16 бит, то есть уменьшаем разрядность адреса с 17 до 16 (до двух портов мк) и храним в одной ячейке сразу два пикселя. Таким образом можно оптимизировать время доступа, но все равно не достаточно для использования мк avr и это никак не решает подход с битовым счетчиком. 

В общем я не вижу выхода как решить проблему дублирующих строк через битовый счетчик. А если все же использовать микроконтроллер, то какой, STM32? У меня с ним нет опыта, да и не слишком ли он жирный для такой вроде бы тривиальной задачки. Может вообще есть дешевая и простенькая готовая RAMDAC микросхемка? Знаю, что такие есть, типа AT76C176, но дорого и фиг где купишь да и не понятно в точности то ли это, что надо или не очень. По этому прошу совета у знающих специалистов, может кто сталкивался с подобным и может дать совет, как лучше сделать. Я в курсе разных поделок "видеоприставок" на ардуино, где они генерируют картинку и текст через vga (от туда я подсмотрел настройки таймеров и шим) но мне нужен именно модуль преобразования информации из памяти в картинку. 

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

2 hours ago, RedSpirit said:

 SN74HC4040D, на 12 бит) поставить два таких

В VGA кадре 525 строк по 800 пикселей. Часть пикселей с видеосигналом, а часть бланкирующие пикселы с нулем. Это нужно для того, чтобы луч ЭЛТ монитора успел переместиться к началу новой строки.

В данном случае частота пикселей в 2 раза меньше, строка будет 400 пикселей, из них 320 с видео сигналом, остальные 80 пикселей просто ноль.

Два счётчика SN74HC4040, соединенные последовательно. Первый считает до 400 и сбрасывается обратно в 0. Эти импульсы сброса можно использовать для образования горизонтальных синхроимпульсов. Выходные линии первого счётчика используются как младшие адреса ОЗУ фрейм-буфера.

Второй счётчик считает до 525 и  принимает импульсы от первого для адресования строк. Старшие адресные линии для ОЗУ берутся со второго счётчита со сдвигом на 1. Поэтому строки будут удваиваться, т.е. первый счётчик успеет пробежать дважды по кругу, пока второй переключится на следующую строку.

Соответственно, нужно перераспределить кадр в ОЗУ с учётом пустых бланкирующих мест. То есть строка в таком раскладе будет длиной 512 байт. Первые 400 байт адресуемые счётчиком, остальные 112 байтов просто пропадают неиспользуемые. В строке первые 48 байт нулевые, соотвествуют по времени горизонтальному синхроимпульсу, потом 24 байта просто 0, затем 320 байтов видео данные строки, и наконец, оставшиеся тоже 0.

Строки расположены в памяти с шагом 512 байт.

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

3 часа назад, RedSpirit сказал:

звял Atmega664P

Нафига вообще использовать этих динозавров, когда ARM МК уже копейки стоят?

 

3 часа назад, RedSpirit сказал:

STM32

У них, как минимум, есть возможность аппаратной работы с внешней памятью.

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

14 часов назад, Yurkin2015 сказал:

Два счётчика SN74HC4040, соединенные последовательно. 

Звучит как потенциальное решение, надо будет с утреца обдумать. Спасибо за развернутый ответ. Если что-то получится обязательно отпишусь.

13 часов назад, BARS_ сказал:

Нафига вообще использовать этих динозавров, когда ARM МК уже копейки стоят?

Кстати да, младшие модели стоят реально копейки, а казалось, что в разы дороже. Немного отстал я от жизни )

Изменено пользователем Falconist
Оверквотинг
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Все еще мало-помалу пытаюсь реализовать сей девайс.

По совету купил отладочную плату Nucleo-64 на STM32F103, стал изучать эти ваши STM-ы, голова пухла, но после некоторых свистоплясок с таймерами все же удалось вывести примитивный, но рабочий VGA-сигнал, когда начал пробовать генерировать осмысленное изображение столкнулся с таким явлением как джиттер, картинка слегка дребезжала и плавала, особенно заметно было на стыке цветов, такая же фигня была и на AVR, но там умельцы с помощью ассемблерных вставок хитро регулировали тайминги и дребезг сводился к минимуму, наверняка решения есть и для STM-ки, но так не хотелось с ним возиться...

А потом мне как обухом по голове прилетела мысль: "Какого черта? Есть же ПЛИС!". Про плисы я только слышал, но никогда не трогал их руками, заказал несколько недорогих микросхемок Альтера, и взял на алике одну из самых дешевых отладочных платок на Altera MAX II с 80 полезными пинами и с кварцем на 50 мгц. Сел изучать Verilog. Это кайф, жалею только о том, что не занимался плисами раньше. Практически сходу за вечер создал схемку, делю входные 50 мгц на 2, дальше просто отсчитываю нужные такты для генерации HSYNC и VSYNC, небольшая отладка осцилографом и все заработало, картинка четкая, без дребезга, можно забыть про рассыпухи, дешевой MAX II хватает за глаза.

Уже  сейчас начал паять на макетке SRAM, она полностью всеми контактами уходит в плис, из этой же плиски сделаю вывод на 8-битный видео ЦАП, и отдельный вход от МК (адрес, данные). В момент когда кадр находится в форточках (не активен) МК сможет записывать произвольные данные в SRAM буфер, а плис, соответственно, управляет всей этой связкой, генерит VGA сигналы и синхронизирует взаимодействие буфера и МК. Если получится, то задача будет решена. Если все получится, то отчитаюсь )

Изменено пользователем RedSpirit
Орфография
Ссылка на комментарий
Поделиться на другие сайты

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • 350 стоит по умолчанию, вшито . Я так понял. Я включил . У меня сразу лым пошёл и само жало чуть по чернело но ещё рабочее ... Я научился пользоваться термопарой , измеряю, смотрю по таблице - разница очень большая . Кручу ратио - показания меняются, это гуд. Я думал что 100% - это предел. Но они пошли и дальше ..... Отсюда вопрос может кто знает как меняется температура в какую сторону при прокрутке туда или обратно? Хотя бы примерно?
    • Была у меня книжка (что-то типа помощь сельскому радиолюбителю) и в разделе самодельные источники питания был "рецепт" батарейки: две пластины меди и цинк(алюминий, не могу точно утверждать) между ними помещалась промокашка, предварительно замоченная в солевом растворе и присыпанная с одной стороны толченым углем. Элемент позиционировался как походный и потому промокашку сушили и вкладывали между пластин, а при необходимости ее мочили и элемент начинал работать. Точно не помню технологию и могу где-то ошибаться. Так вот вопрос к сторожилам, может кто  помнит данный "рецепт" или книгу в которой он был описан?
    • Попробуйте магнитолу отремонтировать. Говорят помогает. Иногда спасает поиск профильных специалистов по месту.
    • Офигенный заход... Отлично, не смеем отговаривать, хоть это будет дорого или очень дорого и больно. ШТА? При чем тут 220В? что в вашем понимании "нормальная"? Ну так а в чем проблема? Удивительно, учитывая что это основная задача частотного преобразователя. Куда подходит? Зачем он вообще идет? Параметры это агрегата за вас искать надо? Или удосужитесь дать побольше информации? З.Ы. А нафига реактивному дигателю вообще частотник? https://ru.wikipedia.org/wiki/РД-9
    • А что там анализировать? 1) Монтируется успешно. 2) Запрашивается в функции чтения данные с сектором 0, и перед каждым не успешно найденным файлом. 3) если выкинуть отладку, то один файл находит, но чтение буфера 0 и сам буфер пустой. Где-то косяк с конфигами... Кто работал пожалуйста подскажите, чтобы меньше потратить времени... Можно конечно. Какая разница как название указывать? Через массив символов либо явно указав массив символов в виде строки.
    • Ясно. Каких-то конкретных расчетов-рекомендаций нет. Ну, попробую тогда сваять матрицу. Отпишусь тут, если хватит 4х ватов на такое дело. 
    • Вот и я про лень. Самому не хочется собирать такие схемы, проще купить.   Только я другие покупал , но еще на длительное время не включал. А так , работают нормально.
×
×
  • Создать...