#1 2016-06-17 20:55:27

freeman
Учасник
З  Киев
Зареєстрований: 2014-09-16
Повідомлень: 82

Помогите с neoway m590

Всем привет, бьюсь 4ый день с этим модемом. Периодически теряются символы в терминале, самый относительно-стабильный результат удалось получить на скорости 38400.
Модем подключен через SoftwareSerial, т.к. arduino nano умеет только один аппаратный serial, хотя врядли в нем проблема, т.к. ошибки в передаче данных случаются даже на скорости 2400.
Питание перепробовано разное, уровни ардуина TX -> модем RX согласованы через мосфет, в обратную сторону подключил напрямую через 200 Ом резистор.
Схема согласования как на этом видео в последнем рисунке https://www.youtube.com/watch?v=t-yuYasIKtY
В случайный момент времени между ардуиной и модемом теряются символы, из-за чего весь код разваливается, потому что в код завязан на определенный ответ.
При 9600 теряются так https://postimg.org/image/91u27uumf/ , с 38400 только иногда проскакивают ошибки.

Собственно мой говнокод https://github.com/one-quaker/remote_re … _relay.ino , критика приветствуется. Так и не понял как ловить OK/ERROR от модема, возможно это добавило бы коду стабильности, но даже ERROR может прилететь как ERRO или ERRSR... Также не понял как лучше парсить строки.
У кого есть большой опыт с gsm, помогите smile

Остання редакція freeman (2016-06-17 20:56:18)

Неактивний

#2 2016-06-17 23:35:50

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Помогите с neoway m590

привет,  проверьте парити, например конфликт even / none

Неактивний

#3 2016-06-17 23:53:00

freeman
Учасник
З  Киев
Зареєстрований: 2014-09-16
Повідомлень: 82

Re: Помогите с neoway m590

а как его проверить?

Неактивний

#4 2016-06-18 13:32:42

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Помогите с neoway m590

по частям запускайте
повторите это
http://radiolaba.ru/microcotrollers/gsm … eniya.html
   

AT+IPR=9600
at+enpwrsave=0

Неактивний

#5 2016-06-19 00:07:03

Igor Kovba
Учасник
Зареєстрований: 2016-06-18
Повідомлень: 3

Re: Помогите с neoway m590

привет.

у SoftwareSerial есть одна проблема....если во время передачи данных (от mcu в модуль) модуль что-нибудь пошлет (типа OK)....это вызовет int2 и передаваемые данные потеряются sad

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

есть еще чудесная библиотека AltSoftSerial она лучше работает для вашей задачи

удачи.

Неактивний

#6 2016-06-19 00:29:53

Igor Kovba
Учасник
Зареєстрований: 2016-06-18
Повідомлень: 3

Re: Помогите с neoway m590

могу поделиться функцией, которая посылает команду в модем и жет ответ.... может вам поможет....
пример использования .... формат: "команда","ответ", время ожидаия в секундах, кол-во повторных попыток, читить буфер);
надеюсь вы понимаете что \" это символ "
if (!modem_write("AT+SAPBR=3,1,\"Contype\",\"GPRS\"","OK",1,3,true ))
    if (!modem_write("AT+SAPBR=3,1,\"APN\",\"www.ab.kievstar.net\"","OK",1,3,true ))
      if (!modem_write("AT+SAPBR=1,1","OK",5,3,true ))



в начале
Serial.begin(9600);
debugSerial.begin(38400);
#define DEBUGMODE           4

//-------------------------------------------------modem_write---------------------------------------------
boolean SMARTBHIVE::modem_write(char command[], char answer[], byte waitTime, byte repeet, boolean after_read){
while(repeet>0){
  #if DEBUGMODE < 5 
debugSerial.print(F("modWrite>\""));debugSerial.print(command);debugSerial.print(F("\" wait:"));debugSerial.print(waitTime);
    debugSerial.print(F("for:\"")); debugSerial.print(answer); debugSerial.print(F("\" left:")); debugSerial.print(repeet);
  #endif
  Serial.println(command);
  gsm_read_buf ="";
  unsigned long ii=millis();
  while ((millis()-ii)/1000 < waitTime){
    if (Serial.available()) gsm_read_buf += char(Serial.read());
    if (gsm_read_buf.endsWith(answer)){
      #if DEBUGMODE < 5 
        debugSerial.print (F("->DONE in:"));
        debugSerial.println ((millis()-ii));     
      #endif
      if (after_read){
        unsigned long iii=millis();
        while ((millis()-iii) < 200) if (Serial.available()) gsm_read_buf +=char(Serial.read());
      };
      #if DEBUGMODE < 5
        debugSerial.println(gsm_read_buf);
      #endif
      return (0);
    };
  };
  #if DEBUGMODE < 5
    debugSerial.println(F(">TIMEOUT"));
  #endif
  #if DEBUGMODE < 5
    debugSerial.println(gsm_read_buf);
  #endif
repeet--;
};
#if DEBUGMODE < 7
    debugSerial.println(F("modWrite>FAIL"));
  #endif
  return (1);
};

Остання редакція Igor Kovba (2016-06-19 00:35:52)

Неактивний

#7 2016-06-20 13:52:09

freeman
Учасник
З  Киев
Зареєстрований: 2014-09-16
Повідомлень: 82

Re: Помогите с neoway m590

Ого тут насоветовали. За код спасибо, попробую применить.
А с SoftwareSerial действительно похоже беда, надо брать ардуину с двумя аппаратными UART, что посоветуете?
Я же правильно понял что использовать пины tx rx для общения с модемом не получится?

Неактивний

#8 2016-06-20 13:53:51

freeman
Учасник
З  Киев
Зареєстрований: 2014-09-16
Повідомлень: 82

Re: Помогите с neoway m590

NoName пише:

по частям запускайте
повторите это
http://radiolaba.ru/microcotrollers/gsm … eniya.html
   

AT+IPR=9600
at+enpwrsave=0

Это уже пробовал, спасибо

Неактивний

#9 2016-06-20 14:18:49

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Помогите с neoway m590

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

Igor Kovba дал хорошее решение,
так каков нынче статус? )

Неактивний

#10 2016-06-20 18:49:28

freeman
Учасник
З  Киев
Зареєстрований: 2014-09-16
Повідомлень: 82

Re: Помогите с neoway m590

Even не помог, ограничился скоростью 38400, на ней как ни странно меньше ошибок, думаю сам модем немного неадекватный.
Как будет на чем, попробую аппаратный UART ибо лень отпаивать модем и тестировать напрямую с компьютером.

Неактивний

#11 2016-06-20 22:03:20

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Помогите с neoway m590

зачем отпаивать? есть готовое устройство. если serial uart можно использовать как IO с компа , то делаете перенаправление,
но мой опыт подсказывает, если не разберетесь с передачей данных устройство будет работать только на столе ( и то с глюками,

Неактивний

#12 2016-06-20 23:21:59

freeman
Учасник
З  Киев
Зареєстрований: 2014-09-16
Повідомлень: 82

Re: Помогите с neoway m590

Сейчас это ардуино нано + модем neoway m590, ардуина с модемом общается через softwareserial и с компьютером через mini-usb (usb2ttl на микросхеме ch*** кажется). В коде все из Serial пересылается в softwareserial и наоборот. Не совсем понял с чем нужно разобраться smile

Неактивний

#13 2016-06-20 23:50:00

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Помогите с neoway m590

это и нужно было сделать )
https://github.com/one-quaker/remote_re … _relay.ino
слабо похоже на чистый forward )

Неактивний

#14 2016-06-21 11:04:02

freeman
Учасник
З  Киев
Зареєстрований: 2014-09-16
Повідомлень: 82

Re: Помогите с neoway m590

Тестировал на чистом форварде, мне другое непонятно, ардуино через softwareserial какую-то четность вообще использует? Как это настроить?
То что в Serial команды возвращаются с ошибками это ладно, главное чтобы они до модема доходили без ошибок. Видимо самый нормальный вариант - не использовать softwareserial smile

Неактивний

#15 2016-06-21 11:18:14

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Помогите с neoway m590

Limitations

The library has the following known limitations:
If using multiple software serial ports, only one can receive data at a time.
Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
Not all pins on the Leonardo and Micro support change interrupts, so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
On Arduino or Genuino 101 the current maximum RX speed is 57600bps
On Arduino or Genuino 101 RX doesn't work on Pin 13
If your project requires simultaneous data flows, see Paul Stoffregen's AltSoftSerial library. AltSoftSerial overcomes a number of other issues with the core SoftwareSerial, but has it's own limitations. Refer to the AltSoftSerial site for more information.

A SoftwareSerial library allows for serial communication on any of the Nano's digital pins.

https://github.com/arduino/Arduino/blob … al.cpp#L32

красиво пишут библиотеки )
мои домыслы -

library allows for serial communication on any of the Nano's digital pins.
это точно  не хорошо
нормальный програмный uart получается только при использовании апаратных фишек   таймера  ( compare / capture  )
любая нога - это вероятно перерывания с копированием значения таймера -, относительно высокие скорости - дают большую ошибку

итак - понизить скорость до 4800
установить в модеме скорость 4800  ( +ipr=4800 )
и дествительно избавляться от стрёмного порта )


обязаловка для модемов если не указано иное
http://www.gaw.ru/html.cgi/txt/publ/pow … levels.htm

либо запитайте вашу ардуино от 2.8В  она работает от такой напруги?

Остання редакція NoName (2016-06-21 12:26:05)

Неактивний

#16 2016-06-23 21:45:33

freeman
Учасник
З  Киев
Зареєстрований: 2014-09-16
Повідомлень: 82

Re: Помогите с neoway m590

Уровни согласовывал через мосфет, потом сделал обычный делитель, разницы нет от слова вообще. Думаю надо пробовать hardware serial, пока правда не на чем sad

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму