OSD на ATmega1281

msv

Закончил своего вжика, думаю продолжить разбираться со своей LRS.
Вот как выглядит это сейчас:

www.youtube.com/watch?v=97bJY3ZyXoc

Достает не столько средняя задержка, сколько ее неравномерность…
Буду пробовать переделать с синхронизацией времени начала передачи от полученного PPM. При этом есть два варианта:

  1. Увеличить скорость, что бы успевать передавать за 18мс с периодом 20мс.
  2. Уменьшить скорость в радиоканале и передавать с интервалом 40мс. В приемнике можно интерполировать до 20мс.
    Долго думал какой вариант “правильнее”, решил реализовать оба… 1-й- для низко и близко, 2-й- для высоко и далеко.
    Что будет получаться, поделюсь…
blade
korall:

и пикселей больше влезет,

Тут главный вопрос:а зачем?
Помимо снижения надежности и увеличения разогрева самого “камня” при его “разгоне”, слишком мелкие буквовки- просто нельзя будет разглядеть к примеру, в видеоочки? Даже если они- очень чётко прописаны?
Ведь смысл ОСД не в достижении предела разрешения, а в удобстве для пользователя (в условиях очень ограниченного времени и распределения внимания) -понять и оценить параметры полёта?

korall
blade:

Тут главный вопрос:а зачем?

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

Vlado
  1. Уменьшить скорость в радиоканале и передавать с интервалом 40мс. В приемнике можно интерполировать до 20мс.

Ну так это коррелирует с мах чувствительностью, скорость порядка 2.4-1.2 килобит. Можно использовать каналы и фильтры от профессиональных станций, полосою 15 и меньше киллогерц. Там типичная чувствительность 0.17uV, правда СШ никакой.

1 month later
Vlado

Что будет получаться, поделюсь…

Здравствуйте! Как насчет достижений в OSD, есть ли чем поделиться.

sirQWERTY

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

МаркАнтоний
sirQWERTY:

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

Можно было яндексу вопрос задать. И первая же ссылка из яндекса поможет Вам расшифровать номинал.

Сергей, а вообще для Вашей задачи созданы темы типа Вот этой: помогите распознать радиодеталь, и подобных тем несколько создано.

sirQWERTY

Дружищь, ну я не такой уж и дубовый. Вы пробовали? Не распознается такое сочетание нигде. А за ссылку на тему по распознованию деталей спасибо! Если модератор сюда заглянет, мои сообщения хорошо бы почикать…

torex777
sirQWERTY:

я не смог расшифровать

Катушка индуктивности 15мкГн +_10%

msv
Vlado:

есть ли чем поделиться

Работа проделано много, но пока нечего показать что-то интересное. Да и толком полетных испытаний еще не проводил…
За межсезонье:
Полностью переделал наземку. И железо и софт.
Много изменений ( почти все… 😃 ) в софте OSD/АП. Маленько причесал код, повыкидывал то, что не оправдало себя. Серьезно все упростилось, в тч за счет сознательного уменьшения точности. В результате код немного уменьшился в размере и заметно ускорился в основном за счет уменьшения операций с промежуточными long-ами. Т.е. появились резервы по процессорному времени еще что-нибудь влепить. Наконец переделал вывод пикселя за три такта, теперь разрешение экрана 256x160. Ну и конечно поддержка моего LRS.
Облетал новый носитель, в принципе доволен, но еще стоит поучить его летать… Облетывал на своей LRS, наземный тест до 200м- ни одного дропа (дальше поленился идти). В полете (пока только визуально) к РУ вопросов не было. В общем к сезону более-менее подготовился, жду когда подсохнет, а то новой камерой да прям в грязь плюхать… как-то не хочется.

Увлекся темой IMU… Хотя в инете полно видяшек с идеальной работой этих систем на столе, безупречного поведения в полете что-то пока не видно… 😃 Но тема сама по себе интересная, пока копаюсь в даташитах, теориях, рисую вращающиеся прямоугольники, вспоминая основы 3D-программирования (например вчера целый вечер вспоминал, как определить направление обхода многоугольника…😃 ). К сожалению серьезно подскочили цены на сенсоры на sparcfun. Относительно дешевые платки 9dof нашел только на ebay. Может кто даст наводку?..

ЗЫ Игорь, а вы запустили OSD с той прошивкой, которую я высылал?

alexeykozin
msv:

Может кто даст наводку?..

наводка store.diydrones.com/…/kt-arduimu-30.htm
надеюсь в скором времени собрать такую же немного дешевле (в основном за счет что сборка своими руками)
у нее уже все готово. по сериалу выдает ориентацию

Vlado

ЗЫ Игорь, а вы запустили OSD с той прошивкой, которую я высылал?

О спасибки. Собираюсь неспеша это делать, дел невпроворот поэтому интересуюсь по поводу новинок. Тоже камера + поворотный столик все уже намази. Довольно серьезно подготовился с антеннами и тд и тп. Если можно сбросте последнюю прошивку и пжлс фузы для ОСД, чтобы голову не ломать. Как что нибудь существенное нарисуется, покажу.

msv

Если можно сбросте последнюю прошивку и пжлс фузы для ОСД, чтобы голову не ломать. Как что нибудь существенное нарисуется, покажу.

Крайнюю версию можете скачать здесь: narod.ru/disk/…/osd_msv_v2_5.rar.html
Прошивка тщательно проверялась на симуляторе и на земле, но ни одного полета на ней еще не делал.
Фузы со своей платы скачать не могу, прошивки меняю через бутлоадер (им конечно фузы ни прочитать, ни поменять), программатор на работе, а плата на самолете, да и разъем надо паять( я его сделал, зашил фузы, бутлоадер и разобрал). Поэтому так же придется копать даташит. Думаю Вы сами справитесь… 😃

alexeykozin:

надеюсь в скором времени собрать такую же немного дешевле

Спасибо, неплохой вариант, и по нынешним ценам относительно недорогой. Но мечтается раза в три дешевле и можно без проца…
Как вот такое, сильно плохо?

Vlado

Крайнюю версию можете скачать здесь

А ну спасибки, посмотрим. Тогда спрошу если что.

Думаю Вы сами справитесь…

А что еще остается, халява она ведь всегда скользкая.😃

leprud
msv:

Как вот такое, сильно плохо?

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

16 days later
xrenb

Здравствуйте! Основное на плате припаял - прошить не получается 😦 (шью USBASP через winXP )программатор не видит проц .Помогите советом где рыть (монтаж проверил - соплей нет ) 😦

msv

Похоже не те ножки зацепили программатор. См. даташит “30.8.1 Serial Programming Pin Mapping”.

xrenb

Сразу пробывал ничего не читалось 😦 (в смысле с разъёма) Уже стал думать что спалил проц ненароком ,avr910 подключал не читался . Откинул стабилитроны с программатора - прочитался 😆Это уже радует ,теперь фьюзы осталось определить и прошить.

xrenb

Прошил , включил питание .Моргает светодиод на 31 ноге (для чего светодиоды и кнопки ?) на кварце 20 мег есть. В очках или на телеке ничего нет (камеру подключил ). Возможно чёта не так припаял (уважаемый MSV можно посмотреть фото вашей платки ?)

msv

Начнем с аналоговой части… В основе видео-микшера простейший каскад с общим коллектором. Проверьте его работу по постоянному току (цешкой). Видео должно проходить с камеры на передатчик даже при неработающей цифровой части.
(Питание на камеру/передатчик(лучше для начала видео-выход OSD сразу в телек) через соответствующий разъем OSD не забыли подать? 😃 )

xrenb

Хм по ходу я голова, два уха .На работе всё подключил - работает и картинка есть.

msv

Камера PAL? Пока только он поддерживается… Смотрите сигнал кадровой синхронизации с 3-ей ноги LM1881. Должны быть четкие одиночные импульсы 50Гц. Возможно потребуется увеличить резистор на 6-й ноге LM-ки до 1мОма. Или даже уменьшить резистор по ее входу до 470ом… На схеме показаны номиналы из даташита 1881, но жизнь иногда приподносит сюрпризы…
ЗЫ Пока я ответ сочинял все заработало? В чем была проблема?

xrenb

Я резистор на 6 ноге лм1881 не тот поставил ,680 ом вместо 680ком.Поменял и бежать перестало😒

3 months later
msv

Раз подняли тему, мой отчетец…
С уменьшением пиксела до 0.15мкс (три такта CPU) во всей красе вылезли цветные факела из-за того, что спектр OSD стал активно налазить на цветовую поднесущую… Простых идей, без полного вырезания из суммарного видео+OSD цветовой поднесущей и отдельным подмешивания к этому, чисто яркостному сигналу, исходной поднесущей пока нет…
Наконец разжился вертикальной пиропарой, любезно задаренной Сергеем (ubd). Забацал честную 3d-математику:


void GetAngleCurrent(void)
{
s_int a, x, y, z, x1;
s_long l, l1;

// Cur Sensor
x1=gADC_Val[ADC_SENSOR1]- gCalibr.SensorMid[0];
y=gADC_Val[ADC_SENSOR2]- gCalibr.SensorMid[1];
z=gADC_Val[ADC_SENSORZ]- gCalibr.SensorMid[2];
// Rotate
l=x1; l*=gSensor.COS_Matrix; a=(s_int)(l/128); // COS_Matrix=0..128
l=y; l*=gSensor.SIN_Matrix; x=a-(s_int)(l/128); // SIN_Matrix=0..128
l=x1; l*=gSensor.SIN_Matrix; a=(s_int)(l/128);
l=y; l*=gSensor.COS_Matrix; y=a+(s_int)(l/128);
// length vector
l=x; l*=x;
l1=y; l1*=y; l+=l1;
l1=z; l1*=z; l+=l1;
a=lsqrt(l);
// angle
gRollAngle=a_tan2(y, z); // +180..-180
gPitchAngle=a_sin(x, a); // +90..-90
if(gRollAngle>90 || gRollAngle<-90) gPitchAngle=-gPitchAngle;
// Trimm
gRollAngle-=gSensor.RollTrimmer;
if(gRollAngle>180) gRollAngle-=360;
else if(gRollAngle<-180) gRollAngle+=360;
gPitchAngle-=gSensor.PitchTrimmer;
if(gPitchAngle>90) gPitchAngle=180-gPitchAngle;
else if(gPitchAngle<-90) gPitchAngle=-180-gPitchAngle;
}

Конечно все как-то работает… Но после того как вывел в поля отладки значения сенсоров, не удивился, что все работает именно “как-то”… Может и не хуже, чем в других подобных проектах, но до идеала ой как далеко… Возможно проблема, что сами корпуса пиросенсоров в полете по разному нагреваются/охлаждаются от солнца/ветра и от этого сигнал диф. пары весьма сильно плывет…
Вообщем не зря народ поголовно переходит на IMU, наверное и мне пора… 😃