|
Подмешивание в видеосигнал |
|
|
|
Dec 20 2007, 19:44
|
Частый гость
 
Группа: Новичок
Сообщений: 90
Регистрация: 19-12-07
Пользователь №: 33 459

|
Разбираюсь с АТмегой16, на этот раз экспериментирую с подмешиванием данных (хотя бы палочек-полосок) в композитный видео-сигнал. Перерыл все возможные гуглы, нашел несколько реализаций, нашел описание передачи видео-сигнала. Читал, смотрел, опять читал. С железом более-менее разобрался, принцип работы понятен. А вот с софтом не очень, не хватает познаний. Так что все рассуждения основываются на познаниях из мануалов "для чайников" Итак, купил LM1881, кварц 16 мгц, конденсаторы, резисторы, пару диодов. Подключил все это к меге16 - сигнал горизонтальной синхронизации на вход внешних прерываний INT0, вертикальной на INT1. Получается что прерывание по INT0 возникает в начале прорисовки каждой строки, а INT1 в начале каждого кадра (или полукадра, т.к. рисуется через строчку). Ногу PD7 сделал выходом и подключил обратно к центральной жиле видеокабеля через диод и сопротивление. Сделал счетчик строк, который прибавляет 1 при каждом INT0 и обнуляет при INT1. Посидел, подумал, написал... в прерывании INT0 ждем нужной строки, после чего ждем определенное время, включаем "питание" на PD7, опять ждем, выключаем питание. Получается горизонтальная линия определенной длины и с определенным смещением от левого края. Нарисуем крест. В обработчике INT0 условие - если строка не та, которая нам нужна, то ждем, включаем PD7 и сразу же выключаем (чтобы получить штрих с наименьшим размахом). Т.к. задержка в каждой строке одинаковая, должна получится ровная вертикальная линия. Но не получается :  Линия гуляет как бы лесенкой на всем протяжении. По логике получается, что временной интервал от начала прерывания до начала включения PD7 при одинаковых значениях получается разным  Фото стоп-кадра экрана прикрепил. Вот кусок кода с обработкой прерываний: Код // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { if (vert==150) { i=10; while(i--) { #asm("nop"); } PORTD.7=1; i=30; while(i--) { #asm("nop"); } PORTD.7=0; } else { i=20; while(i--) { #asm("nop"); } PORTD.7=1; PORTD.7=0; }
vert++; }
// External Interrupt 1 service routine interrupt [EXT_INT1] void ext_int1_isr(void) { // Place your code here vert=0; } Обучите, пожалуйста, чайника основным принципам правильного построения изображения на этой железной связке (LM1881 + atmega16). Для начала хотя бы прямых линий
Сообщение отредактировал idono - Dec 20 2007, 19:48
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Dec 23 2007, 12:46
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Получилась отличная реализация телеметрии для авиа-модели, осталось отыскать пару датчиков давления, дабы менять скорость и высоту. Ну датчиков давления как грязи разных, найти не проблема. Но я бы делал телеметрию не так. Насколько я понял, у вас передается изображение с видеокамеры, установленной на БПЛА, но перед этим вы подмешиваете туда свою графику. А надо бы чуть наоборот - подмешивать в воздухе данные телеметрии в бинарном виде - например, отвести на них 8 микросекунд после гасящего строчного и передать, скажем, 1 байт за это время (да хоть используя USART). В результате, если вы будете смотреть картинку, то увидите справа столбик с данными. А уже на земле пропустить этот видеосигнал через коробочку, в которой проц вытащит байтик по строчному синхроимпульсу и отобразит его красиво буквами и цифрами (и, например, можно будет по необходимости эту информацию наложить или убрать). В этом случае, у вас получается возможность, записав видеосигнал, сохранить объективные цифровые данные, которые можно потом обрабатывать не вручную. Запись можно вести хоть на видеомагнитофон, хоть цифровать сразу на комп. В профсистемах для этой цели используются невидимые интервалы (гашение и т.д.), но лучше пожертвовать маленьким кусочком картинки, тогда все можно сохранить, не заботясь, что данные могут быть обрезаны (например, при цифровке на комп, как понимаете, все данные вне видимой области уйдут в сад).
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Dec 23 2007, 14:36
|
Группа: Новичок
Сообщений: 3
Регистрация: 23-12-07
Из: Харьков, Украина
Пользователь №: 33 566

|
Привет всем  Очень интересная тема, давно думал над этим и вот собрался. Собрал схему (прошу прощения за её несоответвие ISO, ГОСТ, ДСТУ прочим стандартам  )  (Забыл нарисовать на схеме, общий провод конструкции соединен с общим проводом видеосигнала) Но вывести что-то осознанное на экран не получилось  Подскажите поожалуйста, может я допустил ошибку в схеме? Или в коде программы? _______________________________________________________________ #include <tiny26.h> #include <delay.h> int i=0; interrupt [EXT_INT0] void ext_int0_isr(void) { if(i>100 && i<200){ delay_us(10); PORTA.7=1; delay_us(20); PORTA.7=0; } i++; } void main(void) { PORTA=0x00; DDRA=0xFF; PORTB=0x00; DDRB=0x00; TCCR0=0x00; TCNT0=0x00; PLLCSR=0x00; TCCR1A=0x00; TCCR1B=0x00; TCNT1=0x00; OCR1A=0x00; OCR1B=0x00; OCR1C=0x00; GIMSK=0x40; MCUCR=0x00; GIFR=0x40; TIMSK=0x00; USICR=0x00; ACSR=0x80; #asm("sei") while (1) { if(PINB.3==0){ i=0; } }; } ________________________________________________________________________________ _ Это конечно не Мега16, но ведь вывести квадратик должно хватить? Просто под рукой был макет на Тинни26, который можно было легко переделать.
Сообщение отредактировал Xumuk - Dec 23 2007, 15:07
|
|
|
|
Сообщений в этой теме
idono Подмешивание в видеосигнал Dec 20 2007, 19:44 PSP Прерывание не обрабатывается мгновенно, всегда про... Dec 20 2007, 21:19 rx3apf Цитата(PSP @ Dec 21 2007, 00:19) Прерыван... Dec 21 2007, 00:07  idono Вставил бесконечный цикл с idle(); в главной функц... Dec 21 2007, 07:02   alux Смотри на avrfreaks в последних проектах "AVG... Dec 21 2007, 07:48    idono Цитата(alux @ Dec 21 2007, 10:48) Смотри ... Dec 21 2007, 08:55 Serj78 на 16 мгц совершенно достаточно засыпать потом про... Dec 20 2007, 21:41 Т.Достоевский Цитата(Serj78 @ Dec 21 2007, 00:41) на 16... Dec 20 2007, 22:52 =VRA= Все это на раз делается даже без LM1881 Dec 20 2007, 23:41 GDI Цитатавидимо процессор тратит много тактов на таки... Dec 21 2007, 09:23 idono Чтение байта из массива перед выводом помогло, шир... Dec 21 2007, 09:55  idono нарисовал из нулей массив цифр, написал функцию дл... Dec 21 2007, 16:32   Maik-vs ИМХО это большой героизм советского толка писать т... Dec 21 2007, 17:17    rx3apf Цитата(Maik-vs @ Dec 21 2007, 20:17)... Dec 21 2007, 17:43    idono Цитата(Maik-vs @ Dec 21 2007, 20:17)... Dec 22 2007, 11:34     idono Сделал вариант с выводом байта целиком в порт с по... Dec 22 2007, 20:23 rezident Чтобы уменьшить джиттер и величину запаздываний вы... Dec 21 2007, 17:24 umup ЦитатаTWI - не лучший вариант. SPI - тоже
как раз... Dec 21 2007, 18:12 rx3apf Цитата(umup @ Dec 21 2007, 21:12) как раз... Dec 21 2007, 18:29  Rst7 Цитата(rx3apf @ Dec 21 2007, 20:29) Я же ... Dec 22 2007, 06:02   Xumuk Цитата(idono @ Dec 23 2007, 20:23) Xumuk,... Dec 23 2007, 20:40    idono Цитата(Xumuk @ Dec 23 2007, 23:40) А можн... Dec 23 2007, 21:39     idono Объясните на пальцах, пожалуйста, как сделать выво... Jan 1 2008, 01:18 Т.Достоевский Только вертикальную скорость нужно отображать ввид... Dec 23 2007, 18:54 idono Цитата(Т.Достоевский @ Dec 23 2007, 21:54... Dec 23 2007, 19:27  Т.Достоевский Цитата(idono @ Dec 23 2007, 22:27) Не дум... Dec 23 2007, 19:40 HCHUNTER idono,
...от себя хотел добавить - обратите вним... Jan 1 2008, 07:39 Serj78 Idono,
Надо просто помнить, что SPI - фактически... Jan 1 2008, 11:09 HCHUNTER Цитата(Serj78 @ Jan 1 2008, 14:09) невозм... Jan 1 2008, 12:21  Xumuk Может целесообразно использовать 2 микроконтроллер... Jan 19 2008, 08:15 Algol HCHUNTER
А сколько вам необходимо ОЗУ? Может быть ... Jan 19 2008, 09:54 AndyBig ЦитатаМожет быть поставить внешную статическую рам... Jan 19 2008, 15:03
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|