Arduino Serial - пусто, SoftwareSerial - данные получаю

WhiteWind

Друзья, доброго дня!

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

Я провобал написать ping-pong на двух ардуинках, чтобы они байт туда-сюда пересылали и моргали диодом соответственно. Все работает, друг дружку ардуинки видят через хардварный сериал, а вот APM не хотят. Скорость всегда 57600, то есть если уж что и не должно работать из-за тормозов, то SoftSerial, но никак железный. Примечательно, что AltSoftSerial тоже не работает ((

Куда копать уже не понимаю, может знатоки подскажут? Может я чего-то об ардуинках не знаю?

emax

а APM данные вообще шлет? Осцилом смотрели или на minimOSD параллельно подключенной что-то отображается?
Не все прошивки APM шлют данные по мавлинку сразу, надо в МП включить галочку. Или слать навстречу heartbeat.

WhiteWind

Эдик, так вся загвоздка как раз в том, что через софтварный сериал пакеты приходят в полном изобилии. Надежность хромает, так как софтварный не тянет 57600 практически. Стоит поменять определение переменной сериал порта на хардварный и переткнуть, как в ответ приходит тишина и редкие отдельные биты данных. При этом мой код шлет запросы на получение данных, и в MP я все настраивал так же, как для OSD делал, чтобы и без запросов данные сливались. Сейчас попробую параллельно модему почитать, что придет. Осциллографом, вот, пока не обзавелся, а времени собрать свой из мобилы и подручного хлама времени не хватает…

emax

Используется язык ардуино?
Предположу невероятное: если инициализировать последовательный порт в АВР на 57600 с кварцем 16 Мгц используя х2 и без него ошибка получается, судя по калькулятору +2.124% и -0.794%. Поэтому если в АПМ одна инициализация, а в библиотеке ардуно другая - ошибка становится критической…,
Да и как в ардуино сделан прием, по прерываниям с кольцевым буфером или по опросу, может здесь пропуски?
Я писал просто на С, все принимается без проблем.

2 months later
WhiteWind
emax:

с кварцем 16 Мгц используя х2

Эдик, спасибо за интересную версию! Единственная беда: я, худо-бедно - программист, но я очень плохо разбираюсь в радиоэлектронике. Нет, транзистор от конденсатора я отличаю, конечно, но вот от мосфета - не факт. Да и тема с кварцами для меня как большое загадочное нечто, я только суть улавливаю. К слову, возможно, что ваша версия очень верная: исходники, на основе которых я все это пытался наваять, были собраны как раз на C, но вот с ним у меня некоторые проблемы (опыта мало, не загружал и не компилировал ничего для ардуинок вот так), поэтому пользую ардуино ide.

К слову, проблему так и не решил, пока забросил. На днях снова поковываю, но склоняюсь к teensy LC, там все работало “изкоробки” на ура.

Dinotron

Оченно интересно. Про кварц правильно написали, ошибка растёт, но до критической не доходит ИМХО. Ловил пакеты во всём диапазоне до 115200. Другое дело как Вы в скетче прописали приём посылки. Если последовательно с парсером и выводом, то половину точно потеряет. Издержки IDE.