Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 27.05.2008, 13:29   #1
Максим2008
Member
 
Регистрация: 14.01.2008
Адрес: Voronezh
Сообщений: 96
Вес репутации: 130/46
Максим2008 will become famous soon enoughМаксим2008 will become famous soon enough
По умолчанию Вопрос по GSM-модемам и _организации_ работы с ними на PIC

Здравствуйте всем.

Решил я тут замутить перевод на Си (MCC18, PIC18) программу для работы с GSM-модулем. Опыт на ассемблере в этой теме имеется достаточно широкий. Но переносить алгоритм, вернее даже прицип работы, на язык Си не считаю правильным, ведь там каша из goto, которые считаются за моветон . Плюс хотелось бы все улучшить и упростить. Короче, видоизменить сам принцип. Поэтому у меня 2 вопроса:

1) как лучше сделать, посылать команды в модуль и крутиться в цикле по их приему в течение времени (бесконечные while с break-ом по удаче или ошибке ожидания) или лучше все ответы ловить сразу в прерывания по RCIE и там же парсить? Кто как делает, если не секрет, или кто как советует и почему? какие могут всплыть камни?

2) есть ли стандартные библиотеки для работы с GSM-модулями, используя стандартные АТ-команды. Киньте, плиз, ссылкой, а то я что-то не находил, может, не там искал...

Всем спасибо заранее.
Максим2008 вне форума   Ответить с цитированием
Старый 28.05.2008, 04:48   #2
Lexi
Senior Member
 
Аватар для Lexi
 
Регистрация: 25.02.2007
Адрес: Беларусь
Возраст: 37
Сообщений: 374
Вес репутации: 92/0
Lexi will become famous soon enough
Отправить сообщение для Lexi с помощью ICQ
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

по первому вопросу - все функции выполняемые по прерванию должны быть минимальными по времени выполнению. Это в любом учебнике.
по второму вопросу - я таких не встречал, а писал свою.
__________________
Век живи - век учись!
Lexi вне форума   Ответить с цитированием
Старый 28.05.2008, 11:50   #3
Максим2008
Member
 
Регистрация: 14.01.2008
Адрес: Voronezh
Сообщений: 96
Вес репутации: 130/46
Максим2008 will become famous soon enoughМаксим2008 will become famous soon enough
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

Цитата:
Сообщение от Lexi Посмотреть сообщение
по первому вопросу - все функции выполняемые по прерванию должны быть минимальными по времени выполнению. Это в любом учебнике.
по второму вопросу - я таких не встречал, а писал свою.
Да, я знаю, что минимальны по времени. Но всё же лучше в прерываниях или отказаться от этой идеи? На всякий случай: я работаю на 4 МГц, скорость 9600. В прерываниях по RCIE я собирался сделать какой-нибудь умный алгоритм из каких-нибудь флажков, не время-затратный.
Максим2008 вне форума   Ответить с цитированием
Старый 28.05.2008, 12:43   #4
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,132
Вес репутации: 4577/130
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

а что, нельзя в буфер складывать пришедшие команды в прерывании, а затем анализировать? что-то типа стека
__________________

Vanizma вне форума   Ответить с цитированием
Старый 28.05.2008, 14:02   #5
Evgeniy
Senior Member
 
Аватар для Evgeniy
 
Регистрация: 26.02.2007
Сообщений: 114
Вес репутации: 111/50
Evgeniy will become famous soon enoughEvgeniy will become famous soon enough
Отправить сообщение для Evgeniy с помощью ICQ
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

Цитата:
Сообщение от Максим2008 Посмотреть сообщение
Да, я знаю, что минимальны по времени. Но всё же лучше в прерываниях или отказаться от этой идеи? На всякий случай: я работаю на 4 МГц, скорость 9600. В прерываниях по RCIE я собирался сделать какой-нибудь умный алгоритм из каких-нибудь флажков, не время-затратный.
я делал вот так:
Код:
     if(in_byte > 0x1F)
      *ibp++ = in_byte;
     else
     {
      if(in_byte == 0x0D)
      {
       if(ibp != &ib[0])
       {
        RTS = 1;
        *ibp++ = 0x00;
        ibs = 1;
        ibp = &ib[0];
       }
      }
     }
    }
ibs взводится когда в ib есть строчка ответа от модема, управляющие коды в буфер не попадают, только текст, остается только обработать
Evgeniy вне форума   Ответить с цитированием
Старый 29.05.2008, 09:22   #6
Максим2008
Member
 
Регистрация: 14.01.2008
Адрес: Voronezh
Сообщений: 96
Вес репутации: 130/46
Максим2008 will become famous soon enoughМаксим2008 will become famous soon enough
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

Цитата:
Сообщение от Evgeniy Посмотреть сообщение
я делал вот так
Спасибо за дельный совет. Я уже ловил в прерываниях на 9600, но от программки на ПК, там было всегда фиксированное кол-во байт в пакете и не было управляющих символов, а тут и в "эхе" и в конце сообщения содержатся 0x0D, 0x0A. Как я понял, "эхо" мне придется выключить, а я так к нему привык, что забыл, что можно без него .
Максим2008 вне форума   Ответить с цитированием
Старый 30.05.2008, 01:12   #7
Lexi
Senior Member
 
Аватар для Lexi
 
Регистрация: 25.02.2007
Адрес: Беларусь
Возраст: 37
Сообщений: 374
Вес репутации: 92/0
Lexi will become famous soon enough
Отправить сообщение для Lexi с помощью ICQ
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

Я так принимаю
Код:
#int_RDA
RDA_isr()
{
if (i<max) s[i++]=getc();
}
Ведь кроме приема из урат еще надо из другими процесами следить. Заряд акб, отклики команд. И прочего.
__________________
Век живи - век учись!
Lexi вне форума   Ответить с цитированием
Старый 30.10.2008, 21:33   #8
M@@}{
Member
 
Регистрация: 09.10.2007
Сообщений: 81
Вес репутации: 103/47
M@@}{ will become famous soon enoughM@@}{ will become famous soon enough
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

[quote=Максим2008;34872]Здравствуйте всем.

Решил я тут замутить перевод на Си (MCC18, PIC18) программу для работы с GSM-модулем. Опыт на ассемблере в этой теме имеется достаточно широкий. Но переносить алгоритм, вернее даже прицип работы, на язык Си не считаю правильным, ведь там каша из goto, которые считаются за моветон . Плюс хотелось бы все улучшить и упростить. Короче, видоизменить сам принцип. Поэтому у меня 2 вопроса:

Cражаюсь с аналогичной задачей.

Реализовал Автомат Конечных Состояний для модема (очень удобно)
а прием осуществляю в небольшой буфер и там смотрю конец строки (0D 0A)
как только они пришли копирую все из буфера , а уж потом анализирую далее.
M@@}{ вне форума   Ответить с цитированием
Старый 30.10.2008, 21:45   #9
fantom
Senior Member
 
Регистрация: 27.02.2007
Адрес: Рязань
Возраст: 44
Сообщений: 2,610
Вес репутации: 2570/99
fantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond repute
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

Цитата:
Сообщение от M@@}{ Посмотреть сообщение
Реализовал Автомат Конечных Состояний для модема (очень удобно)
Что подразумевается под "Автомат Конечных Состояний для модема"?
fantom вне форума   Ответить с цитированием
Старый 31.10.2008, 09:04   #10
tem-ya
Senior Member
 
Аватар для tem-ya
 
Регистрация: 30.11.2007
Адрес: Воронеж
Возраст: 44
Сообщений: 253
Вес репутации: 190/49
tem-ya has a spectacular aura abouttem-ya has a spectacular aura about
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

Пока далек от ваших задачь, но на конкретный рабочий вариант реализации реальной state машины на С посмотреть было бы интересно. Особенно интересует момент взаимодействия с прерываниями, т.е. основной цикл и прерывания как разруливаются
tem-ya вне форума   Ответить с цитированием
Старый 01.11.2008, 22:05   #11
M@@}{
Member
 
Регистрация: 09.10.2007
Сообщений: 81
Вес репутации: 103/47
M@@}{ will become famous soon enoughM@@}{ will become famous soon enough
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

Цитата:
Сообщение от fantom Посмотреть сообщение
Что подразумевается под "Автомат Конечных Состояний для модема"?
Там все просто: у модема есть несколько состояний (точнее много)
Для примера короткий кусок


If(если пришла команда)
{
Копируем ее в новую переменную.
Сбрасываем флаг(установленный в прерывании)
flag_NewCommand =1;

}


switch(modem_state)
{
case msINIT: //состояние инициализации
printf_uart_modem(_pInitString[_initStringNum]); //здесь посылаем команду
send_command_modem(); //запускаем таймер и устанавливаем все переменные
modem_state = msINIT_OK;
break;
/
case msINIT_OK:
if (flag_NewCommand) // проверяем пришел ли ответ от модема
//здесь дожидаемся ответа
// и условие выхода в msWAIT_EVENT: или msINIT:

case msWAIT_EVENT: // состояние "ожидание событий"
// рабочее состояние модема «ожидание прихода команды от модема»

case msHANG_UP:
printf_uart_modem(_pInitString[9]); // кладем трубку
send_command_modem();
modem_state=msHANG_UP_OK;
break;

case msHANG_UP_OK:
if (flag_NewCommand) // проверяем пришел ли ответ от модема
// ждем ок
case msDIAL:
printf_uart_modem(_pInitString[9]); // кладем трубку
send_command_modem();
modem_state=msHANG_UP_OK;
break;

case msDIAL_OK:
if (flag_NewCommand) // проверяем пришел ли ответ от модема
// ждем ок
//переходим куда надо

}//end SWITCH
M@@}{ вне форума   Ответить с цитированием
Старый 07.11.2008, 11:40   #12
tem-ya
Senior Member
 
Аватар для tem-ya
 
Регистрация: 30.11.2007
Адрес: Воронеж
Возраст: 44
Сообщений: 253
Вес репутации: 190/49
tem-ya has a spectacular aura abouttem-ya has a spectacular aura about
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

((.

flag_NewCommand =1;

- ИМХО жесть. Если цеплятся за флаги то state машина нафиг не нужна....ИМХО. Вся прелесть такой технологии как раз в том изаключается, что мы уходим от флагов как таковых в принципе...Ну т.е. к этому надо стремиться - это в идеале. Флаги косвенно автоматом зашиваются в состояния....А так непонятно где и когда его сбрасывать.
tem-ya вне форума   Ответить с цитированием
Старый 08.11.2008, 22:14   #13
M@@}{
Member
 
Регистрация: 09.10.2007
Сообщений: 81
Вес репутации: 103/47
M@@}{ will become famous soon enoughM@@}{ will become famous soon enough
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

Цитата:
Сообщение от tem-ya Посмотреть сообщение
((.

flag_NewCommand =1;

- ИМХО жесть. Если цеплятся за флаги то state машина нафиг не нужна....ИМХО. Вся прелесть такой технологии как раз в том изаключается, что мы уходим от флагов как таковых в принципе...Ну т.е. к этому надо стремиться - это в идеале. Флаги косвенно автоматом зашиваются в состояния....А так непонятно где и когда его сбрасывать.
Как таковых флагов у меня мало.

Но как узнать что UART принял целую строку? И эта строка кончается 0D 0A.
А флаг нужно сбрасывать после того как программа нашла его, и начала обрабатывать, соответствующее действие.(это конечно частный случай)
M@@}{ вне форума   Ответить с цитированием
Старый 10.11.2008, 18:00   #14
tem-ya
Senior Member
 
Аватар для tem-ya
 
Регистрация: 30.11.2007
Адрес: Воронеж
Возраст: 44
Сообщений: 253
Вес репутации: 190/49
tem-ya has a spectacular aura abouttem-ya has a spectacular aura about
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

Ничего лучшего как запустить еще одну stаte машину чисто для прерываний я так и не придумал
2 stаte машины, одна в основном цикле, другая в прерывании и ныряешь из одной в другую ... - те же флаги но вроде как единообразно.
tem-ya вне форума   Ответить с цитированием
Старый 18.11.2008, 08:02   #15
Синклер
Senior Member
 
Регистрация: 06.03.2007
Адрес: Череповец
Возраст: 50
Сообщений: 484
Вес репутации: 124/53
Синклер will become famous soon enoughСинклер will become famous soon enough
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

Извиняюсь за немножко увод темы в сторону, но не хочу плодить дубли тем, а мой вопрос в аккурат под название этой темы:

Хочу спросить у гуру по АТ командам для Семёна - как вы опознаёте состояния того, до кого дозваниваетесь, те тот "абонент снял трубку", абонент положил трубку" ?
Синклер вне форума   Ответить с цитированием
Старый 18.11.2008, 20:37   #16
M@@}{
Member
 
Регистрация: 09.10.2007
Сообщений: 81
Вес репутации: 103/47
M@@}{ will become famous soon enoughM@@}{ will become famous soon enough
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

Цитата:
Сообщение от Синклер Посмотреть сообщение
Извиняюсь за немножко увод темы в сторону, но не хочу плодить дубли тем, а мой вопрос в аккурат под название этой темы:

Хочу спросить у гуру по АТ командам для Семёна - как вы опознаёте состояния того, до кого дозваниваетесь, те тот "абонент снял трубку", абонент положил трубку" ?
я только в частично касался этой темы - пока. но есть какая-то команда кажетя "AT+CPAS" (я не уверен) она показывает состояние модема: готов к работе, входящий звонок, итд.
M@@}{ вне форума   Ответить с цитированием
Старый 19.11.2008, 08:02   #17
Синклер
Senior Member
 
Регистрация: 06.03.2007
Адрес: Череповец
Возраст: 50
Сообщений: 484
Вес репутации: 124/53
Синклер will become famous soon enoughСинклер will become famous soon enough
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

Вот, то-же инфу по своему вопросу, я чуток "накопал" (друг прислал мне его на майл - автор сего "опуса" к сожалению не известен ):


Соединение с абонентом
Речь пойдет о речевом соединении. Что же здесь обсуждать? Есть АТ-команда "Набор номера", формат ее предельно ясен - передай в телефон

ATDномер;<0D>

Номер телефона в команде - это тот же номер, что набирается на телефоне кнопочками, после номера необходимо поставить "точку с запятой" - соединение речевое, ну и стандартный символ окончания АТ-команды. Чего уж проще? И я так думал... А как определить, что вызываемый абонент ответил? Читаем документацию от Siemens "Интерфейс АТ-команд. Набор номера с носимого телефона", ответ телефона на команду ATD: "При успешном речевом соединении: ОК".

Пробуем... Ответ телефона "ОК" получаем сразу же, как только телефон получил команду ATD! Далее слушаем некоторое время в телефоне гудки вызова, и вот вызываемый абонент ответил на наш вызов, а на линии последовательного интерфейса - тишина. Абонент разорвал связь - ответ телефона "NO CARRIER".

Пробуем еще раз, но звоним на другой номер... Также получаем "ОК" на команду ATD, слушаем в трубке приятный женский голос, который на двух языках вещает нам: "Абонент временно недоступен...", затем голос умолкает, и на экране дисплея телефона мы наблюдаем, что вызов уже не производится (можно попробовать позвонить еще кому-нибудь), а на линии последовательного интерфейса - тишина.

Вывод: ответ телефона "ОК" на команду ATD - есть факт того, что телефон воспринял команду и начинает ее выполнять, а вовсе не факт соединения с вызываемым абонентом. Можно ли получить дополнительную информацию о нашей попытке соединения? Да, можно: если абонент не желает с Вами разговаривать (нажимает клавишу "Отклонить") - получаем ответ телефона "BUSY"; если абонент ответил на вызов, а затем прервал разговор - "NO CARRIER"; иногда можно получить ответ "NO DIAL TONE" - наверное, при перегрузке соты; еще - "ERROR" - ну, это - отдельная песня. Да, уж - не много... Главное - ответа на вопрос - "ответил ли абонент?" - так и не получили.

Для определения установления связи с вызываемым абонентом я использую команду AT+CLCC которая называется "Список текущих соединений оконечного устройства". Телефон этот список возвращает в ответ на команду в виде строк:

+CLCC: <id>,<dir>,<stat>,<mode>,<mpty>[,<number>,<type>[,<alpha>]]

Последовательность строк заканчивается строкой

ОК

Нас интересует параметр <stat>. Он принимает следующие значения

0 Соединение активно
1 Соединение удерживается
2 Осуществляется набор
3 Вызывается абонент
4 Входящее соединение
5 Ожидающее входящее соединение

Итак. Когда абонент ответит на наш звонок, параметр stat примет значение 0. Факт ответа на вызов зафиксирован. Осталось определиться с недоступным абонентом. К сожалению, когда девушка в трубке бубнит свое: "Абонент временно недоступен...", параметр stat имеет значение 3 - т.е. отличить от нормального вызова бубнение в трубке не представляется возможным с помощью этой команды. Но, девушка в трубке бубнит не вечно - у меня около 30 секунд (возможно, это время зависит от оператора сотовой связи), и, вот, когда она умолкла и можно набирать другой номер - в ответ на команду AT+CLCC мы получаем от телефона ответ ОК, без всяких там строк, начинающихся на +CLCC (в документации об этом записано так: "Если команда была выполнена, но соединений нет, то ответ не передается").
Синклер вне форума   Ответить с цитированием
Старый 21.11.2008, 04:02   #18
picavr
Senior Member
 
Регистрация: 13.02.2008
Сообщений: 167
Вес репутации: 117/47
picavr will become famous soon enoughpicavr will become famous soon enough
По умолчанию Ответ: Вопрос по GSM-модемам и _организации_ работы с ними на PIC

Цитата:
Сообщение от Lexi Посмотреть сообщение
по первому вопросу - все функции выполняемые по прерванию должны быть минимальными по времени выполнению. Это в любом учебнике.
по второму вопросу - я таких не встречал, а писал свою.
Странно, я обычно все задачи обрабатываю в прерываниях, распределяю по времени... а в основной програме просто пустой цикл...
picavr вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пожалуйста, найти ошибку в коде Катя Микроконтроллеры других производителей 26 08.12.2007 14:58
Есть вопросы по алгоритму работы устройства на пике. 40grad Продукция MICROCHIP 9 27.10.2007 15:55
проблемка с PIC16F628A bereg_ok Продукция MICROCHIP 72 07.09.2007 11:00
Вопрос по PIC контроллерам. vlad_er Продукция MICROCHIP 12 18.05.2007 10:15
RC цепочка по питанию PIC, как считать ? Синклер Продукция MICROCHIP 1 20.03.2007 17:26


Часовой пояс GMT +3, время: 03:31.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot