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

V_Alex
eliash:

Не хотел никого обидеть, разница в 2 грамма но функционал… хотя размер у вас меньше, как же так с весом получилось?

4,7 грамма плата с проводком и 1,2 грамма - коробочка.

eliash:

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

Упускаете. Вообще-то, Вы делали БАНО. С соответствующим функционалом. Я просто показал, что именно этот функционал реализуется намного проще и дешевле. Ваша платформа дает намного больше возможностей, но то,что Вы затеяли сейчас, уже больше похоже на телеметрию 😉.

eliash
V_Alex:

Упускаете. Вообще-то, Вы делали БАНО. С соответствующим функционалом. Я просто показал, что именно этот функционал реализуется намного проще и дешевле. Ваша платформа дает намного больше возможностей, но то,что Вы затеяли сейчас, уже больше похоже на телеметрию 😉.

Ну БАНО как первый шаг к “бортовому компьютеру” и как знакомство с технологиями, я раньше с микроконтролерами дела не имел, надо было с чего-то начинать. Хотя да, я когда от беты пришел к первой версии, то пришлось запаять мосфеты по 4,1А на нагрузку, так как через микруху прокачать можно максимум 40 ма на порт и 200 на все порты в сумме, и когда получилось выходных 3 канала то можно было б заменить тинькой, но без ШИМ… А с сильными диодами надо регулировать яркость, иначе если близко летаешь - глаза выедает…

Ну телеметрия - это громко сказано, я всего лишь хочу получить контроль над зарядом батареи (6 резисторов на 3S и 3 аналоговых порта) да пару градусников поставить DS18B20 чтоб за регулем присмотреть. Ног много, чего добру пропадать, увеличение схемы - только второй этаж коробочки сделаю двухсторонний и окуратней будет и по весу может добавит пару грамм…

Probelzaelo

Библиотечки/примеры и тп есть, я уже копал, просто мне интересно было чем то из этих пользовался или нет, потому и спрашивал. Я недавно этой темой интересовался вот кое что нашлось, загляни может быть черпнешь полезного от импортных сотоварищей, тем более там есть ссылочки на очень похожие работки и что приятно включая програмство 😉

aeroquad.com/showthread.php?530-Da-DIY-PPM-Encoder
diydrones.com/…/do-you-want-an-ardupilotmega
diydrones.com/profiles/…/705844:BlogPost:38393
aeroquad.com/showthread.php?2999-Decoding-PPM-on-t…
в посту #2 ответ совершенно по теме 😉

а это, просто из раздела интересное, по близкой теме
www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=119392739…
www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=126247998…

Bare
eliash:

Библиотек для ардуины готовых нет, так что “сочинял” сам…

Я хочу собрать на arduino небольшой девайс для контроля бензинового двигателя. Мне надо считывать с приемника один канал(PWM) постоянно, и параллельно с пары датчиков. Не знаю как лучше читать с приемника, может покажите свой кусок кода по чтению сигнала с приемника?

eliash
Probelzaelo:

Библиотечки/примеры и тп есть, я уже копал, просто мне интересно было чем то из этих пользовался или нет, потому и спрашивал.

Ну я тоже гуглил, и много чего успел пересмотреть и прочитать, там главное концепцию понять - а дальше чужой код не всегда хорошо 😃
Кстати я тоже заметил, что буржуи намного больше кода публикуют на форумах, чем у нас… У нас если прогер написал 10 строк - то уже горд собой и ни с кем делиться не хочет, за исключением небольшого количества нормальных людей.
Да у них есть где подсмотреть…
я больше с серво-прокси смотрел, там хороший вариант захвата ппм с определением длины сигнала, но там тоже нет фильтрации помех, а я заметил что помех принимает и отдает приемник не мало, так что надо фильтровать все что меньше 0,9мс…

Bare:

Я хочу собрать на arduino небольшой девайс для контроля бензинового двигателя. Мне надо считывать с приемника один канал(PWM) постоянно, и параллельно с пары датчиков. Не знаю как лучше читать с приемника, может покажите свой кусок кода по чтению сигнала с приемника?

А можно больше информации? Дело в том, что с приемника PWM не идет… идет PPM и в начале темы есть мой код считывания.
Если вам надо получить данные от двух или более датчиков - то надо их опрашивать по очереди. если они не умеют сами постить данные по какому-нибудь протоколу (I2C,1wire,2wire)

Probelzaelo

Ясен, перец, что в чужих кодах только редкие мысли…

Bare
eliash:

А можно больше информации? Дело в том, что с приемника PWM не идет… идет PPM и в начале темы есть мой код считывания. Если вам надо получить данные от двух или более датчиков - то надо их опрашивать по очереди. если они не умеют сами постить данные по какому-нибудь протоколу (I2C,1wire,2wire)

Я наверно не правильно выразился. Я считал что когда идет сразу несколько каналов с одной шины ( например тренерский разъем на передатчике) это PPM, а если снимается конкретный канал с разъема приемника (куда подключается серва), то там PWM. К ардуине я буду подключать 2 сервы и два канала с приемника, полюс датчик холла. С датчика холла я хочу считать импульсы через счетчик повешенный на прерывание. Еще одно прерывание буду использовать для таймера. Вот и кончились внешние прерывания. В связи с этим, негде взять еще 2 прерывания, для двух каналов, для чтения сигнала с приемника. Смотрел исходники AeroQuad, там вроде они читают сразу с четырех или более каналов , параллельно меняя вектора прерывания. Ном там все так сильно завязано на другой код и куча классов, что я не смог разобраться.

Tester500
eliash:

А можно больше информации? Дело в том, что с приемника PWM не идет… идет PPM и в начале темы есть мой код считывания.

Ну у кого что приемником называется. Если это приемник на выходе которого готовые каналы (модуль приемника с N-каналами), то в каждом канале PWM.
Если это кусок электронной схемы на входе которой антенна, а на выходе не демультиплексированный на каналы низкочастотный сигнал, то это PPM (или PCM)

Bare

Вот кусок кода AeroQuad (Receive), читают и ppm и pwm. А вот как от туда выдернуть только нужное, я не знаю.

Receiver.zip

Bare
Tester500:

Ну вроде примеров для оцифровки PPM хватает. Есть проекты PPM-> USB (для симуляторов), вот простой:
github.com/thomaspfeifer/PPM2USB/archives/master

Мне как раз PPM и не надо, мне надо считать 3 канала с конечных выходов приемника(куда подключаются сервы). И желательно используя только одно прерывание.

Probelzaelo
Bare:

мне надо считать 3 канала с конечных выходов приемника(куда подключаются сервы). И желательно используя только одно прерывание.

не вопрос, заводите их, каждую на свою ногу и одновременно через диод типа кд521/522 на одно, общее прерывание… (получится этакая схема 3ИЛИ), при вызове прерывания читайте состояние всех трех ног, по какой из них произошел вызов легко сами определитесь 😉
Но есть подозрение что не очень красиво это будет работать… ибо там, на каналах, PWM. а значит практически одновременно может быть сигнал. Надеюсь что каналы ШИМят все же по очереди, и в том же порядке как это было принято из входящего PPM…

msv

Не надейтесь… 😃 Последовательно шимы появляются пожалуй только в простейших декодерах на сдвиговом регистре…

Probelzaelo

Я не надеюсь на столько уж тупо, но что то мне подсказывает что периодичность поступления PWM должна быть синхронна с прилетевшим PPM для серв и спидконтроллеров это вполне приемлемо, какой смысл молотить туда импульсы чаще?.
Сознайтесь плиз кто нибудь из тех, кто туда наступал осциллером … а то будет как в прошлый раз …

Bare
Probelzaelo:

Я не надеюсь на столько уж тупо, но что то мне подсказывает что периодичность поступления PWM должна быть синхронна с прилетевшим PPM для серв и спидконтроллеров это вполне приемлемо, какой смысл молотить туда импульсы чаще?.

А если используется например FASST или DSM ? Там могут прилетать данные по каналам в одном пакете, соответственно и выставляться на приемнике могут почти одновременно.

Probelzaelo
Bare:

А если используется например FASST или DSM ? Там могут прилетать данные по каналам в одном пакете, соответственно и выставляться на приемнике могут почти одновременно.

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

AndyBig

Я так думаю, что в контроллере приемника узел декодирования PPM и узел формирования ШИМ - разные, и синхронизация между ними совершенно необязательна и даже почти невозможна. Поэтому и вполне могут быть расхождения.
ШИМ может быть с разной частотой - для аналоговых, для цифровых серв… Не подстраиваться же под это передатчику 😃 Ну и опять же - частоту ШИМ формирует приемник, а частоту PPM - передатчик, так что синхронизации здесь и не может быть.

Probelzaelo

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

msv:

в простейших декодерах на сдвиговом регистре

просто МК делает сразу все что нужно и плюс еще немного но в одном корпусе, в отличии от просто сдв.регистра. а один корпус это снижение и массы и цены и сложности и увеличение надежности всего изделия.

Tester500

Формализуем ТЗ, пока до Канта не дошло 😃

  1. нужно оцифровать сигналы PWM, которые поступают с канальных выводов приемника (PPM)
  2. Оцифрованный канал должен иметь …-бит (указать битность)
  3. На выходе имеем переменные, содержащие пропорционально длительности сигнала число.
  4. Использовать не более одного таймера и одного прерывания (видимо проще от этого таймера)

Такое ТЗ пойдет?

msv
  1. Точность определения длины импульса не хуже … мкс.
    (Разрядность можно сделать хоть long, но это не обещает некоторую гарантированную точность…)
Tester500

Длина импульса 2.1 мс, минимум 0.8 мс
Кто что еще подскажет?