Page 3 of 11

Re: Протокол обмена данными

Posted: 24 Jan 2016, 22:43
by darxfame
alvikagal wrote:Полученные данные ГД и ВЗ:

Code: Select all

uint8_t choke_pos;
uint8_t gasdose_pos;

Что с ними нужно сделать? Умножить на шаг 0,5, чтобы получить проценты?
А можно мне примеры перекинуть? мне с этим тоже разбираться. Ну и отмечусь)

Re: Протокол обмена данными

Posted: 25 Jan 2016, 00:20
by STC
Что с ними нужно сделать? Умножить на шаг 0,5, чтобы получить проценты?
Да.

Re: Протокол обмена данными

Posted: 25 Jan 2016, 00:56
by alvikagal
Скажи, ты программно в менеджере ограничиваешь температуру до -37 или это данные так передаёт. Не могу с температурой разобраться, как вывести на экран отрицательное число.
Делаю так:

Code: Select all

	lcd_com(0xC7);
	if (temperat<0)
		{
		lcd_dat('-');
		data_=temperat*(-1);
		}

Re: Протокол обмена данными

Posted: 25 Jan 2016, 01:01
by STC
Нет, не ограничиваю.
Переменная temperat у тебя в программе какого типа? int или unsigned int

Re: Протокол обмена данными

Posted: 25 Jan 2016, 01:04
by alvikagal
int16_t temperat

Re: Протокол обмена данными

Posted: 25 Jan 2016, 01:08
by alvikagal
Разобрался.

Code: Select all

	uint16_t temperat_;
	int16_t temperat;

	temperat_ = SENSOR_DAT[6];		// coolant temperature	
	temperat_ = (temperat_<<8) + SENSOR_DAT[7];
	temperat=(int16_t)temperat_;
	temperat=temperat*2.5;

Re: Протокол обмена данными

Posted: 25 Jan 2016, 02:32
by STC
А зачем на 2.5 умножается? Там нужно делить на 4.0, а не умножать на 2.5
Значение в пакете данных, приходящее от SECU-3 это значение умноженное на 4 (дискретность 0.25 градуса).

Re: Протокол обмена данными

Posted: 25 Jan 2016, 19:14
by alvikagal
Ага, спасибо, теперь понял свою ошибку. Буду умножать на 0.25, в целях экономия места программе. Деление больше места и времени занимает.
Уже вывел данные пакета на LCD20*04, пока влазит в atmega8, но наверно придётся переходить на atmega328, чтобы мой гомнокод влез с желаемыми функциями.
Спасибо, Алексей за помощь.

Re: Протокол обмена данными

Posted: 25 Jan 2016, 20:37
by STC
Да, лучше перейти на 328, так как числа с плавающей запятой сжирают много ресурсов, но когда мало опыта в программировании, то лучше так, чем извращаться как я с целыми числами. Тем более, что цена 328 не сильно отличается от 8.
Главное, не используй операции с палавающей запятой в прерываниях.

Re: Протокол обмена данными

Posted: 01 Feb 2016, 14:18
by Samtorr
alvikagal wrote: Буду умножать на 0.25, в целях экономия места программе.
В целях экономии места лучше сделать так:

Code: Select all

x>>2
Хотя, умный компилятор и сам так сделает