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

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:

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

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

AlexSneg
Syberian:

Кстати да, вращение знакомест 5х7 будет выглядеть просто отвратно.

Я выбрал вариант 6x8. Но вращать, наверно, тоже не буду пока, ибо все равно будет отвратно.

Syberian:

сегментов с отдельной кучей вычислений.

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

Syberian:

Ну блин, придет арм4…

Олег, меня радует твой оптимизм. Но тебе предстоит еще много “чудных” открытий истины по ходу изучения STM32. К тому же DISCOVERY4 это не, что тебе нужно. На мой взгляд, это вообще выброшенные на ветер бабки.

Syberian:

Если Алекс меня не обскачет

Я не ставлю цель с кем-то в перегонки играть. 😃
Пока в планах иметь OSD рабочее к 1 апреля.

Drinker:

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

Типа бестолковые американские летчики не знают, как им удобно?

По результатам вчерашних ночных посиделок докладываю:

  1. Побочный эффект №2 из предыдущего поста побежден. Имеем четкую, гладкую развертку 256X192
  2. Остается ограничение на засветку нулевого пиксела в каждой строке. Делать этого просто НЕЛЬЗЯ. Это особенность схемотехники, возможно в чистовой версии, когда буду заказывать заводские печатки это будет устранено.
  3. Не рекомендуется зажигать старший пиксел в самом последнем байте развертки. Синхру это не собьет, но вызовет засветку еще 2 пикселов за пределами развертки. Природа этого эффекта на 100% понятна. Побороть чисто программно нельзя. Будет исправлено изменением чистовой схемотехники.

Вот все. Поле развертки готово. Обдумаю детали реализации и приступаю к рисованию графики на этой неделе. Рисовать будем вариант как на F16. Зафиксирую точку поворота шкалы в центре, ибо не понимаю нафига горизонт по всему экрану катать. Цифры на шкале крутить не буду, ибо Дринкер прав, читать их под углом будет неудобно. Шкалу направления домой и компас думаю совмещу, как на СУ-25. Оно мне понравилось больше всех.

Drinker

А что являецца источником видеосигнала в этих опытах?
Или просто видеогенератор делаеш? Тогда это ни разу не осд.
Если с источником, то что будет когда сигнал пропадёт? Внутри будет синхра генерицца, или все зависнет нафиг?

И как решен вопрос теней? Без них очень трудно на светлом фоне чтото разглядеть.

пал - нтсц распознаёцца?

И где в поделке датчик тока и напряжения?

Пока достаточно 😃

AlexSneg
Drinker:

А что являецца источником видеосигнала в этих опытах?

Фотоаппарат Olimpus, генерит широкоформатный PAL.
У меня есть опасения, что разные источники могут не следовать стандартам. На той неделе китайцы прислали NTSC камеру SONY для полетов. Она 12В хочет. Как не лень будет, воткну ее, проверю. Сам я видео сигнал не генерю ни разу.
Реально я пробовал с двух фотиков сигнал щупать. Оба они по разному генерят кадровый импульс. Но не фатально. Разница в алгоритме детектирования не существенна. Есть у меня еще старый видик и видеокамера ручная. Попробую с них попозже взять сигнал.

В любом случае, это не проблема. Техника исследования реального сигнала и всех его перепадов с точностью до 1 мкс у меня отработана. В финальной версии вообще забабахаю автодетект с подбором порога чувствительности компаратора.

Drinker:

Если с источником, то что будет когда сигнал пропадёт?

Если сигнал пропадет, то пропадет и картинка, но ничего не зависнет. Будет ждать, когда появится. Если появится, то OSD опять включится. Алгоритму по фиг, есть видеосигнал на входе или его нет. А работать генератором синхры я не планировал, хотя можно реализовать аппаратно в чистовом варианте, если есть у летающей аудитории такое желание и реально существует такая необходимость.

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

Drinker:

И как решен вопрос теней?

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

Drinker:

пал - нтсц распознаёцца?

пока ПАЛ. NTSC буду еще обучать.

Drinker:

И где в поделке датчик тока и напряжения?

Ты совсем самое начало темы не читал если такие вопросы задаешь?

project_Ikar

Видео - в студию!

AlexSneg:

Я не ставлю цель с кем-то в перегонки играть.
Пока в планах иметь OSD рабочее к 1 апреля.

Автор не обращай внимания, многие из присутствующих тут, строят свое ОСД. И у них “сосет под ложечкой”, когда видят, что у кого-то быстрее получается. Может автор - проффесионал.

Oliver
AlexSneg:

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

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

Drinker
project_Ikar:

Видео - в студию!

+1

project_Ikar:

Может автор - проффесионал

Скорее всего, ибо делает то что умеет.
Вернецца к алгоритмам стабилизации и управления - будет куча вопросов.

Oliver:

А работать генератором синхры я не планировал

Нихренаж себе! Камера запотела, сломалась, шнур отошел - и всё, самик потерян. А с генерацией синхры осд будет продолжать работать и можно попытацца по приборам долететь до зоны визуального контакта.

AlexSneg:

ы совсем самое начало темы не читал если такие вопросы задаешь?

Не нашол про это.

baychi
Drinker:

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

Если запотела - OSD не пропадет, только картинка.
Андрей, а сколькие из известных Вам OSD умеют работать при отсутсвии видеосигнала? Я только Фишкин AP117 знаю.

PS: И если иречь идет о полноценном АП, то он будет возвращать модель и без OSD.