CRС

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

CRС

Сообщение -= Александр =- » 27 окт 2005, 01:19

Сабж... В чем суть? Чем отличаются CRC8, CRC16, CRC32?  :roll:
И чего из них оптимальней для защиты радиоканала средней паршивости от помех??
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: CRС

Сообщение gab » 27 окт 2005, 04:19

-= Александр =- писал(а):Сабж... В чем суть? Чем отличаются CRC8, CRC16, CRC32?  :roll:
И чего из них оптимальней для защиты радиоканала средней паршивости от помех??

Вероятностью обнаружения ошибки :).

От _помех_ защищают не они. Они только сигнализируют о помехе.
Для защиты от помех обычно применяются свёрточные, блочные коды, перемежение и т.д.
Если интересно - могу рассказать, занимаюсь этим по работе.
На коленке такое трудно сделать. И без ПЛИС'ов трудно будет :).
gab
 
Сообщения: 212
Зарегистрирован: 30 апр 2005, 03:11
Откуда: Москва
прог. языки: C/C++, Verilog
ФИО: Гвоздев Александр Борисович

Сообщение Chipper » 27 окт 2005, 09:03

И без ПЛИС'ов трудно будет

А ПЛМ-то зачем? Все решается на уровне софта. Это если ресурсов совсем не хватает, тогда придется извращаться. Смотря какой контроллер...
А по исправлению ошибок можно посмотреть коды Хэмминга например. И вообще из моего опыта: иногда проще продублировать посылку, чем заниматься отысканием и исправлением ошибок...
Chipper
 
Сообщения: 4
Зарегистрирован: 27 окт 2005, 07:36
Откуда: Новосибирск

Сообщение Sergey » 27 окт 2005, 09:05

Chipper писал(а):И вообще из моего опыта: иногда проще продублировать посылку, чем заниматься отысканием и исправлением ошибок...


Это по моему тоже наилучшее решение. На таком принципе море девайсов общаються.
Аватара пользователя
Sergey
 
Сообщения: 135
Зарегистрирован: 11 июл 2005, 15:27
Откуда: Ekaterinburg

Сообщение -= Александр =- » 27 окт 2005, 12:01

Идея собсно такая: связь на китайских р/у девайсах. Качество там средней паршивости. Надо просто найти ошибку и попросить повторную передачу. Кодировать ничего не буду, просто прямая передача Манчестерским кодом. Реализация в виде переходников радио-RS232 на ATTINY2313. Не густо конечно, но ресурсов достаточно вполне. Кто-нить знает как работает CRC8, а то в нете все про 16...
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Сообщение Chipper » 27 окт 2005, 14:01

Так а разница-то в чем? Только полином меняется. 8-ми разрядные входные данные - 8-ми разрядный CRC. Проще всего вычислять по таблице (табличный метод). Быстрее него ничего не работает...
Chipper
 
Сообщения: 4
Зарегистрирован: 27 окт 2005, 07:36
Откуда: Новосибирск

Сообщение Tracer » 27 окт 2005, 14:38

//-----------------------------------------------------
// CRC8 calculator
// Typical usage:
// lastcrc8=0; // Clear the CRC value
// for(i=0;i<8;i++) { // Calculate the CRC
// lastcrc8=CRC_Calc8Bit(lastcrc8,tmp_serial_num[i]);
// }
unsigned char CRC_Calc8Bit (unsigned char crc, unsigned char val) {
unsigned char inc, tmp;

for(inc = 0; inc < 8; inc++) {
tmp = crc << 7; // save X7 bit value
crc >>= 1; // shift crc
if((tmp >> 7) ^ (val & 0x01)) { // if X7 xor X8 (input data)
crc ^= 0x8c; // xor crc with X4 and X5, X1 = X7^X8
crc |= 0x80; // carry
}
val >>= 1;
}
return(crc);
}
Аватара пользователя
Tracer
 
Сообщения: 195
Зарегистрирован: 24 ноя 2004, 12:36
Откуда: Харьков

Сообщение Chipper » 27 окт 2005, 15:27

Так гораздо быстрее будет...
 crc=0;
 for (i=0;i=N;i++)
 {
   crc = CRCTBL[(crc ^ DatBuf[i]) & 0xFF];
 }
Правда места займет гораздо больше (CRCTBL - таблица 256 байт). Если с местом напрягов нет, то так удобнее...
Chipper
 
Сообщения: 4
Зарегистрирован: 27 окт 2005, 07:36
Откуда: Новосибирск

Сообщение -= Александр =- » 27 окт 2005, 18:53

Ясно. Пасибо!  :D
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Сообщение Chipper » 28 окт 2005, 07:21

Хемминг действительно найдет и исправит... но во что это обойдется? Огород не стоит городить из-за 5-10 байт. Проще повторить посылку по факту несовпадения CRC...
Chipper
 
Сообщения: 4
Зарегистрирован: 27 окт 2005, 07:36
Откуда: Новосибирск

Re: CRС

Сообщение GxOST » 14 ноя 2005, 18:46

-= Александр =- писал(а):Сабж... В чем суть? Чем отличаются CRC8, CRC16, CRC32?  :roll:
И чего из них оптимальней для защиты радиоканала средней паршивости от помех??

Вообще, чем "длиннее" CRC, тем меньше вероятность прохождения "неотловленной" ошибки (так называемого "ложняка"). CRC8 всё-же маловато для радиоканала. Кстати, CRC бывает не только 8, 16, 32, но и любое другое число :)
Кстати, проблема не только в длине полинома, но и в его виде. Подробней можно почитать вот тут:
Вложения
CRC_rus.rar
(166.83 КиБ) Скачиваний: 253
Аватара пользователя
GxOST
 
Сообщения: 4
Зарегистрирован: 14 ноя 2005, 17:30
Откуда: Санкт-Петербург

Сообщение Daiver » 15 ноя 2005, 07:47

To -= Александр =-
Может не много не в тему, но в ноябрьском номере журнала "Радио" за 2005 год было полное описание системы ДУ на МК AVR2313. Возможность передачи до 16-ти команд. Посмотри - может не надо будет изобретать "велосипед"  :lol:
Если нет возможности посмотреть - могу отсканить статью и выслать на мыло.
Daiver
 
Сообщения: 26
Зарегистрирован: 01 июн 2005, 07:38
Откуда: г.Чита

Немного не в тему (Круговой ИК датчик)

Сообщение Airat » 16 ноя 2005, 18:01

День добрый, Александр!

Встретил на roboclub.ru круговой ИК датчик, хотел узнать чем закончилось... Идея понравилась, думаю сделать такой же.
Что скажете по своему опыту?

Спасибо.
Airat
 
Сообщения: 20
Зарегистрирован: 16 ноя 2005, 16:49
Откуда: Москва

Сообщение -= Александр =- » 18 ноя 2005, 19:48

Ну, штуковина получилась отличная, ждет своегно применения. У тех роботов что уже построены есть свои ИК-датчики. Думаю строить баллансирующего, вот на него эту "шляпу" и одену. Тока он пока-что все еще в задумке. Хотя детальки из хлама уже приглядываются, недавно пару здоровых колес от какой-то ломаной игрушки свинтил и моторчики подобрал. По поводу датчика - работает до двух метров, с небольшим перекрытием диодов, без мертвых зон. Диоды включаются по кругу, каждый по две пачки импульсов. ШИМ пробовал делать м конденсатором, но ТСОПу не понравилось, надо попробовать частотв побольше и фильтрацию получше. В крайнем случае поставлю ЦАП. Очень уж хочется не только есть/нету, но и хоть какое-то расстояние знать...  :wink:
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 8