Телеметрия (часть 1)

Dikoy
smalltim:
  1. Достаточно ли акселерометру предела измерения в 10g, чтобы переварить вибрацию на электросамике? А 8 или 5 g? Есть интересные акселерометры с пределом меньше 10g. А у ДВСа какие вибрации?
    1а. Что бывает, когда акселерометр испытывает ускорения выше измеряемого предела? Синусоида на выходе режется, и ничего уже из него не вытянуть?
  2. Имеет ли право на жизнь демпфирование частотной характеристики акселерометра конденсатором на выходе, если выход аналоговый? Достаточно ли хорошо давится вибрация и шумы для того, чтобы дальше фильтровать это скользящим средним с разумной шириной окна?
  3. Корпуса LGA паяются в домашних условиях или нет? Разные доки показывают, что где-то у контактных площадок чипа есть лепестки на боковых сторонах, а где-то - нет. Если есть - к ним еще хоть как-то можно подпаяться.

Если я спрашиваю слишком много, так и скажите 😃

  1. 10 g достаточно. Да же 8. 5 уже мало, смотря, как будем летать. У ДВС вибрации зависят от многого - объёма, крепления, общей ушатанности. В целом, БСО надо крепить на резинказ или в каком нить демпфере. За одно в случае аварии жива останется. Надо бы слить с мобилки фотку, где у нас после морковки оказались срезаны с платы не только чипы, но также штырьки 2,54, причём со стороны пайки 😃 Як бритвой.
  2. Не стоит… Лучше цифрой. Скользащее среднее можно сделать многоуровневое. Тогда 32 выборки будут эквивалентны по усреднению 1024-м 😉
  3. Вполне паябельны. АДишные аксели имеют боковые лепестки, про другие не скажу… Не помню. Но вообще, должно быть всё стандартно.
    Паять можно в воде, но я предпочитаю ЭПСН на 25 ватт, с заточеным до состояния “циганской иглы” жалом. Ну и толстый слой канифольного флюса 😃 Припой подводится по дорожке сбоку и сам затекает под чип. Главное площадки сделать подлиннее, тогда паять удобней.
    Главное не совратитесь на гелевые флюсы. Особенно ТТ. Вот после них у вас уже ничего работать не будет - они проводящие и невымывающиеся. Канифоль в спирте до состояния мёда - самый лучший флюс.

ПС. ADXL2** забудте - плохие они. Трёхсотая серия много лучше.

smalltim
Dikoy:
  1. 10 g достаточно. Да же 8. 5 уже мало, смотря, как будем летать. У ДВС вибрации зависят от многого - объёма, крепления, общей ушатанности. В целом, БСО надо крепить на резинказ или в каком нить демпфере. За одно в случае аварии жива останется. Надо бы слить с мобилки фотку, где у нас после морковки оказались срезаны с платы не только чипы, но также штырьки 2,54, причём со стороны пайки 😃 Як бритвой.
  2. Не стоит… Лучше цифрой. Скользащее среднее можно сделать многоуровневое. Тогда 32 выборки будут эквивалентны по усреднению 1024-м 😉
  3. Вполне паябельны. АДишные аксели имеют боковые лепестки, про другие не скажу… Не помню. Но вообще, должно быть всё стандартно.
    Паять можно в воде, но я предпочитаю ЭПСН на 25 ватт, с заточеным до состояния “циганской иглы” жалом. Ну и толстый слой канифольного флюса 😃 Припой подводится по дорожке сбоку и сам затекает под чип. Главное площадки сделать подлиннее, тогда паять удобней.
    Главное не совратитесь на гелевые флюсы. Особенно ТТ. Вот после них у вас уже ничего работать не будет - они проводящие и невымывающиеся. Канифоль в спирте до состояния мёда - самый лучший флюс.

ПС. ADXL2** забудте - плохие они. Трёхсотая серия много лучше.

Тогда, если выпадет минутка, посмотрите, пожалуйста, на хар-ки MMA7261QT: www.freescale.com/files/sensors/…/MMA7261QT.pdf
Если не найдется возражений, я тогда возьму такую сегодня и начну с ней трахацо. AT90USBKey забираю тоже сегодня (спасибо Dikoy за наводку), трахацо с MMA7261QT буду на нем.

smalltim

Пока попробую погляжу, что скажет встроенный 10-битный АЦП Атмеги с мощным оверсэмплингом.

Dikoy

К кею сразу купите разъёмы в пады. Ибо много паек они не выдерживают. Можно взять родные штырьки 1,25, но по опыту скажу - Г ещё то. Вываливаются, не контачат… Мелкие слишком.
Лучше взять тонкий МГТФ, нарезать сантиметров по пять и припаять к падам, а на другом конце обычные 2,54 штырьки, как в программатор. Во-первых, они надёжнее, во-вторых в них удобней тыкать приборами, к ним удобней цеплять провода. В третьих, по мере износа, легче заменяются.
У нас в конторе три кея и у всех такая “гирлянда” от каждого Jx тянется. Заграничные товарищи вообще не пожалели время и запихнули его в корпус, выведя наружу все Jх 😃 На кее места припайки залиты термоклеем, чтобы провода не изламывались.
Шнурик USB-miniUSB также будет не лишним. Хотя переходник и входит в комплект, но одинарный шнурик удобнее.

По акселю. Ничего криминального не увидел. А вообще, на такие вещи ДШ - штука приблизительная. Мы как не пыжились, так и не добились в лаборатории даташитных параметров ADXL202 (несколько акселей мучали). Шумы в 2-3 раза выше, и остальные параметры тоже в 2-3 раза хуже. Аналогично с другими моделями ADi. Почему так - большой вопрос…

PocketM
smalltim:

Вот скрины из движка, если кому интересно на тему мерянья приборами и знания матриц. Всё это живет, дышит, колышется на ветру, искрится на солнце, волны набегают на песочек, в общем, сказка. И ГОРЫ математики:


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

офигеть!!! Граф движек сам писал? Хе поделись исходиками вода вовще превосходно прорисована!!!

smalltim

Да, писал сам. Отправил всё Psw сегодня, посмотрим, что он скажет. Исходников не дам, но самое главное - шейдеры - в открытом виде текстовыми файликами лежат.

Psw

Ещё бы магнитометр 3х осевой заложить в конструкцию. HoneyWell что-то сдулся с рассыпухой, перешёл на крупное авиа строения вплоть до двигателей и систем управления, так что 3х осевой компасс надо искать.
P.S.
По мне что шейдер что маркшейдер - не понимаю одинаково, чисто как юзер оцениваю.
Вода почти как живое море, нет бурунов/завихрений на вершинах резких всплесков, линия прибоя так же без возмущений и бурунов. Под водой вид вверх прикольный, действительно напоминает погружение. Вначале подумал что волны на воде вычисляются но поднявшись вверх отчётливо видно структуру сетчатую повторяющуюся. Качество текстур покрытия/песочка/трявяной подстилки - ну в Асасин Криде что-то похожее. “Умная трава” приколола когда идёшь по ней глядя под ноги.
Если в этот движог вставлять самаль - то только FPV для отработки физ модели самаля (острота реакции на рули) которая может пригодится для авто пилота ну и компоновки вывода ОСД. Уже весьма приятно просто глядеть на воду - солнце сбоку, вид на море, зайчики играют - и можно глядеть бесконечно, отдыхая. Если ещё буруны на резких перепадах волн и расчётные волны (ну или площадь сегментов(фракталов?) поболее) и камера сама медленно летала по наи выгоднейшим ракурсам - ваапще сказка для воды была бы. Прикольный скрин сэйвер уже сейчас можно дарить а через год продавать по $10 копию - как Аквариум к примеру. Слегка Огорчило отсутствие разрешения моей панели 1365х768 ну и других модных сейчас 16х9 разрешений в тч ХДТВ панелей.
Ну и ещё одно замечание. Есть такая контора - KD-Lab которая игрушку написала Вангеры - у меня подарочный диск их валяется где-то до сих пор. Так вот они в 95 году написали полностью векторный граф движог - полигональная птица гоняла по векторным коридорам как самолёт, работала на 386DX, на 486DX2-66 просто пестня летала, с DOOM по быстроте была не сравнима. Слова Графический Акселератор в те годы имели совершенно иной смысл нежели сейчас - просто быстрая шина и слегка больше кадровый буфер. Maze.exe называлась их демка. На сколько я знаю, этот движок или продукт на нём они так никому и не продали - пока дорабатывали, прогресс качнул историю в сторону граф сопроцессоров NVIDIA к примеру ну или реальный зачинатель настоящих ускорителей 3DFX. Это я к тому что надо поскорее раздавать/продавать хотя бы скрин сэйверы просто для рекламы движка. Если бы скрин сэйвер ещё заработал на “офисном планктоне” I965G - ваапще сказка. Но это вряд ли - программный OpenGL весьма конечно стрёмно выглядит.
P.P.S. Тут знакомец скачал RF G4 с доп паками - пойду тестить интереса ради - лучче AFPD или хуже в плане вертов.

smalltim

Ща нас за офтоп переедут мацацыклом 😃

>Вода почти как живое море, нет бурунов/завихрений на вершинах резких всплесков, линия прибоя так же без возмущений и бурунов.

Фишка в том, что вода у меня - плоский объект, состоящий из 2 треугольников, вся ее рельефность - иллюзия, тщательно рассчитанная имитация сложным шейдером. Грубо говоря, воксельная, как ландшафт в Вангерах или Outcast. И прибой на песочке тихонький таки есть.

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

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

>Качество текстур покрытия/песочка/трявяной подстилки - ну в Асасин Криде что-то похожее. “Умная трава” приколола когда идёшь по ней глядя под ноги.

На тему текстур земли песка я вообще не переживал. Взял что-то более-менее подходящее , и влепил.

>камера сама медленно летала по наи выгоднейшим ракурсам - ваапще сказка для воды была бы.

Нажмите шифт + 1, камера начнет летать по гладким случайным траекториям. Еще кнопкой Y можно отключить перемещения вверх-вниз, а если жать пробел не переставая, то можно полетать 😃

>Прикольный скрин сэйвер уже сейчас можно дарить а через год продавать по $10 копию - как Аквариум к примеру. Слегка Огорчило отсутствие разрешения моей панели 1365х768 ну и других модных сейчас 16х9 разрешений в тч ХДТВ панелей.

Это всё делалось не для денех, а для того, чтоб понять как работает OpenGL, по работе надо. А то что получилось так красиво - ну захотелось мне прикольную водичку сделать. Такой воды в играх до сих пор за 3 года не появилось.

>Вангеры
Не надо мне про них рассказывать. Я их прошел минимум 3 раза, видел все 3 концовки игры, и хорошо знаю, как их движок работает. И движков подобных, недоделанных правда, у меня было написано 2 или 3. Работа у меня такая 😃
Если нравятся Вангеры и воксельные движки - попробуйте Outcast. Для 1999 года - фантастика, вынос мозга, брызги на стенах, челюсть на полу. Это графика. А музыку Ленни Мура в игре исполнял Московский симфонический оркестр. Нужно еще что-то говорить? Игра года по версии почти всех обозревателей.

Описание: en.wikipedia.org/wiki/Outcast_(game)
Скриншоты: simeon-carstens.com/privat/…/screenshots.php

pvp
smalltim:

1а. Что бывает, когда акселерометр испытывает ускорения выше измеряемого предела? Синусоида на выходе режется, и ничего уже из него не вытянуть?

Совершенно верно, входит в ограничение - и усё.

smalltim:
  1. Имеет ли право на жизнь демпфирование частотной характеристики акселерометра конденсатором на выходе, если выход аналоговый?

Конечно, да. Аппаратных фильтров ещё никто не отменял!

smalltim
Dikoy:

К кею сразу купите разъёмы в пады. Ибо много паек они не выдерживают. Можно взять родные штырьки 1,25, но по опыту скажу - Г ещё то. Вываливаются, не контачат… Мелкие слишком.

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

Шнурик USB-miniUSB также будет не лишним. Хотя переходник и входит в комплект, но одинарный шнурик удобнее.

Сейчас уже в комплекте кладут USB-miniUSB

А, вообще, офигенная просто штука. С телеметрией я еще справился без нормального дебага (всё, что надо приходилось выводить куда-нибудь на свободное место на экране), а с автопилотом было бы тяжко. А тут - бросай, что хочешь, на USB, а на компе в своем приложении как хошь обрабатывай и визуализируй. Или впаивай датчики в плату, опрашивай, бросай на USB, оттачивай обработку на тех же Сях на компе, потом переводи на Атмегу и вуаля.

Кстати, пара вопросов, пока сижу, ковыряю код HID USB приложения на компе.

  1. Достаточно ли HID, или лучше сделать автопилотную плату composite девайсом, чтоб при подключении в USB виделась как сменный носитель с лежащими там полетными логами?
  2. Из приложения на компе можно перейти в режим обновления прошивки. А саму прошивку из него можно обновить? Или придется использовать FLIP? Его как-то можно интегрировать в приложение?
  3. Было бы здорово и телеметрической плате прошивку обновлять по SPI через автопилотную плату. Есть какие-то примеры такого непотребства, в которых можно поковыряться?
  4. Можете дать какие-то рекомендации по вариантам чипов памяти для сохранения логов? Хочется сохранять данные, скажем, 10 раз в секунду, порядка 15 параметров по, скажем, 4 байта. Это в сумме за 3600 секунд полета дает примерно 16 мегабит.

Заранее спасибо! И спасибо за наводку, девайс просто классный.

Dikoy
smalltim:

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

Сейчас уже в комплекте кладут USB-miniUSB

А, вообще, офигенная просто штука. С телеметрией я еще справился без нормального дебага (всё, что надо приходилось выводить куда-нибудь на свободное место на экране), а с автопилотом было бы тяжко. А тут - бросай, что хочешь, на USB, а на компе в своем приложении как хошь обрабатывай и визуализируй. Или впаивай датчики в плату, опрашивай, бросай на USB, оттачивай обработку на тех же Сях на компе, потом переводи на Атмегу и вуаля.

Кстати, пара вопросов, пока сижу, ковыряю код HID USB приложения на компе.

  1. Достаточно ли HID, или лучше сделать автопилотную плату composite девайсом, чтоб при подключении в USB виделась как сменный носитель с лежащими там полетными логами?
  2. Из приложения на компе можно перейти в режим обновления прошивки. А саму прошивку из него можно обновить? Или придется использовать FLIP? Его как-то можно интегрировать в приложение?
  3. Было бы здорово и телеметрической плате прошивку обновлять по SPI через автопилотную плату. Есть какие-то примеры такого непотребства, в которых можно поковыряться?
  4. Можете дать какие-то рекомендации по вариантам чипов памяти для сохранения логов? Хочется сохранять данные, скажем, 10 раз в секунду, порядка 15 параметров по, скажем, 4 байта. Это в сумме за 3600 секунд полета дает примерно 16 мегабит.

Заранее спасибо! И спасибо за наводку, девайс просто классный.

Какой-то халтурный кей… У нас дырочки чистенькие… Впрочем, покупались кеи в Швеции, года 3 назад (тогда тут их ещё небыло).

  1. Имхо достаточно HID. Иначе придётся делать некое условие, по которому кей будет инициализироваться как флешка или HID. Получится только сложнее.
  2. Не понял вопроса… В чипе неизменен только бутлодер. Прошивка заливается через него. Если интересует пристёгивание флипа к своему приложению, то на сайте атмела был флип без GUI, который пристёгивался к иару. После компиляции он автоматически прошивал чип. Возможно, его можно приделать к себе… Бутлодер можно перезалить только внешним программатором, причёи лапку ресета придётся брать с разъёма JTAG-а.
  3. Есть, причём даже под кей 😉 Сегодня вышлю.
  4. AT45DB161 - классика. Или флешка. Но разъём есть зло…
Dikoy

Вот некоторые фотки. Коллекция ломаных винтов и срезаные после аварии с обратной строны штырьки на плате.

Samol.zip

serj
Dikoy:

Вот некоторые фотки. Коллекция ломаных винтов и срезаные после аварии с обратной строны штырьки на плате.

А “положительные” результаты можно выложить в виде фоток или в каком-нибудь еще виде?

А то у народа может сложиться впечатление что результаты " любительского автопилотостроения" в основном такие (неудачные) бывают 😃

smalltim

Сегодня “наполовину освоил” USB. Написал приложение, съел атмеговскую HID-dllку, сделал автоматическое определение наличия подключения к автопилотной плате по USB, реализовал мигание светодиодиком на платке по нажатию кнопки в приложении.
Пока всё оказалось просто, как мозг поросенка, но документация у Атмела - просто чудовищная. Времени из-за этого ушло очень много. Такое ощущение, что свой код перед публикацией они даже не перечитывают.
Теперь - изучить, как из своего приложения залить в атмегу взятую из файла прошивку, и дальше в бой 😃

smalltim

Разобрался, как из своей программы на PC заливать в свою плату свою прошивку через USB, без плясок с нажатием специальных кнопок на плате для старта бутлоадера. У FLIP в комплекте есть dllka, которую он сам и использует. Атмел предоставляет заголовочный файл, можно съесть эту dllку и не париться. Непонятно только, как fuse биты c помощью FLIP или dllки менять. Коллеги, что посоветуете?

Ну и, собственно, реализация USB на самой AT90USB1287. Это, коллеги, просто финиш. Вынос мозга. Этот встроенный USB умеет всё и еще немножко. Но мне-то всё - не надо! Можно, конечно, тупо вкрячить код из атмеловского примера и обо всём забыть, но чтобы самому по-хорошему разобраться, как эти эндпойнты, пайпы и прочая дрянь конфигурируется, надо много усилий. Третий день сижу, просветляюсь над доками. Есть какие-то искры, но полное просветление пока не пришло. Там три четверти кода просто не нужно - мне не надо все эти непотребства, мне надо простой HID интерфейс.

Зато скачал и поставил WinAVR, он как-то сам снюхался с AVR Studio, теперь могу писать в AVR Studio прямо на C, билдить проект одной кнопкой, и не париться с коммандлайн-интерфейсом, make файлами и прочими отрыжками богомерзкого линукса. Причем, всё это полнофункциональное и бесплатное, никаких кряков и прочей гадости.

Dikoy
smalltim:

Разобрался, как из своей программы на PC заливать в свою плату свою прошивку через USB, без плясок с нажатием специальных кнопок на плате для старта бутлоадера. У FLIP в комплекте есть dllka, которую он сам и использует. Атмел предоставляет заголовочный файл, можно съесть эту dllку и не париться. Непонятно только, как fuse биты c помощью FLIP или dllки менять. Коллеги, что посоветуете?

Ну и, собственно, реализация USB на самой AT90USB1287. Это, коллеги, просто финиш. Вынос мозга. Этот встроенный USB умеет всё и еще немножко. Но мне-то всё - не надо! Можно, конечно, тупо вкрячить код из атмеловского примера и обо всём забыть, но чтобы самому по-хорошему разобраться, как эти эндпойнты, пайпы и прочая дрянь конфигурируется, надо много усилий. Третий день сижу, просветляюсь над доками. Есть какие-то искры, но полное просветление пока не пришло. Там три четверти кода просто не нужно - мне не надо все эти непотребства, мне надо простой HID интерфейс.

Зато скачал и поставил WinAVR, он как-то сам снюхался с AVR Studio, теперь могу писать в AVR Studio прямо на C, билдить проект одной кнопкой, и не париться с коммандлайн-интерфейсом, make файлами и прочими отрыжками богомерзкого линукса. Причем, всё это полнофункциональное и бесплатное, никаких кряков и прочей гадости.

Насчёт фьюзов через флип - не знаю, не пробовал. Предполагаю, в хексфайл вносятся коды для флеша, еепрома и фьюзов. Т.к. адресные смещения памяти известны и расписаны в ДШ, бутлодер сам должен понимать, что сейчас он пишет.
По крайней мере мой программатор принимает именно такие, полные хексы.

Чтобы упростить код, мозно взять м646 или 1286. У них USB не поддерживает режим хост.
Код у атмела сравнительно компактный - 3 кб для м128 незаметно. Плюс там есть много директив условной компиляции - можно поотключать ненужные блоки. Насколько помню, втом примере так и сделано - просто не заданы хидеры для режима хост и т.п. Вот только они толком нигде не описаны 😦
А исходный код у всех примеров атмела одинаков - откройте хоть эмулятор мышки, хоть флешки. Те же файлы, тот же костяк, только хидеры другие.

serj:

А “положительные” результаты можно выложить в виде фоток или в каком-нибудь еще виде?
А то у народа может сложиться впечатление что результаты " любительского автопилотостроения" в основном такие (неудачные) бывают 😃

А что интересного в положительном результате? 😃 Взлетел, покружился, сел. А тут вон какая веселуха.
А результаты поначалу такие и будут. Как ни крути…

belkinnn

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

fdLambda = (StartLon - EndLon) * D2R;
fdPhi = (StartLat - EndLat) * D2R;
fPhimean = ((StartLat + EndLat) / 2.0) * D2R;
fTemp = 1 - e2 * (sin(fPhimean)*sin(fPhimean));
fRho = (a * (1 - e2)) / pow(fTemp, 1.5);
fNu = a / (sqrt(1 - e2 * (sin(fPhimean) * sin(fPhimean))));
fz = sqrt((sin(fdPhi / 2.0)*sin(fdPhi / 2.0)) + cos(EndLat * D2R) * cos(StartLat * D2R) * pow(sin(fdLambda / 2.0),2));
fz = 2 * asin(fz);

fAlpha = cos(EndLat * D2R) * sin(fdLambda) * 1 / sin(fz);
fAlpha = asin(fAlpha);

fR = (fRho * fNu) / ((fRho * pow(sin(fAlpha), 2)) + (fNu *pow(cos(fAlpha), 2)));
Distans = (fz * fR);

if ((StartLat < EndLat) && (StartLon < EndLon)) Bearing = abs(fAlpha * R2D);else
if ((StartLat < EndLat) && (StartLon > EndLon)) Bearing = 360 - abs(fAlpha * R2D);else
if ((StartLat > EndLat) && (StartLon > EndLon)) Bearing = 180 + abs(fAlpha * R2D);else
if ((StartLat > EndLat) && (StartLon < EndLon)) Bearing = 180 - abs(fAlpha * R2D);

smalltim
belkinnn:

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

А на конторллере, случаем, не 16-битные флоты? С такой математикой могут переполниться влегкую.
И вообще, такая сложная математика точно нужна? Если летать недалеко, то можно перейти к навигации на плоскости, и математики сразу меньше.
Подсчитайте, какая погрешность определения расстояния между точкой А и Б появится при переходе от стандартных моделей к высчислениям на плоскости, касающейся Земли в точке А. Если летать меньше, чем на 100 км, ошибка будет просто ничтожная, не помню уже сколько именно, но у меня получались какие-то чуть ли не сотые доли процента. И с уменьшением этого расстояния стремится к нулю быстрее, чем это расстояние. А погрешносто определения азимута будет еще меньше.

Кстати, это вот…
USB я наконец-то победил. Шлю пакеты и из приложения в плату, и обратно, перехожу в режим обновления прошивки и обновляю прошивку. Сказка.

Теперь вот думаю такую мысль: у нас на борту будет акселерометр и 3 гироскопа. Так почему бы не заставить плату работать просто как 3 гироскопа, когда
автопилот не задействован? Гироскопы “включать”, разумеется, не всегда, а по команде с пульта.

Всё это приводит к следующей мысли: состояние каналов элеронов, РН, РВ и т.д. надо всё-таки знать.
Соответственно, возникает вопрос: а как, имея атмегу128, это узнать?

Знать надо ширину импульсов РРМ в каждом из каналов, приходящих с приемника, и желательно с точностью до 1 мкс, чтоб было 1000 отсчетов на полный диапазон перемещения ручек передатчика (1мс…2мс).

Вариантов реализации видится несколько:

  1. Подать 8 каналов с приемника на 8 ног порта Ё, повеситься на таймер и каждую микросекунду опрашивать его состояние. Вариант бестолковый, ибо на этот опрос уйдет больше половины ресурсов процессора - опрашивать порт Ё придется раз в 8 процессорных тиков, если проц работает на 8 МГц. Добавляем по паре тактов на вход-выход из процедуры обработки прерывания таймера, и получаем, что процессор ничто остальное сделать просто не успеет.

  2. Вешаем на порт Ё резисторные делители 1/2, 1/4, 1/8, и т.д, и суммируем то, что получается на выходе. Опрашиваем итоговое напряжение с помощью
    одного из каналов АЦП в режиме непрерывного преобразования и дальше математикой разбираемся, где что пришло. Вариант не сильно лучше предыдущего, если, вообще, лучше.

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

Сами понимаете, вариант номер 3 прост и гениален.
С ним режим passthrough, когда автопилот не задействован, делается как два пальца. При каждом срабатывании ICP просто копируем порт Ё в порт Ы.

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

Но сработает этот вариант номер 3 только в том случае, если импульсы PPM в каналах разнесены по времени между собой, как написано в учебниках и статьях на RCDesign. Если же во всех каналах восходящие фронты импульсов приходят одновременно, или верхние “полки” импульсов накладываются, то грядет большой облом. Есть, конечно, варианты получше, чем 1 и 2, но не такие клёвые, как 3.

Соответственно, гуру, к вам вопрос: а можно ли быть уверенным, что импульсы PPM, приходящие с приемника в разных каналах, ВСЕГДА разнесены по времени?

smalltim

Гуру, простите. Пошел убиваться об стену. Надо читать доки: оказывается, специально для таких идиотов, как я, у Атмеги128 есть специально обученные ноги в количестве 8 штук, которые могут генерить прерывания при изменении состояния на входе.
Впрочем, эти ноги частично пересекаются по функциям с SPI, так что вопрос остается в силе. Впрочем, атмега128 и USART свой в режиме SPI может использовать. Пойду всё-таки искать подходящую стену.