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



Simple VGA: www.vga-avr.narod.ru/main_rus.html
Простой VGA/Видео адаптер
(проект по формированию VGA сигнала при помощи 8-ми битных MCU фирмы AVR)

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

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

Исходники будут тут: mysvn.ru/schoolbell/SimpleVGA/

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

С синхронизацией пока не очень, но для лабораторных студентам — самое то.
  • 0
  • 02 марта 2012, 02:07
  • uni

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

RSS свернуть / развернуть
У меня уже накопилось несколько предложений чего бы в 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). Там два вывода используется и немного дополнительных деталей. В архиве есть пояснение как такая штука работает с графиками и пр.
0
  • avatar
  • uni
  • 02 марта 2012, 04:52
1. Не стоит. Но можно сделать насадку подобно той, что ты применил. Повысится универсальность.
2. Можно подумать, но не знаю куда бы это впихать, т.к. плата и так размером с материнку.
3. Не нужно. Такие вещи встраивают уже в целые микропроцессорные комплексы, вроде кр580. Если что, то их можно реализовать в виде продвинутого процессорного модуля (возможно он будет из нескольких плат бутербродом).
4. Можно подумать о добавлении RTC на iic. А еще его можно сделать субмодулем, вставляющимся на ту же шину, но над процессорным блоком.
5. Можно сделать спец кабель, выведя туда сразу оба какнала PS/2 Для отладки пойдет, использовать же два PS/2 нерационально. Они занимают прорву места, а юзаются редко.

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

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

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

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

; Routine to read a standard 3x4 matrix keypad using
; only 4 wires. Result is output the number on port A.
; Mike Rigby-Jones 30/11/98 (mrjones@nortelnetworks.com)


; Port B is altered by loading the port register with 0x00
; and changing the TRIS register.  Making a bit an output will
; force the bit to go low.  The inputs are pulled high by the
; internal weak pullups
;
;       SET            READBACK       KEY
; RB3 RB2 RB1 RB0  RB3 RB2 RB1 RB0  

;  1   1   1   0    1   1   0   0      *

;                   1   0   0   0      0

;                   1   0   1   0      #

;  1   1   0   1    1   1   0   0      7

;                   1   0   0   1      8

;                   1   0   0   0      9

;  1   0   1   1    1   0   0   0      4

;                   1   0   0   1      5

;                   1   0   1   0      6

;  0   1   1   1    0   1   0   0      1

;                   0   0   0   1      2

;                   0   0   1   0      3

Диоды должны быть подключены как у меня на прошлом видео в протеусе, там их шесть штук на три линии. Для четвёртой линии диоды не нужны. А вот программка, которая этим занимается: KeypadProcedure()
0
Я нифига не понял. Схему покажи.
0
Виртуальность: www.youtube.com/watch?v=O0tHPz9GBfs&hd=1
Реальность: www.youtube.com/watch?v=ns0zZzf3ng0
(как видно, это работает)
Схема по первой ссылке. Там работает функция, ссылку на которую я привёл. Если бы на разъём процессорного модуля выходило 4 линии, а не три, то я мог бы просто подключить и нижнюю строку набора кнопок на плате.
0
Теперь понял.
Если ты такой любитель мультиплексирования, то может знаешь — как можно мультиплексировать несколько кнопок так, чтобы не было «фантомных нажатий» (т.е. если например в обычной матрице нажать кнопки (0,0), (0,1) и (1,0), то произойдет ложное срабатывание еще и клавиши (1,1))? Нужно это, например, для джойстиков — кнопки там могут нажиматься в любых комбинациях и подобное поведение недопустимо.
0
Нее, пока ничего не скажу, соображать надо. Задачи такой не было, но я взял проблему на заметку.
0
так, чтобы не было «фантомных нажатий»
Когда-то делал именно джойстик. На каждую кнопку ставил последовательно диод. Работало.
0
проект по формированию VGA сигнала при помощи 8-ми битных MCU фирмы AVR
А есть такая фирма? :)
0
  • avatar
  • Deer
  • 02 марта 2012, 08:21
Я скопипастил описание, не думая, с сайта автора: www.vga-avr.narod.ru/main_rus.html
Фирма, конечно, Atmel.

А вообще про это написано вот тут:
Cornell University Electrical Engineering 476- Генерация видеосигнала на AVR
А вот тут всё гораздо круче и с теорией: Rickard's electronic projects page
0
Кстати, «Ч/Б PAL» — это явные взаимоисключающие параграфы.
0
  • avatar
  • Vga
  • 02 марта 2012, 16:33
Нее, можно и в цвете:
1. AVR PAL color bar generator
2. AVR PAL generation
0
Я про название темы. Или Ч/Б видеосигнал, или PAL. Но одновременно — это взаимоисключающие параграфы, т.к. PAL — это именно один из методов добавления в ЧБ сигнал (который во всех системах одинаков, только частота кадров и количество строк у американцев и иже с ними другие) цветности. Если цвет убрать — он перестанет быть PAL'ом.
0
Нее, можно и в цвете:
Я знаю.
1. AVR PAL color bar generator
2. AVR PAL generation
Не видел, но, думаю, это эффектнее.
0
Это практически одно и то же. Эффектнее вот что: Игровая видеоконсоль на AVR AVGA
А вот аналог видео:
ATMEGA168 Super Mario Clone
AVR Pacman

Библиотека называется: Драйвер системы вывода графики в аналоговом виде
0
Нет. Там вывод на VGA, а это намного проще в плане расхода ресурсов МК, чем PAL
0
На первом твоём видео ясно видно, что парень либо автор библиотеки, либо просто скоммуниздил её. Посмотри на первое его видео ещё раз.
На 0:34 приведена схема для подключения к SVGA, там видно, что он использует резистивную матрицу (как и на моих выше ссылках) в качестве ЦАП. На 0:37 на первом видео приведена стандартная уже плата подключения к SVGA, на которой видна группа резисторов. Сравни с той схемой, что показана тут. Это одно и тоже, вид сбоку. Т.е. либо он первоначальный автор библиотеки, либо одно из двух. :)

Вопрос на засыпку: Чем ч/б сигнал PAL отличается от сигнала, который формируется программой в теме?

Да, Vga, ты прав на счёт конфуза. Первый раз у меня было написано просто PAL, но я знаю на сколько это сложно в реализации (но практически возможно, как я показал выше). Поэтому я добавил «ч/б», а PAL я оставил, т.к. планировал дорабатывать исходники и до цветных изображений с те ми же ресурсами. Если можно на 2313 формировать цветные полосы, то чем хуже мега16? Не знаю можно ли её разогнать до 17 МГц с копейками, но использовать плату PBII(AVR) для изучения PAL сигнала можно. Даже со скромными ресурсами.

Есть в сети ещё один исходник, где при помощи AVR'ки выводят JPEG файл на телевизор. Вот это было интересно вспомнить где я видел.
0
На 0:34 приведена схема для подключения к SVGA, там видно, что он использует резистивную матрицу (как и на моих выше ссылках) в качестве ЦАП.
А что, есть еще варианты, кроме резистивного ЦАПа? Это все равно, что сказать «о, у него AVCC запитан через дроссель — значит он сдирал с пинборда». Так что это не признак. Кроме того, в схеме есть отличия — например, вывод текста в высоком разрешении. Это вон тот транзистор, который на SPI висит.
И я не знаю, писал ли он с нуля или воспользовался библиотекой, но демка, тем не менее, впечатляет — там не только вывод на VGA/PAL, но и звук, и достаточно длинный ролик, и все утрамбовано в ATmega88.
Вопрос на засыпку: Чем ч/б сигнал PAL отличается от сигнала, который формируется программой в теме?
Тем, что ЧБ — это не PAL. А PAL несколько сложнее, если формировать сигнал цветности программно (в частности, lft упоминал что вывод в PAL сильно ограничен по цветам).
0
Т.е. иными словами, если подать ч/б изображение на вход декодера PAL (как я сделал), то ничего работать не будет, т.к. это не PAL? Да?

Вот откуда растут ноги у всех этих схем: AVGA — Homepage
Это 2006 г., а может и раньше он начал. И библиотека у него своя. Нет у меня уверенности в том, что товарищ lft был отключен от инета и ничего этого не видел. Есть ещё один признак, который я понял, просто посмотрев видео. У него на видео есть горизонтальные сдвиги фонового изображения — это одна из возможностей AVGA, описанных автором в том же 2008 г. Сравни демки: AVGA v0.1 demonstration
0
Сорцы же демки есть — просто проверь. А возможности все эти ему никто не мешал закодить самостоятельно.
Т.е. иными словами, если подать ч/б изображение на вход декодера PAL (как я сделал), то ничего работать не будет, т.к. это не PAL? Да?
PAL — это расширение к ч/б сигналу. Способ кодирования сигналов цветности. Если сигнала цветности нет — то нет и смысла говорить о системе цвета. А работать будет, конечно, благодаря обратной совместимости.
В общем, это все равно, что называть принтер МФУ, мотивируя тем, что и то и другое печатает.
0
Т.е. таким способом нельзя получить зелёного изображения на чёрном фоне? Как на старых мониторах? Уверен?
0
На телевизоре и через композитный вход — нет. Только добавив генерацию собственно PAL-сигнала, программную или аппаратную. В демке Phasor генерация аппаратная, через один из таймеров (PAL-сигнал — это модулированная цветоразностными сигналами поднесущая с частотой 4.43МГц, наложенная на Ч/Б сигнал). Поскольку возможности генерирования таймером квадратурно-модулированного сигнала на частоте 1/4 тактовой довольно ограничены — демка может воспроизводить лишь весьма ограниченный набор цветов (ЕМНИП, только сине-зеленые).
Хаки вроде установки цветового профиля телевизора R=0 G=100% B=0 не в счет.
0
В институте учился, что такое цвето-разностные сигналы смотрел на лабораторных.

Сигнал PAL можно сформировать способом, указанным по ссылке выше. Чтобы не мудрить с таймерами, можно просто самим формировать переключение фазы, как там показано. Да, SPI тут уже не нужен, можно просто управлять уровнем на выходе вывода. Дальше такая же матрица:



и будет композитный сигнал. На этой схеме классику разогнали на 175%, тогда не было 20МГц тинек. Я промоделировал схему в Протеусе и вот как выглядит цветная строка строка для этой схемы и прошивки:

PAL строка из проекта ColorBar

Т.е. добавив ещё несколько резисторов и сменив кварц я из принтера получаю МФУ, изменив программу: сигнал там получается просто прямым формированием.
0
Выводов больше, это да, но там палитра цветов. Может быть для одного выбранного цвета понадобится меньше выводов (уровней сигнала). Типа, зелёный на чёрном.
0
Блин. Я говорю не об этом, а о том, что не надо называть один и тот же сигнал «черно-белым PAL». Это как «вровень выступает» из первой же серии «нашей раши» (собственно, я больше и не смотрел).
А цветной PAL сигнал на AVR сделать можно — тот же Phasor это делает, и проекты по твоим ссылкам тоже. Но он цветной.
Короче: я предлагаю убрать PAL из названия топика — оно пока там не к месту. Когда будет цветной — сделаешь новый топик или вернешь PAL и уберешь «ч/б».

P.S. Никак не ожидал, что получится столько флуда >_<

P.P.S. Что до SPI — это несколько из другой оперы:
In addition to this, I've hooked up a couple of diodes and a PNP transistor in such a way, that when the MOSI pin is low while the OC2B pin is high, the three color signals will be pulled to a high voltage, corresponding to white. This is used to generate high resolution scroll text: The MOSI pin is connected to a shift register internally in the AVR (it is typically used for serial data transmission), and this shift register can be programmed to emit a sequence of 8 bits with a single instruction, thus offloading the CPU.
В общем, оригинальная идея, позволяющая выводить черно-белую картинку (в демке таковой является только текст) в более высоком разрешении, чем все остальное.
Кстати, в его аппаратном решении есть еще одно существенное различие с AVGA. Он использует три независимых 2-битных ЦАПа для формирования цветовых компонент, получая в итоге 6-битный цвет. А в AVGA цветность 1 бит на канал, плюс бит яркости — итого 4-битный цвет.
0
Убедил, признаю, что был не прав. Пока ещё можно, подредактирую тему топика.
+1
В общем, оригинальная идея, позволяющая выводить черно-белую картинку (в демке таковой является только текст) в более высоком разрешении, чем все остальное.
О, а слона-то я и не приметил:
Вся фишка тут только в аппаратной возможности быстро формировать видеосигнал при помощи линии данных SPI.
Т.е. у тебя так же сделано)
А почему так картинка дергается?
0
Потому что проблема с кадровой синхронизацией, я думаю. Надо смотреть, т.к. оригинальный код на Си написан, а я компилировал в C++, мало ли что там где не срослось. Тут нужно всё по тактам расчитать, т.е. посидеть и покумекать, а это время. Там в нескольких частях программы нужно регулировать количество nop'ов, чтобы избавляться от дёрганья картинки.
У меня этот код от автора с первого раза вообще плохо работал, еле-еле что-то там было. Потом разобрался как там и что и стал регулировать разные задержки, пока не получил более-менее стабильную картинку.

Перед этим я по-своему формировал ч/б сигнал, без SPI, просто вывод белого поля. Без осциллографа там делать нечего, конечно. Я, кстати, только вот сейчас узнал, что у Протеуса есть такой красивый графопостроитель, до этого я в панели инструментов его не разбирался сильно, а зря. С его помощью можно рассчитать все осциллограммы вплоть до тактов даже без осциллографа.

В общем, будем двигаться и в этом направлении. А DI HALT вполне бы мог SVGA гнездо поставить на плату и через уже имеющееся ПО можно было бы подключать PBII прямо к монитору. Неохота на это тратить гнездо расширения. Я бы и просверлил сам и вставил для удобства, да негде. Разве что вместо индикатора (это идея).
0
Обана! А Загнать color burst через SPI это круто!
0
Ты не совсем понял. Смотри, изначально был некий общий стандарт кодирования ч/б изображения. Потом, на основании его (для обратной совместимости) были разработаны несколько стандартов для цветного изображения (PAL, SECAM …). Но ч/б изображение в обоих стандартах кодируется одинаково (то «старому» стандарту). Потому говоря о ч/б – нет смысла уточнять PAL оно или SECAM.
А вот если ты захочешь сделать бело-зеленую картинку, то это уже будет цветное изображение (хоть и двухцветное). Тогда есть смысл говорить о PAL/SECAM.
+1
Тоже убедил, когда будет зелёно-черная картинка, тогда напишу про PAL, чтобы не вводить всех в заблуждение о простоте формирования PAL сигнала. Комплексную математику там знать надо.
0
Посмотрел сорцы. Начнем с того, что AVGA написана на С, тогда как вся демка CRAFT — на ассемблере. Кроме того, кода из driver.S из AVGA в демке я не нашел. Если lft и базировался на нем, то сильно переработал. Но похоже что нет, все с нуля.
0
Unfortunately, this video is not available in Germany because it may contain music for which GEMA has not granted the respective music rights.
Sorry about that.
0
Я вот всё думаю, где они хранят инфу о тегах в звуке? Нет ли какого обфускатора, чтобы глушить кодирование тегов? Это стеганография или что вообще. Доставляет она…
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.