Как принять сигнал с приемника в AVR (PWM|Digital)

V_Alex
Probelzaelo:

Сознавайся! И ставь задачу поточнее, возможно появятся и полезные идеи.

Универсальный, нормально работающий V-tail смеситель, соответствующий требованию: “сделал, отдал, забыл” 😃

KGB
V_Alex:

…задача - принять два канальных импульса с приемника с 16-битной разрядностью, обработать и выдать на выход в этом-же фрейме с разрядностью не хуже 10.

Пока был единый РРМ стандарт, все было бело и пушисто,

Понимаю, что придется писать модуль распознавания сценариев, но душа жаждет халявы 😃

P.S. Теоретические рассуждения о том, что одного байта на канал на все про все - выше крыши, мне неинтересны.

вот и я про то 16бит это уже довольно высокая точность но её всеравно не получить…азза не моментального срабатывания прерывания…
проще получить эти данные с сбуса футабы!!! со 100% точностью 😃

нафик разные стандарты??? делать под конкретный приймник!!!
8бит меня тоже не устраивает

V_Alex

При аппаратном замере 16 бит получаются автоматически. Если мерять программно, хватит 12 бит. Серве нужно 10 бит. “PPM only” а-ля GWS делать не будем 😃.

msv

Для 16-бит один квант будет ~15ns…😃

V_Alex:

Серве нужно 10 бит.

Существуют сервы способные выдать точность <0.17град (даже для диапазона полного хода 180град)? И это реально необходимо для авиамодели?

KGB

проверил ещё раз!!!
диапазон изменения числа в канале в сбус шине футабы
0001 до 07FF

первые 6 каналов идут в паралель!!! и только на них распространяется режим хайспид!!!
а вот начиная с 7го!!! они отстают на 3мс от первых 6ти!!!

тример работает от 2047 до 1680 = 367
тоесть поле деятельности тримера 367
а поле деятельности стика 1680

Probelzaelo
KGB:

нафик разные стандарты??? делать под конкретный приймник!!! 8бит меня тоже не устраивает

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

Крнстантин, поделись названием програмки-осциллера или это спец софтина от аппаратной приспособы?

KGB
Probelzaelo:

…это спец софтина от аппаратной приспособы

это усб осцил… 1 канал… мож у автора есть уже что и покруче…
называется pv6501… пользую уже лет 5… про свой 1С-77 уже забыл 😃

Probelzaelo:

под конкретный приемник не интересно, тк не выполнится условие изготовления “сделал-отдал-забыл”

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

есть большой проект… ил-76 3600см… автор не я поэтому без подробностей…
в одном крыле 14 машинок… с использованием 7и каналов.
моя задача помочь человеку с бортовой сетью!! вот и пришла такая мысль…
поставить приёмник R6208SB … всё что в фюзе и не отстёгивается запитать от первых 8и каналов…
а всё что снимается… и чтобы не парится в проводах… решено подсоединится по сбусу!!!
тоесть надо грамотно организовать декодер сбус в канальные импульсы!!!
с самой шиной сбус я уже разобрался что там и где передаётся
осталось только из числа 0001 до 07FF сделать 7-8 канальных импульсов!!! 😃

V_Alex
KGB:

… поле деятельности тримера 367
а поле деятельности стика 1680

Хоть с одним вопросом разобрались полностью, разрядности 10-11 бит серве достаточно 😃

Probelzaelo:

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

Именно так. И не просто клянчить 😃

Probelzaelo
V_Alex:

Именно так. И не просто клянчить

Вот вот. Готовь схемку летом, а прошивку зимой… )))
В том плане даже если сделаешь “полуфабрикат” то прежде чем успокоиться придется подготовить софтину версии 2 на все случаи жизни, или как минимум “подбить базу” чтоб быть готовым к модернизации устройства, ибо нет такого заказчика который бы сплющив человеку мозг, вот так легко успокоился бы на достигнутом )))

V_Alex
KGB:

первые 6 каналов идут в паралель!!! и только на них распространяется режим хайспид!!!
а вот начиная с 7го!!! они отстают на 3мс от первых 6ти!!!

В принципе, это тоже весьма ценная инфа 😃
Во-первых “сказка стала былью” - это по поводу смещения каналов на современных приемниках. А во-вторых, моя задача по части универсальности стала практически невыполнимой, попытка “универсально” смешать ФАСТ-канал с обычным ни к чему хорошему не приведет.

Probelzaelo
V_Alex:

В принципе, это тоже весьма ценная инфа 😃
Во-первых “сказка стала былью” - это по поводу смещения каналов на современных приемниках. А во-вторых, моя задача по части универсальности стала практически невыполнимой, попытка “универсально” смешать ФАСТ-канал с обычным ни к чему хорошему не приведет.

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

Bare
V_Alex:

Во-первых “сказка стала былью” - это по поводу смещения каналов на современных приемниках. А во-вторых, моя задача по части универсальности стала практически невыполнимой, попытка “универсально” смешать ФАСТ-канал с обычным ни к чему хорошему не приведет.

Тот пример который я выкладывал,спокойно работает на fasst (у меня futaba была изначально). Цеплял серво-тестер на 3 канала сразу, тоже все ОК.

V_Alex

Если грубо переформулировать задачу, то совсем ОК будет соответствовать работе смесителя от двух разных сервотестеров, что-то вроде асинхронного режима. Второй момент - нужно определиться, какой из двух входных сигналов следует использовать для синхронизации выходного.
В целом я готов согласиться с KGB - смысл делать есть только для конкретного приемника. Единый РРМ-стандарт уходит в историю и надо считаться с реалиями. Тем более, что во всех нонешних передатчиках эта функция есть.
Со советы и понимание всем огромное СПАСИБО 😃

Probelzaelo
V_Alex:

определиться, какой из двух входных сигналов следует использовать для синхронизации выходного.

Пожалуй вернее всего было бы синхронизироваться от 1 канала 😉 или входящего ППМ, но тк это излишне, просится в качестве синхро младший канал, ибо он по любому либо одновременно либо раньше… отсюда и вывод… с другой стороны как ни стартуй, а пока не получишь оба значения не замесишь, поэтому, по первому есть смысл сброситься в 0 а после получения последнего сгенерить и запускать замес в студию… как раз там времени достаточно много на то чтобы все отработало… а с каким из остальных каналов приемника окажешься в фазе или супротив оной, не очень то и волновать должно по идее.

KGB

никогда не пользовал в процах ШИМ! поэтому совсем вылетело из головы!!!
вот что нашол… читая про ШИМ
Аппаратный ШИМ
В случае ATMega16 проще всего сделать на его ШИМ генераторе, который встроен в таймеры. Причем в первом таймере у нас целых два канала. Так что без особого напряга ATmega16 может реализовать одновременно четыре канала ШИМ.

Как это реализовано
У таймера есть особый регистр сравнения OCR**. Когда значение в счётном регистре таймера достигнает значения находящегося в регистре сравнения, то могут возникнуть следующие аппаратные события:
Прерывание по совпадению
Изменение состояния внешнего выхода сравнения OC**.

а в некоторых АВРках есть по 16 каналов шим ! но мне это не интересно изза большого корпуса таких процов!!!
а вот ATmega48 например 6 каналов ШИМ что вполне достаточно для моих целей!!! тоесть реально можно получить 6Х3=18 каналов!!!
сдвигая по 6к во времени!!!
можно жаде хай спид организовать!!! 😃 если не ждать 3мс а только 2.2
хотя нет… 2.2*3=6.6 а хай 7… остсаётся всего 0.4
а нам надо 3мс для считывания пакета!! 2.2*2+3 = 7.4мс… не получатся 😦
тоесть даже оставив 12каналов чуток не успеваем 😦
а вот с 6ю каналами хайспид очень даже получается!!!

Mastar

Один очень хороший человек мне подсказал один вариант чтения по восьми цифровым входам и мгновенной передачей их на 8 цифровых выходов для управления сервами. Мне интересно, я пробовал с PCM и PPM приемниками, но без фаста, все было супер, а кто может проверить данный код у себя? Тут правда под мегу прописаны выводы. 😃


void setup()
{
   for (int i=22; i < 30; i++) pinMode(i, INPUT);
   for (int i=37; i > 30; i--) pinMode(i, OUTPUT);
}

void loop()
{
uint8_t Result;
asm volatile(
"cli" "\n\t"
"label%=:"  "in %[Result], %[in_porta]"   "\n\t"
            "out %[out_portc],  %[Result]" "\n\t"
"rjmp label%=" "\n\t"

        : [Result] "=r" (Result)
        : [out_portc] "I" (_SFR_IO_ADDR(PORTC)), [in_porta] "I" (_SFR_IO_ADDR(PINA))
        );

sei();
}

Кстати, при этом, похожем варианте


unsigned char Byte_Port;
void setup()
{
   for (int i=22; i < 30; i++) pinMode(i, INPUT);
   for (int i=37; i > 30; i--) pinMode(i, OUTPUT);
}

void loop()
{
PORTC = PINA;
}

сервы дергались.

2 months later
Probelzaelo
KGB:

S.Bus System

“Песок, не важная замена овсу…”(С)О`Генри.
С.бас тоже хорошо, но такое решение требует практически полную замену всего имеющегося оборудования, новым и вполне даже не бюджетным…

27 days later
Probelzaelo
Mastar:

вариант чтения по восьми цифровым входам и мгновенной передачей их на 8 цифровых выходов для управления сервами.

Хочется продолжить тему. У кого то есть идеи по одновременной обработке нескольких - бОлее 2, но не более 6-8 PWM каналов каким то более человеческим методом кроме прямого чтения в цикле?.
Интересует реализация совершенно конкретно на Атмега168/328 (HK KK Board V2 или V3)… 😉 более того, в распоряжении там доступны не все порты, более того и эл.схемы пока еще не нашел …

Bare
Probelzaelo:

Хочется продолжить тему. У кого то есть идеи по одновременной обработке нескольких - бОлее 2, но не более 6-8 PWM каналов каким то более человеческим методом кроме прямого чтения в цикле?.

А то что я сделал не подходит?

Probelzaelo
Bare:

А то что я сделал не подходит?

Подходит, но но варианты не помешают 😉 самое очевидное что нужно немедленно разобраться со схемотехникой, пинами и портами которые выведены на разъемы физически, хотя я почти уверен в том что увижу там …