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

.Идентифицировать конкретный датчик выдающий ошибку,возможно для определения аппаратных проблем,но хоть бы с необходимым разобраться.

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