UART в PIC18F2620 и GSM-shield на базе SIM900

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Родился
Сообщения: 10
Зарегистрирован: Вт мар 24, 2015 16:37:21
Откуда: Kharkov

Сообщение UserCat »

Доброго всем времени суток!

Опишу сразу задачу, потом проблему.

Необходимо связать через UART микроконтроллер PIC18F2620 и gsm-модуль http://g02.a.alicdn.com/kf/HTB1je20JXXX ... r-font.jpg
Прошивка написана (почти). Контроллер при подключении к ноуту через MAX232 и адаптер USB-RS232 просто на ура обменивается данными в обе стороны.
GSM-модуль также отлично взаимодействует с ноутом через то же подключение.

Теперь проблема:
при подключении этих двух устройств друг к другу контроллер не получает данные от модуля.
При этом отправляет нормально - модуль их корректно принимает. Проверено следующим образом: у модуля есть несколько uart-портов и он по умолчанию шлет эхом на все порты данные, которые принимает по любому из них. Т.е. у меня при подключении цепочки "комп - модуль - контроллер" данные, отправленные с контроллера, нормально принимаются на компе, а также на компе принимается ответ модуля на посланную команду. Контроллер же ничего не принимает - ни эхо на свои посылки, ни ответ, ни эхо на посылки с компьтера.

Предпринятые меры: пробовал подтягивать Rx на контроллере к питанию через 47k, 15k, 10k, 4,7k, 2,2k - ничего не помогает. Вроде как, судя по всему, какая-то аппаратная беда с пином контроллера, но при подключении его к компу все отлично работает без каких-либо потерь данных.

Я неочень силен именно в схемотехнике, по сему прошу знающих людей откликнуться и помочь найти причину такого поведения схемы.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25583
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Если контроллер не принимает свое же эхо, то 99%, что неправильно выбрана полярность у приемника (передатчик не обсуждается, поскольку модуль с ним работает).
Покажите инициализацию UARTa.
Реклама
Родился
Сообщения: 10
Зарегистрирован: Вт мар 24, 2015 16:37:21
Откуда: Kharkov

Сообщение UserCat »

Спойлер

Код: Выделить всё

void Init_USART(unsigned char SpeedNumber){
	
 	unsigned int _value = 0;
	if(SpeedNumber == 1){			// 1200
		_value = 8332;
	}else if(SpeedNumber == 2){		// 2400
		_value = 4165;
	}else if(SpeedNumber == 4){		// 19200
		_value = 520;
	}else if(SpeedNumber == 5){		// 57600
		_value = 172;
	}else{							// 9600
		_value = 1040;
	}
	
	TRISCbits.RC6 = 0; //TX pin set as output
	TRISCbits.RC7 = 1; //RX pin set as input
	BAUDCONbits.BRG16 = 1;
	TXSTAbits.BRGH = 1;
	SPBRG = (unsigned char)(_value%256);
	SPBRGH = (unsigned char)(_value/256);
	
	IPR1bits.RCIP = 1; // высокий приоритет прерывания от приемника USART
	IPR1bits.TXIP = 1; // высокий приоритет прерывания от передатчика USART
	
	TXSTAbits.SYNC = 0; // асинхронный режим
	RCSTAbits.SPEN = 1; // uart on
	PIE1bits.RCIE = 1;  // прерывания по приему включены
	PIE1bits.TXIE = 1;  // прерывания по передаче включены
	
	RCSTAbits.CREN = 1; // receiving enabled
	
}
Контроллер не принимает только передачу от модуля, если замкнуть на контроллере Rx-Tx, то свои данные он принимает. Ну и от компа, как я уже говорил, тоже принимает. Догадываюсь, что там получается какая-то несогласованность то ли по уровням, то ли еще хз по чему... Но я в схемотехнике неочень, к сожалению...

В принципе, я уже придумал "костыль", который решил проблему, поставил между модулем и контроллером max232 по схеме UART <-> RS232 <-> UART. Сразу на два канала в ту и в обратную сторону на всякий случай.

Но все таки хотелось бы разобраться, в чем же причина такого поведения схемы.
Открыл глаза
Сообщения: 76
Зарегистрирован: Вт апр 05, 2016 19:00:29
Откуда: Ростовская обл. Новочеркасск

Сообщение Stewart »

UserCat писал(а):поставил между модулем и контроллером max232 по схеме UART <-> RS232 <-> UART. Сразу на два канала в ту и в обратную сторону на всякий случай.
Осцилом сигналы без 232-ой посмотреть? Проблема с уровнями сигналов. Возможно из-за включенной/выключенной/"не_туда" подтяжкой уровня?
Ох уж эти сказки...
Ох уж эти сказочники...
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 10
Зарегистрирован: Вт мар 24, 2015 16:37:21
Откуда: Kharkov

Сообщение UserCat »

Пытался=) Проблема в том, что я ж не могу заставить gsm-модуль слать данные бесконечно. А словить на осциле единичную посылку проблематично - я ее вижу на долю секунды. Попробую еще покопаться в настройках осциллографа - там вроде где-то такое было, чтобы он ожидал начала сигнала и потом фиксировал показания. В крайнем случае можно будет написать скрипт, делающий в цикле посылку какого-то байта в модуль на один порт, а на другом слушать эхо. Найти бы время на это...

Хотя, можно и одним портом обойтись для этого :) Почему-то мне сразу такая идея не пришла...
Реклама
Ответить

Вернуться в «PIC»