Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Помогите принять строку по usart от АТ модема

Непрочитано 02.01.2009, 01:50  
kasper37
Частый гость
 
Регистрация: 11.11.2007
Сообщений: 13
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kasper37 на пути к лучшему
По умолчанию Помогите принять строку по usart от АТ модема

Ребята я у вас тут в первые помогите не могу написать кусок кода в CVAVR для приема по usart строку от мобильного телефона и сравнить ее со строкой во флеше контролера, ну например если телефон пошлет RING (звонок) МК выполняет какоето действие . Буду благодарен за любую информацию. :P
Реклама:
kasper37 вне форума  
Непрочитано 02.01.2009, 02:16  
sanitar249
Почётный гражданин KAZUS.RUN
 
Аватар для sanitar249
 
Регистрация: 19.01.2007
Сообщений: 1,745
Сказал спасибо: 2
Сказали Спасибо 46 раз(а) в 35 сообщении(ях)
sanitar249 на пути к лучшему
По умолчанию

Спросите у гугля, например, по запросу: receive string from UART AVR code...
Или сюда http://avr123.nm.ru/
Задача-то, в принципе, тривиально-рутинная...
Удачи в новом году!
__________________
Я, думаю, нужно подумать...
sanitar249 вне форума  
Непрочитано 02.01.2009, 16:59  
kasper37
Частый гость
 
Регистрация: 11.11.2007
Сообщений: 13
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kasper37 на пути к лучшему
По умолчанию

Да я понимаю что задача проста , япробовал и из буфера читать и функцыей scanf, но нечего не получается.
kasper37 вне форума  
Непрочитано 02.01.2009, 19:29  
Predator_r
Временная регистрация
 
Регистрация: 17.12.2008
Адрес: Спб
Сообщений: 96
Сказал спасибо: 19
Сказали Спасибо 25 раз(а) в 20 сообщении(ях)
Predator_r на пути к лучшему
По умолчанию

а под какой контроллер пишешь? регистр состояния смотришь? рекомендую в бесконечном цикле крутиться до взведения битика прихода, после этого вылетать (из бесконечного цикла)для приема байта.
Predator_r вне форума  
Непрочитано 02.01.2009, 19:33  
kasper37
Частый гость
 
Регистрация: 11.11.2007
Сообщений: 13
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kasper37 на пути к лучшему
По умолчанию

Пишу под ATmega16 принять символ не вопрос а сострочкой не получается помогите плиз и пожалуйста код если можно на CVAVR
kasper37 вне форума  
Непрочитано 03.01.2009, 00:46  
NONAME
Прохожий
 
Регистрация: 07.01.2004
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
NONAME на пути к лучшему
По умолчанию

запусти wizard сделай txinterrupt сделай буфер например на 20 символов

в проге
запусти простой счетчик типа counter++
как только получишь первый символ сбрось счетчик в ноль
RX interrupt ()
{
data=UDR;
buffer[i++]=data;
counter=0;
}

и так далее пока символы идут

в main
смотри если таймер утикал дальше паузы значит пришол полный ответ

if (counter › XX) {то пришол ответ, забирай буфер и делай с ним что хочешь}

в приложении кусок кода от самого первого своего проекта, выжимки помогут

Прикрепленный файл: 311448.zip
NONAME вне форума  
Непрочитано 03.01.2009, 14:49  
kasper37
Частый гость
 
Регистрация: 11.11.2007
Сообщений: 13
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kasper37 на пути к лучшему
По умолчанию

Уважаемые вы мне уже сильно помогли но у меня есть еше вопрос по этому куску кода
if (getTimer(TGSM_MODULE_TIMEOUT)›= (unsigned int)(0.1 * sec))
{
resetTimer(TGSM_MODULE_TIMEOUT);
state=wait;
// пока не убираем

Query_length= rx_counter;
// копируем буфер USART с принятой посылкой (количество символов для копирования в счетчике байта усарта)
memcpy(Query, rx_buffer, Query_length);
// чистим счетчик принятых байт
rx_counter= 0;
/*
// здесь разбираем полученное сообщение
switch (at_command_in_tx_bufer)
{
case ATA
case
}*/
//reset_tx_bufer(); // чистим буфер от команды
}
А вопрос такой почему строчки по разборке полученого сообщения закоментированы, я так понимаю сюда я вписываю команду которая должна былы придти и пишу код обработчик этой каманды например
case RING:
{
printf("ATH
")
}
Так или поправте меня пожалуйста.
kasper37 вне форума  
Непрочитано 03.01.2009, 15:41  
NONAME
Прохожий
 
Регистрация: 07.01.2004
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
NONAME на пути к лучшему
По умолчанию

/*
// здесь разбираем полученное сообщение
switch (at_command_in_tx_bufer)
{
case ATA
case
}*/

потому что это вообще не было сделано
чтобы сделать case ATA, надо чтобы в at_command_in_tx_bufer уже лежала выжимка из посылки в виде текста, пусть тоже ATA

поскольку вопрос изначально стоял о том как обеспечить прием строки, то это и было изложено

а разбор может быть всяко разный
кто то тупо по буквам перебирает строки
кто то ведет анализ по количеству принятых символов (2 значит OK, 4 значит RING)

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

тогда ради решения задачи взял впервые опреционку и о чудо, все стало просто и красиво

поэтому рекоменжую после того как сможешь уверенно получать строки с uart заводи операционку
все делай задачами, одн азадача только ждет сообщения и получив выкидывает в другую ответы


потому что код без операционки типа ждать ОК в течении 2 секунд, на 2 секунды повесит твою систему, с ОС пока одна задача тупо ждет ОК 2 секунды, з аэти 2 секунды будет делать что-то, моргать светодиодами, гудеть тоном и прочее
NONAME вне форума  
Непрочитано 03.01.2009, 15:48  
NONAME
Прохожий
 
Регистрация: 07.01.2004
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
NONAME на пути к лучшему
По умолчанию

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

// хэши известных ответов - вычесленные с 3 символа и по
или :

#define UNDEFINED 0xFFFF // неизвестный ответ " все что угодно "
#define NO_RESPONZE 0x0000 // нет ответа

#define OK 0x75B7 // команда отработана успешно "
OK
"
#define ERROR 0xED6B // команда не отработана "
ERROR
"




проверка в коде
Код:
   Wait_RESPONZE(OK,1000)                             // ждем ответ OK не более 1000 мс
                                                      // если ответ OK     то GSM_ERROR=  0;
                                                      // если TIMEOUT      то GSM_ERROR= 99;
                                                      // если ответ не OK  то GSM_ERROR=100;

и сама инлайн вставка
Код:
#define Wait_RESPONZE(str,timeout)
{
        OS_Wait_MsgT(&at_responze,&msg,timeout);
           if ( OS_Timeout() )
              {
              GSM_ERROR=99;
              }
           else
              {
              p =  (unsigned int *)msg;
              if (*p == str )
                 {
                 GSM_ERROR=0;
                 }
              else
                 {
                 GSM_ERROR=100;
                 }
              }
              RX_flush();
              OS_Clear_Flag(&system_event, modem_busy);
}
поэтому пока в строке OS_Wait_MsgT(&at_responze,&msg,timeout);
задача ждет сообщение at_responze система не висит а работает на других задачах

PS хеш вычисляется табличным способом по сообщению в буфере
NONAME вне форума  
Непрочитано 03.01.2009, 16:01  
NONAME
Прохожий
 
Регистрация: 07.01.2004
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
NONAME на пути к лучшему
По умолчанию

Сообщение от sanitar249
Задача-то, в принципе, тривиально-рутинная...
я бы не сказал, что парсить строки, вести лексический разбор сообщений, которые вываливаются из модуля с временными сдвигами, иногда самостоятельно это тривиально рутиная задача
NONAME вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите со сбросом USART КР580ВВ51А kramolnic Микроконтроллеры, АЦП, память и т.д 19 11.04.2009 13:48
Взаимодействие USART МК PIC16F877 и модема Ksenia_85 Микроконтроллеры, АЦП, память и т.д 4 25.05.2008 11:20
В Delphi принять байт по COM Muzicant Микроконтроллеры, АЦП, память и т.д 16 24.04.2008 14:12
Помогите разобраться с USART в CodeVisionAVR vendim Микроконтроллеры, АЦП, память и т.д 20 26.07.2007 16:42
ПОЖАЛУСТА помогите на 8051 замутить бегущую строку!!! иван Микроконтроллеры, АЦП, память и т.д 0 28.04.2005 21:01


Часовой пояс GMT +4, время: 23:13.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.