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, чтобы получить проценты?