MEGA 2560 проблема чтения по UART

MDV
Offline
Зарегистрирован: 08.08.2013

Амиго в продолжении начатой ранее темы. Переустановил IDE в порт стали посылаться команды, модем на них отвечает, но контролер не понимает ответы. Проблема однозначно в софте так как запустил пробный скетч в мониторе порта на АТ запрос получаю правильный ответ.

кусочек кода который на УНО работает прилагаю, почему не работает на МЕГЕ не пойму.

Может, чего посоветуете?



void UART0_rx_on( void )
{
    UCSR0B |= ( 1 << RXCIE0 );
}


void UART0_rx_off( void )
{

    UCSR0B &= ~( 1 << RXCIE0 );
}


void UART0_setSearchString( unsigned char Response )
{
    UCSR0B &= ~( 1 << RXCIE0 );
 searchFor = (const char*)pgm_read_word(&searchStrings[Response]);
    searchStr = Response;
    rx_i = 0;
}

 

MDV
Offline
Зарегистрирован: 08.08.2013

По всей видимости проблема в этом кусочке кода

void GSMClass::WriteStr_P(const char* s)
{
 while (pgm_read_byte(s))
    putchar(pgm_read_byte(s++));
}

// Ждем ответ и возвращаем указатель на него в RAM
void GetResponse(char * pDst)
{
 u8 c, i, f = 0;
 while ((c = getchar()) && (i < 100))
 {
  if ((c != 0x0A) && (c != 0x0D)) 
  { // Если не <CR> и не <LF>, то накапливаем в буфер
   *pDst++ = c;
   //putchar(c);
   i++;
   f++;
  }   
  if (/*(c == 0x0A)||*/(c == 0x0D))
  { //если пришел <CR>   
   if (f > 1) break; // выходим, если принимали хоть один полезный символ
  }   
 } 
 *pDst = 0x00;
}
так как он отвечает за отправку и приём ответа.

 

Radjah
Offline
Зарегистрирован: 06.08.2014

Може твместо второго if прикрутить else для первого? Всяко логичнее будет.

Попробуй еще осциллографом потыкать между землей меги и Tx.

MDV
Offline
Зарегистрирован: 08.08.2013

Осциллографом можно потыкать но как писал ранее проблема софтовая, на проверочном скетче на команды в терминал получаю правильные ответы от модема. 

 

Radjah
Offline
Зарегистрирован: 06.08.2014

А уровни там точно TTL. Может RS232?

Я с одним пирометром в такую засаду попал. Пришлось колхозить преобразователь.

MDV
Offline
Зарегистрирован: 08.08.2013

уровни точно ТТЛ на уно все работает на меге нехочет. на проверочном скетче при отправке в терминале ат команд модем отвечает. считаю что железо работает и проблема в софте

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

кури даташиты, одинаковы ли названия регистров. вот только такая тема проходила, не ты создавал?

там было про отправку через GSM данных на сервер о температуре кажется

Radjah
Offline
Зарегистрирован: 06.08.2014

Если  байда с регистрами, то может таки проще переписать с использованием Serial-Serial3, чем воевать с ветряными мельницами?

Там один хрен всё через Serial.println и Serial.read делаться будет.

MDV
Offline
Зарегистрирован: 08.08.2013

пробовал на сериал 1 не помогло

avgustdon
Offline
Зарегистрирован: 28.02.2016

Помогите разобраться. Залил в мегу простой код.

// Arduino Mega пример использования всех 4 последовательных портов 
// (Serial, Serial1, Serial2, Serial3), 
// с разными скоростями:

void setup(){
 
  Serial2.begin(115200);

  Serial2.println("Hello Serial 2");
 
 
}

void loop() { }

В COM порт ничего не выводит. Пробовал на двух разных платах.

MDV
Offline
Зарегистрирован: 08.08.2013

Добрый день.

Думаю, что во всторенном в IDE мониторе, ты увидишь только если отправлять на Serial0, по остальным нужно подключать конвертер к соответсвующим пинам.