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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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.RU
 
Аватар для sanitar249
 
Регистрация: 19.01.2007
Сообщений: 1,747
Сказал спасибо: 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, время: 13:36.


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