Создание собственной системы стабилизации

oleg70
SergDoc:

загрузка ОСД = 0% времени ядра?

Сам процесс отрисовки у большинства OSD требует прерывания с наивысшим приоритетом (15625 Гц) как раз для “перезарядки” DMA SPI, которое несмотря на навороченный NVIC, происходит с с разной задержкой в зависимости от того - чего оно прерывает… таким образом про другие реалтайм прерывания можно забыть…
А у меня теперь проц даже не знает, что три его таймера сами выводят картинку на экран, моё дело теперь - только в видеобуфер кидать точки… типа “видеокарты stm” получилось…

djdron

DMA на OSD все равно немного мешает остальному т.к. держит шину данных

alexeykozin
djdron:

DMA на OSD все равно немного мешает остальному т.к. держит шину данных

поэтому существует специальный тип памяти для видеокарт двуканальный память одна а шин две
через один канал проц кладет картинку
через второй счетчик пикселей выгружает на выход

Shrizt
oleg70:

Кому интересны подробности, поделюсь…

Конечно интересны, делись! Я так понимаю, теперь весь вопрос в создании ПО, с этим может чем поможем!

djdron
alexeykozin:

поэтому существует специальный тип памяти для видеокарт двуканальный память одна а шин две
через один канал проц кладет картинку
через второй счетчик пикселей выгружает на выход

Ну в F4 помойму не такая SRAM и еще + busmatrix

oleg70
Shrizt:

Конечно интересны, делись!

Это схема, если нужно, скину файлик с инициализацией таймеров и функциями вывода графики/текста…

alexeykozin
oleg70:

Это схема, если нужно, скину файлик с инициализацией таймеров и функциями вывода графики/текста…

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

oleg70
alexeykozin:

да. без программной части замысел не ясен

Если коротко, - то таймерами из смеси синхроимпульсов выделяются только строчные, причем осуществляется их сдвиг в видимую область экрана, SPI в <slave> режиме тактируется от таймера 9, DMA ессно в <Circular> режиме…
Кстати, если не заморачиваться с объединением полетника и OSD и делать OSD отдельно, то можно второй SPI параллельно подрубить и запросто сделать двухцветный OSD (ч/б)… (в принципе можно и третий SPI использовать 😃)

rual
oleg70:

Кстати, если не заморачиваться с объединением полетника и OSD и делать OSD отдельно, то можно второй SPI параллельно подрубить и запросто сделать двухцветный OSD (ч/б)…

Это блаж, вот формирование теней на это нада.
Аналогичную схему реализовал АлексСнег, подробностей уже не помню, но вроде без внешних элементов и с одним прерыванием.

djdron

если отдельно ОСД, то можно и от lm1881 отказаться)))

oleg70
rual:

Это блаж, вот формирование теней на это нада.

Так и обводи белый символ чёрным контуром…

rual:

без внешних элементов и с одним прерыванием.

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

rual
oleg70:

Так и обводи белый символ чёрным контуром…

так то нужна отдельная зарисовка теней ( Если горизонтали затенить легко аппаратно, то вертикали не…

AlexSneg
oleg70:

Это схема, если нужно, скину файлик с инициализацией таймеров и функциями вывода графики/текста…

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

Есть еще один момент, который может подпортить всю малину, и который надо решать, а именно - рисовать в момент развертки кадра, особенно, если таки решите делать тень вторым каналом (у меня это именно так), по хорошему не получится. То есть, швыряние пикселов в видеобуфер абы когда приведет к неприятному морганию картинки. Этот эффект можно наблюдать на Векторе. Поэтому либо вы полностью новый кадр зарисовываете во время обратного хода кадровой развертки, либо имеете два буфера под каждый канал SPI, чтобы быть на 100% независимым от прерываний. ОСД с наполненной картинкой, зарисовать в период кадрового импульса может не получиться, если EKF крутится 1000 раз в секунду и все остальное требует немедленных реакций. У меня это не получилось в первой версии АП и там пришлось иметь 4 буфера в памяти. В новой версии, я уже был умнее и по максимуму все внешние функции были переложены на возможности аппаратуры. Например, были пересмотрены таймеры, которые вяжутся в каскады внутренними коммутациями, а не внешними. Не каждый таймер может формировать прерывание под АЦП и т.д. ЦАПЫ мешаются с ножками, которые требуются под SPI, а еще градации яркости хочется, а ЦАП каналов всего только два, один из которых звук, а второй перекрывает SPI CLK. Вообщем вот в новой версии All-in-One, которую я буду в этом сезоне испытывать мне пришлось полностью перелопатить схему аппаратуры и архитектуру софта. И только сейчас вот у меня на руках есть опытный образец, который реально успевает обслуживать и сервы, и радиомодуль, и блютуз, и ЮСБ и SBUS и сервохабы, и кучу АЦП каналов, и плотное ОСД в межкадровке зарисовать, и EKF крутить на частоте гироскопа. Я вот это все к тому, чтобы локальная победа над ОСД не остановила на пути пересмотра и переработки кода Арду под ваш контроллер.

Успехов 😃 !

P.S. Посмотрел вашу схемку пристальнее. Все ж таки мне кажется перебор с внешними элементами. Если изучить ДШ, то можно найти способ получить тактирование SPI подвязанное под нужные фазы синхры и без внешней обвязки а только путем замыкания пары правильных ножек на микроконтроллере. Есть еще над чем поработать 😉

oleg70
AlexSneg:

близки к результату.

Результат уже есть - всё работает…

AlexSneg:

швыряние пикселов в видеобуфер абы когда приведет к неприятному морганию картинки.

Александр, вывод у меня полностью аппаратный, а швыряние пикселов - всего лишь операция записи в память, поэтому - чего бы не делал контроллер в основном цикле или в прерываниях, на качество картинки никак не сказывается…

AlexSneg:

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

Чтоб избежать неприятностей, надо просто “дизаблить” SPI в конце вывода последнего байта строки, иначе последний единичный бит “затирает” синхру основного видео (он остается на ноге до следующего синхроимпульса)…

AlexSneg:

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

Для достижения цели пришлось не только изучить наконец ДШ (😃) но и купить за 20 тыр. нормальный осциллограф, но избавиться от внешней логики не удалось (мне, во всяком случае), STM конечно мощщь, но тут он сдулся…
если получится у Вас буду только рад…

AlexSneg
oleg70:

Чтоб избежать неприятностей, надо просто “дизаблить” SPI в конце вывода последнего байта строки

А как аппаратно задисэйблить SPI интерфейс в нужное время?

oleg70:

если получится у Вас буду только рад…

Так вроде уже давно, как все получилось 😉

oleg70
AlexSneg:

А как аппаратно задисэйблить SPI интерфейс в нужное время?

Нога <NSS> режим HARD… и всё , я у себя не стал задействовать, чтоб оставить DAC вывод для говорилки, и ограничил программно вывод крайних пикселей, что тоже не проблема…

AlexSneg:

уже давно, как все получилось

Тоже полностью аппаратный ??

AlexSneg
oleg70:

чтоб оставить DAC вывод для говорилки

вот это как раз то, о чем я говорил. 😃
Да, можно наверно NSS к VCC поднимать, можно попробовать.

oleg70:

Тоже полностью аппаратный ??

Да, полностью. Вы, наверно, не просматриваете самолетные ветки (собственно как и я коптерные) 😃 FlyBrain

oleg70
AlexSneg:

Вы, наверно, не просматриваете самолетные ветки

Во… переберусь к Вам…

Дмитрием_меня_зовут

Эх, подсказл бы я вам как развязать вибрации от ваших датчиков, да вы ведь китайцам всё разболтаете 😃

oleg70
Дмитрием_меня_зовут:

Эх, подсказл бы я вам как развязать вибрации от ваших датчиков, да вы ведь китайцам всё разболтаете

Видимо “бомба” очередная (?)…, тогда хоть как то результат эдакой развязки покажите (не вдаваясь в секрет), а то как то - “ни о чём”…