Страница 1 из 1

Детектор ошибок как скорректировать прогу?

Добавлено: Сб мар 23, 2013 16:06:57
otmyavrozok
Доброго времени суток уважаемые обитатели сайта!
МК(мега48) фиксирует ошибочные состояния системы из 6 датчиков,получая информацию через UART,5 замеров кодированы в 5 8-битных чисел,где каждый бит соответствует состоянию датчика,два младших бита всегда 0.Ошибка ,по логике работы схемы,будет,если не менее 4
из 5 значений любого бита будут одинаковы. Уффф... :write:
К сожалению, творцы этого чуда ошиблись,и мк реагирует,только на неизменность всех 6 бит,т.е.ошибку 6 датчиков :o
Помогите сообразить алгоритм для правильной функции,я пока,не могу....

Re: Детектор ошибок как скорректировать прогу?

Добавлено: Пн мар 25, 2013 09:29:18
Gudd-Head
Нужен просто факт ошибки, или указание на конкретный датчик?

Re: Детектор ошибок как скорректировать прогу?

Добавлено: Пн мар 25, 2013 13:18:45
Goldsmith
otmyavrozok писал(а):Ошибка ,по логике работы схемы,будет,если не менее 4
из 5 значений любого бита будут одинаковы.
Попробуйте в таком духе:

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

// максимально допустимое кол-во совпадающих бит
#define MAX_EQUAL_BITS 3
// маска старшего проверяемого бита
#define MAXBIT_MASK 0x80
// маска младшего проверяемого бита
#define MINBIT_MASK 0x04

/*
  Функция проверки выборки на наличие ошибки.
  Первый параметр - массив выборок, второй - длина этого массива.
  Если n-й бит результата установлен, это означает, что в данном бите выборки условие не выполнено.
  Если результат = 0, проверка выполнилась успешно.
*/
uint8_t errCheck(uint8_t sample[], int sampleLen)
{
	uint8_t result = 0;

	for (uint8_t mask = MAXBIT_MASK; mask >= MINBIT_MASK; mask >>=1)
	{
		int oneCnt = 0;
		for (int nQuan = 0; nQuan < sampleLen; nQuan++)
		{
			if (sample[nQuan] & mask)
			{
				oneCnt++;
			}
		}

		if ((oneCnt < (SAMPLE_QUAN - MAX_EQUAL_BITS)) || (oneCnt > MAX_EQUAL_BITS))
		{
			result |= mask;
		}
	}

	return result;
}

Только проверьте, пожалуйста. У меня не было возможности протестировать.

Re: Детектор ошибок как скорректировать прогу?

Добавлено: Вт мар 26, 2013 14:39:37
otmyavrozok
Опрос датчиков и регулировение осуществляет 16-битный мотороловский контроллер,инфу он выводит в виде 0-состояние датчика не изменилось,1-изменилось,ошибка(условное название,на процесс регулирования не влияет,определяет корректность данных)будет,если на интервале времени датчик не меняет состояние или меняет непрерывно.Изначально я думал подключиться к шине опроса датчиков,но разобраться с тамошним протоколом не смог :oops:.Идентифицировать конкретный датчик выдающий ошибку,возможно для определения аппаратных проблем,но хоть бы с необходимым разобраться. :roll:

Re: Детектор ошибок как скорректировать прогу?

Добавлено: Вт мар 26, 2013 14:47:23
otmyavrozok
Уважаемый Goldsmith,проверю,когда доберусь до компа,отпишусь.