Понедельник, 02.12.2024, 06:37
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | модуль генерации TV видео сигнала на atmega16 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: ВитГо  
модуль генерации TV видео сигнала на atmega16
ВитГоДата: Воскресенье, 19.08.2012, 09:55 | Сообщение # 1
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Заинтересовала меня Тема

в качестве контроллера будет использована atmega16 или atmega32
выбор в пользу последней будет сделан если не будет хватать 1 кб ОЗУ

известные мне проекты по теме:
http://www.vga-avr.narod.ru/
первый сайт который более менее чтото объяснял и содержал в себе открытые исходники, правда комментарии только на английском (хотя разработчик русский), я пытался списываться с ним, но помощи не получил.

http://www.benryves.com/products/avrtvgame
сайт на английском языке. самое интересное это исходники ! код написан очень правильно, видео драйвер отделен от всего остального (там написано 2 игры: тетрис и змея). драйвер видео написан на асме+си. в настоящее время я разбираюсь в том как он устроен

http://blog.vinu.co.in/2012....on.html - очень хороший ресурс, короткие и лаконичные примеры, понятные иллюстрации, примеры написаны на Си. самое то чтобы начать !

еще находил несколько, но уровень их документирования и отсутствие исходников прошивки не делают их ценными источниками.

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

чтобы не делать абы как я нашел несколько документов с более подробным описанием видеосигнала:
Сигнал чернобелого изображения самое толковое из массы перелопаченной мной информации. отталкиваясь от информации что там приведена можно начинать писать свой генератор видео сигнала
Видеостандарты: сигналы, форматы, стыки. В.Л. Штейнберг - хорошая книга по форматам видеосигнала, не такая подробная, но чтото можно подчерпнуть и из нее
ГОСТ 7845-92: Стандарт: система вещательного телевидения - ну и самая подробная (но не всегда понятная) информация конечно была взята из ГОСТа

применяя эти три источника информации я и разбирался в формате видео сигнала

в итоге нашел самую правильную иллюстрацию длительностей импульсов видеосигнала


Виталий (аka ВитГо)
 
ВитГоДата: Воскресенье, 19.08.2012, 15:51 | Сообщение # 2
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
теперь, когда с видеосигналом более менее понятно (у меня в голове уже даже начинает складываться картинка алгоритма) нужно посчитать что же мы все таки сможем получить на выходе:

итак у нас строка на телевизор имеет длинну 64 мкс
из них
4.7 мкс - это строчный синхроимпульс
около 8 мкс - уровень черного для синхронизации
остается около 51-52 мкс на изображение

я хочу получить разрешение по горизонтали около 320 точек

посчитаем с какой скоростью мне нужно выводить биты изображения (длительность вывода одного бита)
50 мкс\320=0.156 мкс на одну точку

я планирую вывод сделать при помощи SPI
фактически это аппаратный сдвиговый регистр, имеющий физический вывод у контроллера, называется он _MOSI
SPI может тактироваться от тактового генератора с несколькими делителями
в реале нас интересует частота тактирования 8 мгц.
это доступно с делителем 4 и умножением частоты на 2
тактовая частота меги будет 16 мгц (максимум для 16 меги)
итого (16/4)*2=8 мгц

1/8000000=0.125 мкс на такт

нам нужно было 0.156, будет 0.125... ИМХО отлично !

p.s. отлично, потому что предполагаю что SPI будет передавать байты не друг за другом в притык, а с некоторым интервалом, в 1 или 2 периода... к сожалению найти осцилограмму передачи 2х байт данных мне не удалось, везде ограничиваются передачей одного байта...
поэтому предположив что вместо 8 таков на байт у нас будет 10 (2 такта на синхронизацию) получим
10*40*0.125=50 мкс - как раз влезем на экран !

Дальше будем считать количество строк для вывода


Виталий (аka ВитГо)
 
ВитГоДата: Воскресенье, 19.08.2012, 16:29 | Сообщение # 3
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Теперь по доступным для рисования строкам

всего у нас 625 строк в одном кадре
всего доступно для вывода 576 строк, остальные тратятся на кадровую синхронизацию
если дублировать данные по строкам получится 576\2=288 точек по вертикали
этого достаточно для 288\8=36 строк символов высотой в 8 точек

мне столько вряд ли будет нужно, поэтому остановлюсь на 32 строках=256 строк графики или 512 строк видеосигнала
остальные 64 строки - оставим на рамку изображения сверху и снизу

ИТОГО наше поле для вывода будет иметь 32 строки по 40 символов в строке
для хранения нужно будет 32*40=1280 байт в ОЗУ...

и вот тут мы понимаем что atmega16 нам не подходит так как у нее всего 1024 байт ОЗУ
нужно для проекта использовать atmega32, у которой 2048 байт ОЗУ


Виталий (аka ВитГо)
 
ВитГоДата: Воскресенье, 19.08.2012, 23:22 | Сообщение # 4
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
суть до дело я написал тестовую программу для генерации видео состоящего из двух полукадров

программа на си тестовая программа
в папке doc архива схема и номиналы резисторов

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

к сожалению великолепно описанный проект http://blog.vinu.co.in/2012....on.html предлагает упрощенную вертикальную синхронизацию, и ни один из моих 3-ех телевизоров не синхронизировался по вертикали
поэтому я написал то что должно быть по ГОСТу - и после некоторых доработок все заработало как надо


Виталий (аka ВитГо)
 
ВитГоДата: Суббота, 25.08.2012, 20:38 | Сообщение # 5
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
продолжаю написание программы для вывода видео..

текущая логика работы программы:

использую таймер Т1
по совпадению с OCR1A - осуществляется вывод синхроимпульсов горизонтальной и вертикальной синхронизации
по совпадению с OCR1B - осуществляется вывод данных строки видео сигнала.

вывод в строку осуществляется через SPI на частоте 8 мгц

могу подтвердить что линия в пиксель между символами существует, но этот пиксел наследует состояние леворасположенного.. так что все не так страшно как думалось...

удалось добиться строгой вертикальности пикселов (без сдвига по горизонтали) !!


Виталий (аka ВитГо)
 
ВитГоДата: Вторник, 28.08.2012, 19:25 | Сообщение # 6
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Начало положено !!!

режим 40х28 строк, с графическим окном 88х72 (при общем разрешении экрана 320х224)


положение графического окна можно задавать с точностью до 8х8 точек (с точностью до текстового знакоместа)
Прикрепления: 0708507.jpg (158.2 Kb)


Виталий (аka ВитГо)
 
ВитГоДата: Вторник, 28.08.2012, 19:29 | Сообщение # 7
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
текстовый режим 40х28 с графическим окном 88х72 (при общем разрешении экрана 160х224)



получается в 2 раза меньше разрешение графической области по горизонтали чем в сообщении выше (с другим режимом)

для разнообразия графическое окно максимально подвинуто вправо :-)
Прикрепления: 5946348.jpg (162.0 Kb)


Виталий (аka ВитГо)
 
ВитГоДата: Вторник, 28.08.2012, 19:46 | Сообщение # 8
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Ну и так уж и быть режим окна 88х72 (при общем 320х224) с позиционированием посередине



по вертикали тоже позиционируется !!
Прикрепления: 1529728.jpg (154.3 Kb)


Виталий (аka ВитГо)
 
ВитГоДата: Вторник, 28.08.2012, 19:47 | Сообщение # 9
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Надпись на изображении "ВИДЕО" - это надпись моего телека :-)) я пока цвет не генерю (хотя в планах есть !)

Виталий (аka ВитГо)
 
ВитГоДата: Пятница, 31.08.2012, 01:40 | Сообщение # 10
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
переписал программу генерации видео таким образом чтобы ее можно было добавлять в любой другой проект.

сейчас пишу подпрограммы взаимодействия..

текущие подпрограммы:
avrtv_clr - очистка экрана
avrtv_at - позиционирование текстовой печати
avrtv_char - печать символа


Виталий (аka ВитГо)
 
ВитГоДата: Пятница, 31.08.2012, 01:42 | Сообщение # 11
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
кстати, переписанная программа получилась более удобной в плане настройки вывода и имеет большие возможности по настройке генерируемого видеосигнала.

эксперименты продолжаю :-)


Виталий (аka ВитГо)
 
ВитГоДата: Пятница, 31.08.2012, 20:21 | Сообщение # 12
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
текущие характеристики модуля:

- текстовый режим 28 строк по 42 символа

- в работе используются два прерывания меги OCR1A_COMP и OCR1B_COMP

текущие вызовы модуля:
avrtv_init - инициализация и старт генерации видео
avrtv_clr - очистка экрана
avrtv_at - позиционирование текстового вывода
avrtv_char - вывод в текущих координатах символа
avrtv_str - вывод строки из flash начиная с текущих координат вывода
avrtv_strln - вывод строки из flash начиная с текущих координат вывода, после вывода строки перевод вывода в начало следующей строки
avrtv_hex8 - вывод 8ми битного шестнадцатеричного числа с текущих координат вывода
avrtv_dec16 - вывод 16ти битного десятичного числа с текущих координат вывода
avrtv_row_up_scroll - скроллинг экрана на 1 строку вверх

какие еще процедуры стоит добавить ?


Виталий (аka ВитГо)
 
ВитГоДата: Пятница, 31.08.2012, 20:36 | Сообщение # 13
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Пример использования модуля в проектах

Code

.include  "m32def.inc"    ; используем контроллер ATMega32 (или другой с больших объемом памяти)

.include    "lib_avr-tv\lib_avrtv_const.asm"    ; константы модуля avr-tv константы модуля avr-tv должны быть включены в исходники раньше всех остальных частей

.DSEG

.include  "lib_avr-tv\lib_avrtv_dseg.asm"  ; сегмент данных модуля avr-tv сегмент данных нужно включить в DSEG сегмент исходников, раньше основного модуля, но позже констант

.CSEG

.ORG    0x0000
       rjmp START

.ORG    OC1Aaddr  
       rjmp AVRTV_OCR1A  ; Прерывание AVR-TV

.ORG    OC1Baddr  
       rjmp AVRTV_OCR1B  ; Прерывание AVR-TV

START:
       ldi  R16    , low (RAMEND)  ; установка стека
       out  SPL    , R16
       ldi  R16    , low (RAMEND)
       out  SPH    , R16

       call    AVRTV_INIT   ; инициализация библиотеки AVR-TV
        
       call    avrtv_clr    ; очистка экрана

; здесь ваша программа....
                    ldi      R16 , 0
                    ldi      R17 , 0
                    call     avrtv_at                           ; установка координат печати
   
                    ldi      R16 , 'A'
                    call     avrtv_char                        ; печать символа А

.include  "lib_avr-tv\lib_avrtv.asm"  ; библиотека avr-tv, исполняемая библиотека модуля, включается в сегмент CSEG, после констант и сегмента, данных модуля


Виталий (аka ВитГо)
 
ВитГоДата: Пятница, 31.08.2012, 23:41 | Сообщение # 14
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
начал писать цикл статей про генерацию видео: вдруг кого нить заинтересует и он решит самостоятельно повторить\улучшить мою разработку

Генерация видеосигнала при помощи контроллеров AVR. Часть 1. Аппаратная подготовка.


Виталий (аka ВитГо)
 
ВитГоДата: Воскресенье, 02.09.2012, 07:11 | Сообщение # 15
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
написана вторая часть статьи

Генерация видеосигнала при помощи контроллеров AVR. Часть 2. Синхроимпульсы


Виталий (аka ВитГо)
 
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:


Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz