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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> AT-команды, с нуля
ДЕЙЛ
сообщение Sep 22 2014, 12:00
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085



Есть GSM-модуль, основу описания работы с которым составляют AT-команды для общения с МК. Обмен данными выполняется по UART, который настроен на определённую скорость обмена. Тут вопросов нет. Далее читаю мануал и некоторые статьи вроде этой Для меня пока непонятно, что собой представляет к примеру команда AT+CREG?
Как будет выглядеть одномерный массив для передачи в UART? Правильно я понимаю, что каждый символ из данной строки нужно перевести в ASCII-коды?
Т.е. руководствуясь вот этой таблицей имеем
A - 0x41
T - 0x54
"+"- 0x2B
C - 0x43
R - 0x52
E - 0x45
G - 0x47
"?" - 0x3F
В итоге для отправки команды AT+CREG? по UART микроконтроллер должен отправить строку {0x41, 0x54, 0x2B, 0x43, 0x52, 0x45, 0x47, 0x3F}. Мои представления правильные или где-то не так думаю?
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Sep 22 2014, 12:08
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Почти правильные. Микроконтроллер должен отправить строчку "AT+CREG?\r\n". Особое внимание - на перевод строки.
Перекодировкой этого безобразия в ascii-коды вручную заниматься ни в коем случае не надо - иначе этот код невозможно будут читать.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
ДЕЙЛ
сообщение Sep 22 2014, 12:35
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085



Цитата(esaulenka @ Sep 22 2014, 16:08) *
Почти правильные. Микроконтроллер должен отправить строчку "AT+CREG?\r\n". Особое внимание - на перевод строки.

в тонкости пока не вникаю, хочу понять - команда AT+CREG? соответствует последовательности {0x41, 0x54, 0x2B, 0x43, 0x52, 0x45, 0x47, 0x3F}?

Сообщение отредактировал ДЕЙЛ - Sep 22 2014, 12:36
Go to the top of the page
 
+Quote Post
Dejmos
сообщение Sep 22 2014, 12:42
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 100
Регистрация: 4-11-11
Из: Смоленск
Пользователь №: 68 137



Да. Но чтобы модуль понял что это именно АТ команда надо еще добавить 0x0D,0x0A.


--------------------
* работаю так, что лошади оборачиваются *
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 22 2014, 12:58
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Dejmos @ Sep 22 2014, 16:42) *
...надо еще добавить 0x0D,0x0A.

Немного поправлю:
Для того, чтобы GSM-модуль воспринял команду - в конце символьной последовательности должен быть символ (байт) с кодом 0x0D. Байт с кодом 0x0A в конце команды - избыточен.
Go to the top of the page
 
+Quote Post
ДЕЙЛ
сообщение Sep 22 2014, 13:03
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085



т.е. команда AT+CREG? соответствует последовательности {0x41, 0x54, 0x2B, 0x43, 0x52, 0x45, 0x47, 0x3F, 0x0D}?
где можно подробнее на эту тему почитать? В мануале сразу начинают с АТ-команд без их представления в HEX

Сообщение отредактировал ДЕЙЛ - Sep 22 2014, 13:05
Go to the top of the page
 
+Quote Post
Romashki
сообщение Sep 22 2014, 13:34
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 5-12-10
Пользователь №: 61 419



МК сам передаст HEX коды этих символов. Это работа компилятора.
Go to the top of the page
 
+Quote Post
Dejmos
сообщение Sep 22 2014, 13:36
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 100
Регистрация: 4-11-11
Из: Смоленск
Пользователь №: 68 137



Понятия не имею. Мне всегда казалось что это должно быть ясно интуитивно sm.gif
Можно погуглить что-нибудь по поводу представления строк в памяти ЭВМ.


--------------------
* работаю так, что лошади оборачиваются *
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 22 2014, 13:50
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(ДЕЙЛ @ Sep 22 2014, 17:03) *
В мануале сразу начинают с АТ-команд без их представления в HEX


Представлять байты команды в шестнадцатиричном виде никому не приходит в голову, поскольку передача команды модему на языке Си обычно выглядит как-то так:

USART_WriteString("AT+CREG?\r");
Go to the top of the page
 
+Quote Post
Lagman
сообщение Sep 22 2014, 14:36
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Модемы также понимают utf-8 т.к. в utf-8 первые 127 символов (буквы латинского алфавита) совпадают с ascii и имеют размер 1 байт.
Go to the top of the page
 
+Quote Post
ДЕЙЛ
сообщение Sep 23 2014, 06:25
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085



Цитата(Палыч @ Sep 22 2014, 17:50) *
Представлять байты команды в шестнадцатиричном виде никому не приходит в голову, поскольку передача команды модему на языке Си обычно выглядит как-то так:

USART_WriteString("AT+CREG?\r");

Хочется до сути докопаться. Напишу я эту функцию и как потом понять - она не работает или что-то с модемом? В самом начале мне проще сначала с осциллографом своими глазами байты смотреть для уверенности в совпадении своих представлений о работе функции. Иначе можно было бы всё запихать в одну функцию вроде DeviceInit(), Device_Rabota(), Device_Off();
Go to the top of the page
 
+Quote Post
Mihey_K
сообщение Sep 23 2014, 07:46
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 156
Регистрация: 27-09-06
Из: Irkutsk
Пользователь №: 20 747



Цитата
Хочется до сути докопаться. Напишу я эту функцию и как потом понять - она не работает или что-то с модемом?

И что вас смущает, функция вроде USART_WriteString() отправит в линию ASCII представление написанных символов, в таком виде вы их и увидите осциллографом. Таблицей можете перевести из ASCII в биты.
И если подтверждение модемом не выключено, то примите при верной посылке от модема OK.


--------------------
Блог о разработке на CC430, SIM900, GPS, ARM и не только...
Go to the top of the page
 
+Quote Post
ДЕЙЛ
сообщение Sep 23 2014, 11:20
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085



Цитата(Mihey_K @ Sep 23 2014, 11:46) *
И что вас смущает, функция вроде USART_WriteString() отправит в линию ASCII представление написанных символов, в таком виде вы их и увидите осциллографом.

смущает нестандартность функции. Для её использования нужно сначала подключить библиотеку(какую?) и выполнить соответствующие настройки. Простор для появления ошибок тут широкий, хотя появилась мысль прицепить параллельно линии COM-порт компа и смотреть обмен. В какой библиотеке следует искать функцию USART_WriteString()? И как её приспособить к LPC1778?
Go to the top of the page
 
+Quote Post
Mihey_K
сообщение Sep 23 2014, 13:37
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 156
Регистрация: 27-09-06
Из: Irkutsk
Пользователь №: 20 747



По LPC1778 полно информации. Настроить UART можно или силами хидера LPC177x_8x.h, что в CMSIS, по мануалу, или воспользовавшись библиотекой lpc177x_8x_uart.c, что находится в том же архиве CMSIS (папка lpc177x_8x\Drivers\), там же есть примеры по настройке и использованию периферии (lpc177x_8x\Examples). Сам пользовался для отладки через UART функцией printf() через вызов UARTPutChar из debug_frmwrk.c, т.к. там все настроено было из коробки в режиме 115200-8N.
Если боитесь ошибиться, разбейте работу на 2 этапа:
1. запустите UART, напишите функцию передачи строки и через мост UART<Virtual COM Port> проверьте, что все работает;
2. запустите управление модемом, и все должно получиться!
А USART_WriteString() есть не что иное, как посимвольная передача (функция UART_SendByte() из lpc177x_8x_uart.c) в цикле до тех пор, пока строка не станет равна 0.

Сообщение отредактировал Mihey_K - Sep 23 2014, 13:42


--------------------
Блог о разработке на CC430, SIM900, GPS, ARM и не только...
Go to the top of the page
 
+Quote Post
KARLSON
сообщение Oct 1 2014, 08:15
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 5-05-06
Из: Нижегородская обл.
Пользователь №: 16 819



Цитата(ДЕЙЛ @ Sep 23 2014, 10:25) *
Напишу я эту функцию и как потом понять - она не работает или что-то с модемом? В самом начале мне проще сначала с осциллографом своими глазами байты смотреть для уверенности в совпадении своих представлений о работе функции.

Когда я начинал осваивать GSM модуль, использовал 4 простых адаптеров. 2 шт UART-COM и 2шт COM - USB. И два экземпляра программы advanced serial port monitor. И смотрел оба потока: из мк в модуль и наоборот. Очень помогло) И ни каких танцев с осциллографом.


--------------------
Кризис - это не отсутствие денег, а отсутствие идей! Учитесь и никаких кризисов не будет.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 08:51
Рейтинг@Mail.ru


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