flybrain. передатчик + приемник + автопилот. powered by stm32

rual

АлексСнег, у тебя i2c через DMA работает? Как запускаешь старт и передачу адреса?

AlexSneg
rual:

у тебя i2c через DMA работает

Я пробовал через DMA, но в результате остановился на прерываниях. Оно так более контролируемо и предсказуемо. Через ДМА все равно придется работать на прерываниях на фазах старт-адрес-регистр-рестарт. ДМА может работать только в фазах передачи данных или приема. Причем должно быть не менее, чем 2 байта. Короче, овчинка выделки не стоит.

Drinker

Блин, чуваки, не обижайтесь, но эт чет в радиолюбительский форум переростает.
Где полеты по камере и телеметрия?

Довайте обсуждать этапы создания девайса с каким-либо функционалом.

Или не?

rual
Drinker:

Блин, чуваки, не обижайтесь, но эт чет в радиолюбительский форум переростает. Где полеты по камере и телеметрия?

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

Drinker:

Где полеты по камере и телеметрия?

У меня до этого ещё далеко.

Drinker:

Довайте обсуждать этапы создания девайса с каким-либо функционалом

Дык вроде как и речь ведём о реализации некоего функционала.

Drinker
rual:

Дык вроде как и речь ведём о реализации некоего функционала.

Ну вот будет реализовано осд, можно будет обсудить его функционал. А так уже до старт-рестарт dma дошли.

rual:

Если в соседних ветках обсуждают инструмент и способ обработки профиля крыла, то это значит столярный форум?

Именно он.

Довайте результаты уже скорее.

AlexSneg
Drinker:

Ну вот будет реализовано осд, можно будет обсудить его функционал.

Согласен. Давайте подождем, пока я не покажу как OSD работает, потом обсудим, как и что на экране мне нарисовать. Все желающие спросить по узкоспециализированным моментам могут спросить в личку. Я в течение рабочего дня всегда отвечу.

serj
AlexSneg:

. Могу также предсказать какая истерика у тебя случиться, если ты попытаешься посмотреть в исходники STD Perif Lib,.

Туда следует смотреть с целью понять чего вскользь не упомянули в даташите. Хотя перенимать их не стоит- индусам что их писали платили очевидно за каждую строчку кода. инициализация регистров периферии - почти 6 килобайт кода 😃 например чтобы загрузить регистр битрейта usart там строчек 10 написано вместо одной операции деления. А в документации ваще опусы - много воды налито- дробная часть, целя часть- голову сломаешь, вместо того чтобы поделить частоту на битрейт…

Syberian
serj:

чтобы загрузить регистр битрейта usart там строчек 10 написано вместо одной операции деления.

холи щет 😃
Цитатка в тему:
bash.im/quote/416071
(изменено)

Как я обожаю даташиты для STM!
“Это винтик, это отвертка, винтик можно крутить отверткой. Это всякие железяки, их можно соединять винтиками, закрутив отверткой. Еще бывают гайки и шестеренки.
Задание:
Постройте синхрофазотрон.”

AlexSneg

Итак отчетец по борьбе за OSD.
Можно сказать, что теория подтвердилась полностью практикой.
Сейчас мне удалось добиться почти полностью аппаратной развертки всего поля. Работает это примерно так:

  1. Слушаем все прерывания ССИ до обнаружения начала кадра.
  2. Начало кадра обнаружено, пускаем таймер для пропуска 55 строк примерно. прерывания отключаем.
  3. приходит прерывание от таймера. Перезаряжаем таймер на 18 мс, чтобы гарантировано вывалится в новое прерывание и не пропустить кадровый импульс следующего кадра, если что-то пойдет не так. Здесь же заряжаем ДМА на начало видео буфера и запускаем: Таймер, который запускается по фронту следующео ССИ, он генерит точно подобранное окно с задержкой примерно 15мкс и скважностью в которую умещается 32 байта - одна строка; это окно разрешает каскадный таймер, который подает синхру на SPI, работающий слэйвом. SPI заряжен и подключен к DMA каналу, который заряжен на начало видеобуфера.
  4. Дале все происходит автоматом. Все прерывания от ССИ отключены, таймер автоматом ловит очередной фронт на каждой строке и SPI разворачивает одну строку за другой, так до конца ДМА буфера. При этом вмешательства софтового в этот процесс нет никакого. Оно само все происходит.
  5. По окончании ДМА генерит прерывание, в котором отключаем SPI и охранный таймер, заряженный в п.3. Он нам больше не нужен. Его мы перезаряжаем для пропуска примерно 50 строк. Подобрано так, чтобы попасть к началу ожидаемого кадрового импульса
  6. Срабатывает прерывание от таймера, разрешаем прерывания от ССИ и идем на пункт 1

Таким образом, практически все само разворачивается. Качество картинки превосходит все ожидания.
Сделал алгоритмы для засветки пиксела, линии, окружности, знакогенератор прикрутил, попробовал. Ну вообще все шоколадно. Просто в любой момент времени рисуем в видео буфере любые рисунки и даже не думаем ни о чем. Ну как в Spectrum’e в свое время практически было. Можно ради прикола пакмэна организовать. Проц практически полностью освобожден от OSD, я даже прерывания ССИ убрал с самого высокого приоритета на 3-е место. На первом оставил I2C шину.

Побочные эффекты:

  1. Первый пиксел в первом байте строки должен всегда быть нулевым, иначе в текущей схемотехнике это сорвет синхру.
  2. Есть странный сдвиг развертки самой первой линии на 1 знакоместо (8 бит), она получается 31 байт. Не понял почему так. Причем при старте сначала картинка стоит нормально около 3 сек, а затем смещается именно в такое положение и там уже стоит намертво. Пока я не понимаю почему это так. Но все остальные линии разворачиваются четко и без проблем. Фактически достаточно считать, что первая линия не рабочая и начинать рисовать со второй линии, а снизу добавить еще одну. Это совсем не есть проблема, просто первые 31 байт будут балластом. У меня есть подозрение, что первое знакоместо занято нулевыми данными, которые остаются в SPI после окончания предыдущего кадра. Их он как раз и вываливает в новом кадре, а дальше уже идет нормально все. Я еще поковыряюсь с этим делом, засечь причину достаточно сложно даже дебаггером, так как все надо смотреть в риалтайме. Но даже если я не найду почему так, можно с этим спокойно жить. Развертке этот эффект не мешает никак.

На этой неделе буду уже картинку рисовать и сделаю вам видео, на посмотреть как все получилось. Скачал разных видюх с OSD посмотрел в динамике. Пока остановился на на повторении варианта RVOSD. Если есть какие пожелания на тему удобства и недостатков текущих OSD, давайте выкладывайте. Будем думать, как сделать максимально удобно.

Дми-III-й
AlexSneg:

Если есть какие пожелания на тему удобства и недостатков текущих OSD, давайте выкладывайте.

Очень понравился стиль отображения горизонта в bvHUD (ODS Олега), было бы здорово исполнить похожую шкалу тангажа, если конечно Олег не будет возражать

AlexSneg
Дми-III-й:

было бы здорово исполнить похожую шкалу тангажа

Я в этом варианте не очень понимаю где верх, а где низ самолета. Это ведь тестовая видюха. Нет такой-же, но с реального полета?

Дми-III-й

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

Вот идеал подобного отображения горизонта 😃

SkyWorker
Дми-III-й:

Верх когда шкала с пямыми делениями, а когда с наклонными это низ

Не совсем понятно…
Вот ОСД Икаруса. Может что отсюда возьмете.

www.youtube.com/watch?v=IBV49per9AE

AlexSneg
Дми-III-й:

Вот идеал подобного отображения горизонта

может для профессиональных летчиков, это идеал. Но я бы грохнулся с такой шкалой сразу. У вас там СУ-25 еще в видео есть. Вот оно мне очень понравилось. Может как у СУ-25 забацать?

SkyWorker:

Вот ОСД Икаруса

Нет, слишком уж просто выглядит. И переворот на спину не читаем, по крайней мере, на этом видео.
В RVOSD я вот четко вижу короткую и длинную линию. короткая снизу - норма, короткая сверху - кувыркнулись на спину. Линии внизу, значит вверх летим, вверху, значит падаем. Дом в центре, риска по кругу - направление домой.

Дми-III-й

Все верно, похоже Олег делал отображение горизонта похожим на F-16

Чем именно такой вариант хорош думаю понятно - позволяет оценивать углы крена и тангажа сразу в цифрах, полностью контролировать любое нештатное положение самолета “по приборам” при отсутствии видимости, например в облаках, что немаловажно. Упростить ведь всегда можно и сделать несколько вариантов отображения.

AlexSneg:

СУ-25

Там как я понял “боевой” режим экрана HUD, поэтому все “лишнее для войны” с экрана спрятано чтобы было видно целеуказатели

AlexSneg
Дми-III-й:

похожим на F-16

Ну вот с этой видюхи, мне более менее все понятно стало. Единственный момент, почему иногда шкала за пределы экрана уезжает. Почему ее просто в центре не фиксируют?

Дми-III-й

Я думаю там шкала смещается в зависимости от скольжения самолета, видимо пилотам так удобнее… можно и зафиксировать

AlexSneg

Ладно поробуем прикунуть этот вариант. Надо подумать как графику, а особенно цифры поворачивать. Боюсь на некоторых углах артефакты некрасивые появятся.

Дми-III-й

Олег в своей OSD цифры не поворачивает, видимо исходя из таких же соображений

Syberian
Дми-III-й:

исходя из таких же соображений

Издеваетесь, что ли 😃 на avr цифры вращать… там одно знакоместо целых 30 мкс отрисовывается. Кстати да, вращение знакомест 5х7 будет выглядеть просто отвратно.
Линии горизонта делал не совсем “копийными”, т.к. это получается несколько сегментов с отдельной кучей вычислений.
Ну блин, придет арм4, такой графон забабашу… Если Алекс меня не обскачет 😉

AlexSneg:

Нет такой-же, но с реального полета?

Там как видео заканчивается, сразу “шахматка” с другими видео - своих насчитал 4 штуки.

Drinker
AlexSneg:

а особенно цифры поворачивать

Зачем? Ты голову крутить собрался?

AlexSneg:

Почему ее просто в центре не фиксируют?

Потому что пока не знают как надо.