23

Вопрос к электронщикам1

Всем привет. Столкнулся тут с дебильной проблемой, тривиальной, на первый взгляд, но уже несколько дней бьюсь.

Дано: RC Receiver 2.8GHz , 8 каналов. Выдает в PWM, PPM, SBUS (по желанию).
Задача: прочитать эти каналы в Raspberry Pi через GPIO. Я знаю про ограничения в микросекунду на Pi, но мне больше и не надо.

Вроде все просто, но не получается.

Начнем с того что pigpio не видит сигнала. Долго ковырялся, посмотрел осциллографом - сигнал есть, но он 1.3в максимум. То есть, судя по всему, для GPIO это ноль. Хотя, и выдает как 1, но постоянный.
Тут я вообще теряюсь, ибо сигнал есть, если к PWM подключаю серво то все реагирует как надо.

Попробовал через транзистор поднять до 3.3в , но то-ли руки из жопы, то-ли транзистор не тот (NPN, TIP120), то-ли хз что, на выходе вижу те-же 1.3в.

Гугл весь прочитал, но так и не нашел внятного и понятного ответа как на Raspberry Pi работать со стандартными 2.8GHz RC ресиверами. Помогите плз.

PS: Если есть годный рецепт как читать это на ардуине то могу попробовать (она тоже есть), но с обязательным рецептом передать это дальше в малинку по i2c. Ибо из-за контроллера моторов свободных GPIO почти не осталось.

Ресиверы у меня такие:
Radiolink R8FM (PPM & S.BUS): https://www.radiolink.com/r8fm
Radiolink R8EF (PWM, PPM & S.BUS) : https://www.radiolink.com/r8ef

Вот скрин с осциллограммы (в режиме PPM):

Ну а вот, собственно, сценарий использования:

Arduino & Pi

1.5K постов20.9K подписчиков

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Прошли две недели, из них неделя, собственно, пришлась на решение проблемы из прошлого поста. Но все решено, благодаря ценным унизительным комментариям комрадов. :)

Итого, из полученного опыта:

Протокол SBUS на Radiolink это почти оригинал , изменен только стартовый байт (я так понимаю, чтобы не нарваться на лицензирование). Контроллеры первый байт из пакета в 25 байт игнорируют, поэтому не видят разницы. Я, по честному, его читал и ожидал стандартный, поэтому и не получалось ничего. :)


Когда я наконец перебрал все по битам и сравнил с эмулятором футабы (да, и такие есть), подровнял код и все пошло как по маслу. Подобрал правильные подтягивающие и вытягивающие резисторы, сигнал стал мега стабильным. Далее все дело техники.


Из прототипа спаял окончательный вариант инвертора для конвертации SBUS -> UART:

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


Далее, ту же самую плату использовал для размещения реле и выхода видео на передатчик 5.8Ггц. Собрал все в кучу, написал весь нужный софт на управление моторами и реле, попробовал в сборе (с частью автомата):

Кстати, в теме управления моторами добился очень интересного результата. Обычные контроллеры при повороте налево например, останавливают левую гусеницу и гребут правой. Я сделал градиентный дифференциал, то есть при повороте на месте работает как танковый разворот (на месте), на скорости одна пара гусениц замедляется, другая ускоряется. Получилось очень плавное управление.


Дальше пришел черед пробовать тему камеры и управления оной, все по плану.

Далее, подумал над темой наведения, нашел старенький лазерный диод, собрал из него лазерный прицел. Пока не подвесил.

Потом разобрал все к херам, чтобы уложить провода и спаять все что на соплях висит. Сегодня вывез подопытного в поле, на эксперименты. :)

Ну и, раз есть гусеницы, как же не попробовать на бездорожье:

Ну, в общем, понятны результаты эксперимента. :)


- Центр тяжести буду смещать вниз, перенеся батарейный блок под платформу

- Верхний сегмент крепления камеры (то есть автомата) переверну, чтобы было похоже на пушечный лафет

- Все шайбы заменю (уже заменил) на гроверы, ибо раскручиваются

- На гусеницы надо напылить резину, ибо они есть жесткий пластик и скользят на бетоне и камнях.


Виден свет в конце тоннеля, через неделю вундервафля будет готова, в минимальной конфигурации. :)

Показать полностью 2 3
комментарии (40)
0
Автор поста оценил этот комментарий

Лол))) я тоже самое говорю)))

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Не ругайтесь ))

С пуллап резистором стали рандомные 1 и 0 на PPM, да. Но pgpio почему-то все равно нормально расшифровать это не может, мусор валится.

Поэтому я сфокусировался на SBUS (UART). Поставил инвертор, данные валятся. Получилось стабилизировать поток данных (на 100000 бод и пакеты по 16 байт), сейчас застрял на их расшифровке, вообще непонятна логика смены байтов при разных положениях джойстика. То есть изменение по одному каналу затрагивает сразу группу соседних байтов (причем, не только на аналоговых, а и на push button тоже)
Пытаюсь найти логику.
Все примеры из тырнета, которые нашел, не работают, они на другие ресиверы. Именно на мой никаких спецификаций по SBUS не нахожу.

То-ли я совсем тупой, то-ли китайцы с другой планеты. Плакать хочется...

показать ответы
1
Автор поста оценил этот комментарий

На всякий случай (для тех, кто только программисты):  в случае с подключением к малине провод "+"  НЕ НУЖЕН (подключив его есть шансы увидеть волшебный дым).

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

ага, уже увидел этого духа, минус одна Pi Zero W

2
Автор поста оценил этот комментарий

Смотри, у тебя в бесконечном цикле крутится вся твоя программа, и в одном её месте ты просишь прочитать состояние порта. Чем больше кода, тем реже ты будешь его читать. 1мкс точности даст голая программа с одной строчкой условно "readPin". И вот чего я нашёл :Механизм прерываний был добавлен в библиотеку RPi.GPIO начиная с версии 0.5.0а, появились новые доступные функции:

add_event_detect();

remove_event_detect();

add_event_callback();

wait_for_edge().

Каждый пин GPIO в Raspberry Pi, установленный в режиме входа (input), может сконфигурирован как источник для вызова прерывания.

Прерывания нужны.(это большая и жирная точка)))
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

это все правильно, НО, к сожалению, в режиме PPM там постоянно гумно сыпется, поэтому тема прерываний не работает. Это работает только для кнопочек и разных датчиков холла и тд, у которых дискретное состояние.


для оптимизации чтения с порта есть такая штука как потоки с приоритезацией (threads), с этим проблем нет. То есть, абсолютно неважно что там происходит в основном теле программы, если мы зарезервировали поток то он будет выполняться в нужный момент, вне зависимости от общей нагрузки.

Так что это не проблема. Проблема что я вообще сигнала не вижу.

показать ответы
0
Автор поста оценил этот комментарий
Знакомые гусли...
Уж не М ли это 808 В, чаще Скорпион? Вселенная Halo, ККОН
;-)
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
0
Автор поста оценил этот комментарий
Проще то прлще, но вроде как ТС не умеет даже на ардуинке этот сигнал принимать (что для меня лично не понятно - с малиной умеет работать, а с дуиной нет🤔) , а вы предлагаете к тому же малину с STM подружить.
ПС @whiteagle3k, а зачем вообще усложнять проект малиной? Что за функционал у него планируется?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
0
Автор поста оценил этот комментарий
А на STM есть RTOS. Двумя командами ловим, обрабатываем, в разы дешевле, быстрее и "автономнее". Просто малина не обрабатывает все в реальном времени и словить сигнал правильной формы намного сложнее. У нее свои прерывания есть...
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Ну да, поэтому, в итоге, через UART и реализовал.

под автономностью я имел в виду мозги, возможность беспилотного перехода из точки А в точку Б, и охрану заданной точки
0
Автор поста оценил этот комментарий
Знакомые гусли...
Уж не М ли это 808 В, чаще Скорпион? Вселенная Halo, ККОН
;-)
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Не знаю что полцчится в итоге, пока так. :)
0
Автор поста оценил этот комментарий
Проще то прлще, но вроде как ТС не умеет даже на ардуинке этот сигнал принимать (что для меня лично не понятно - с малиной умеет работать, а с дуиной нет🤔) , а вы предлагаете к тому же малину с STM подружить.
ПС @whiteagle3k, а зачем вообще усложнять проект малиной? Что за функционал у него планируется?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Так на ардуино это изначально проще все, там gpio.pulseIn есть, ешь не хочу.
а малина нужна для автономности, передачи видео с данными, анализа видео и тд.
показать ответы
0
Автор поста оценил этот комментарий

Узнать надо ли допилить число, можно следующим условием

if ((value>>2)&0x01)

{....};


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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Блин, опять пол дня потерял, дело не в знаке, оказывается. Где-то в битности на малых значениях проблема.
Плохо работает как в плюсе так и в минусе на значениях до 30% нагрузки.
:(

Под плохо работает я имею в виду что скачут значения рандомно в диапазоне 0-256, какой-то бит шалит.

Напишу тестовый фильтр побитный на одном изолиронном канале.
0
Автор поста оценил этот комментарий

Upd. Скорее всего пакеты типизированы, но... Бывает что нет.


Есть еще прикол: MSB/LSB


Типа

[011] = 5

[011] = 6


И прочие приколы со знаком числа...

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

почти расковырял протокол. эти ребята с вселенским мозгом используют 11 бит, так что все байты перемешаны. :)))

вот код получившийся:

channels[0] = ((ord(data_buffer[1]) | ord(data_buffer[2])<<8) & 0x07FF)
channels[1] = ((ord(data_buffer[2])>>3|ord(data_buffer[3])<<5) & 0x07FF)
channels[2] = ((ord(data_buffer[3])>>6 | ord(data_buffer[4])<<2 | ord(data_buffer[5])<<10) & 0x07FF)
channels[3] = ((ord(data_buffer[5])>>1 | ord(data_buffer[6])<<7) & 0x07FF)
channels[4] = ((ord(data_buffer[6])>>4 | ord(data_buffer[7])<<4) & 0x07FF)
channels[5] = ((ord(data_buffer[7])>>7 | ord(data_buffer[8])<<1 | ord(data_buffer[9])<<9) & 0x07FF)
channels[6] = ((ord(data_buffer[9])>>2 | ord(data_buffer[10])<<6) & 0x07FF)
channels[7] = ((ord(data_buffer[10])>>5| ord(data_buffer[11])<<3) & 0x07FF)
channels[8] = ((ord(data_buffer[12]) | ord(data_buffer[13])<<8) & 0x07FF)
channels[9] = ((ord(data_buffer[13])>>3| ord(data_buffer[14])<<5) & 0x07FF)
channels[10] = ((ord(data_buffer[14])>>6| ord(data_buffer[15])<<2| ord(data_buffer[16])<<10) & 0x07FF)
channels[11] = ((ord(data_buffer[16])>>1| ord(data_buffer[17])<<7) & 0x07FF)
channels[12] = ((ord(data_buffer[17])>>4| ord(data_buffer[18])<<4) & 0x07FF)
channels[13] = ((ord(data_buffer[18])>>7| ord(data_buffer[19])<<1| ord(data_buffer[20])<<9) & 0x07FF)
channels[14] = ((ord(data_buffer[20])>>2| ord(data_buffer[21])<<6) & 0x07FF)
channels[15] = ((ord(data_buffer[21])>>5| ord(data_buffer[22])<<3) & 0x07FF)
channels[16] = ((ord(data_buffer[23])))
пока осталась проблема с негативными значениями ручек (там битность надо инвертировать), но, в целом, уже виден свет в конце туннеля :)

показать ответы
0
Автор поста оценил этот комментарий

Ну вот.

Теперь можно помаркитанить с EVEN/ODD/NONE. Уарт и иже с ним передают посылку длинной обычно 8 бит.

https://ru.m.wikipedia.org/wiki/Универсальный_асинхронный_приёмопередатчик


Посмотреть надо посылки не в разрезе байт, а в разрезе бит.

Сча гуглил - есть программа декодер для ардуины. Посмотрите на гитхабе исходники и прошивки ардуиновские.


Я описание SBUS протокола - не нашел(((


Там может еще может быть по принципу:

[15 14 13 12 11 10 9 8][7 6 5 4 3 2 1 0]


15-11 адрес/номер канала

10-9 крен

8-7 тангаж

6-5 рысканье

4-1 тяга

0 - знак тяги


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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Не, чуток не так все. Наконец-то нашел спецификацию протокола: https://os.mbed.com/users/Digixx/notebook/futaba-s-bus-contr...

Оказывается пакеты не по 16 байт, а по 25. Хотя мне они вообще прилетают по 20. Парити EVEN, два стоп-байта.

показать ответы
0
Автор поста оценил этот комментарий

Для начала, проверьте отсутствие ошибок приема (ошибки стоп-битов, если есть - паритета, и т.д.), это должно быть битиками, гдето в регистрах состояния UART-а .Также неплохо бы посмотреть и осцилом, что там идет, какие уровни, нет ли затяжек фронтов зверских, и т.д. (возможно кстати что вы опять таки, работаете на выход, просто транзистор оказался достаточно мощным, чтобы "переупрямить" выход контроллера, и у вас что-то худо-бедно-глючно начало туда пролезать, как это проверять - я уже писал).

То есть изменение по одному каналу затрагивает сразу группу соседних байтов
Это очень похоже, что принимается со сдвигом на несколько бит, (из-за несовпадения скорости, либо иных настроек, либо электрических глюков согласования уровней).


P.S.

Вы опять пытаетесь "прыгнуть через ступеньку": впендюрить готовый блок, и не проверив доскональнейшим образом что там внутри происходит - пойти дальше. ЗДЕСЬ ЭТО ТАК НЕ РАБОТАЕТ.


P.P.S. Можно радоваться, что удалось задействовать UART, а не парится с программным разбором ШИМ-а. Судя по вашему изложению, эта задача обещала быть гораздо более геморойной.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

и, кстати, да, осцилографом проверил, нормально все инвертируется, схема вот такая (только без + на 3.3в):

Иллюстрация к комментарию
показать ответы
0
Автор поста оценил этот комментарий

Для начала, проверьте отсутствие ошибок приема (ошибки стоп-битов, если есть - паритета, и т.д.), это должно быть битиками, гдето в регистрах состояния UART-а .Также неплохо бы посмотреть и осцилом, что там идет, какие уровни, нет ли затяжек фронтов зверских, и т.д. (возможно кстати что вы опять таки, работаете на выход, просто транзистор оказался достаточно мощным, чтобы "переупрямить" выход контроллера, и у вас что-то худо-бедно-глючно начало туда пролезать, как это проверять - я уже писал).

То есть изменение по одному каналу затрагивает сразу группу соседних байтов
Это очень похоже, что принимается со сдвигом на несколько бит, (из-за несовпадения скорости, либо иных настроек, либо электрических глюков согласования уровней).


P.S.

Вы опять пытаетесь "прыгнуть через ступеньку": впендюрить готовый блок, и не проверив доскональнейшим образом что там внутри происходит - пойти дальше. ЗДЕСЬ ЭТО ТАК НЕ РАБОТАЕТ.


P.P.S. Можно радоваться, что удалось задействовать UART, а не парится с программным разбором ШИМ-а. Судя по вашему изложению, эта задача обещала быть гораздо более геморойной.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ну нет, тут я уже не перескакиваю, все досконально отладил. :)


Вот, например, устойчивый прием на действующей передаче со стабильными значениями. Если меняю что-то на передатчике - поток меняется, возвращаясь к прежним значениям.


Если бы было несовпадение скорости или битности то эти значения плавали бы постоянно (как и было пока я не подобрал все нужные параметры), так что тут я уверен что все правильно.

Так что осталось просто разобраться с битными масками.

Иллюстрация к комментарию
показать ответы
0
Автор поста оценил этот комментарий

Ну, поздравляю.

Не забудьте проверить одинаковость настроек порта: скорость, стоп-биты, паритет.

Он может что-то принимать, но с ошибками, при не совпадении настроек. И гадать вы будете долго.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

да, стараюсь. долбанные китайцы, нормальных даташитов нет

0
Автор поста оценил этот комментарий

Вообще, если уж так делать, то надо фильтром превращать шим в напряжение , и ловить аналоговым входом. Точнее будет.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

я, в итоге, собрал инвертор для UART, даже какие-то данные посыпались, сейчас пытаюсь их разгрести.

показать ответы
0
Автор поста оценил этот комментарий

2.8  по видимому очепятка ....  А так инвертер на транзисторе и вперед -

https://stackoverflow.com/questions/53889460/reading-data-fr...

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

да, собрал уже инвертер, даже работает. чуть не спалил плату опять, подав 3.3в через 10К.

Оказывается, и без этого 3.3в и 10к все работает.

0
Автор поста оценил этот комментарий

Предоставленная схема допускает замену элементов.

Берите хоть из советского радиоприемника

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

ага, собираю уже, сейчас буду пробовать.

1
Автор поста оценил этот комментарий
Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

показать ответы
0
Автор поста оценил этот комментарий

Если это тот осц, о котором я думаю, а это скорее всего haintek be6022, то у него нет разделительного кондера на входах, и он как бы всегда в режиме DC...

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

это Haintek PO2020

показать ответы
0
Автор поста оценил этот комментарий

https://ru.lmgtfy.com/?q=SBUS%20to%20UART&s=g


или курить маны по малине - возможно можно инвертировать pin uart.


ну или, наконец, использовать софтовый UART на GPIO. но вариант кривой.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Очень смешно. Именно такой запрос я делал еще 3 дня назад, пока ничего не нашел годного. Точнее, все что нашел - попробовал, безрезультатно.

показать ответы
2
Автор поста оценил этот комментарий
1, всегда, при любом уровне дискретизации.

Наводит на мысли, что это выход, и там висит 1. Попробуйте в соотв бит выходного порта записать 0. Если после этого, будет читаться 0 - значит точно так и есть. Ну и посмотрите уровень на этой линии, в уже скоммутированном состоянии.

Не, н понятно что если озадачиться, то покурю теорию и с уартом разберусь..

Не так там все и сложно. С физикой - вообще все элементарно.

Необходимо только разобраться "кто вход кто выход", и какие уровни, и какая полярность сигнала. Обычно выход, если он в логических уровнях, "в покое" должен висеть в 1, и при передаче посылки - "ходить в 0". Если это не так - значит надо инвертировать сигнал. Либо аппаратно: 74AC14 (74HC14, 74LVC14 ...), либо есть битик полярности, в настроечных регистрах UART. Как именно в малинке - не знаю, но в нормальных современных контроллерах это дело есть. С тем как отличит выход и вход - я вам уже писал.  Соответсвенно надо сделать 2 связи Tx-->RX - в одну сторону и Rx<--Tx  - в другую (ну и землю соединить). Проверить что там все не в 12в уровнях RS232 , иначе спалите контроллер нафиг (в противном случае - ставить ADM3202, и ей подобные микросхемы физики). После этого - курим мануалы на ресивер, чтобы найти как там со скоростью передачи , паритетом, стоп-битами. Контроллер настраиваем - аналогично. Если все совпало - должен прердавать и принимать байтики и можно разбираться с протоколом.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

1
Автор поста оценил этот комментарий

БЛИН ! Как же задолбали программисты с их "стандартными библиотеками" !

Если это GPIO - cначала читаете из порта. Тупо одной операцией. Смотрите что там читается.


Если это  UART - надо сперва разобраться с полярностью и уровнями сигнала. Не перепутать Tx  и Rx :).  Осцил у вас, как я вижу, есть.

Можно проверить эти ноги  в режиме GPIO (что читаются не только нули и не только единицы).

Потом отдельно инициализировать UART, в контроллере, и посмотреть что там передается и принимается. На этом этапе надо разобраться с какой скоростью, сколько стоп-битов, какой паритет, и прочие параметры.

Только после этого есть смысл чегото пытаться читать из порта данных.

После этого - начинаем присобачивать библиотеки, и разбираться с протоколом.

  Пытаясь начать сразу "сверху" - вы вносите огромное количество элементов неопределнности.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
БЛИН ! Как же задолбали программисты с их "стандартными библиотеками" !
ну, на этом весь девелопмент строится :)

Если это GPIO - cначала читаете из порта. Тупо одной операцией. Смотрите что там читается.

1, всегда, при любом уровне дискретизации.

если это UART - надо сперва разобраться с полярностью и уровнями сигнала. Не перепутать Tx и Rx :). Осцил у вас, как я вижу, есть.
честно говоря, за все 20 лет программерства, serial прошел мимо меня, поэтому я вообще не очень понимаю что там и как. Даже PPM и  PPM мне сильно понятнее.

Не, н понятно что если озадачиться, то покурю теорию и с уартом разберусь..

Я просто надеялся что для такой простой задачи есть стандартные решения, без необходимости вникать в суть

показать ответы
0
Автор поста оценил этот комментарий

Я всё толкую про interrupt(прерывание). Без перекладывания реагирования на железо результат немного предсказуем.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

ну, в малинке такого нет, там надо дискретизацию делать и смотреть уровни. других вариантов нет.

показать ответы
0
Автор поста оценил этот комментарий

Осцилограммы сохраняются при подключении к малинке ? Или это на голом выходе ресивера ? может нога малинки находится в режиме выхода ?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

это на выходе ресивера, к малинке осци не подключал. там программно смотрю, нет ничего.

показать ответы
0
DELETED
Автор поста оценил этот комментарий

не надо его считать, он должен быть прописан в datasheet. "стандартное решение"  - это datasheet и курс электротехники, законы. сорри, мы сейчас разговариваем на пальцах., нет конкретики. но я сам постоянно сталкиваюсь с тем, что как бы не считал, что в моей схеме виновата микросхема (как элемент), но всегда (в 100%) оказываются проблемы в схеме, в  методике подключения или использования того или иного элемента.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

Конечно, куда проще купить готовые контроллеры, подсоединить пару проводков и радоваться. Но там логики ноль, а мне, как чуток программеру, хочется процесс контролировать. И, как ни странно, с программной точки зрения все хорошо и работает замечательно. Затык именно с долбанным аналоговым RC, чтоб его..

0
Автор поста оценил этот комментарий

Фронт ловится прерыванием? А то можно и прозевать. Я хз насколько там проц загружен рутиной.

Разберри кажется слишком крутой для вездехода.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Разберри кажется слишком крутой для вездехода.
ну, там не только и не столько им управлять с RC надо, сколько он в автономном режиме будет (патрулирование, распознование и тд). Этот вопрос решен уже. Поэтому и распберри. Но ручное управление тоже хочется.

Фронт не ловится вообще никак, не вижу в упор. Точнее, наоборот, вижу всегда 1. Я уже подумал что Zero не хватает, сейчас это на 4B, там с мощностью все норм, все равно 1 постоянно.
показать ответы
0
Автор поста оценил этот комментарий

Подтяжку до 3.3в надо делать не транзистором а резистором. Когда подключает серву там наверное своя подтяжка стоит вот и работает

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

какой номинал следует попробовать ?

показать ответы
0
DELETED
Автор поста оценил этот комментарий

ну как минимум загуглить, что такое pullup резистор. во вторых, не понятна схема подключения. обычно, любой информационных вход/выход сопровождается pullup резистором. и судя по симптомам (описанию), мне кажется(!), что дело не в электронике, а в электротехнике,  тобишь схеме включения .

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

я уже гуглил, принцип понятен, непонятно как посчитать номинал именно для pull-up.

Если честно, я сильно удивлен самой ситуацией, которая более чем стандартна, но готовых решений нет. Rasp Pi вроде используется в тысячах проектах с моторами и RC, почему нет стандартного решения ?

показать ответы
0
Автор поста оценил этот комментарий

Безотносительно того, что по SBUS подключить и программно обрабатывать сигнал проще, лишний раз гонять цифра (радиотракт) -> аналог (ppm/pwm) -> цифра (rpi) - плохая идея.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Согласен, но на 10м пине (UART), используя стандартные библиотеки, я ничего не вижу. При том что сигнал есть. Пробовал на двух платах (одну спалил, в итоге).

показать ответы
1
Автор поста оценил этот комментарий

нафига ? автор пишет, что ресивер имеет SBUS выход.
SBUS это по сути UART

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

вроде пишут что sbus это инвертировнный UART. я пробовал его прочитать напрямую, глухо. Есть годный рецепт ?

показать ответы
4
Автор поста оценил этот комментарий

Осциллограф показал 3.3в, по делениям посчитать можно. 1.3 это среднее пвм-ное. Приём надо делать на прерывании по возрастанию и спаду фронта. В прерывании и считать длительности. Для начала подцепить кнопку в качестве имитации и понажимать, пуляя результатами в компорт, ну или лампочку позажигать для проверки правильности настройки порта и обработчика прерываний.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

кнопку я вижу. обрабатываю норм на GPIO 7, например. тыкал. а вот PPM в упор не вижу.

показать ответы
1
DELETED
Автор поста оценил этот комментарий

pullup резисторы? не?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

а поподробнее ? Я нуб

показать ответы
2
Автор поста оценил этот комментарий

если ресивер умеет в SBUS, то фигли его через цифровой SBUS к малине и не подключить, а не геммороиться с аналоговыми PWM/PPM на GPIO ?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

на UART, имеется в виду ? Насколько я понял, он инвертированный, то есть все равно надо колхозить, а знаний не хватает. Если есть годный рецепт - с удовольствием попробую

показать ответы
1
Автор поста оценил этот комментарий

На осцилографе у вас включена связь по переменному току, потому не понятно, как сигнал расположен относительно земли. Маловероятно конечно, но может он "в минус ходит ", или наоборот смещен сильно в сторону питания, потому и воспринимается всегда как "1".

раскрыть ветку (1)
Автор поста оценил этот комментарий

там вроде как раз -1 +1 на оси, то есть на графике именно 1.3в в плюс

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества