Создание собственной системы стабилизации
Чёт мне не верится… допустим даже не надо перерисовывать всю картинку а только вносить изменения - их нужно взять и перенести - когда - ну допустим когда проц “курит” между циклами, это опять же при условии, что петля не слишком “страшная” типа вий марг… если что-то посерьёзней - будет не есть гуд, далее заряжаем ПДП SPI, а там х.з. во, вернёмся к нашим баранам - в пресловутом Pixhawk с его 428-м процем при использовании ИНС на EKF (50Гц) и полного логирования - петля впритык 400Гц и есть предупреждения, что цикл не стабилен! (можно любой лог с пикса взять) И вы утверждаете что загрузка ОСД = 0% времени ядра? сомневаюсь…
стоп а ПДП из памяти в память можно?
загрузка ОСД = 0% времени ядра?
Сам процесс отрисовки у большинства OSD требует прерывания с наивысшим приоритетом (15625 Гц) как раз для “перезарядки” DMA SPI, которое несмотря на навороченный NVIC, происходит с с разной задержкой в зависимости от того - чего оно прерывает… таким образом про другие реалтайм прерывания можно забыть…
А у меня теперь проц даже не знает, что три его таймера сами выводят картинку на экран, моё дело теперь - только в видеобуфер кидать точки… типа “видеокарты stm” получилось…
DMA на OSD все равно немного мешает остальному т.к. держит шину данных
DMA на OSD все равно немного мешает остальному т.к. держит шину данных
поэтому существует специальный тип памяти для видеокарт двуканальный память одна а шин две
через один канал проц кладет картинку
через второй счетчик пикселей выгружает на выход
Кому интересны подробности, поделюсь…
Конечно интересны, делись! Я так понимаю, теперь весь вопрос в создании ПО, с этим может чем поможем!
поэтому существует специальный тип памяти для видеокарт двуканальный память одна а шин две
через один канал проц кладет картинку
через второй счетчик пикселей выгружает на выход
Ну в F4 помойму не такая SRAM и еще + busmatrix
Это схема, если нужно, скину файлик с инициализацией таймеров и функциями вывода графики/текста…
да. без программной части замысел не ясен, в частности как спи загружает очередной байт данных в буффер
ПДП (DMA) - это за гранью понимания.
да. без программной части замысел не ясен
Если коротко, - то таймерами из смеси синхроимпульсов выделяются только строчные, причем осуществляется их сдвиг в видимую область экрана, SPI в <slave> режиме тактируется от таймера 9, DMA ессно в <Circular> режиме…
Кстати, если не заморачиваться с объединением полетника и OSD и делать OSD отдельно, то можно второй SPI параллельно подрубить и запросто сделать двухцветный OSD (ч/б)… (в принципе можно и третий SPI использовать 😃)
Кстати, если не заморачиваться с объединением полетника и OSD и делать OSD отдельно, то можно второй SPI параллельно подрубить и запросто сделать двухцветный OSD (ч/б)…
Это блаж, вот формирование теней на это нада.
Аналогичную схему реализовал АлексСнег, подробностей уже не помню, но вроде без внешних элементов и с одним прерыванием.
если отдельно ОСД, то можно и от lm1881 отказаться)))
Это блаж, вот формирование теней на это нада.
Так и обводи белый символ чёрным контуром…
без внешних элементов и с одним прерыванием.
цена избавления от этого прерывания - дополнительный корпус, а уж насколько это кому нужно - другой вопрос.
Так и обводи белый символ чёрным контуром…
так то нужна отдельная зарисовка теней ( Если горизонтали затенить легко аппаратно, то вертикали не…
Это схема, если нужно, скину файлик с инициализацией таймеров и функциями вывода графики/текста…
Поздравляю, вы почти близки к результату. Однако ж пока не наступили на грабли, на которые наступил я в первой версии своего АП.
Я как бы не знаю как реализован микшер аналоговый, но попробуйте зажечь самый первый пиксел в первой строке кадра и последний пиксел во всех строках.
Есть еще один момент, который может подпортить всю малину, и который надо решать, а именно - рисовать в момент развертки кадра, особенно, если таки решите делать тень вторым каналом (у меня это именно так), по хорошему не получится. То есть, швыряние пикселов в видеобуфер абы когда приведет к неприятному морганию картинки. Этот эффект можно наблюдать на Векторе. Поэтому либо вы полностью новый кадр зарисовываете во время обратного хода кадровой развертки, либо имеете два буфера под каждый канал SPI, чтобы быть на 100% независимым от прерываний. ОСД с наполненной картинкой, зарисовать в период кадрового импульса может не получиться, если EKF крутится 1000 раз в секунду и все остальное требует немедленных реакций. У меня это не получилось в первой версии АП и там пришлось иметь 4 буфера в памяти. В новой версии, я уже был умнее и по максимуму все внешние функции были переложены на возможности аппаратуры. Например, были пересмотрены таймеры, которые вяжутся в каскады внутренними коммутациями, а не внешними. Не каждый таймер может формировать прерывание под АЦП и т.д. ЦАПЫ мешаются с ножками, которые требуются под SPI, а еще градации яркости хочется, а ЦАП каналов всего только два, один из которых звук, а второй перекрывает SPI CLK. Вообщем вот в новой версии All-in-One, которую я буду в этом сезоне испытывать мне пришлось полностью перелопатить схему аппаратуры и архитектуру софта. И только сейчас вот у меня на руках есть опытный образец, который реально успевает обслуживать и сервы, и радиомодуль, и блютуз, и ЮСБ и SBUS и сервохабы, и кучу АЦП каналов, и плотное ОСД в межкадровке зарисовать, и EKF крутить на частоте гироскопа. Я вот это все к тому, чтобы локальная победа над ОСД не остановила на пути пересмотра и переработки кода Арду под ваш контроллер.
Успехов 😃 !
P.S. Посмотрел вашу схемку пристальнее. Все ж таки мне кажется перебор с внешними элементами. Если изучить ДШ, то можно найти способ получить тактирование SPI подвязанное под нужные фазы синхры и без внешней обвязки а только путем замыкания пары правильных ножек на микроконтроллере. Есть еще над чем поработать 😉
близки к результату.
Результат уже есть - всё работает…
швыряние пикселов в видеобуфер абы когда приведет к неприятному морганию картинки.
Александр, вывод у меня полностью аппаратный, а швыряние пикселов - всего лишь операция записи в память, поэтому - чего бы не делал контроллер в основном цикле или в прерываниях, на качество картинки никак не сказывается…
попробуйте зажечь самый первый пиксел в первой строке кадра и последний пиксел во всех строках
Чтоб избежать неприятностей, надо просто “дизаблить” SPI в конце вывода последнего байта строки, иначе последний единичный бит “затирает” синхру основного видео (он остается на ноге до следующего синхроимпульса)…
Если изучить ДШ, то можно найти способ получить тактирование SPI подвязанное под нужные фазы синхры и без внешней обвязки а только путем замыкания пары правильных ножек на микроконтроллере.
Для достижения цели пришлось не только изучить наконец ДШ (😃) но и купить за 20 тыр. нормальный осциллограф, но избавиться от внешней логики не удалось (мне, во всяком случае), STM конечно мощщь, но тут он сдулся…
если получится у Вас буду только рад…
Чтоб избежать неприятностей, надо просто “дизаблить” SPI в конце вывода последнего байта строки
А как аппаратно задисэйблить SPI интерфейс в нужное время?
если получится у Вас буду только рад…
Так вроде уже давно, как все получилось 😉
А как аппаратно задисэйблить SPI интерфейс в нужное время?
Нога <NSS> режим HARD… и всё , я у себя не стал задействовать, чтоб оставить DAC вывод для говорилки, и ограничил программно вывод крайних пикселей, что тоже не проблема…
уже давно, как все получилось
Тоже полностью аппаратный ??
чтоб оставить DAC вывод для говорилки
вот это как раз то, о чем я говорил. 😃
Да, можно наверно NSS к VCC поднимать, можно попробовать.
Тоже полностью аппаратный ??
Да, полностью. Вы, наверно, не просматриваете самолетные ветки (собственно как и я коптерные) 😃 FlyBrain
Вы, наверно, не просматриваете самолетные ветки
Во… переберусь к Вам…
Эх, подсказл бы я вам как развязать вибрации от ваших датчиков, да вы ведь китайцам всё разболтаете 😃