OSD на ATmega1281
Первый раз этот датчик использовал в своем пульте с 35Мгц передатчиком. Тоже заработал только после того, как повесил на питание и на выход непосредственно на датчик емкости.
А тут… датчик на маленький платке, питание и выход зашунтированы емкостями SMD, все в глухом экране, на шлейфе ферритовое колечко… На расстоянии ближе ~1м от антенны на выходе вместо постоянки, какие-то прямоугольники… Блин… все законы физики неверны… Купил другой - такая же фигня… Уж не так мне нужен этот датчик, просто было уже интересно… повесил доп. нагрузочный резистор, запитал от отдельного источника, еще что-то мудрил, уже не помню… Прямо не датчик температуры, а сверхвысокочувствительный датчик эл.магнитного поля…
C DS18S20 некогда обмениваться, Вы правы. Во всяком случае неохота городить еще один критичный реал-тайм процесс… Пока сделал на делителе с KTY81. Нелинейность плюс/минус километр, ну как индикатор пока пойдет…
Облетал вчерась свой бпла… Ощущений/адреналину море…
Самолетик с возросшей нагрузкой справился на 5. Даже лучше стало. Возросла скорость (что мне тоже понравилось), увеличилась стабильность и даже появилась некоторая “солидность” в полете.
Горизонт работает без нареканий. FMA- марку держит…
Фиговенькое качество видео… И камерка не так что сильно (хотя для своих 25-баков вполне достойно…), дальше все заметно ухудшает радиоканал, потом пинакл с очень низким динамическим диапазоном, ну и под конец добивает картинку кодер… Надо поиграться уровнями видео-сигнала, а вот с радиоканалом не знаю что делать, слишком много выпадений похоже из-за интерференций. Конечно нужно антенну поприличнее слепить на приеме, но не уверен, что это радикально решит проблему.
По телеметрии нарекания только к значению высоты. Почему-то за 10мин полета обновилось значение 2(!) раза… Или с модуля так редко идут GGA, или в парсинге что-то попутал… Странно, все нормально вроде бы было…
Режим стабилизации- первый раз после включения - восторг! Идет как вкопанный широченной дугой (неидеальное триммирование) несмотря на довольно сильные порывы ветра. А вот второй раз включил, вроде бы все нормально, но после команды на крен с пульта, валится на крыло… Потом при анализе видео понял, что все правильно… Самолет шел с выключенными двигами на планировании. После включения стабилизации, система долго и довольно успешно пыталась выдерживать нулевой тангаж практически доведя полет до парашютирования. Но дача крена… да еще с ветерком… это уже было через-чур… Есть о чем подумать…
Автопилот- далеко не отлетал, но с 300м уверенно, взревев двигами ( все четко по алгоритму, для поддержания близкого к 0 тангажа на вираже, было включено ~70% газа), развернул самолет на базу, сбросил газ (тк. текущая высота, хоть и неверная, была больше целевой) спланировал прямехонько к нам.
Летал с визуальным контролем, тк. просто хотел для начала проверить работу всех систем. В конце поддался на уговоры сына/ассистента, поуправлять по картинке на ноуте в машине. Залез в машину и только начал приходить в себя пытаясь ориентироваться в непривычной ситуации, отключается ноут… Сдохли батареи… Выскакиваю из машины… Где!!! Сын, несмотря на предварительный инструктаж (если я в машине- ты наблюдаешь за ним визуально!), тоже оказывается глядел через плечо на ноут… Несколько секунд ужаса… и треск дерева в который попал самолет, как ни странно было облегчением… 😃 Сильно серьезных повреждений нет, но морду придется переклеить…
Хорошо-бы фото/видеоматериалы прикладывать для наглядности!?
msv, с видео - надо 2-3 приемника, антенны их в 3х плоскостях, с приемников вытащить RSSI на мегу, мегой переключать например с помощью 74hc4051, тогда все стабильно будет км на 3 на 0,5 вт передатчика, я в этой штуке еще и OSD запихал.
Хорошо-бы фото/видеоматериалы прикладывать для наглядности!?
Все правильно, но уж шибко не терпелось поделиться хотя бы на словах… 😃
Качество видео с борта фиговенькое, может попытаюсь со временем что-нибудь нарезать. А вот с земли есть красивые кадры, но писали на DVD-R, жалко пока финализировать. Попозже смонтируем…
огда все стабильно будет км на 3
Ок, подумаю… Пока летал на 300м, и был удивлен кол-вом выпадений, причем независящим от расстояния. Вообще направленная антеннка, по идеи и интерференцию должна поприбить…
2msv
Скажите, а блок работы с видео вы сами проектировали или брали что-то за основу. Интересно, исходя из каких соображений?
на входе 1881 фильтр странно обустроен (в моем понимании сначала должен стоять фильтр НЧ из резистора и конденсатора, после него разделительный конденсатор, как впрочем и прорисовано в даташите)
Я то-же себе блок OSD делаю. Набросал схему, работает, но зависит от абсолютных уровней виделсигнала - если интересно - брошу на форум.
Насчёт горизонта - пока склоняюсь к тому, что будет достаточно adxl202 1 штука и крен и тангаж контролировать.
PS хорошо, что вы продолжаете публиковать свои достижения - интересно читать. Насчёт качества картинки - цели сравнивать с промышленными или отработанными системами нет - кто в этом разбирается - плохое качество картинки не смутит, хотя многоминутные клипы из этого лучше не делать 😒
Не хочу утомлять низким качеством картинки, выложу только минутку полета.
Пунктирная линия на авиагоризонте появляется в режимах помощника и автопилота- целевые крен/тангаж. 3 маленькие шкалы- значения на выходе каналов управления (по сути положение серв) Все остальное, вроде бы понятно…
Писали навстречу, получилось - мгновенный ответ… 😃
Видео-модулятор сам сочинял. Из каких соображений… ну что бы работало… 😃 А что не понятно? спрашивайте…
Где стоит кондер ФНЧ, до разделительного или после для електичесва не играет значения…
Что такое adxl202? Конечно могу глянуть дш…
По видеомодулятору - сформулирую вопросы - задам. Привожу схему моего модулятора.
ваше видео дает хорошее представление о получившемся OSD - хорошо, что с помощью графики можно выводить сложные картинки, разрешение чувствуется, что недостаточно.
ADXL - называют акселерометр, но они разные бывают, а детали, как правило не уточняются. Применяют для измерения угла наклона в двух плоскостях. В паре с гироскопом позволяет строить эффективные устройства для определения угла наклона. Сам по себе возможно будет достаточен, что-бы определять угол в тепличных условиях (незначительные угловые ускорения, наклоны до 45град)
Графика слабовата, согласен… С другой стороны пиксель по высоте в принципе не уменьшить, по ширине можно на 1/3 поуже сделать, правда надо смотреть влезу ли по быстродействию. Ну это уже в след. версии возможно буду мудрить.
Я думаю Вы понимаете, что с авиагоризонт, построенный на принципе измерения ускорений, будет не слишком полезный показометр. А уж функцию стабилизации (ради чего он и нужен) точно осуществить не получится.
По схеме Вашего модулятора, чес. говоря не очень понял… Зачем диод D7? Это какая-то хитрая привязка к уровню чёрного? Не врублюсь, как это может работать, он же всегда открыт… Номиналы резисторов тоже вызывают сомнения, этож какой мощности должен быть источник модулирующих сигналов… Вы собираетесь отдельно программно формировать сигналы черного и белого?
С другой стороны пиксель по высоте в принципе не уменьшить,
Почему?
В PAL всего 312,5 строк в полукадре… OSD обрабатывает каждую строку в полукадре.
Сергей, А как у Вас (в меге) организован PPM_IN?
msv, Вы под графику выделяете память (видео буфер) , а потом по прерыванию выводите?
Я думаю Вы понимаете, что с авиагоризонт, построенный на принципе измерения ускорений, будет не слишком полезный показометр. А уж функцию стабилизации (ради чего он и нужен) точно осуществить не получится.
А я-то надеялся 😇
По схеме Вашего модулятора, чес. говоря не очень понял… Зачем диод D7? Это какая-то хитрая привязка к уровню чёрного? Не врублюсь, как это может работать, он же всегда открыт… Номиналы резисторов тоже вызывают сомнения, этож какой мощности должен быть источник модулирующих сигналов… Вы собираетесь отдельно программно формировать сигналы черного и белого?
Диод D7 нужен для компенсации падения напряжения на транзисторе Q2/ Он действительно всегда открыт 😃, но работа у него такая. В зависимости от приходящего видеосигнала меняется ток через резистор R22, который обеспечивает сопротивление видеосигналу 50 Ом. Это приводит к колебаниям напряжения между резистором R22 и D7 и в точке R23 D7 (на 0,7В выше).
Схема - рабочая (во всяком случае, для данной частоной видеокамеры).
Да, программно формировать сигналы черного и белого.
Каково назначение контура из C(330pF), R(1.5K*), C(22pF), VD6?
А как у Вас (в меге) организован PPM_IN?
Тайминг в OSD получается весьма жесткий… В моменты вывода строки нельзя использовать прерывания. Поэтому для определения длительностей на входе ppm_in после вывода каждой строки проверяется флаг блока захвата первого таймера, и при его срабатывании считывается/расчитывается длина импульса по значению в ICR1. Определение полярности ppm “само” получилось автоматическое, тк. для синхронизации ppm-пакета нахожу интевал >2.5мс, а противоположенное значение считается стробом. Все значения укладываются в буфера, которые проверяются на корректность, анализируются, обрабатываются в межкадровый промежуток. Могу выложить кусок исходника по захвату, но он на асме и наверно не слишком понятен.
под графику выделяете память (видео буфер) , а потом по прерыванию выводите?
Совершенно точно. А в буфере картинка отрисовывается в межкадровый интервал. Причем после каждого нечетного полукадра отрисовывается графические быстро изменяющиеся элементы (шкалы, авиагоризонт итп), а после четного все остальное и не в каждом полукадре.
Каково назначение контура из C(330pF), R(1.5K*), C(22pF), VD6?
Это элементы формирующие “тень”. C(330pF) и верхние диод с резистором- дифференцирующая задние фронты мод. сигнала цепочка. R(1.5K*)- определяет уровень тени. C(22pF) необходим для ограничения спектра модулирующего сигнала (резкий переход от уровня белого к уровню черного), без него сбиваются декодеры PAL и на картинке появляются цветные факела.
Сергей, Спасибо за ответ.
Oчень интересно увидель эту часть кода(PPM_IN routine)
- Инициализация таймера.( timer clk = 2.5 МГц, Normal mode,Input Capture ?)
- как расчитывается длина импульса по значению в ICR1?
( if пред знач > тек знач then WidthCH = ffff - пред знач + тек. знач
else WidthCH = тек знач таймера- пред знач ) - Синхронизация?
(if WidthCH>2,5 mS) then След. знач. будет СH1.
Все правильно.
Инициализация очевидная:
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 2500,000 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
Надеюсь с регистрами, которые в качестве переменных, разберетесь.
;--------------------
_PPM_RX:
SBIS 0x16,5 ;if(TIFR1 & 0x20)
RJMP _end_int1
LDS R16,134 ;[0]=ICR1L; [1]=ICR1H;
LDS R17,135
MOVW R18,R16
CP R16,R11 ;if(val.i>=old_tim1_val) v=val.i-old_tim1_val;
CPC R17,R12
BRLO _PPM_RX1
SUB R16,R11
SBC R17,R12
RJMP _PPM_RX2
_PPM_RX1:
LDI R26,LOW(65535) ;else v=val.i+(0xffff-old_tim1_val);
LDI R27,HIGH(65535)
SUB R26,R11
SBC R27,R12
ADD R16,R26
ADC R17,R27
_PPM_RX2:
MOV R11,R18 ;old_tim1_val=val.i;
MOV R12,R19
LDS R26,129 ;if((TCCR1B & 0x40)==0)
ANDI R26,LOW(0x40)
LDS R26,129
BRNE _PPM_RX3
ORI R26,0x40
RJMP _PPM_RX4
_PPM_RX3:
ANDI R26,0xBF ;else TCCR1B&=~0x40;
_PPM_RX4:
STS 129,R26
CPI R16,LOW(6251) ;if(v>25*250)
LDI R18,HIGH(6251)
CPC R17,R18
BRLO _PPM_RX5
LDI R26,LOW(_ppm_raw_buff) ;ppm_raw_buff[ind]=ppm_cur_ch;
LDI R27,HIGH(_ppm_raw_buff)
TST R10
BREQ _PPM_RX6
ADIW R26,19*2
_PPM_RX6:
ST X,R8
CLR R8 ; ppm_cur_ch=0;
LDI R18,1
EOR R10,R18 ;ppm_cur_bank^=1;
_PPM_RX5:
LDI R18,17 ;if(ppm_cur_ch<17)
CP R8,R18
BRSH _PPM_RX9
LDI R26,LOW(_ppm_raw_buff) ;ppm_raw_buff[ind+ppm_cur_ch+1]=v;
LDI R27,HIGH(_ppm_raw_buff)
TST R10
BREQ _PPM_RX7
ADIW R26,19*2
_PPM_RX7:
MOV R18,R8
CLR R19
LSL R18
ROL R19
ADD R26,R18
ADC R27,R19
ADIW R26,2
ST X+,R16
ST X,R17
_PPM_RX9:
LDI R18,19 ;if(ppm_cur_ch<19) ppm_cur_ch++;
CP R8,R18
BRSH _PPM_RX8
INC R8
_PPM_RX8:
SBI 0x16,5 ;TIFR1|=0x20;
;--------------------
_end_int1:
Вообще-то я неопытный писатель на асме avr, прошу прощения у проффи, которых такой код может покорежить…
Сергей (MSV), Спасибо разобрался.
У меня нет прерывания от ССИ, поэтому. polling сделал на Periodic Interval Timer 20kHz (PIT) в котором считаю интервал от прерывания КСИ до старта вывода OSD, опрашиваю окончание приёма в GPS USART буфер и мигаю светодиодом для индикация работы.
На недели попробую разобраться с PPM_IN через Timer в In Capture Mode, попробую засунуть в PIT: ADC start convertion c проверкой и запись в Video Buffer между КСИ и 25-й строкой.
Если несколько вопросов, может по опыту сталкивались:
- Селектор синхроимпульсов в TV распознает КСИ если не формировать синхронизирующие импульсы? (да/нет)
- Как можно преобразовать выходы TTL (3,3V)и подмешать их к Video In в уровень sync (0V), Blank (0.3V)? Мои идеи заканчиваються на использовании CD4066 😦 focus.ti.com/lit/ds/symlink/cd4066b.pdf
Давайте сначала разберемся, что за источник видео у Вас? Почему там нет ССИ (раз Вы их собираетесь выдавать с OSD)?
//-------
Полетал немного на выходных… Чёт не пойму как на yotube поприличнее качество выложить/получить. Сейчас жму в H.263 с разрешением 720х576 битрейтом 3000кбпс, а получается на yotube такая мазня.
Суббота:
А вот воскресный полет детям и людям с неуравновешанной психикой смотреть не рекомендуется!
Комментарии чуть позже будут, когда смогу подобрать цензурные слова…
“Давайте сначала разберемся, что за источник видео у Вас? Почему там нет ССИ (раз Вы их собираетесь выдавать с OSD)?”
ээээ… ССИ есть, нет прерываний от ССИ (реализованно аппаратно.)
Прерывания от КСИ есть. Источник обычный - CCD камера PAL.
Cелектор стандарт- LM1818.
Третий полет… слов нет. 😦