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

smalltim

Гуру, а для того, чтобы SPI мастер в отсутствие активности slave’а принимал 0xff, нужно включить pull-up резистор на MISO мастера?
Я к вопросу о связи автопилота с телеметрией. Автопилот - мастер, телеметрия - slave.
Бортовая флеш-память в неактивном состоянии уводит свои выводы в высокоимпедансное состояние, с этим проблем нет. Нужно ли предпринимать какие-то телодвижения на стороне slave, т.е. платы телеметрии, чтоб коллизий не случилось?

Dikoy

Если тамошний SPI работает как слейв, то есть настроен так и задействован вывод SS, то при неактивности на SS он должен автоматически вырубаться (переходить в Z) - это стандарт SPI.
Насчёт подтяжки не помню точно, кмк. они там сами включаются. При активации SPI. Но можно и подключить для надёжности, хуже не будет. Тут проще попробовать.
Если подтяжка будет (внутренняя или внешняя) то ff гарантирован 😃

А мой программатор, сцуко, не знает AT90USB1287, так что я даже бутлодер туда залить не могу… Вот такое попадалово…

smalltim

КОЛЛЕГИ, ВНИМАНИЕ.

За все время существование телеметрии от smalltim ни одна из плат не пострадала физически, ничего не выгорело и т.д, но произошло уже 4 случая, когда слетает прошивка. Перепрошивкой лечится без проблем, но сам факт неприятен.

Точных причин я не знаю, но, судя по всему, Меги бьет статикой.
Посему прошу относиться к девайсу как подобает: это ESD-чувствительный девайс, и паять к нему свои собственные провода, натирать шерстяными свитерами и делать прочие непотребства надо аккуратнее. При перевозке антистатический пакетик от компьютерной комплектухи очень рекомендуется.
Спасибо!

>Если тамошний SPI работает как слейв, то есть настроен так и задействован вывод SS, то при неактивности на SS он должен автоматически вырубаться (переходить в Z) - это стандарт SPI.

SS не распаян, отсюда все вопросы.

baychi
smalltim:

КОЛЛЕГИ, ВНИМАНИЕ.

За все время существование телеметрии от smalltim ни одна из плат не пострадала физически, ничего не выгорело и т.д, но произошло уже 4 случая, когда слетает прошивка. Перепрошивкой лечится без проблем, но сам факт неприятен.

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

Тимофей, а ВЧ наводка не могла привести к слету прошивки?
У меня было так: менял видео-передатчк с 1.2 (1 Вт) на 2.4 ГГц (0.5 Вт) и одновременно переставлял в другую модель. В новой модели передатчик в аллюминиевом экране находился под платой телеметрии, штырь антенны шел ортогонально плоскости платы с выносом в несколько сантиметров.
Первый раз новая сборка включилась нормально, затем я заметил одну ошибку в компоновке, разобрал сборку и собрал ее снова. Телеметрия более не отзывалась. Разумеется, это могла быть статика при перемонтаже, но и мощный RF сигнал тоже не исключается.

Dikoy
smalltim:

SS не распаян, отсюда все вопросы.

Тогда надо ручками переводить SPI слейва в Z. Если одна из лап будет в нуле, это приведёт к КЗ для флешки, а ток её выхода в ДШ скромно умолчали. Подозреваю, что очень маленький.
В общем, надо выдумывать арбитраж. Атмегам пофиг - у них пины ограничены по току. А вот флешку на занятую линию пускать нельзя…

ПС. Статикой врядли - каждый пин защищён диодами. Можно попробовать всунуть стабилитрон на 5,1-5,6 В между питанием меги и землёй, на 0,25W или меньше, чтоб на нём рассасывались разряды…

С чипом справился! Ура мне и памятник.

smalltim

>С чипом справился! Ура мне и памятник.
Как именно?

А у меня тут пара мыслей по поводу оптимизации кода телеметрии появилось, на досуге набросал болванку того, как будет выглядеть экспериментальная прошивка. Авиагоризонта без автопилота, разумеется, не будет. Остально должно бегать на стандартной плате телеметрии.

Пара пояснений:
[H] - иконка базы, вертится вместе с изменением курса
~045 и ~1150 - скорость высота по бародатчикам (если установлены)
085 и 1277 - скорость и высота по GPS

Текущий курс:
–N—NE—
^

Вот эти штучки не плавно вверх-вниз ползают, а прыгают по одной строке (Если памяти хватит, то по полстроки):

|
>1300
|
|

Наклонная линия авиагоризонта рисуется в окошке 5х3 символа псевдографикой.
Ну а остальное и так понятно.

Dikoy
smalltim:

Как именно?

Элементарно! (с)
Бутлодер там, оказывается, с завода идёт. А я не знал…
Фьюзы, в принципе, как надо настроены. Разьве что JTAG я бы отключил, но у меня всё равно эти лапы не используются.
Чип залочен, прошить программатором можно только полностью его сотря, но внутрях бутлодер версии 101, такой же как в последних кеях. И этот бутлодер не слетает со временем (я не заметил), а вот бутлодер 100, который в старых кеях и который лежит на их сайте, имеет свойство к самоубиванию. По этому я не стал перепрошивать чип а оставил всё как есть.
Пока только ПЛЛ перенастроил на 16 МГц, прошивка отзывается (энумерируется). Вечером буду переделывать задержки и т.д. под новый кварц (не вставил дефайнов, лошарик…).

Ну а к программатору скачал последнюю программу, обновил фирмварю и всё заработало.

Сейчас меня больше волнует починка аэроплана. Один добрый самаритянин дал регулятор на пробу, надо будет попробовать завести движок.

smalltim

Если кому-то интересно, залил текущую версию компукового приложения для автопилота: smalltim.ru/f/smalltim_ap_pc_client.rar
Далеко не всё еще готово, и без самой платы мало что получится проверить, ибо плата существует пока в единственном экземпляре, у меня любимого, но можно полазить по менюшкам, потыкать кнопки и посмотреть как всё будет выглядеть.
Рюшек-плюшек, красивостей да картинок пока нет, да и вряд ли будут.
Всё, что нужно для работы программки - эти 3 файла в архиве и еще нужен будет драйвер для Атмег в DFU режиме.
Просмотровщик полетных логов с клевыми графопостроительными возможностями как бы готов, но еще не прикручен к коду.

Гляньте, может быть, какие-нибудь интересные идеи возникнут. Например, что думаете насчет пресетов для типовых моделей и визарда или “Мастера настроек” для… хм… самых ленивых любителей FPV?

Заодно можно пнуть меня, если вдруг вылезут какие-то глюки. Например, на 64-битных осях это вообще не проверялось. На 32-битных ХР/Vista проверялось, работает.

>И в режиме стабилизации, микс элероны-флапы(тормоза), тоесть поймет ли контролеер такую комбинацию из двух серв сигналов на них?

Это очень-очень критично? В принципе, можно такое приколхозить, ибо помимо 4 входов-выходов РРМ (элероны, РН, РВ, газ) у автопилота есть 5й вход РРМ (только вход!) для управления режимами. Можно этот 5й вход заиспользовать.
Вы только простите меня, грешного, но я моделей с флаперонами никогда в жизни не имел, поэтому не уверен, что на 100% правильно понимаю, как оно построено.
Какая там раскладка сигналов по каналам? Т. е. что как миксуется на передатчике, на модели, сколько серв, как подключены и как стоят? Сами понимаете, если нужно, то замиксовать как угодно какие угодно каналы на плате автопилота - ваще нивапрос.

Brandvik

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

Dikoy

smalltim, а кварц в Вашем автопилоте на 16?
Кроме PLL что-нибудь перенастраивалось?
У меня странный глюк при переносе прошивки с кея. Энумерация проходит успешно, чип определяется, даже специальный светодиодик загорается. Но первое же сообщение отправавляет чип в аут. Коммуникация падает, но чип не зависает…
Не могу понять в чём фишка. Пока только перенастроил PLL на другой кварц:
PLLCSR = ( ( (1<<PLLP2) | (0<<PLLP1) | (1<<PLLP0) ) | (1<<PLLE) )
Причём если сделать по ДШ, ( (1<<PLLP2) | (1<<PLLP1) | (0<<PLLP0) ), то нихрена не работает.
Может, Вам приходилось с таким сталкиваться?

smalltim

16 МГЦ.

#define PLLx24 ( (0<<PLLP2) | (0<<PLLP1) | (0<<PLLP0) )
#define PLLx12 ( (0<<PLLP2) | (0<<PLLP1) | (1<<PLLP0) )
#define PLLx08 ( (0<<PLLP2) | (1<<PLLP1) | (0<<PLLP0) )
#define PLLx06 ( (0<<PLLP2) | (1<<PLLP1) | (1<<PLLP0) )
#define PLLx04 ( (1<<PLLP2) | (0<<PLLP1) | (0<<PLLP0) )
#define PLLx03 ( (1<<PLLP2) | (0<<PLLP1) | (1<<PLLP0) )
#define PLLx04_8 ( (1<<PLLP2) | (1<<PLLP1) | (0<<PLLP0) )
#define PLLx02 ( (1<<PLLP2) | (1<<PLLP1) | (1<<PLLP0) )

//! @brief Start the PLL at only 48 MHz, regarding CPU frequency
//! Start the USB PLL with clockfactor
//! clockfactor can be PLLx24, PLLx12, PLLx08
//! PLLx06, PLLx04, PLLx03
#define Start_pll(clockfactor) \
(PLLCSR = ( clockfactor | (1<<PLLE) ))
//! return 1 when PLL locked
#define Is_pll_ready() (PLLCSR & (1<<PLOCK) )
//! Test PLL lock bit and wait until lock is set
#define Wait_pll_ready() while (!(PLLCSR & (1<<PLOCK)))
//! Stop the PLL
#define Stop_pll() (PLLCSR &= (~(1<<PLLE)),PLLCSR=0 )

// Start the PLL in autofactor mode
// regarding FOSC define
#if (FOSC==2000)
//! Start the PLL in autofactor mode
//! regarding FOSC define
#define Pll_start_auto() Start_pll(PLLx24)
#elif (FOSC==4000)
#define Pll_start_auto() Start_pll(PLLx12)
#elif (FOSC==6000)
#define Pll_start_auto() Start_pll(PLLx08)
#elif (FOSC==8000)
//! Start the PLL in autofactor mode
//! regarding FOSC define
#define Pll_start_auto() Start_pll(PLLx06)
#elif (FOSC==12000)
#define Pll_start_auto() Start_pll(PLLx04)
#elif (FOSC==16000)
#define Pll_start_auto() Start_pll(PLLx03)
#elif (FOSC==20000)
#define Pll_start_auto() Start_pll(PLLx04_8)
#elif (FOSC==24000)
#define Pll_start_auto() Start_pll(PLLx02)
#else
#error “FOSC should be defined in config.h”
#endif

Dikoy

Да, это то понятно. Но есть нюанс (с)
Для 128* и 64* PLLx03 имеет разные значения.
#if defined (__AT90USB1287__) || defined (__AT90USB1286__)
#define PLLx03 ( (1<<PLLP2) | (0<<PLLP1) | (1<<PLLP0) )
#else // __AT90USB647__, __AT90USB646__
#define PLLx03 ( (1<<PLLP2) | (1<<PLLP1) | (0<<PLLP0) )
#endif
А в ДШ про это, конечно же, ни слова.
Вот, народ тоже парился: www.avrfreaks.net/index.php?name=PNphpBB2&file=pri…

В общем, победил. Теперь всё работает в моей платке. Завтра буду прерывания писать - каналы газа и направления добавлять.

smalltim

Сделал давно обещанную прошивку телеметрии версии 233 с поднятыми буковками, строкой GPS и новым переключением между режимами.
Забирать тут: smalltim.ru/tele/firmware/

Pa5ha

Господа, прощу прощения, что пропал.
Вот, прилагаю фото своих датчиков, чтоб не писать много слов и чтоб не возникло разнотолков. + имеется dpip мега и микросхема, которая с видео работает (не помню как зовут) тоже в dip корпусе.
Вопросов два: как подключить 5010dp ибо ничего общего я у него в датащите не нашел с тем что на фото платы smalltim-а, и нет ли уже готовой разводки проверенной у кого-либо?

smalltim, а вот Вы предлагали готовую плату - это по почте? Блин, согласится что ли 😃 А то опять ведь руки не скоро дойдут т.к. столько всего сделать надо.

Psw

Не юзал ничего.
По Описанию похоже на бета версию. Ну и функционально - вроде смалтим больше уже написал, хотя на атмеле экран конечно меньшего разрешения .
Ну и мысли вслух - всё-таки наверное большинство самодельщиков понимало спустя год-два после начала проекта - что проц слабый, памяти/ног мало, графика на спец микросхемах будет лучше и тд.
Вспоминается призыв Арти перейти на АРМ

Artie
Psw:

Ну и мысли вслух - всё-таки наверное большинство самодельщиков понимало спустя год-два после начала проекта - что проц слабый, памяти/ног мало, графика на спец микросхемах будет лучше и тд.
Вспоминается призыв Арти перейти на АРМ

Воообще говоря, это вопрос диалектиццкий. - В том смысле, что если бы я затевал такую разработку сейчас заново, то совершенно точно выбрал бы какой-нибудь камень помощнее, чуть лучше заточенный под писание на С, под плавучку, и - главное - с более богатой периферией.
И наложение картинки сделал бы полу- или совсем аппаратным (на какой-нибудь ПЛИСине)…
Однако, переход на другую платформу означает потерю большинства уже готовых наработок (не в плане “ноухау”, а вульгарно по количеству уже написанного и отлаженного кода), так что на такой шаг лично меня сейчас может сподвигнуть только какой-то категорический “упор” по производительности, делающий невозможной реализацию некоей очень уж интересной фичи…

В то же время, доводя потихонечку свой исходный проект, я где-то с полгода назад обнаружил в той же меге изрядные “унутренние резервы” 😉 в плане временнЫх ресурсов (даже при полноэкранном OSD), в результате чего упихал в один “отображательный” кристалл (помимо исходного собственно рисования, обсчета всего “электричества”, работы с мультиплексовским приемником, и так далее) - и обработку бародатчиков, и передачу цифровой телеметрии внутри видеосигнала, и вывод отладочной информации по последовательному порту, и разную настройку/калибровку с передатчика)…
Подозреваю, что при желании туда же можно достаточно свободно уместить и всю работу с GPS’ом, но поскольку второй кристалл у меня все равно уже стоит, то заниматься этим ради “чистого искусства” мне просто лень.

PS: Если кому-нибудь будет охота этим заморачиваться, - могу отдать очередную версию сорсов под обещание делиться дальнейшими результатами работы с “широкой общественностью”.

smalltim

Выложил исходники самой свежей прошивки, v233, для платы телеметрии и сопутствующее добро вот тут: smalltim.ru/tele/source/

Исходный код прошивки v233 для платы телеметрии:
.RAR, 88 kB

Содержимое файла:

  • smalltim.asm - главный модуль
  • _display.asm - функции формирования текста для отображения
  • _math.asm - математические функции
  • _gps.asm - функции обработки NMEA строк
  • *.inc - файлы, хранящие предрасчитанные данные, включаемые в тело программы
  • font_gen2.exe - утилита, позволяющая редактировать файлы со шрифтами для телеметрии

Родная среда программирования - AVR Studio4, программатор и соответствующий софт - AS4/ASISP1120 от Argussoft (www.argussoft.ru).
Ограничений на распространение и использование исходников нет.
Поддержка по использованию исходников не гарантируется.

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

BigDaddy

Интересных идей и по-больше свободного времени тебе, Тимофей, для дальнейших разработок!
Ну а целеустемленности и настойчивости тебе не занимать…

Хвост_Слона

Smalltim огромное спасибо. А куда из архива сбежал “smalltim.asm - главный модуль”? Или это только мне не досталось? (Блин, как обычно 😦( )