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

eliash
V_Alex:

Э-э-э, зачэм абижаишь, дарагой 😃.
Вот БАНО на attiny 13A:

Наружу выходят 4 канала до 500 мА каждый.

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

Probelzaelo:

А ты расскажи плиз, софт полностью сам “сочинял” или какие то уже готовые библиотечки для ардуино использовал?
Если есть библиотеки, брось ссылочкой плиз.

Библиотек для ардуины готовых нет, так что “сочинял” сам…
Хотя для бузера, скорей всего, будет использована либа Tone - есть во всех поставках Arduino IDE, там же и пример использования. Если не придумаю как прокачать пьезо элемент менее обьемным способом.

Есть еще мысль добавить сенсор для батарейки и передатчик на землю, вот сейчас раскуриваю передачтик на 433 мгц, маленький и легкий, вот только пока не поддается укращению 😃

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, но это не обещает некоторую гарантированную точность…)