MEGA 2560 проблема чтения по UART
- Войдите на сайт для отправки комментариев
Пнд, 29/09/2014 - 23:25
Амиго в продолжении начатой ранее темы. Переустановил 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;
}
По всей видимости проблема в этом кусочке кода
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; } так как он отвечает за отправку и приём ответа.Може твместо второго if прикрутить else для первого? Всяко логичнее будет.
Попробуй еще осциллографом потыкать между землей меги и Tx.
Осциллографом можно потыкать но как писал ранее проблема софтовая, на проверочном скетче на команды в терминал получаю правильные ответы от модема.
А уровни там точно TTL. Может RS232?
Я с одним пирометром в такую засаду попал. Пришлось колхозить преобразователь.
уровни точно ТТЛ на уно все работает на меге нехочет. на проверочном скетче при отправке в терминале ат команд модем отвечает. считаю что железо работает и проблема в софте
кури даташиты, одинаковы ли названия регистров. вот только такая тема проходила, не ты создавал?
там было про отправку через GSM данных на сервер о температуре кажется
Если байда с регистрами, то может таки проще переписать с использованием Serial-Serial3, чем воевать с ветряными мельницами?
Там один хрен всё через Serial.println и Serial.read делаться будет.
пробовал на сериал 1 не помогло
Помогите разобраться. Залил в мегу простой код.
// Arduino Mega пример использования всех 4 последовательных портов // (Serial, Serial1, Serial2, Serial3), // с разными скоростями: void setup(){ Serial2.begin(115200); Serial2.println("Hello Serial 2"); } void loop() { }В COM порт ничего не выводит. Пробовал на двух разных платах.
Добрый день.
Думаю, что во всторенном в IDE мониторе, ты увидишь только если отправлять на Serial0, по остальным нужно подключать конвертер к соответсвующим пинам.