Игровая видеоконсоль на avr avga

Pinboard II (AVR) формирование ч/б видеосигнала

Простой VGA/Видео адаптер
(проект по формированию VGA сигнала при помощи 8-ми битных MCU фирмы AVR)

Технические характеристики проекта:
Технические характеристики VGA-адаптера:
Количество символов: 20 строк по 20 символов
Разрешение матрицы знакогенератора: 8×12 точек
Кодовая таблица знакогенератора: WIN 1251
Формируемый сигнал: VGA
Разрешение: 640×480
Частота кадровой синхронизации: 60Hz
Скорость обмена UART 19200 bps

Технические характеристики Video-адаптера:
Количество символов: 20 строк по 38 символов
Разрешение матрицы знакогенератора: 8×12 точек
Кодовая таблица знакогенератора: WIN 1251
Формируемый сигнал: Composite Video(PAL/SECAM)
Разрешение: 625 строк (чересстрочная)
Частота кадровой синхронизации: 50Hz
Скорость обмена UART 19200 bps
Тип используемого микроконтроллера: Mega8, Mega16,, Mega32, Mega8535 и т.д.
Тактовая частота микроконтроллера стандартная — 16Mhz

Ресурсы (ATmega16): 1/3 flash (

5 кБ, но это и VGA тоже) и 2/3 ОЗУ (

750 байт — это экранный буфер), SPI на половине частоте кварца (16 МГц / 2 = 8 МГц) и 16-разрядный таймер, который формирует 64 мкс интервалы. Причём контроллер в главном цикле постоянно загоняется в режим «сна», чтобы по прерыванию от таймера занятся наложением видеосигнала на синхросигнал. Вся фишка тут только в аппаратной возможности быстро формировать видеосигнал при помощи линии данных SPI.

С синхронизацией пока не очень, но для лабораторных студентам — самое то.

Комментарии ( 36 )

У меня уже накопилось несколько предложений чего бы в PBII добавить:

1. Улучшить поле кнопок. Какой смысл иметь три вывода и управлять всего тремя кнопками? Всего 6 диодов и можно при помощи 4-х линий сканировать всё кнопочное поле (12 кнопок) на PBII.

2. Добавить схемы примитивной логики:
— для инвертирования;
— для селекции (CS);
— мультиплексирования/демультиплексирования;
— сдвиговый регистр.

3. Хотелось бы конечно что-то вроде контроллера прерываний, шину адреса и шину данных ;), но для двухслойной платы это можно сделать разве что с плис на борту, т.е. какую-нить многоногую плис и всех к ней подрубить, а всю разводку, что обычно делают в слоях, делать, прошивая плис. Может хватить и двух слоёв, заодно навыки работы с плис на плате — сам доразводишь её внутренности как надо.

4. Добавить RTC на плату. Что-нить любое, но было бы не плохо, чтобы можно было использовать в контроллере прерывание от RTC (на забыть про батарейку).

5. Внешние интерфейсы 😉 хочу всё и много:
— 2 PS/2 разъёма, а то я не понимаю как можно использовать одновременно мышку и клаву (как с USB);
— если SimpleVGA проектик нормально заработает с синхронизацией, то не жалко будет поставить на плату VGA разъём и S-Video, для работы с видеосигналами (со звуком) — пусть лучше такой примитив, чем вообще никакого (всего-то 4 резистора и пару диодов + несколько штекеров);
— 485-й опторазвязанный, чтобы можно было потом плату не только в шкафу держать, но и реально куда-нить поставить на службу Отечеству;
— Ethernet с микрочиповским чипом, думаю, что пора.

6. Подумать на счёт лучшей «аудиосистемы», что-то по типу вот этого: AN #165 — RC2 sound / Voice playback (Part 1). Там два вывода используется и немного дополнительных деталей. В архиве есть пояснение как такая штука работает с графиками и пр.

  • uni
  • 02 марта 2012, 04:52

1. Не стоит. Но можно сделать насадку подобно той, что ты применил. Повысится универсальность.
2. Можно подумать, но не знаю куда бы это впихать, т.к. плата и так размером с материнку.
3. Не нужно. Такие вещи встраивают уже в целые микропроцессорные комплексы, вроде кр580. Если что, то их можно реализовать в виде продвинутого процессорного модуля (возможно он будет из нескольких плат бутербродом).
4. Можно подумать о добавлении RTC на iic. А еще его можно сделать субмодулем, вставляющимся на ту же шину, но над процессорным блоком.
5. Можно сделать спец кабель, выведя туда сразу оба какнала PS/2 Для отладки пойдет, использовать же два PS/2 нерационально. Они занимают прорву места, а юзаются редко.

VGA — на плату не нужно, но модуль можно забабахать.
485 — в разработке, ща dcoder вылижиет все косяки и недоработки и пустим в производство.
Эзернет пиковский уже по идее должен ко мне ехать. Протестю и гербер на производство отдам.

6. Можно сделать субмодулем.

  • DIHALT
  • 03 марта 2012, 22:35

Я всё хочу один промышленный девайс повторить, который управляется по MODBUS’у. Когда-то давно сопровождал такой на 128 меге. Была у меня мечта в квартире автоматизацию сделать своими руками. Я его потихоньку портирую на PBII. Мне осталось не много: I2C флешку подключить, MMC карточку, 485 интерфейс через Modbus и всё. Со стороны компа у меня уже всё есть, кроме безлимитного OPC-сервера (ломалку для Lectus Modbus OPC я не нашёл).
У меня есть куча исходников, но они все разношёрстные, а мне хочется универсальности и побольше классов для работы с периферией и чтобы собиралось везде и чтобы в Протеусе моделировалась :), и ещё что-нибудь и побольше, побольше.

Я думаю, что куда интереснее было бы изучать работу с контроллерами, если бы, к примеру, плату PBII можно было использовать как настоящий микроПЛК со всеми «прибамбасами». Кнопочки и лампочки — это, конечно, хорошо. А вот если у тебя PBII будет круглосуточно и вечно наблюдать за «точками» в квартире/доме и архивировать данные в удобном промышленном формате (при помощи ibaPDA) — это уже по-взрослому, как у реальных автоматчиков.

  • uni
  • 03 марта 2012, 23:30

Всего 6 диодов и можно при помощи 4-х линий сканировать всё кнопочное поле (12 кнопок) на PBII.

Как? 4 выводов в принципе хватит на чарлиплексинг 12 кнопок, но диодов на него надо вдвое больше. Но матричная клавиатура гораздо чаще используется, а это платформа для макетирования.

Пункты 1, 2, 4, 5, 6 можешь реализовать сам в виде плат расширения. Если какие-то из них будут удачны — то и в производство пойдут.

Сообщества › Электронные Поделки › Блог › Игровая приставка-ретро.

Блуждая по сети наткнулся на вот такую вот штуку:

Комментарии 50

Проверил, все работает, приятно удивило качество картинки!

детство вспомнилось )) спасибо

Собрал, звук есть, а видео пока не проверял, телика нет.

Прошивку тетриса можете выложить?

Ок, попробую в ардуинской иде скомпилировать

Вроде, скомпилировал, но при запуске на экране что-то вроде: “cc controller error”. Я так понимаю нужен-Paddle Controller, представляет из себя резистор-переменник+кнопка )

Эх еще бы цветной вариант сделать )

Есть и цветной, попадался где-то )) Там правда еще одна “микруха ” добавляется

прошло 20 лет и уже рэтро…

По электронным меркам все 100 )) Батька подойдет посмотреть чем занимаюсь…платка-схема вроде “никакая”, а функционал…

не 100, с условием развития электроники, она развивается как вирус или ОРЗ, а не как эволюция организма

Игрушки свои ? То есть это не копия-эмулятор какого нить атари-Нинтендо? Ps со спектрумами тоже провёл все школьные годы и помню всю демо-сцену. Был как musicsoft

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

Аа да в 32 не сэмулируешь точно.

Прикольно, спасибо. Когда-то мы собирали Специалисты, РК86, Спектрумы, а теперь вот и младшему поколению есть что поковырять. Надо будет племяннику на день рождения такое собрать. Он как раз ардуинками увлекся. Потренируется и можно будет ему про “взрослые” контроллеры рассказывать :).

РК86 с трудом помню, а Спектрум с батькой собирал, под его руководством паять научился ) И первые программы на Спектруме были написаны, и даже одна за денежку… вернее за пачку дискет 5″25, это было даже круче денежки )))

Рк86 схема была опубликована в журнале “радио”, затем в “ЮТ для умелых рук”, прошивка вся в двоичных кодах на весь журнал 🙂 был он на кр580вм80а (Интел 8080), затем стали промышленно выпускать как “микроша” и ещё пару каких-то брендов. Про их совместимость не помню. Микроша у меня был. Продал гуманитарную помощь, раздаваемую в школе, в виде двух банок колбасного фарша и двух пакетов сухого молока и хватило на “микрошу”. Потом уже появился спектрум а потом уж и амига600, 1200…

Подшивка старых журналов у меня есть, читал я там про Рк86 и видел листинги кодов на несколько страниц 🙂 Это же ужас такое сидеть набирать и ведь набирали люди!

Читайте также:  Детектор металла на pic

Ага! И ведь работало же ! Подшивка ЮТ для умелых рук тоже где- то в недрах антресолей у родителей.

Дельта-С похожая вещь?

Нет, дельта-С это фабричный спектрум. Не знаю по какой схеме собирался

Схем на самом деле была вагон и тележка. Дельта-С лежит на чердаке, знакомые выкидывали-мне жалко стало, забрал. Возможно восстановлю

Я именно про дельту-с. Ты думаешь их по многим схемам собирали? Думаю вряд ли. У меня был первый “Ленинград-1”, потом какой-то фабричный уже с дисководом 5.25 (не помню какой) где пришлось выпаивать ПЗУшки и перепрошивать и rom Спектрума и rom tr-dos (с заменой микросхем на УФ-стираемые, потому что стояли одноразовые), Половина игр и демок не шли из-за дремучих версий

Не, я вообще про спектрумы

Я именно про дельту-с. Ты думаешь их по многим схемам собирали? Думаю вряд ли. У меня был первый “Ленинград-1”, потом какой-то фабричный уже с дисководом 5.25 (не помню какой) где пришлось выпаивать ПЗУшки и перепрошивать и rom Спектрума и rom tr-dos (с заменой микросхем на УФ-стираемые, потому что стояли одноразовые), Половина игр и демок не шли из-за дремучих версий

Не поленился, сгонял, посмотрел — шильдик оторван, не знаю чье производство. А так полный комплект: дельта+БП+джойстик, восстановить можно 🙂

Долго не играй — кинескоп посадишь 🙂

Кстати да, телевизор тоже олдскульный

У меня для этих целей едет Orange Pi — стоит 420руб + 120руб модуль видео (аналог и HDMI) джостики пока от X box 360 пойдут.

Круто, вопрос: экран телевизора или монитора, какова частота видео? Я бы такую собрал чтоб на экран ТВ выводить статичную заставку, для настройки или “Уважаемый абонент, вас отключили за не уплату!” По работе пригодилась бы. Если можно то прошивку с исходниками скинте.

Для ардуины есть библиотека TVout
Типа так подключается cxem.net/arduino/arduino37.php

Круто, вопрос: экран телевизора или монитора, какова частота видео? Я бы такую собрал чтоб на экран ТВ выводить статичную заставку, для настройки или “Уважаемый абонент, вас отключили за не уплату!” По работе пригодилась бы. Если можно то прошивку с исходниками скинте.

Спасибо, за всем не усмотришь. Машину доделаю и возьмусь.

Уматно, и джойстик и проц на одной плате . А я купил raspberry pi3 и залил туда retro pai, и пару геймпадов от компании 8bitdo, и вот оно счастье со всеми эмуляторами

А эмуляция игр на денди?

дадада, любимые таньчики!

Ха, прикольно…
” и даже ZX-Spectrum на меге128-й” — жесть… а когда то на рассыпухе на Z-80 собирали.
Один минус?, игрухи надо рекодить на мегу с асма Z-80

Хотя у меня гдето в кладовке есть расовый спектрум вариант “Зонова” с моими доработками: музпроцом ямаха, расширен до 128кБ, с теневым ПЗУ и видео с полной синхросмесью.

Скорпион 256 от Зонова тема!
Сам таким долго владел!

да помню такой, это уже следующая разработка…
но не имел его…
собирал все сам… и отлаживал тоже… у меня даже гдето фотошаблон валяется платы на фотопленке и схема (тоже фотопленка) )))

Ха, прикольно…
” и даже ZX-Spectrum на меге128-й” — жесть… а когда то на рассыпухе на Z-80 собирали.
Один минус?, игрухи надо рекодить на мегу с асма Z-80

Хотя у меня гдето в кладовке есть расовый спектрум вариант “Зонова” с моими доработками: музпроцом ямаха, расширен до 128кБ, с теневым ПЗУ и видео с полной синхросмесью.

У меня есть Пентагон, с гигом, три флопика, причем один 3х дюймовый, с мышью и матричным принтером, естественно муз. процессор с усилком, монитор от PC, по моему CGA, корпус у компа минитауэр, все делал сам.

а я продал хорошо один, сам собирал с нуля все: там было + ко всему hdd 40Мб подрублен и флопик 5″ (контроллер какойто фильдеперсовый заказывал специально через каталог, в сборе)

но уже спектрум стал быстро уходить в историю, и я скинул хорошенько любителям со всеми играми… (может быть и зря)

Этот остался, ибо на полке далеко валялся, а потом забылся (причем он был куплен, и только доработан)

Ха, прикольно…
” и даже ZX-Spectrum на меге128-й” — жесть… а когда то на рассыпухе на Z-80 собирали.
Один минус?, игрухи надо рекодить на мегу с асма Z-80

Хотя у меня гдето в кладовке есть расовый спектрум вариант “Зонова” с моими доработками: музпроцом ямаха, расширен до 128кБ, с теневым ПЗУ и видео с полной синхросмесью.

У меня до недавних пор валялся сгоревший Спектрум и самопальный джойстик к нему. Джой был дендиевским, из которого выпилена микросхема, а на контакты напрямую брошены провода. В итоге этот джойстик подключался сразу к ДВУМ портам джойстика и в нем было задействованы все 10 каналов — 4 направления и 6 кнопок!

Сие чудо было “изобретено” в результате того, что обычные спектрумовские стики поддерживали только 5 каналов — 4 направления и одна кнопка огня. Этого хватало не везде, а ко всему прочие они были весьма ломучие — ломалась рукоятка стика, от чрезмерных усилий. После поломки пары таких джойстиков и был изобретен мой девайс, который и прожил всё время, пока не сгорел сам Спектрум…

Как я делал игру под AVR

Уже давно было желание написать статью по какой-нибудь поделке. Но изо дня в день, читая очередную статью про очередной «умный дом» или «умную метеостанцию на Ar. » все меньше хотелось написать точно то же самое, но с другого ракурса, а тем у меня было не много. И вот однажды…

Внимание! Под катом кривой код, пара изображений и много воды.

Все началось с того, что как-то раз заметил свою вторую половинку за игрой про некогда популярный интернет-мем «Nyan Cat», мне он настолько понравился, что я неудержимо захотел сделать с ним игру! Беглый поиск на наличие подобных статей на GT и H дал нулевой результат. В принципе не удивительно, мало кто сегодня будет заморачиваться и делать подобное (знаю, что есть GameBuino, но на GT и H нет ни одного упоминания). Что ж, раз пусто, значит, заполним эту пустоту!

Сделать нечто в ретро стиле, что-нибудь простое… И конечно же! На ум сразу приходит классика жанра — Space Invaders. Что может быть проще, чем сделать свой клон?

Делаем кота, который стреляет (неважно чем) по захватчикам, попутно уворачиваясь от ответного огня. Оказалось, не все так просто. Точнее, я сам сделал себе не просто.

Железо

Микроконтроллер Atmel AVR ATmega328P на частоте 16 МГц (плата Arduino Nano). Экран ILI9341 SPI TFT 2.4” 320×240 и резистивный сенсорный экран на драйвере XPT2046 (китайский клон ADS7846). Заказан экран с Али (предназначался под осциллограф на STM32), о чем сперва пожалел, так как нормально работающих библиотек под драйвер сенсорного экрана почти нет. Впоследствии с этого был профит в виде сносно работающей библиотеки, хоть и собранной из кусков.

К сожалению, в силу своей титанической ленивости, на первых порах использовалась Arduino IDE. Потом из-за разросшегося проекта там стало тесно, и я перешел на Sublime Text 2 с последующим прикручиванием Arduino IDE (библиотеки, компилятор – слишком тяжело отказаться). Под конец, ради спортивного интереса и оптимизации собрал все в Atmel Studio (Кто-то скажет, что сразу надо было писать там! Как уже писал: просто лень). В итоге так и оставил все под Arduino IDE, исходя из соображений, что далеко не у каждого есть желание ставить и разбираться с Atmel Studio.

Изображения

Поскольку ресурсы контроллера весьма скромны, то впоследствии от некоторых идей пришлось отказаться (например, фон стал одноцветный, хотя в планах была текстура). Более того пришлось перечитать кучу статей по NES, именно из них я почерпнул некоторые трюки по оптимизации.

Первая проблема началась с изображений, а именно из-за их размера. Места просто не хватало. Экран принимает цвета 16 бит на пиксель, т.е. мы рисуем картинки в RGB565. Читать изображения через SPI с SD карты без DMA очень затратно и долго.
Например, картинка ниже занимает при размере 51х20 — 1360 байт, но для нормальной анимации таких нужно 6!

Приступим к искривлению сжатию пространства изображения. Первое решение, которое было найдено мгновенно – использовать повторяющиеся элементы.

Например, радугу можно сделать из двух картинок, что на четыре меньше! Далее тело. Это одно и то же тело на всех 6 кадрах! Вместо 6 используем одно! Идентично с головой. Остальное не содержит повторений (или можно пренебречь).

Собирается все воедино на экране, поскольку он не очищает изображение, а хранит его во внутреннем буфере, что так же накладывает определенные ограничения. Например, если сначала отрисовать голову, а потом тело, то выглядеть это будет так:

Читайте также:  Фильтрующая вытяжка для паяльных работ

После того как остался набор отдельных изображений, они все равно много занимают (5504 байт вместо 8160).

Продолжу с радуги. Если использовать только цвета радуги вместо всего изображения и нарисовать радугу кодом.

То размер радуги уменьшится c 2016 байт до 16 байт + примерно 200 байт на код. При этом, немного потеряв в производительности.

Промежуточный итог №1.

Высвободилось примерно 1800 байт (целый кот занимает 3704). Можно сделать меньше? Конечно! Вместо огромных массивов с цветами использовать два массива: один таблица цветов с типом uint16_t, второй изображение, но вместо цветов индексы нужного цвета в таблице цветов. Для этого уже вполне подойдет uint8_t ( для 255 цветов вполне хватит, привет GIF).

Промежуточный итог №2.

Освободилось еще 1944 байт (целый кот теперь занимает 1760). Можно сделать меньше? Можно! Внимательно смотрим на массивы и видим колоссальные однотипные последовательности! Бежим читать про RLE сжатие (забавное совпадение, через некоторое время, когда уже сделал кодер и декодер, на H появилось несколько статей на тему RLE, как мне не хватало их несколько раньше).

Если с декодером проблем не возникло, я четко знал, что у меня будет на входе и что я буду со всем этим делать, то вот с кодером как раз наоборот…

На вход декодера идет:

— координаты на экране где выводим изображение;
— высота и ширина в пикселях;
— таблица с индексами цветов;
— таблица цветов;
— размер сжатого изображения.

Кодер написал как смог на Qt (собирал статику Qt 4.8.6 под OS X). Суть кодера: сжать идентичные последовательности в файлах изображений и поместить результат в заголовочные файлы.

Вышел он очень привередливый к входным изображениям. Нужно убирать альфа канал и экспортировать как raw data RGB565, хорошо хоть в Gimp это делается легко. Использование: помещаем в папку с программой *.data файлы изображений, запускаем, и на выходе заголовочные файлы.

Промежуточный итог №3.

Места стало больше всего на 229 байт (все вместе занимает 1531). Отчего так мало? Не стоит забывать, что из-за некоторых проблем с отрисовкой (неправильное наложение цветов) сжато по RLE было только тело. Так же, я не рассматривал изображения Invaders и подарка, которые так же были сжаты по RLE и уменьшили свой размер с 3456 байт до 722 байт.

Дальше, скорее всего, будет куда более сильное падение производительности на распаковке или нехватка памяти (в зависимости от алгоритма), так что остановлюсь на этом.

Многозадачность

Вторая проблема пришла с ростом количества задач. В начале, задач было мало и все выполнялись последовательно, вполне быстро — 20-28 кадров в секунду. Со временем, рост количества задач привел к падению до 7-10 кадров в секунду! Сначала думал о банальной нехватке ресурсов ЦПУ, уже планировал перейти на более серьезный МК. Но меня осенило! Я ведь делаю действия, которые, по сути, не требуют постоянного выполнения в каждом цикле! Нужно размазать задачи во времени, сделать подобие многозадачности!

Первое что пришло на ум: FreeRTOS… К сожалению, при 16 (17 если вывод debug info) задачах это оказалось не по силам этой AVR.

Поиск решения приводил в основном к статьям DIHALT. Изучив их, сделал свой велосипед менеджер задач. Что есть:

— добавление задачи (как же без этого);
— удаление всех или одной задачи;
— замены одной задачи на другую;
— количество задач до 254 (по факту, сколько хватит памяти);
— 9 байт на задачу (можно и меньше).
— используется timer 0 в качестве системного таймера;
— таймаут вызова задачи (ради этого все и делалось);
— флаг необходимости исполнения задачи;
— глупая защита от не выделения памяти синим экраном;
— указатели, много указателей;
— . ;
— PROFIT.

И некоторое немногое другое, что мне было нужно для моего велосипеда менеджера задач. Принцип работы:

— создаем структуру (в ней указатель на массив и количество текущих задач);
— указываем что это наш основной массив задач;
— добавляем все задачи, какие нужно;
— вызываем функцию runTasks() и больше оттуда не возвращаемся.

В основном цикле перебирается весь массив задач. Задачи выполняются только по таймауту и если флаг на выполнение в истине.
На счет эффективности решения ничего говорить не буду, просто напишу, что стало значительно лучше! Даже эта кривая реализация разгрузила ЦПУ и падение частоты кадров пропало от слова совсем.

Полет в космос

В оригинале кот летит в космосе мимо звезд (судя по синему фону летит на околосветовой), не беда прикрутим звезды и будем их двигать!

Помним, что памяти не так много как хотелось бы. Поэтому, после добавления нужных задач и только после этого, если осталось свободное место — создаются звезды.

Но звезд на экране может поместиться много, неужели придется писать координаты для каждой? Нет, присвоим псевдослучайные значения. Возьмем значение температуры с 8 канала ADMUX (нам все равно на точность, чем не точнее, тем лучше) и загрузим в srand (при этом, если температура всегда одинакова, то и rand будет идентичен).

Если хотя бы одна звезда была создана, то применяем параметры для каждой:

Invaders

Они есть. Их пять (столько отлично помещается в ряд) и они как терминатор (все время возвращаются обратно).

Оптимизация

После переноса в Atmel Studio (выдернув что нужно из Arduino), где можно было с легкостью получить asm листинг и примерно понять, что я натворил, начал переписывать используемые библиотеки и некоторые кодовые конструкции (некоторые заметят, что я понаделал неведомой фигни непонятно зачем, и будут правы).

Что это дало? Высвободило около 6 Кбайт ПЗУ, уменьшило объем используемой ОЗУ и увеличило скорость передачи данных по SPI (пожертвовав некоторыми возможностями).

Хоть игра примитивна, но вполне неплохо работает и может занять на некоторое время. Более того, осталось свободно 10 Кбайт ПЗУ и около 1 Кбайт ОЗУ.

— Добавление звука. Без него скучно нажимать стилусом в экран.
— Добавить больше различной анимации, для более живой игры.
— Победить незначительные баги.
— Перенос на более серьезный МК и добавление новых плюшек, или тех которые не влезли.

Собственно как выглядит игра:

Игровая видеоконсоль на avr avga

(проект о формированию VGA сигнала при помощи 8-ми битных MCU фирмы AVR)

Эта статья была опубликована в Atmel Application Journal #6 Winter 2006

(Что, в свое время дало мне “хорошего пинка” в деле мотивации

совершенствования моих познаний в области микроконтроллеров).

Несколько месяцев назад, задавшись целью подключить VGA-монитор для вывода текстовых данных с микроконтроллерной системы сбора информации – я с удивлением обнаружил, что ничего сколько-нибудь “внятного” и доступного для повторения “ на коленке ” по этой теме в Интернете отсутствует.

Конечно, существуют промышленные платы стандарта PC-104, можно кое-что “нарыть” и на www.opencores.org для реализации на FPGA, есть графические контроллеры Fujitsu , кто-то здесь недавно на местной конференции предлагал за 5000$ проект на ACEX ’е , но надо признать – все это страшно далеко от народа..

Хотелось что-то гораздо более “дешевое и сердитое”. Предварительные прикидки показывали, что из наиболее распространенных и достаточно быстродействующих микроконтроллеров подходит продукция фирмы ATMEL.

8-ми битное RISC ядро AVR обеспечивает пиковую производительность порядка 16 MIPS на тактовой частоте 16M H z. Плюс на подходе более скоростные семейства Mega 48,88,168 поддерживающие официальную тактовую частоту 20 MHz .При этом скорость вывода данных через стандартный порт ввода-вывода при FOSC = 16 MHz командами вывода в порт (out port x..) 8 MIPS. К тому же я уже имел достаточный опыт разработки устройств на микроконтроллерах AVR. И я засучил рукава..

Результат своей работы я представляю на ВАШ суд.

Поставленная техническая задача:

Цель которую я поставил для себя, достаточно проста на первый взгляд:

Ограничившись одним корпусом распространенного MCU типа Mega8,16,8535

и т.д., и минимумом внешних элементов сконструировать символьный дисплей-адаптер с разрешением > 15×15 символов, который бы выводил информацию на VGA монитор при стандартных частотах VGA сигнала. Информацию символьный адаптер должен получать через стандартный USART порт микроконтроллера. Частота используемого микроконтроллера стандартная -16M H z.

Данная задача на данный момент успешно решена.Более того – проект несколько расширен и дополнен введением формирования обычного видео ч.б. ( PAL / SECAM ) сигнала. Т.е. в зависимости от положения джампера тип формируемого видео сигнала VGA либо Composite Video .

Фотографии и схемы проекта:

Ниже приводится принципиальная схема простого VGA/ Video адаптера (откорректировано 28.06.2011):

Принципиальная схема откорректирована, на старой схеме были ПЕРЕПУТАНЫ положение порта PAL-синхронизации и джампера PAL – VGA!Из-за этого в “железе” у многих схема НЕ РАБОТАЛА.

Так все это выглядит в железе, собранном на “коленке” за один час:

А вот что мы получаем на экране монитора:

Технические характеристики проекта:

Технические характеристики VGA-адаптера:

Количество символов: 20 строк по 20 символов

Разрешение матрицы знакогенератора: 8×12 точек

Читайте также:  Lcd часы на attiny2313

Кодовая таблица знакогенератора: WIN 1251

Формируемый сигнал: VGA

Частота кадровой синхронизации: 60Hz

Скорость обмена UART 19200 bps

Технические характеристики Video -адаптера:

Количество символов: 20 строк по 38 символов

Разрешение матрицы знакогенератора: 8×12 точек

Кодовая таблица знакогенератора: WIN 1251

Формируемый сигнал : Composite Video(PAL/SECAM)

Разрешение: 625 строк (чересстрочная)

Частота кадровой синхронизации: 50Hz

Скорость обмена UART 19200 bps

Тип используемого микроконтроллера: Mega 8, Mega16, , Mega32, Mega8535 и т.д.

Тактовая частота микроконтроллера стандартная – 16Mhz

  1. Для того чтобы избежать искажения изображения при приеме данных через UART, для VGA рекомендуется производить обмен данными с адаптером в течении приблизительно 300-600 мкс после сигнала вертикальной синхронизации VSYNC (во время обратного хода луча по кадру).
  2. Объема RAM памяти Mega 8535 (512 байт) не достаточно для формирования Видео сигнала с разрешением 38 x 20 символов.

Алгоритм работы программы:

Пояснения по работе программы:

Алгоритм рендеринга изображения достаточно традиционен, главное ноу-хау проекта в использовании для побитного вывода изображения – сдвигового регистра SPI SPDR через бит MOSI . При этом образуется двухступенчатый конвейер рендеринга:

В то время, как последующий байт для рендеринга выбирается из памяти,

предыдущий байт выводится через сдвиговый регистр SPI SPDR MOSI ..

Поскольку данный проект написан на С (WinAVR GCC), он легко масштабируем для увеличения разрешения и частот регенерации дисплея. Так, на микроконтроллерах Mega 48,88,168 поддерживающих официальную тактовую частоту 20 MHz возможно получение разрешения 20 строк по 25-30 символов при абсолютно той же схемотехнике (возможности оверклокинга автор намеренно не рассматривает). Применения проекта не ограничиваются одним лишь терминальным вариантом (смотрите примеры в папке examples ) – не смотря на серьезную загруженность процессора регенерацией дисплея, оставшейся мощности вполне достаточно для организации обработки например нескольких цифровых и аналоговых сигналов и реакции на них, а также выдаче результатов их измерений на дисплей в real – time (охранные системы, АСУТП, КИПиА и т.д.). Автор располагает улучшенными вариантами подобных систем с разрешением символьного дисплея 40 x 24 символов в режиме VGA , работающими в коммерческих изделиях.

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

Исходники подкорректированы под WinAVR-20090313 portable ( “пофиксена” специфика команд: cbi, sbi, PRG_RDB etc.),
не устранены некоторые warnings, думаю они не критичны.

За дальнейшим развитием проекта следите за: http :// www . vga – avr . narod . ru /

Ибрагимов Максим Рафикович

20.10.2005 г. Откорректировано 6.2011

Игровая видеоконсоль на avr avga

или пополни нашу SMS копилку

–>

–> –> –> –>

–>
–>

–>

–>

–>Главная » –>Статьи » Учимся работать с AVR

Здесь будет рассматриваться вывод изображения при 640×480 60Hz.
Принцип работы монитора схож с телевизором, описано в статье http://my-avr.at.ua/publ/1-1-0-25
Только строки выводятся не черезстрочно, а построчно. И сигналы синхронизации разделены:
VSYNC – вертикальная синхронизация

60Гц, при которой луч возвращается в y=0
HSYNC – горизонтальная синхронизация

31.5КГц, при которой луч возвращается в x=0
Уровень свечения точки устанавливается тремя лучами:
R – красный, (0-0.7 вольт)
G – зеленый, (0-0.7 вольт)
B – синий, (0-0.7 вольт)
И частота одной точки

25.2МГц, в данной статье не будет рассматриваться вывод одной точки, тк МК на способен работать выше 20МГц.

При выводе изображения существуют не видимые строки и столбцы, они нужны для задержки для и после синхронизации, возврат луча и тд.
от сюда и получается:

линии:
480 Ative v > строки:
640 Ative v > частоты:
VSYNC = 60Hz
HSYNC = 525 * 60 = 31.5KHz
PIXEL = 800 * 525 * 60 = 25.2MHz

Диаграмма VSYNC и HSYNC:

Цвет будем выдавать не попиксельно, а линиями, восемь линий на строку.
т.е. нам надо выдать уровни на RGB в промежуток 640 строк

Пример восьми цветных полос:

Градиент от черного к белому из четырех полос:

Для установки уровней RGB использовался двух битный ЦАП на двух резисторах.
На каждом цвете в мониторе стоит резистор на массу 75Ом.

Распиновка VGA:

Нужные провода:
1. – R
2. – G
3. – B
6. – GND
7. – GND
8. – GND
10. – GND
13. – HSYNC
14. – VSYNC

Схема:

В CVAVR необходимо поставить:
C CompilerCode GenerationOptimize for – SPEED
Исходник:
Доступно только для пользователей

–>Категория : Учимся работать с AVR | –>Добавил : HiSER (14.05.2010) | –>Автор : Литвин Артём
–>Просмотров : 26385 | –>Комментарии : 8 | –>Теги : монитор, video, видео, VGA, rgb, MONITOR, ATmega48 | –>Рейтинг : 3.0/2 |
–>Всего комментариев : 8

можно ли использовать данную статью на Atmega8
помогите пожалуйста доработать код.

Простой VGA/Видео адаптер (ATmega8, C)

Предыстория проекта.
Несколько месяцев назад, задавшись целью подключить VGA-монитор для вывода текстовых данных с микроконтроллерной системы сбора информации – я с удивлением обнаружил, что ничего сколько-нибудь “внятного” и доступного для повторения “на коленке” по этой теме в Интернете отсутствует.

Конечно, существуют промышленные платы стандарта PC-104, можно кое-что “нарыть” и на www.opencores.org для реализации на FPGA, есть графические контроллеры Fujitsu, кто-то здесь недавно на местной конференции предлагал за 5000$ проект на ACEX’е J, но надо признать – все это страшно далеко от народа.

Хотелось что-то гораздо более “дешевое и сердитое”. Предварительные прикидки показывали, что из наиболее распространенных и достаточно быстродействующих микроконтроллеров подходит продукция фирмы ATMEL. 8-ми битное RISC ядро AVR обеспечивает пиковую производительность порядка 16 MIPS на тактовой частоте 16MHz. Плюс на подходе более скоростные семейства ATmega48,88,168 поддерживающие официальную тактовую частоту 20MHz.При этом скорость вывода данных через стандартный порт ввода-вывода при FOSC = 16MHz командами вывода в порт (out portx..) 8 MIPS. К тому же я уже имел достаточный опыт разработки устройств на микроконтроллерах AVR. И я засучил рукава..

Результат своей работы я представляю на ВАШ суд.

Поставленная техническая задача:
Цель которую я поставил для себя, достаточно проста на первый взгляд:
Ограничившись одним корпусом распространенного MCU типа Mega8,16,8535 и т.д., и минимумом внешних элементов сконструировать символьный дисплей-адаптер с разрешением > 15×15 символов, который бы выводил информацию на VGA монитор при стандартных частотах VGA сигнала. Информацию символьный адаптер должен получать через стандартный USART порт микроконтроллера. Частота используемого микроконтроллера стандартная -16MHz.

Данная задача на данный момент успешно решена.
Более того – проект несколько расширен и дополнен введением формирования обычного видео ч.б. (PAL/SECAM) сигнала. Т.е. в зависимости от положения джампера тип формируемого видео сигнала VGA либо Composite Video.

Фотографии и схема адаптера:
Ниже приводится принципиальная схема простого VGA/Video адаптера:

Так все это выглядит в железе, собранном на “коленке” за один час, результат на экране монитора и на экране теллевизора.

Пояснения по работе программы:
Алгоритм рендеринга изображения достаточно традиционен, главное ноу-хау проекта в использовании для побитного вывода изображения – сдвигового регистра SPI SPDR через бит MOSI. При этом образуется двухступенчатый конвейер рендеринга:
В то время, как последующий байт для рендеринга выбирается из памяти, предыдущий байт выводится через сдвиговый регистр SPI SPDR MOSI.

Заключение:
Поскольку данный проект написан на С (WinAVR GCC), он легко масштабируем для увеличения разрешения и частот регенерации дисплея. Так, на микроконтроллерах Mega48,88,168 поддерживающих официальную тактовую частоту 20MHz возможно получение разрешения 20 строк по 25-30 символов при абсолютно той же схемотехнике (возможности оверклокинга автор намеренно не рассматривает). Применения проекта не ограничиваются одним лишь терминальным вариантом (смотрите примеры в папке examples) – не смотря на серьезную загруженность процессора регенерацией дисплея оставшейся мощности вполне достаточно для организации обработки например нескольких цифровых и аналоговых сигналов и реакции на них, а также выдаче результатов их измерений на дисплей в real-time (охранные системы, АСУТП, КИПиА и т.д.). Автор располагает улучшенными вариантами подобных систем с разрешением символьного дисплея 40×24 символов в режиме VGA, работающими в коммерческих изделиях

Автор статьи: Ибрагимов Максим Рафикович г. Тольятти

Рейтинг
( Пока оценок нет )
Загрузка ...
Adblock
detector