Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Использование модуля SIM800l


Использование модуля SIM800l

Сообщений 61 страница 90 из 224

61

команду считывания времени есть. Но операторы РФ (по крайней мере, Питер, Москва, Брянск, Орёл, Курск) не выдают достоверное время и дату, там или мусор, или какая-то древняя дата и время.
В Беларуси какой-то из операторов давал точное время (уже не помню какой).
В Украине не помню, вроде тоже кто-то выдавал.
Я ставлю на свои платы часы dallas и батарейку -- так надёжнее :)

0

62

boida если планируются платные операции с сим модуля, то можно брать время через GPRS.
Если нет, то можно парсить время и дату из входящих смс, информация о времени прихода смс.

0

63

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

0

64

Подскажите что за ответ модуля :
+CMGS: 1
Просто номер отправленного сообщения или отправленное которое сохранилось на симки?
Терминал:
AT+CMGDA="DEL ALL"

OK
AT+CMGS="+7904506ХХХХ"

> OPEN BOX
>
+CMGS: 10

OK
AT+CMGDA="Del Sent"

OK
AT+CMGS="+7904506ХХХХ"

> CLOSE BOX
>
+CMGS: 11

OK
AT+CMGDA="Del Sent"

OK

Видно, что с каждым отправленным сообщением цифра увеличивается,
если это сохраненное в сим карте отправленное тогда почему не помогает DEL ALL и DEL SENT??

0

65

Программа почему то не может распознать инфу пришедшую от модуля.

Getline:                                                    ' подпрограмма для разбора сообщения модуля
   Sk = ""
   Do
      B = Inkey()                                           ' берем символ из буфера в формате ASCII
      Select Case B
         Case 0 : Exit Do                                   ' если в буфере нет символа - выход!
         'Case 13              ' возврат каретки (Enter)                  'возврат каретки (Enter)
         Case 10 : If Sk <> "" Then Exit Do                 'конец строки,  выходит из подпрограммы
         Case Else : If B > 31 Then Sk = Sk + Chr(b)        ' составляем строку
      End Select
   Loop
Return

Readsms:
' Flushbuf
'R = Ischarwaiting()                                         'проверка наличия сообщения в буфере
' If R = 1 Then
    ' Gosub Getline
     Waitms 300
     Gosub Getline                                          'уходим на подпрограмму и смотрим что пришло
     Print "Buf: " ; Sk
    If Sk <> "" Then

     Z = Left(sk , 4)                                       'вытаскиваем левые 4 символа
        If Z = "+CMT" Then                                  'если +СМТ, значит пришло смс которое надо прочитать
           Sms_num = Right(sk , 2)                          'смотрим какая по счету смс
           Stmp = Left(sms_num , 1)                         'смотрим первый символ слева
               If Stmp = "," Then
                 Sms_num = Right(sk , 1)                    'если там "," значит берем первый символ справа. это и будет номером пришедшего смс
               End If
           Wait 1....


Отправляю с телефона сообщение на модуль
Терминал:
+CMTI: "SM",1
Buf: +Ј%й "SMЉj   <<<<<<------- Это то что вернулось от Getline, совсем не то что должно.
Buf:
Buf:
Buf:
Buf:
Buf:
Buf:
Buf:
Buf:
Buf:

Настройки модуля, может в них что ни так.

Код:
Print "AT"
Wait 5

Print "AT+IPR=19200"                                        'включаем текстовый формат сообщений
 Wait 1
'Print "AT+GSMBUSY=1"                                           'запрет входящих звонков
'Waitms 500
 Print "AT+CSCS=" ; Chr(34) ; "GSM" ; Chr(34)               'кодировка сообщений
Wait 1
'Print "ATE0 "                                               'ответ без эхо
Wait 1
Print "ATV1 "                                               'ответ без эхо
Wait 1
Print "AT+CSCB=0"                                           'включаем текстовый формат сообщений
Wait 1
Print "AT+CMEE=0"
Wait 1
Print "AT+CMGF=1"                                           'включаем текстовый формат сообщений
Wait 1
Print "AT+CLIP=1"                                           'определение номера входящего вызова
Wait 1
 'Print "AT+CNMI=1,2,2,1,0"
Wait 1

Led4 = 1

 Wait 5
Print "AT+CMGDA=" ; Chr(34) ; "DEL ALL" ; Chr(34)           'удаление всех смс
 Flushbuf
 Wait 5

0

66

+CMGS: 10
10- внутренний идентификатор сообщения. Описание в GSM 03.40 TP-Message-Reference in integer format.

TP-Message-Reference (TP-MR)

The TP-Message-Reference field gives an integer representation of a reference number of the
SMS-SUBMIT or SMS-COMMAND submitted to the SC by the MS. The MS increments
TP-Message-Reference by 1 for each SMS-SUBMIT or SMS-COMMAND being submitted. The value to
be used for each SMS-SUBMIT is obtained by reading the Last-Used-TP-MR value from the SMS Status
data field in the SIM (see TS GSM 11.11) and incrementing this value by 1. After each SMS-SUBMIT has
been submitted to the network, the Last-Used-TP-MR value in the SIM is updated with the TP-MR that
was used in the SMS-SUBMIT operation. The reference number may possess values in the range 0 to
255. The value in the TP-MR assigned by the MS is the same value which is received at the SC.
In the case where no acknowledgement or an appropriate RP-Error is received in response to an
SMS-SUBMIT or SMS-COMMAND, then the MS may automatically repeat the SMS-SUBMIT or
SMS-COMMAND but must use the same TP-MR value. The number of times the MS may repeat the
SMS-SUBMIT or SMS-COMMAND is an implementation matter.
If all automatic attempts fail (including the case where no automatic repeat is provided), the user shall be
informed. The failed message shall be stored in the mobile in such a way that the user can request a
retransmission using the same TP-MR value, without needing to re-enter any information. Such storage
need only be provided for a single failed message, the one most recently attempted.
The SC may discard an SMS-SUBMIT or SMS-COMMAND which has the same TP-MR value as the
previous SMS-SUBMIT or SMS-COMMAND received from the same originating address.
A phase 2 or later ME using a phase 1 SIM cannot read or update the TP-Message-Reference from/to the
SIM, and so the ME shall always retain the Last-Used-TP-MR value in its own memory, to be used only in
the case of a phase 1 SIM.
The SMS-STATUS-REPORT also contains a TP-Message-Reference field. The value sent to the MS will
be the same as the TP-Message-Reference value generated by the MS in the earlier SMS-SUBMIT or
SMS-COMMAND to which the status report relates.

В вашем случае можно не обращать внимания.

По приему сообщения, если в терминале каракули, то нужно проверить скорость соединения, проблемы с таймингами. Процедура Getline: типовая.

0

67

MACTEPok
Насчет таймингов, это что? скорость передачи UART?
Терминал:
COM1
19200
8
1
None
None

Мега:
$crystal = 14745600
$baud = 19200
$hwstack = 64
$swstack = 64
$framesize = 64
Config Serialin = Buffered , Size = 60 
Enable Interrupts
Может здесь что то не так?

SIM800L:
Print "AT+IPR=19200"
А вот при вводе
AT+ICF=3,3
Модуль отвечает EROR

0

68

A в фьюзах есть, что то отвечающее за передачу данных?
Я изменил там только бит отвечающий за работу то внешнего кварца.

0

69

boida написал(а):

A в фьюзах есть, что то отвечающее за передачу данных?

Еще JTAG лучше отключать, если не используется.
Если он (JTAG) есть в данном МК.
Словил однажды баги с портом С на Мега32... ;)

0

70

boida написал(а):

A в фьюзах есть, что то отвечающее за передачу данных?
Я изменил там только бит отвечающий за работу то внешнего кварца.

Вы вообще на модуль информацию читали? Все модули SIM при первом включении входят в режим автопределиния скорости передачи, об этом можно почитать например тут: https://elschemo.ru/dlya-nachinayushhix … t-komandy/
Только после определения скорости работы можно приступать к полноценному взаимодействию с модулем.

+1

71

RDW
То есть после включения нужно выдержать паузу, а потом спрашивать, у меня стоит Wait 5, мало?

По фьюзам, у меня стоял CKOPT =1 Это как я понял для частоты тактирования до 8 МГц, сменил на 0.

0

72

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

0

73

boida
При включении настройки.

Код:
'предварительные настройки
'********************************************************
Wait 10                                                          'Дай подключиться к сети, и зарегиться в ней
AT                                                                 'И есть автоопределение скорости USARTR
Waitms 50
AT                                                                 'Первыя попытка почемуто Error. Вторая всегда ОК.
Waitms 50
Print "AT+CMGF=1"                                           'включаем текстовый формат сообщений
Waitms 50
Print "AT+CLIP=1"                                           'определение номера входящего вызова
Wait 3
Led = 0
Flushbuf

0

74

boida
Из Getline выкинь.
Case 0 : Exit Do                                   ' если в буфере нет символа - выход!
'Case 13              ' возврат каретки (Enter)                  'возврат каретки (Enter)
Вообще эти строки. Действительно есть правда. На 8 они не мешают, на 328 пруга вешается.
Readsms: Можешь вообше из программы убрать. У меня висит, но кажется мертвым грузом. Почему то
R = Ischarwaiting()  не сильно хотит работать.
По этому у мну добавлено.

Код:
    Gosub Readfirstsms
'принудительное чтение первой смс из памяти
'это необходимо если прошляпили приход смс, во время выполнения одной из подпрограмм
'==========================================================================================
Readfirstsms:
  Print "AT+CMGR=1"                                         'команда на чтение смс
  Waitms 10
  Getline Sk
  Waitms 10
  Getline Sk
  Number = Mid(sk , 22 , 12)                                'достаем номер с которого пришла смска
  Sms = Sk                                                  'здесь первая строка ответа
  Sms = Left(sms , 4)

   If Sms = "+CMG" Then

    Waitms 10
    Getline Sk                                              'смотрим, что в этой смс
    Sms = Sk
    Sms = Left(sms , 1)                                     'берем только первые 1 символов из смс (по кол-ву знакомест в строке)
 Waitms 100
  Print "AT+CMGDA=" ; Chr(34) ; "DEL ALL" ; Chr(34)         'удаление всех смс
  Gosub Checksms
 End If

  Waitms 100
  Flushbuf                                                  'очищаем буфер

Return

Это со включенным эхо.
Вообще сколько строк тебе выдает SIM800l очень хороше считать по терминалу. НО, НО эхо должно включено быть. Иначе пустые строки не посчитаешь. С эхо ОК, счет ведешь.

Отредактировано rom-i (2019-05-31 19:14:36)

0

75

После смены CKOPT с 1 на нуль символы в терминале стали отображаться корректно но по-прежнему со входящей смс считывался только номер отправителя.
Потом увеличил буфер уарта вдвое и вот оно счастье.
rom-i
Readsms: чаще срабатывает чем нет но если нет его должен подхватить Readfirstsms: , правда я до него еще не дошел.
R = Ischarwaiting()  не сильно хотит работать.
У меня вот так работает
Gosub Getline                                         
If Sk <> "" Then

В моем sim800L Есть внешний ресет и я его подключил, нужно теперь сочинить когда им дергать.
В модуле есть команда
AT+CPAS
если в ответ приходит не нуль то можно перезагружать.
0 – готов к работе
2 – неизвестно
3 – входящий звонок
4 – голосовое соединение

Как еще можно отследить зависание модуля?

0

76

Сделал проверку зависания вот так:

Код:
'Перезагрузка зависшего GSM модуля
Rese:
Print "AT+CPAS"
Waitms 300
Gosub Getline
Re = Left(sk , 5)
If Re = "+CAPS" Then
Re = Right(sk , 1)
If Re <> "0" Then
Res = 1
Waitms 300
Res = 0
Gosub Setup
End If
End If
Return

Не нравится, как еще можно отследить зависание?

0

77

Подскажите пожалуйста код значка градуса,  167 и 176 не то.

0

78

boida
Знака градуса не существует. Перебрал все возможное по таблице АСКИ. Остановился на верхней запятой 10.3'C.
Приемлемо.
Про обрывки СМС в курсе. Есть такая тема. Дольше пришлось с этим бороться на 8. Зависит от частоты МК. Меньше 16мГц не стоит даже заморачиваться. Куски предидущих строк достануться следующим.
328 побыстрее. По этому может сложиться впечятление, что по разному работают. Но в итоге бред.
Лучьший вариант идет для обеих МЕГ.

Код:
$regfile = "m328pdef.dat"
$crystal = 16000000                       
$baud = 19200
$hwstack = 160
$swstack = 160
$framesize = 60

Declare Sub Getline(s As String)
Declare Sub Flushbuf()

Config Serialin = Buffered , Size = 120

Но есть проблема в количестве символов при объявлении переменных String.
В предидущем 44 посте выложина нормальная инфа по предустановкам. Разборе СМС.

Отредактировано rom-i (2019-06-01 00:53:23)

0

79

boida написал(а):

Подскажите пожалуйста код значка градуса,  167 и 176 не то.

Это в кодировках Windows.
Попробуйте 248.

0

80

Nord
SIM800l примет все равно закорючки. Всю таблицу перебрал.
http://sd.uploads.ru/t/DtH7l.png
Единственный подход.
Уже давно все привыкли к Китайским девайсам. Хороше хоть на транслит знаки, и цыфры передает.
Это же клон довольно дорогого SIM900 оригинального. У Китайцев он довольно сбойный получился. Но SIM800l безотказная, абсолютно рабочая вещь.
Куда не попадя тыркал. В морозильнике температуру передовал. Сеть держит на эту пружинку в любом заземленном электрошкафу который стоит в железобетонном повале.
Мне нравиться.

Отредактировано rom-i (2019-06-01 01:57:40)

0

81

rom-i написал(а):

SIM800l примет все равно закорючки. Всю таблицу перебрал.(Сегодня 01:57:40)

Ну так все зависит от кодировки, кмк. ;)
В Win-1251 °=176, в cp866  °=248...
В Юникоде (он же UCS-4) - 1455...
В UCS-2 вообще не нашел этого символа... ;) https://www.sites.google.com/site/onexv … p2-dla-sms

Вот тут есть кое-что, может поможет в разбирательстве: https://alex-exe.ru/radio/wireless/gsm- … t-command/

Отредактировано Nord (2019-06-01 02:41:13)

0

82

Nord
Не вводи людей в заблуждение. Заметил, есть от Вас такая пурга.
Пристань лучше к компилятору BASCOM. Почему он пилит вместо Chr(9) бм похожий на °, неведомо зверушку.

0

83

boida
Про знак ° забудь. Тебя только с толку собьют. Будут рассказывать сказки.
Нет такого знака в компиляторах BASCOM. У мну 2.07.8. Да, и на других версиях люди не нашли.
Вопрос. Как можно передать то, чего нет?

Отредактировано rom-i (2019-06-01 03:29:38)

0

84

rom-i написал(а):

Не вводи людей в заблуждение.

В каком месте, плиз...

rom-i написал(а):

Пристань лучше к компилятору BASCOM.

Я не являюсь его автором... ;)

rom-i написал(а):

Нет такого знака в компиляторах BASCOM. У мну 2.07.8. Да, и на других версиях люди не нашли.

В компиляторе вообще нет знакогенератора, как такового... ;)
Для этого он (компилятор) использует ресурсы ОС...

А для приема-передачи вообще-то используются числовые значения, так что компилятор даже не задумывается об этом.
Сказали "передать число 65", это и улетит, а что это - число или символ, ему (компилятору) фиолетово.
Принято "65" - вопрос программиста, как интерпретировать это значение, как строку "65" в BCD-формате, как число 65 или как символ "А" (лат).

rom-i написал(а):

Почему он пилит вместо Chr(9) бм похожий на °, неведомо зверушку.

Chr(9) - символ табуляции практически во всех кодировках...
Где вы "похожий на °" разглядели ? ;)

Отредактировано Nord (2019-06-01 04:25:49)

0

85

Alt+0176(цифровая правая часть клавиатуры) получаете этот символ °
Alt+0177(цифровая правая часть клавиатуры) получаете этот символ ±

Если выводить в терминал
Print "°"
Print "±"
Print "±23.4°"

http://s5.uploads.ru/t/G8jfy.jpg
http://s9.uploads.ru/t/XxQbS.jpg
http://s8.uploads.ru/t/d7gQR.jpg

0

86

rom-i написал(а):

Заметил, есть от Вас такая пурга.

Уважаемый rom-i!
Пожалуйста, ведите себя корректно по отношению к другим.
Даже если у них пурга, а у вас - истина.
Потому что завтра ситуация может кардинально поменяться.

+1

87

rom-i написал(а):

Знака градуса не существует.

Тогда что это?

Свернутый текст

http://a.radikal.ru/a28/1906/31/5a21da0946eb.png

В баскоме

Свернутый текст

http://c.radikal.ru/c32/1906/0c/963615b005cd.png

0

88

Пётр
Chr(176) к сожалению не работает.
В одной таблице 176 в другой 167 в смс приходит собака и знак параграфа.

Попробую Chr(248) и Alt+0176 если не заработает то и то тогда " ' ".
Вопрос по АЦП. Когда конфигурирую Avcc это значит не 5,00 Вольт = 1023, а именно напряжение питания?
Вот у меня блок питания выдает 5,1 В.

0

89

radan
Зачем человека вводить в дебри?
Он блудит, и ищет подсказки. Ему сразу ответ,"много для него непонятных вещей"/
Что делает чел?
Уходит с этого сайта далеко.
Почему?
Голову заглумилм, а ответа не дали.
Кто виноват в этом?
Обычный ему подобный начинающий.
Вы крутые. Дык научитесь обьяснять.

0

90

Пётр
Вообще идет тема про SIM800l. Прием. передача по USART. Не с компа, а с МК.
Жаль чел ущел. Очень много наработок.
Все решено, кроме интернет.
Тем более сегодня обьявлена война всем, кто использует мобильные трафики на стационарных компах.
В деревнях, и так людей нет.

Отредактировано rom-i (2019-06-01 15:57:59)

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Использование модуля SIM800l