flybrain. передатчик + приемник + автопилот. powered by stm32
у тебя i2c через DMA работает
Я пробовал через DMA, но в результате остановился на прерываниях. Оно так более контролируемо и предсказуемо. Через ДМА все равно придется работать на прерываниях на фазах старт-адрес-регистр-рестарт. ДМА может работать только в фазах передачи данных или приема. Причем должно быть не менее, чем 2 байта. Короче, овчинка выделки не стоит.
Блин, чуваки, не обижайтесь, но эт чет в радиолюбительский форум переростает.
Где полеты по камере и телеметрия?
Довайте обсуждать этапы создания девайса с каким-либо функционалом.
Или не?
Блин, чуваки, не обижайтесь, но эт чет в радиолюбительский форум переростает. Где полеты по камере и телеметрия?
Если в соседних ветках обсуждают инструмент и способ обработки профиля крыла, то это значит столярный форум?
Но с тем что, мой вопрос узко специален согласен, буду писать в личку.
Где полеты по камере и телеметрия?
У меня до этого ещё далеко.
Довайте обсуждать этапы создания девайса с каким-либо функционалом
Дык вроде как и речь ведём о реализации некоего функционала.
Дык вроде как и речь ведём о реализации некоего функционала.
Ну вот будет реализовано осд, можно будет обсудить его функционал. А так уже до старт-рестарт dma дошли.
Если в соседних ветках обсуждают инструмент и способ обработки профиля крыла, то это значит столярный форум?
Именно он.
Довайте результаты уже скорее.
Ну вот будет реализовано осд, можно будет обсудить его функционал.
Согласен. Давайте подождем, пока я не покажу как OSD работает, потом обсудим, как и что на экране мне нарисовать. Все желающие спросить по узкоспециализированным моментам могут спросить в личку. Я в течение рабочего дня всегда отвечу.
. Могу также предсказать какая истерика у тебя случиться, если ты попытаешься посмотреть в исходники STD Perif Lib,.
Туда следует смотреть с целью понять чего вскользь не упомянули в даташите. Хотя перенимать их не стоит- индусам что их писали платили очевидно за каждую строчку кода. инициализация регистров периферии - почти 6 килобайт кода 😃 например чтобы загрузить регистр битрейта usart там строчек 10 написано вместо одной операции деления. А в документации ваще опусы - много воды налито- дробная часть, целя часть- голову сломаешь, вместо того чтобы поделить частоту на битрейт…
чтобы загрузить регистр битрейта usart там строчек 10 написано вместо одной операции деления.
холи щет 😃
Цитатка в тему:
bash.im/quote/416071
(изменено)
Как я обожаю даташиты для STM!
“Это винтик, это отвертка, винтик можно крутить отверткой. Это всякие железяки, их можно соединять винтиками, закрутив отверткой. Еще бывают гайки и шестеренки.
Задание:
Постройте синхрофазотрон.”
Итак отчетец по борьбе за OSD.
Можно сказать, что теория подтвердилась полностью практикой.
Сейчас мне удалось добиться почти полностью аппаратной развертки всего поля. Работает это примерно так:
- Слушаем все прерывания ССИ до обнаружения начала кадра.
- Начало кадра обнаружено, пускаем таймер для пропуска 55 строк примерно. прерывания отключаем.
- приходит прерывание от таймера. Перезаряжаем таймер на 18 мс, чтобы гарантировано вывалится в новое прерывание и не пропустить кадровый импульс следующего кадра, если что-то пойдет не так. Здесь же заряжаем ДМА на начало видео буфера и запускаем: Таймер, который запускается по фронту следующео ССИ, он генерит точно подобранное окно с задержкой примерно 15мкс и скважностью в которую умещается 32 байта - одна строка; это окно разрешает каскадный таймер, который подает синхру на SPI, работающий слэйвом. SPI заряжен и подключен к DMA каналу, который заряжен на начало видеобуфера.
- Дале все происходит автоматом. Все прерывания от ССИ отключены, таймер автоматом ловит очередной фронт на каждой строке и SPI разворачивает одну строку за другой, так до конца ДМА буфера. При этом вмешательства софтового в этот процесс нет никакого. Оно само все происходит.
- По окончании ДМА генерит прерывание, в котором отключаем SPI и охранный таймер, заряженный в п.3. Он нам больше не нужен. Его мы перезаряжаем для пропуска примерно 50 строк. Подобрано так, чтобы попасть к началу ожидаемого кадрового импульса
- Срабатывает прерывание от таймера, разрешаем прерывания от ССИ и идем на пункт 1
Таким образом, практически все само разворачивается. Качество картинки превосходит все ожидания.
Сделал алгоритмы для засветки пиксела, линии, окружности, знакогенератор прикрутил, попробовал. Ну вообще все шоколадно. Просто в любой момент времени рисуем в видео буфере любые рисунки и даже не думаем ни о чем. Ну как в Spectrum’e в свое время практически было. Можно ради прикола пакмэна организовать. Проц практически полностью освобожден от OSD, я даже прерывания ССИ убрал с самого высокого приоритета на 3-е место. На первом оставил I2C шину.
Побочные эффекты:
- Первый пиксел в первом байте строки должен всегда быть нулевым, иначе в текущей схемотехнике это сорвет синхру.
- Есть странный сдвиг развертки самой первой линии на 1 знакоместо (8 бит), она получается 31 байт. Не понял почему так. Причем при старте сначала картинка стоит нормально около 3 сек, а затем смещается именно в такое положение и там уже стоит намертво. Пока я не понимаю почему это так. Но все остальные линии разворачиваются четко и без проблем. Фактически достаточно считать, что первая линия не рабочая и начинать рисовать со второй линии, а снизу добавить еще одну. Это совсем не есть проблема, просто первые 31 байт будут балластом. У меня есть подозрение, что первое знакоместо занято нулевыми данными, которые остаются в SPI после окончания предыдущего кадра. Их он как раз и вываливает в новом кадре, а дальше уже идет нормально все. Я еще поковыряюсь с этим делом, засечь причину достаточно сложно даже дебаггером, так как все надо смотреть в риалтайме. Но даже если я не найду почему так, можно с этим спокойно жить. Развертке этот эффект не мешает никак.
На этой неделе буду уже картинку рисовать и сделаю вам видео, на посмотреть как все получилось. Скачал разных видюх с OSD посмотрел в динамике. Пока остановился на на повторении варианта RVOSD. Если есть какие пожелания на тему удобства и недостатков текущих OSD, давайте выкладывайте. Будем думать, как сделать максимально удобно.
Если есть какие пожелания на тему удобства и недостатков текущих OSD, давайте выкладывайте.
Очень понравился стиль отображения горизонта в bvHUD (ODS Олега), было бы здорово исполнить похожую шкалу тангажа, если конечно Олег не будет возражать
было бы здорово исполнить похожую шкалу тангажа
Я в этом варианте не очень понимаю где верх, а где низ самолета. Это ведь тестовая видюха. Нет такой-же, но с реального полета?
Верх когда шкала с пямыми делениями, а когда с наклонными это низ. ИМХО очень наглядный вариант отображения горизонта и углов тангажа.
Вот идеал подобного отображения горизонта 😃
Верх когда шкала с пямыми делениями, а когда с наклонными это низ
Не совсем понятно…
Вот ОСД Икаруса. Может что отсюда возьмете.
Вот идеал подобного отображения горизонта
может для профессиональных летчиков, это идеал. Но я бы грохнулся с такой шкалой сразу. У вас там СУ-25 еще в видео есть. Вот оно мне очень понравилось. Может как у СУ-25 забацать?
Вот ОСД Икаруса
Нет, слишком уж просто выглядит. И переворот на спину не читаем, по крайней мере, на этом видео.
В RVOSD я вот четко вижу короткую и длинную линию. короткая снизу - норма, короткая сверху - кувыркнулись на спину. Линии внизу, значит вверх летим, вверху, значит падаем. Дом в центре, риска по кругу - направление домой.
Все верно, похоже Олег делал отображение горизонта похожим на F-16
Чем именно такой вариант хорош думаю понятно - позволяет оценивать углы крена и тангажа сразу в цифрах, полностью контролировать любое нештатное положение самолета “по приборам” при отсутствии видимости, например в облаках, что немаловажно. Упростить ведь всегда можно и сделать несколько вариантов отображения.
СУ-25
Там как я понял “боевой” режим экрана HUD, поэтому все “лишнее для войны” с экрана спрятано чтобы было видно целеуказатели
похожим на F-16
Ну вот с этой видюхи, мне более менее все понятно стало. Единственный момент, почему иногда шкала за пределы экрана уезжает. Почему ее просто в центре не фиксируют?
Я думаю там шкала смещается в зависимости от скольжения самолета, видимо пилотам так удобнее… можно и зафиксировать
Ладно поробуем прикунуть этот вариант. Надо подумать как графику, а особенно цифры поворачивать. Боюсь на некоторых углах артефакты некрасивые появятся.
Олег в своей OSD цифры не поворачивает, видимо исходя из таких же соображений
исходя из таких же соображений
Издеваетесь, что ли 😃 на avr цифры вращать… там одно знакоместо целых 30 мкс отрисовывается. Кстати да, вращение знакомест 5х7 будет выглядеть просто отвратно.
Линии горизонта делал не совсем “копийными”, т.к. это получается несколько сегментов с отдельной кучей вычислений.
Ну блин, придет арм4, такой графон забабашу… Если Алекс меня не обскачет 😉
Нет такой-же, но с реального полета?
Там как видео заканчивается, сразу “шахматка” с другими видео - своих насчитал 4 штуки.
а особенно цифры поворачивать
Зачем? Ты голову крутить собрался?
Почему ее просто в центре не фиксируют?
Потому что пока не знают как надо.
Кстати да, вращение знакомест 5х7 будет выглядеть просто отвратно.
Я выбрал вариант 6x8. Но вращать, наверно, тоже не буду пока, ибо все равно будет отвратно.
сегментов с отдельной кучей вычислений.
А зачем ты на сегменты бьешь? Я думал ты хранишь вершины, их и вертишь. А уже между ними прямые линии проводишь.
Ну блин, придет арм4…
Олег, меня радует твой оптимизм. Но тебе предстоит еще много “чудных” открытий истины по ходу изучения STM32. К тому же DISCOVERY4 это не, что тебе нужно. На мой взгляд, это вообще выброшенные на ветер бабки.
Если Алекс меня не обскачет
Я не ставлю цель с кем-то в перегонки играть. 😃
Пока в планах иметь OSD рабочее к 1 апреля.
Потому что пока не знают как надо.
Типа бестолковые американские летчики не знают, как им удобно?
По результатам вчерашних ночных посиделок докладываю:
- Побочный эффект №2 из предыдущего поста побежден. Имеем четкую, гладкую развертку 256X192
- Остается ограничение на засветку нулевого пиксела в каждой строке. Делать этого просто НЕЛЬЗЯ. Это особенность схемотехники, возможно в чистовой версии, когда буду заказывать заводские печатки это будет устранено.
- Не рекомендуется зажигать старший пиксел в самом последнем байте развертки. Синхру это не собьет, но вызовет засветку еще 2 пикселов за пределами развертки. Природа этого эффекта на 100% понятна. Побороть чисто программно нельзя. Будет исправлено изменением чистовой схемотехники.
Вот все. Поле развертки готово. Обдумаю детали реализации и приступаю к рисованию графики на этой неделе. Рисовать будем вариант как на F16. Зафиксирую точку поворота шкалы в центре, ибо не понимаю нафига горизонт по всему экрану катать. Цифры на шкале крутить не буду, ибо Дринкер прав, читать их под углом будет неудобно. Шкалу направления домой и компас думаю совмещу, как на СУ-25. Оно мне понравилось больше всех.