реклама на сайте
подробности

 
 
> Формат ответа на команды в SIM900
aleks431
сообщение Jul 20 2014, 08:36
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 9-03-12
Пользователь №: 70 695



Подскажите, пожалуйста , в каком формате приходят ответы на команду AT+CSQ .

Например, приходит +CSQ: 23,0 . Наблюдаю за процессом в терминале PUTTY .

Не могу понять в каком формате приходят цифры 23,0 (десятеричный, шестнадцатеричный ?)

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
Redguy
сообщение Jul 20 2014, 08:54
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 14-01-10
Из: Россия, Самара
Пользователь №: 54 801



В мануале на AT команды сказано, что идет два параметра: <rssi> и <ber>.
Меня всегда интересовал только <rssi>, значения выводятся в десятичном формате по следующему принципу:
0 => -115 dBm или меньше
1 => -111 dBm
2...30 => -110... -54 dBm
31 => -52 dBm или больше
99 => невозможно определить

Иными словами, если у вас получилось rssi = 23, то уровень сигнала составляет -68дБм.

Про второй параметр написано, что отображается процентах и для подробностей идет ссылка на таблицу стандарта GSM05.08 в пункте 7.4.2
В инете гуглопоиском нашел следующее:
bit error rate (в процентах)
0 — менее 0.2%
1 — 0.2% до 0.4%
2 — 0.4% до 0.8%
3 — 0.8% до 1.6%
4 — 1.6% до 3.2%
5 — 3.2% до 6.4%
6 — 6.4% до 12.8%
7 — более 12.8%
99 — невозможно определить

Сообщение отредактировал Redguy - Jul 20 2014, 09:00
Go to the top of the page
 
+Quote Post
aleks431
сообщение Jul 20 2014, 17:22
Сообщение #3





Группа: Новичок
Сообщений: 9
Регистрация: 9-03-12
Пользователь №: 70 695



Спасибо, конечно, но я не об этом.

У меня на экране терминала идёт ответ +CSQ: 24,0

Через прерывание загружаю 2 и 4 отдельно в разные регистры

Затем в основной программе над старшим числом делаю ANDLW B'00001111' и загружаю обратно в этот регистр

То же самое со второй цифрой

Затем складываю и получаю число h'24' ----- не знаю правильный ли результат ?

ЗАТЕМ проверяю на попадание в диапазон 5 - 31


Но почему-то у меня сомнение, что у меня загружаются в прерывании именно 2 и 4 (как на экране терминала)


Может подскажете как можно проверить, какие цифры загружаются перед математическими операциями

Программа на ассемблере
Go to the top of the page
 
+Quote Post
Redguy
сообщение Jul 20 2014, 18:45
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 14-01-10
Из: Россия, Самара
Пользователь №: 54 801



Цитата(aleks431 @ Jul 20 2014, 20:22) *
У меня на экране терминала идёт ответ +CSQ: 24,0

В терминале отображается формат ASCII, где цифры представляются в виде 0x30-0x39 (0-9).
Цитата
Через прерывание загружаю 2 и 4 отдельно в разные регистры

Соответственно, если надо получить нужно число, то надо сначала проверить принятые байты на этот диапазон, а потом из каждого байта вычесть 0x30 (48), тогда получатся значения разрядов десятков и единиц. Далее первое полученное число умножить на 0x0A (10) и прибавить к этому второе, то получится значение в одном байте, а уж дальше формат преставления зависит только от вас, как вам больше нравится.

В терминале у вас приходят a=0x32 и b=0x34, тогда
a = a - 0x30 --> a = 2
b = b - 0x30 --> b = 4
с = a * 10 + b --> с = 24
или
с = a * 0x0A + b --> с = 0x18 (dec 24)

Цитата
Затем в основной программе над старшим числом делаю ANDLW B'00001111' и загружаю обратно в этот регистр
То же самое со второй цифрой

Такой вариант тоже вполне подходит, ведь если отбросить старшую тетраду, на конечное значение цифры это никак не повлияет, но тут если нет предварительной проверки на допустимый диапазон, то можно на символы 'C' (0x43) и 'S' (0x53) подумать ту же самую '3' (0x33).

Цитата
Затем складываю и получаю число h'24' ----- не знаю правильный ли результат ?

не уверен, что сразу после сложения двух байт, которые содержат значения меньше h'10' (после операции 'И' c B'00001111'), получится значение h'24'

Цитата
Программа на ассемблере

Как написать на ассемблере подумать можно, но что-то я подзабывать его стал. Хотя по формату команды похоже на PIC16

Сообщение отредактировал Redguy - Jul 20 2014, 18:47
Go to the top of the page
 
+Quote Post
aleks431
сообщение Jul 21 2014, 05:11
Сообщение #5





Группа: Новичок
Сообщений: 9
Регистрация: 9-03-12
Пользователь №: 70 695



Спасибо, буду пробовать.

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

Отпишусь когда что-то станет понятно.
Go to the top of the page
 
+Quote Post
ssokol
сообщение Jul 21 2014, 05:29
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 615
Регистрация: 14-02-08
Из: г. Рыбинск, Ярославская область
Пользователь №: 35 028



Цитата(aleks431 @ Jul 20 2014, 12:36) *
Подскажите, пожалуйста , в каком формате приходят ответы на команду AT+CSQ .

Например, приходит +CSQ: 23,0 . Наблюдаю за процессом в терминале PUTTY .

Не могу понять в каком формате приходят цифры 23,0 (десятеричный, шестнадцатеричный ?)

Конечно десятеричный!
Go to the top of the page
 
+Quote Post
aleks431
сообщение Jul 27 2014, 11:20
Сообщение #7





Группа: Новичок
Сообщений: 9
Регистрация: 9-03-12
Пользователь №: 70 695



Цитата(Redguy @ Jul 20 2014, 21:45) *
В терминале отображается формат ASCII, где цифры представляются в виде 0x30-0x39 (0-9).

Соответственно, если надо получить нужно число, то надо сначала проверить принятые байты на этот диапазон, а потом из каждого байта вычесть 0x30 (48), тогда получатся значения разрядов десятков и единиц. Далее первое полученное число умножить на 0x0A (10) и прибавить к этому второе, то получится значение в одном байте, а уж дальше формат преставления зависит только от вас, как вам больше нравится.

В терминале у вас приходят a=0x32 и b=0x34, тогда
a = a - 0x30 --> a = 2
b = b - 0x30 --> b = 4
с = a * 10 + b --> с = 24
или
с = a * 0x0A + b --> с = 0x18 (dec 24)


Такой вариант тоже вполне подходит, ведь если отбросить старшую тетраду, на конечное значение цифры это никак не повлияет, но тут если нет предварительной проверки на допустимый диапазон, то можно на символы 'C' (0x43) и 'S' (0x53) подумать ту же самую '3' (0x33).


не уверен, что сразу после сложения двух байт, которые содержат значения меньше h'10' (после операции 'И' c B'00001111'), получится значение h'24'


Как написать на ассемблере подумать можно, но что-то я подзабывать его стал. Хотя по формату команды похоже на PIC16

********************************************************************************
****************
Сделал всё как советовали, вот что получается



Например приходит ответ

+csq: 24,0

OK

После выхода из прерывания у меня в регистрах находится

REG_1=0x32
REG_2=0x34

После возврата в программу я вычитаю из каждого числа 0x30,ответ в регистры

REG_1=2
REG_2=4


Умножаю первое число на 10 для перевода в старший разряд

и складываю оба числа, в итоге получается REG_SUMMA=24
всё правильно

Дальше у меня подпрограмма проверки попадания этого числа в диапазон 5...31



movf CSQ_SUMMA, w

addlw -.5 ; Сперва нормируем значение
addlw -(.31 - .5 + 1) ; Теперь сравниваем с диапазоном


btfsc STATUS,C
goto SKIP

;сюда попадаем если сумма входит в диапазон


SKIP : ;сюда попадаем если не попадает в диапазон



В MPLAB всё проходит отлично и правильно , а вот в запрограммированном устройстве почему-то вылетает в SKIP.

НИКАК НЕ ПОЙМУ В ЧЁМ ПРОБЛЕМА. МОЖЕТ ПОДСКАЖЕТЕ ?



*****************************************************************************
Второй вариант той же программы проверки попадания в диапазон 5.....31


movlw .5 ; Проверяем нижнюю границу МЕНЬШЕ < 5
bcf STATUS,C ;сбрасываем флаг С
subwf CSQ_SUMMA,W ;вычитаем содержимое W из CSQ_Reg,РЕЗУЛЬТАТ --> W
btfss STATUS,C ; проверяем БИТ 0 (C - CARRY-ПЕРЕНОС),ЕСЛИ 1 - ПЕРЕНОС ЕСТЬ, 0 - ПЕРЕНОСА НЕТ
goto SKIP ; Меньше минимума - выходим

movlw (.31 + 1) ; Проверяем верхнюю границу БОЛЬШЕ > 31
bcf STATUS,C ;сбрасываем флаг С
subwf CSQ_SUMMA,W ;результат в --> W
btfsc STATUS,C ;проверяем БИТ 0 (C - CARRY-ПЕРЕНОС),ЕСЛИ 1 - ПЕРЕНОС ЕСТЬ, 0 - ПЕРЕНОСА НЕТ
goto SKIP ; Больше максимума – выходим

В MPLAB также ВСЁ ПРОХОДИТ ПРАВИЛЬНО, В УСТРОЙСТВЕ - ТО ЖЕ САМОЕ

В ней первая половина программы проходит правильно, а вторая почему-то неправильно - вылетает в SKIP
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th August 2025 - 12:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01438 секунд с 7
ELECTRONIX ©2004-2016