реклама на сайте
подробности

 
 
> Подмешивание в видеосигнал
idono
сообщение Dec 20 2007, 19:44
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 90
Регистрация: 19-12-07
Пользователь №: 33 459



Разбираюсь с АТмегой16, на этот раз экспериментирую с подмешиванием данных (хотя бы палочек-полосок) в композитный видео-сигнал.

Перерыл все возможные гуглы, нашел несколько реализаций, нашел описание передачи видео-сигнала. Читал, смотрел, опять читал. С железом более-менее разобрался, принцип работы понятен.
А вот с софтом не очень, не хватает познаний. Так что все рассуждения основываются на познаниях из мануалов "для чайников" rolleyes.gif

Итак, купил LM1881, кварц 16 мгц, конденсаторы, резисторы, пару диодов. Подключил все это к меге16 - сигнал горизонтальной синхронизации на вход внешних прерываний INT0, вертикальной на INT1. Получается что прерывание по INT0 возникает в начале прорисовки каждой строки, а INT1 в начале каждого кадра (или полукадра, т.к. рисуется через строчку). Ногу PD7 сделал выходом и подключил обратно к центральной жиле видеокабеля через диод и сопротивление.

Сделал счетчик строк, который прибавляет 1 при каждом INT0 и обнуляет при INT1.
Посидел, подумал, написал... в прерывании INT0 ждем нужной строки, после чего ждем определенное время, включаем "питание" на PD7, опять ждем, выключаем питание. Получается горизонтальная линия определенной длины и с определенным смещением от левого края.

Нарисуем крест. В обработчике INT0 условие - если строка не та, которая нам нужна, то ждем, включаем PD7 и сразу же выключаем (чтобы получить штрих с наименьшим размахом). Т.к. задержка в каждой строке одинаковая, должна получится ровная вертикальная линия. Но не получается : wacko.gif Линия гуляет как бы лесенкой на всем протяжении. По логике получается, что временной интервал от начала прерывания до начала включения PD7 при одинаковых значениях получается разным sad.gif
Фото стоп-кадра экрана прикрепил.

Вот кусок кода с обработкой прерываний:
Код
// 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). Для начала хотя бы прямых линий rolleyes.gif

Сообщение отредактировал idono - Dec 20 2007, 19:48
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Dec 23 2007, 12:46
Сообщение #2


Йа моск ;)
******

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



Цитата
Получилась отличная реализация телеметрии для авиа-модели, осталось отыскать пару датчиков давления, дабы менять скорость и высоту.


Ну датчиков давления как грязи разных, найти не проблема. Но я бы делал телеметрию не так.

Насколько я понял, у вас передается изображение с видеокамеры, установленной на БПЛА, но перед этим вы подмешиваете туда свою графику. А надо бы чуть наоборот - подмешивать в воздухе данные телеметрии в бинарном виде - например, отвести на них 8 микросекунд после гасящего строчного и передать, скажем, 1 байт за это время (да хоть используя USART). В результате, если вы будете смотреть картинку, то увидите справа столбик с данными. А уже на земле пропустить этот видеосигнал через коробочку, в которой проц вытащит байтик по строчному синхроимпульсу и отобразит его красиво буквами и цифрами (и, например, можно будет по необходимости эту информацию наложить или убрать). В этом случае, у вас получается возможность, записав видеосигнал, сохранить объективные цифровые данные, которые можно потом обрабатывать не вручную. Запись можно вести хоть на видеомагнитофон, хоть цифровать сразу на комп.

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


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Xumuk
сообщение Dec 23 2007, 14:36
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 23-12-07
Из: Харьков, Украина
Пользователь №: 33 566



Привет всем wink.gif
Очень интересная тема, давно думал над этим и вот собрался.

Собрал схему (прошу прощения за её несоответвие ISO, ГОСТ, ДСТУ прочим стандартам smile.gif )


(Забыл нарисовать на схеме, общий провод конструкции соединен с общим проводом видеосигнала)
Но вывести что-то осознанное на экран не получилось sad.gif
Подскажите поожалуйста, может я допустил ошибку в схеме? Или в коде программы?

_______________________________________________________________
#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
Go to the top of the page
 
+Quote Post
idono
сообщение Dec 23 2007, 18:23
Сообщение #4


Частый гость
**

Группа: Новичок
Сообщений: 90
Регистрация: 19-12-07
Пользователь №: 33 459



Xumuk, на схеме сразу бросается в глаза разрыв видео-сигнала. Сигнал рвать не надо, провода Vin и Vout надо оба подключить к центральной жиле видео-провода, не разрывая ее.
Тогда твой МК будет в нужный момент времени выдавать "в линию" напряжение, что будет белой точкой в строке (либо линией, смотря на сколько "включать" PA7)

Сообщение отредактировал idono - Dec 23 2007, 18:27
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 17:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01455 секунд с 7
ELECTRONIX ©2004-2016