Форум программистов, компьютерный форум, киберфорум
Радио: приемники, передатчики, антенны
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/96: Рейтинг темы: голосов - 96, средняя оценка - 4.75
29 / 13 / 0
Регистрация: 08.08.2011
Сообщений: 190
1

SIM900. Работа с Usart

08.05.2013, 19:13. Просмотров 19653. Ответов 62
Метки нет (Все метки)

День добрый всем. В рамках моего проекта, увы очень долгого, дошла очередь до общения ATMega16A с SIM900 по UART. Долго я не мог наладить работу на прерываниях, узнав через неделю усилй и плясок с бубном что оказывается файл iom16a.h содержит кучу ошибок, и обновив АВР Студию прерывания заработали, но это так, просто поделиться
Так вот, для UART я использую кольцевой буфер с по статье этого сайта. Суть в том, что чтобы не терять данные и не заставлять МК простаивать в ожидании очистки UDR, они по приходу/отправке складываются в буфер нужного размера, остается их от туда забрать/положить когда нужно. Так вот, при отправке(сейчас стоит рассмотреть только ее, хотя и с получением не все гладко), используется данная функция:
Кликните здесь для просмотра всего текста

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//помещает символ в буфер, инициирует начало передачи
void USART_PutChar(unsigned char sym)
{
  //если модуль usart свободен и это первый символ
  //пишем его прямо в регистр UDR
  if(((UCSRA & (1<<UDRE)) != 0) && (txCount == 0)) UDR = sym;
  else {
    if (txCount < SIZE_BUF){    //если в буфере еще есть место
      usartTxBuf[txBufTail] = sym; //помещаем в него символ
      txCount++;                   //инкрементируем счетчик символов
      txBufTail++;                 //и индекс хвоста буфера
      if (txBufTail == SIZE_BUF) txBufTail = 0;
    }
  }
}

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

C
1
2
3
4
5
6
7
8
9
10
//обработчик прерывания по завершению передачи 
ISR(USART_TXC_vect)
{
  if (txCount > 0){              //если буфер не пустой
    UDR = usartTxBuf[txBufHead]; //записываем в UDR символ из буфера
    txCount--;                   //уменьшаем счетчик символов
    txBufHead++;                 //инкрементируем индекс головы буфера
    if (txBufHead == SIZE_BUF) txBufHead = 0;
  } 
}

Все ОК, эта конструкция работает в протеусе, НО, если мы хотим отправит строку:
Кликните здесь для просмотра всего текста

C
1
2
3
4
5
6
7
8
9
//функция посылающая строку по usart`у
void USART_SendStr(char * data)
{
  unsigned char sym;
  while(*data){
    sym = *data++;
    USART_PutChar(sym);
  }
}

То просто ничего не происходит, тут я если честно не силен с ссылками, просто не понимаю что не так.
Ок, берем топопр :
Кликните здесь для просмотра всего текста

C
1
2
3
4
5
6
7
8
9
10
// функция посылающая строку по usart`у 2
void USART_SendStr2(unsigned char s)
{
    register char c;
 
    while ( (c = s++) ) {
        USART_PutChar(c);
    }
 
}

И тут самое смешное: если отправить 1 символ - присылает русские буквы и символы что есть(все), если 2 символа - английские, если больше, то вообще крякозябры

Единственное место где я могу проверить на железе - модуль, но вот он пока не отвечает на мои запросы , только при включении шлет 4 символа с кодом 255, и при выключении NORMAL POWER DOWN, или как то так, у меня дисплей 8 символов, не влезает все
Поделитесь мыслями?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2013, 19:13
Ответы с готовыми решениями:

Sim900 vs SIM900 GSM/GPRS MINIMUM SYSTEM MODULE
Каково ваше мнение, стоит ли переплачивать за модуль 100% стоимости(MINIMUM SYSTEM MODULE примерно...

ARDUINO R3 + SIM900 = web client
Вот на таком железе (так нужно, ибо уже приобретено) ...

Работа с смс сообщениями с помощью SIM900
Есть задача сделать устройство, которое будет принимать смс сообщение и обрабатывать его...

Работа с USART PIC16F877A
Написал прогу для приёма одного байта...в mplab Ide 8.46 работает...а в mplab x IDE 2.2 не работает...

62
10205 / 6587 / 493
Регистрация: 28.12.2010
Сообщений: 21,165
Записей в блоге: 1
17.05.2013, 23:04 61
Это вы что имеете ввиду?
...прошивка терминала.

Не по теме:

Кстати, терминал (как и прочие отдельные современные модели других фирм) поддерживает выполнение java-скриптов прямо внутри, дополнительный внешний МК в некоторых случаях может и не понадобится.

0
10205 / 6587 / 493
Регистрация: 28.12.2010
Сообщений: 21,165
Записей в блоге: 1
18.05.2013, 17:17 62
TC, вам пригодится материальчик ниже по simcom (оно конечно не еррата и по sim300, но общий подход сохраняется):
0
Вложения
Тип файла: pdf укрощение модулей симком.pdf (208.9 Кб, 145 просмотров)
10205 / 6587 / 493
Регистрация: 28.12.2010
Сообщений: 21,165
Записей в блоге: 1
07.06.2014, 18:18 63
Особенности схемотехники при разработке устройств на модулях SIM300:
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2014, 18:18

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Работа с портами и USART в МК51
ребят, подскажите пожалуйста, если не трудно, преподаватель задал вот такую задачу Исходные...

"параллельная" работа SPI и USART
Доброе время суток !!! в МК есть два массива. В первый массив записываются данные из USORT, в...

Работа с USART ATMega128 (ASM)
Добрый вечер! Возникла небольшое недопонимание по программе. Программа вроде бы простая,да...

xmega: usart - какой глубины буфер в USART?
Взялся тут &quot;запилить&quot; на xmego32a4 мультиплексор двух rs232 в один rs485. Все как бы получилось и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
63
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.