Как принять сигнал с приемника в AVR (PWM|Digital)
У меня щас есть конкретная задача - принять два канальных импульса с приемника с 16-битной разрядностью, обработать и выдать на выход в этом-же фрейме с разрядностью не хуже 10.
О! блин все с ног на голову. Но какой смысл получать хороший сигнал для “замены” его плохим? если удается оцифровать 16 бит, значит и дальше можно их же и передать. либо оцифровывать сразу с некоторой погрешностью допустим сразу проигнорить 2-4 бита и обрабатывать заведомо с 12-14 битной точностью.
Единственное что приходит в голову в “оправдание” такой деятельности, это что тебе возможно хочется получить сигнализацию с пары лишних каналов, а потом их обработать совсем по своему закону? Сознавайся! И ставь задачу поточнее, возможно появятся и полезные идеи.
Сознавайся! И ставь задачу поточнее, возможно появятся и полезные идеи.
Универсальный, нормально работающий V-tail смеситель, соответствующий требованию: “сделал, отдал, забыл” 😃
…задача - принять два канальных импульса с приемника с 16-битной разрядностью, обработать и выдать на выход в этом-же фрейме с разрядностью не хуже 10.
Пока был единый РРМ стандарт, все было бело и пушисто,
Понимаю, что придется писать модуль распознавания сценариев, но душа жаждет халявы 😃
P.S. Теоретические рассуждения о том, что одного байта на канал на все про все - выше крыши, мне неинтересны.
вот и я про то 16бит это уже довольно высокая точность но её всеравно не получить…азза не моментального срабатывания прерывания…
проще получить эти данные с сбуса футабы!!! со 100% точностью 😃
нафик разные стандарты??? делать под конкретный приймник!!!
8бит меня тоже не устраивает
При аппаратном замере 16 бит получаются автоматически. Если мерять программно, хватит 12 бит. Серве нужно 10 бит. “PPM only” а-ля GWS делать не будем 😃.
Для 16-бит один квант будет ~15ns…😃
Серве нужно 10 бит.
Существуют сервы способные выдать точность <0.17град (даже для диапазона полного хода 180град)? И это реально необходимо для авиамодели?
проверил ещё раз!!!
диапазон изменения числа в канале в сбус шине футабы
0001 до 07FF
первые 6 каналов идут в паралель!!! и только на них распространяется режим хайспид!!!
а вот начиная с 7го!!! они отстают на 3мс от первых 6ти!!!
тример работает от 2047 до 1680 = 367
тоесть поле деятельности тримера 367
а поле деятельности стика 1680
нафик разные стандарты??? делать под конкретный приймник!!! 8бит меня тоже не устраивает
под конкретный приемник не интересно, тк не выполнится условие изготовления “сделал-отдал-забыл”, ибо забыть не получится на долго, так и будут приходить и клянчить переделку под другой приемник, потом под третий.
Крнстантин, поделись названием програмки-осциллера или это спец софтина от аппаратной приспособы?
…это спец софтина от аппаратной приспособы
это усб осцил… 1 канал… мож у автора есть уже что и покруче…
называется pv6501… пользую уже лет 5… про свой 1С-77 уже забыл 😃
под конкретный приемник не интересно, тк не выполнится условие изготовления “сделал-отдал-забыл”
универсальная вещь она всегда хуже!!! в таком случае можно сделать устройство под каждое устройство! либо в одном переключать вариант работы!! либо сделать автомат распознающий вариант работы
есть большой проект… ил-76 3600см… автор не я поэтому без подробностей…
в одном крыле 14 машинок… с использованием 7и каналов.
моя задача помочь человеку с бортовой сетью!! вот и пришла такая мысль…
поставить приёмник R6208SB … всё что в фюзе и не отстёгивается запитать от первых 8и каналов…
а всё что снимается… и чтобы не парится в проводах… решено подсоединится по сбусу!!!
тоесть надо грамотно организовать декодер сбус в канальные импульсы!!!
с самой шиной сбус я уже разобрался что там и где передаётся
осталось только из числа 0001 до 07FF сделать 7-8 канальных импульсов!!! 😃
… поле деятельности тримера 367
а поле деятельности стика 1680
Хоть с одним вопросом разобрались полностью, разрядности 10-11 бит серве достаточно 😃
под конкретный приемник не интересно, тк не выполнится условие изготовления “сделал-отдал-забыл”, ибо забыть не получится на долго, так и будут приходить и клянчить переделку под другой приемник, потом под третий.
Именно так. И не просто клянчить 😃
Именно так. И не просто клянчить
Вот вот. Готовь схемку летом, а прошивку зимой… )))
В том плане даже если сделаешь “полуфабрикат” то прежде чем успокоиться придется подготовить софтину версии 2 на все случаи жизни, или как минимум “подбить базу” чтоб быть готовым к модернизации устройства, ибо нет такого заказчика который бы сплющив человеку мозг, вот так легко успокоился бы на достигнутом )))
первые 6 каналов идут в паралель!!! и только на них распространяется режим хайспид!!!
а вот начиная с 7го!!! они отстают на 3мс от первых 6ти!!!
В принципе, это тоже весьма ценная инфа 😃
Во-первых “сказка стала былью” - это по поводу смещения каналов на современных приемниках. А во-вторых, моя задача по части универсальности стала практически невыполнимой, попытка “универсально” смешать ФАСТ-канал с обычным ни к чему хорошему не приведет.
В принципе, это тоже весьма ценная инфа 😃
Во-первых “сказка стала былью” - это по поводу смещения каналов на современных приемниках. А во-вторых, моя задача по части универсальности стала практически невыполнимой, попытка “универсально” смешать ФАСТ-канал с обычным ни к чему хорошему не приведет.
Почему не приведет? и чем твоя конструкцыя может оказаться хуже того что было? И почему задача становится ни универсальной не понятно, ведь ты собирался каждый канал отслеживать полностью а значит и обрабатывать должен в любое время независимо от порядка следования импульсов.
Во-первых “сказка стала былью” - это по поводу смещения каналов на современных приемниках. А во-вторых, моя задача по части универсальности стала практически невыполнимой, попытка “универсально” смешать ФАСТ-канал с обычным ни к чему хорошему не приведет.
Тот пример который я выкладывал,спокойно работает на fasst (у меня futaba была изначально). Цеплял серво-тестер на 3 канала сразу, тоже все ОК.
Если грубо переформулировать задачу, то совсем ОК будет соответствовать работе смесителя от двух разных сервотестеров, что-то вроде асинхронного режима. Второй момент - нужно определиться, какой из двух входных сигналов следует использовать для синхронизации выходного.
В целом я готов согласиться с KGB - смысл делать есть только для конкретного приемника. Единый РРМ-стандарт уходит в историю и надо считаться с реалиями. Тем более, что во всех нонешних передатчиках эта функция есть.
Со советы и понимание всем огромное СПАСИБО 😃
определиться, какой из двух входных сигналов следует использовать для синхронизации выходного.
Пожалуй вернее всего было бы синхронизироваться от 1 канала 😉 или входящего ППМ, но тк это излишне, просится в качестве синхро младший канал, ибо он по любому либо одновременно либо раньше… отсюда и вывод… с другой стороны как ни стартуй, а пока не получишь оба значения не замесишь, поэтому, по первому есть смысл сброситься в 0 а после получения последнего сгенерить и запускать замес в студию… как раз там времени достаточно много на то чтобы все отработало… а с каким из остальных каналов приемника окажешься в фазе или супротив оной, не очень то и волновать должно по идее.
никогда не пользовал в процах ШИМ! поэтому совсем вылетело из головы!!!
вот что нашол… читая про ШИМ
Аппаратный ШИМ
В случае 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ю каналами хайспид очень даже получается!!!
Один очень хороший человек мне подсказал один вариант чтения по восьми цифровым входам и мгновенной передачей их на 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;
}
сервы дергались.
S.Bus System
“Песок, не важная замена овсу…”(С)О`Генри.
С.бас тоже хорошо, но такое решение требует практически полную замену всего имеющегося оборудования, новым и вполне даже не бюджетным…
вариант чтения по восьми цифровым входам и мгновенной передачей их на 8 цифровых выходов для управления сервами.
Хочется продолжить тему. У кого то есть идеи по одновременной обработке нескольких - бОлее 2, но не более 6-8 PWM каналов каким то более человеческим методом кроме прямого чтения в цикле?.
Интересует реализация совершенно конкретно на Атмега168/328 (HK KK Board V2 или V3)… 😉 более того, в распоряжении там доступны не все порты, более того и эл.схемы пока еще не нашел …
Хочется продолжить тему. У кого то есть идеи по одновременной обработке нескольких - бОлее 2, но не более 6-8 PWM каналов каким то более человеческим методом кроме прямого чтения в цикле?.
А то что я сделал не подходит?