ДЕЙЛ 32 22 сентября, 2014 Опубликовано 22 сентября, 2014 · Жалоба Есть 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}. Мои представления правильные или где-то не так думаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 22 сентября, 2014 Опубликовано 22 сентября, 2014 · Жалоба Почти правильные. Микроконтроллер должен отправить строчку "AT+CREG?\r\n". Особое внимание - на перевод строки. Перекодировкой этого безобразия в ascii-коды вручную заниматься ни в коем случае не надо - иначе этот код невозможно будут читать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ДЕЙЛ 32 22 сентября, 2014 Опубликовано 22 сентября, 2014 (изменено) · Жалоба Почти правильные. Микроконтроллер должен отправить строчку "AT+CREG?\r\n". Особое внимание - на перевод строки. в тонкости пока не вникаю, хочу понять - команда AT+CREG? соответствует последовательности {0x41, 0x54, 0x2B, 0x43, 0x52, 0x45, 0x47, 0x3F}? Изменено 22 сентября, 2014 пользователем ДЕЙЛ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dejmos 0 22 сентября, 2014 Опубликовано 22 сентября, 2014 · Жалоба Да. Но чтобы модуль понял что это именно АТ команда надо еще добавить 0x0D,0x0A. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 22 сентября, 2014 Опубликовано 22 сентября, 2014 · Жалоба ...надо еще добавить 0x0D,0x0A. Немного поправлю: Для того, чтобы GSM-модуль воспринял команду - в конце символьной последовательности должен быть символ (байт) с кодом 0x0D. Байт с кодом 0x0A в конце команды - избыточен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ДЕЙЛ 32 22 сентября, 2014 Опубликовано 22 сентября, 2014 (изменено) · Жалоба т.е. команда AT+CREG? соответствует последовательности {0x41, 0x54, 0x2B, 0x43, 0x52, 0x45, 0x47, 0x3F, 0x0D}? где можно подробнее на эту тему почитать? В мануале сразу начинают с АТ-команд без их представления в HEX Изменено 22 сентября, 2014 пользователем ДЕЙЛ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Romashki 0 22 сентября, 2014 Опубликовано 22 сентября, 2014 · Жалоба МК сам передаст HEX коды этих символов. Это работа компилятора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dejmos 0 22 сентября, 2014 Опубликовано 22 сентября, 2014 · Жалоба Понятия не имею. Мне всегда казалось что это должно быть ясно интуитивно :) Можно погуглить что-нибудь по поводу представления строк в памяти ЭВМ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 22 сентября, 2014 Опубликовано 22 сентября, 2014 · Жалоба В мануале сразу начинают с АТ-команд без их представления в HEX Представлять байты команды в шестнадцатиричном виде никому не приходит в голову, поскольку передача команды модему на языке Си обычно выглядит как-то так: USART_WriteString("AT+CREG?\r"); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 22 сентября, 2014 Опубликовано 22 сентября, 2014 · Жалоба Модемы также понимают utf-8 т.к. в utf-8 первые 127 символов (буквы латинского алфавита) совпадают с ascii и имеют размер 1 байт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ДЕЙЛ 32 23 сентября, 2014 Опубликовано 23 сентября, 2014 · Жалоба Представлять байты команды в шестнадцатиричном виде никому не приходит в голову, поскольку передача команды модему на языке Си обычно выглядит как-то так: USART_WriteString("AT+CREG?\r"); Хочется до сути докопаться. Напишу я эту функцию и как потом понять - она не работает или что-то с модемом? В самом начале мне проще сначала с осциллографом своими глазами байты смотреть для уверенности в совпадении своих представлений о работе функции. Иначе можно было бы всё запихать в одну функцию вроде DeviceInit(), Device_Rabota(), Device_Off(); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
miheyk 0 23 сентября, 2014 Опубликовано 23 сентября, 2014 · Жалоба Хочется до сути докопаться. Напишу я эту функцию и как потом понять - она не работает или что-то с модемом? И что вас смущает, функция вроде USART_WriteString() отправит в линию ASCII представление написанных символов, в таком виде вы их и увидите осциллографом. Таблицей можете перевести из ASCII в биты. И если подтверждение модемом не выключено, то примите при верной посылке от модема OK. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ДЕЙЛ 32 23 сентября, 2014 Опубликовано 23 сентября, 2014 · Жалоба И что вас смущает, функция вроде USART_WriteString() отправит в линию ASCII представление написанных символов, в таком виде вы их и увидите осциллографом. смущает нестандартность функции. Для её использования нужно сначала подключить библиотеку(какую?) и выполнить соответствующие настройки. Простор для появления ошибок тут широкий, хотя появилась мысль прицепить параллельно линии COM-порт компа и смотреть обмен. В какой библиотеке следует искать функцию USART_WriteString()? И как её приспособить к LPC1778? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
miheyk 0 23 сентября, 2014 Опубликовано 23 сентября, 2014 (изменено) · Жалоба По 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. Изменено 23 сентября, 2014 пользователем Mihey_K Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KARLSON 1 1 октября, 2014 Опубликовано 1 октября, 2014 · Жалоба Напишу я эту функцию и как потом понять - она не работает или что-то с модемом? В самом начале мне проще сначала с осциллографом своими глазами байты смотреть для уверенности в совпадении своих представлений о работе функции. Когда я начинал осваивать GSM модуль, использовал 4 простых адаптеров. 2 шт UART-COM и 2шт COM - USB. И два экземпляра программы advanced serial port monitor. И смотрел оба потока: из мк в модуль и наоборот. Очень помогло) И ни каких танцев с осциллографом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться