Page 2 of 11

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

Posted: 21 Sep 2015, 00:39
by alvikagal
Последний релиз.

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

Posted: 21 Sep 2015, 10:13
by dimonfish
хорошая тема! отмечусь :)

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

Posted: 07 Oct 2015, 21:51
by alvikagal
Продолжаю разбираться как принять данные от СЕКУ.
Есть массив:

Code: Select all

uint16_t SENSOR_DAT[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26};
Правильно ли так искать начало пакета для датчиков и записывать пакет данных в массив?

Code: Select all

//Функция приёма данных
void USART_Transmit(void)
{
	while (!(UCSRA & (1<<RXC))); 	// Ожидание буфера	
	if (UDR=0x40)
		{
		while (!(UCSRA & (1<<RXC))); 	// Ожидание обуфера
		if (UDR=0x71)
			{
			for (int i=0;i<27;i++)		// Присваиваем переменной i значение 0 и выполняем тело цикла и каждый цикл прибавляем по 1 к i
				{
					while (!(UCSRA & (1<<RXC))); 	// Ожидание буфера			
					uint8_t TempH=UDR;				// Копируем старший байт из буфера
					while (!(UCSRA & (1<<RXC))); 	// Ожидание буфера			
					uint8_t TempL=UDR;				// Копируем старший байт из буфера
					Temp=TempH;			
					Temp=Temp<<8;					// Копируем первые 8 бит сдвинув их влево 
					Temp=TempL;						// Копируем последние 8 бит
					SENSOR_DAT[i]=Temp;				// Копируем 2 байта (16 бит) данных в массив
				}
			}
		}
	else   //игнорируем пакет
	{}	
} 


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

Posted: 08 Oct 2015, 10:36
by donec
alvikagal wrote: Правильно ли так искать начало пакета для датчиков и записывать пакет данных в массив?

Code: Select all

//Функция приёма данных
void USART_Transmit(void)
{...
Для чего у тебя эта функция, для компьютера или микропроцессора?

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

Posted: 08 Oct 2015, 10:48
by alvikagal
Делаю типа БК для СЕКУ, только вывод данных на экран и всё.
Связь МК-МК.
Это я копипастил из предыдущих уроков, а английский на 0 уровне у меня.

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

Posted: 08 Oct 2015, 11:32
by donec
Насколько Я понимаю СИ, а Я его практически не знаю, то из функции выхода не будет пока не будет принят весь пакет данных, как мне кажется правильнее вести прием данных в фоновом режиме, и по мере их поступления обрабатывать, так больше свободного времени у МК будет.

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

Posted: 08 Oct 2015, 12:42
by STC
alvikagal, посмотри тот готовый пример что я скидывал на предыдущих страницам. Там уже все готово для работы в фоновом режиме.

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

Posted: 08 Oct 2015, 20:29
by alvikagal
Я его смотрел и сделал приём через функцию, позже можно будет и прерывание попробовать.
UART1 я понял как работает, а вот UART2 многое вообще не понял.
Мне сейчас нужно как-то сохранять полученные данные и потом их обрабатывать. Я попробовал через массив, т.к. понимаю. Моего уровня не хватает, чтобы разобраться в исходниках, т.к. не понимаю вообще некоторый код, что он делает.
Проверить полноценно написанную подпрограмму пока не смог, т.к. не получается в Протеусе создать модель Мега644, чтобы с СЕКУ получать пакет данных, а в железе ещё пока нет стенда для испытаний (собираю).
Как например сохранять полученные 8 бит, если переменная 16 бит и писать её сразу в переменную или в массив, как я это сделал?
Спасибо за помощь. ;)

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

Posted: 09 Oct 2015, 13:29
by Yurii
alvikagal wrote: создать модель Мега644
Начинал БК с графическим индикатором, создал примитив SECU в протезе.
Тормозит страшно, вродибы и машина не слабенькая.
На втором листе проц БК на 644, на третьем SECU (на 32) и иммитатор ДПКВ.
Будет от чего оттолкнуться.

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

Posted: 24 Jan 2016, 18:56
by alvikagal
Полученные данные ГД и ВЗ:

Code: Select all

uint8_t choke_pos;
uint8_t gasdose_pos;

Что с ними нужно сделать? Умножить на шаг 0,5, чтобы получить проценты?