Помогите с neoway m590

Тема в разделе "Arduino & Shields", создана пользователем one_quaker, 17 июн 2016.

Метки:
  1. one_quaker

    one_quaker Нуб

    Всем привет, бьюсь 4ый день с этим модемом. Периодически теряются символы в терминале, самый относительно-стабильный результат удалось получить на скорости 38400.
    Модем подключен через SoftwareSerial, т.к. arduino nano умеет только один аппаратный serial, хотя врядли в нем проблема, т.к. ошибки в передаче данных случаются даже на скорости 2400.
    Питание перепробовано разное, уровни ардуина TX -> модем RX согласованы через мосфет, в обратную сторону подключил напрямую через 200 Ом резистор.
    Схема согласования как на этом видео в последнем рисунке


    В случайный момент времени между ардуиной и модемом теряются символы, из-за чего весь код разваливается, потому что в код завязан на определенный ответ.
    При 9600 теряются так https://postimg.org/image/91u27uumf/ , с 38400 только иногда проскакивают ошибки.

    Собственно мой говнокод https://github.com/one-quaker/remote_relay/blob/master/gsm_relay.ino , критика приветствуется. Так и не понял как ловить OK/ERROR от модема, возможно это добавило бы коду стабильности, но даже ERROR может прилететь как ERRO или ERRSR... Также не понял как лучше парсить строки.
    У кого есть большой опыт с gsm, помогите [​IMG]
     
  2. DIYMan

    DIYMan Гуру

    У меня RX модема посажен через резистивный делитель, ТХ модема - напрямую к ардуине, питание - компьютерный БП, скорость работы 57600 (юзаю аппаратный UART, для SoftwareSerial эта скорость большая, конечно).

    Совет: попробуйте сделать через резистивный делитель от ТХ ардуины на RX модема, это раз. Два - качественное питание. Три - снижайте скорость работы на 9600.

    И, самое главное, убедитесь, что модем у вас настроен на ту же скорость, что вы юзаете в ардуине. Выясняется просто: подключаем модем через USB-TTL-конвертер к компу, открываем любую терминальную программу, соединяемся с портом на всех возможных скоростях и отправляем в порт команду AT (команда должна заканчиваться переводом строки). Если модем ответит "OK" - бинго, скорость найдена. Дело в том, что они на разные скорости бывают прошиты - у кого-то на 9600, у кого-то - 38400.

    Скорость перешивается командой AT+IPR, емнип.
     
  3. one_quaker

    one_quaker Нуб

    Ок, попробую резистивный делитель. Питание сейчас от 12В 20А импульсного блока питания через понижающий преобразователь вот такой http://ru.aliexpress.com/item/1PCS-...djustable-Step-down-Power-C1/32408413526.html
    на вход преобразователя добавил электролит 10мкФ, но видимой пользы от него нет. На плате модема распаян танталовый кондер + 2 поменьше рядом с пинами питания модема (распаяны вместе с модемом изначально).
    через at+ipr скорость и менял, на 38400 более длинные строки передаются без ошибок, в то время как на 9600 любая строка длиннее 12-15 символов уже с ошибками против 30-40 символов на скорости 38400, не знаю почему так
     
  4. DIYMan

    DIYMan Гуру

    Попробуйте ноги поменять с 2,3 на чего-нибудь другое, для начала. Если строка бьётся мусором - лезут помехи, ставьте фильтры по питанию, укорачивайте соединительные провода, юзайте ферритовые кольца. Проверяйте контакты, пропай, отсутствие флюса, короче - проблема может быть везде.

    На код глянул, сходу криминала не нашёл.
     
  5. one_quaker

    one_quaker Нуб

    А чем не угодили 2, 3 ноги, программный сериал вроде ж везде работает. Сейчас все распаяно на макетке, провода rx/tx сантиметров по 8 максимум, феритовых колец под рукой нет...
    Буду перепаивать)))
    Можно подробнее о фильтрах питания? Кондеры перед модемом похожи на схему из даташита page 9 http://cyntech.co.uk/downloads/neoway-m590-hardware-design-manual-v1.pdf
    Код мне не нравится тем, что ломается от потерянного ответа ATH0 например или при отправке смс может залипнуть до char(26).
     
  6. DIYMan

    DIYMan Гуру

    Вам же ничего не мешает попробовать другие ноги? Попробуйте.

    По поводу кода - криминала не увидел по написанию, по сути, конечно, он есть - везде delay. Я для таких задач (общение с железками в формате "запрос-ответ") предпочитаю исключительно конечные автоматы, но код там сильно сложнее: https://github.com/Porokhnya/GreenhouseProject/blob/master/Main/SMSModule.cpp

    По ссылке код полного конечного автомата, правда, с заточенной под мой проект спецификой, но представление о порядке действий дать может. Там нет никаких delay, всё базируется только на состояниях.
     
  7. one_quaker

    one_quaker Нуб

    Вообщем попробовал все что вы посоветовали, ничего не изменилось, динные сообщения лучше всего проходят на скорости 38400. Проблему нашел в другом, у меня просто залипало реле, потому что npn-транзистор стрелкой смотрел не в сторону земли, из-за чего реле просто "залипало" в открытом состоянии. Спасибо за помощь :)