roboforum.ru

Технический форум по робототехнике.
Текущее время: 26 ноя 2024, 21:36

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: CRС
СообщениеДобавлено: 27 окт 2005, 01:19 
Не в сети
Мастер Самоделкин
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CRС
СообщениеДобавлено: 27 окт 2005, 04:19 
Не в сети

Зарегистрирован: 30 апр 2005, 03:11
Сообщения: 212
Откуда: Москва
прог. языки: C/C++, Verilog
ФИО: Гвоздев Александр Борисович
-= Александр =- писал(а):
Сабж... В чем суть? Чем отличаются CRC8, CRC16, CRC32?  :roll:
И чего из них оптимальней для защиты радиоканала средней паршивости от помех??

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

От _помех_ защищают не они. Они только сигнализируют о помехе.
Для защиты от помех обычно применяются свёрточные, блочные коды, перемежение и т.д.
Если интересно - могу рассказать, занимаюсь этим по работе.
На коленке такое трудно сделать. И без ПЛИС'ов трудно будет :).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 окт 2005, 09:03 
Не в сети

Зарегистрирован: 27 окт 2005, 07:36
Сообщения: 4
Откуда: Новосибирск
Цитата:
И без ПЛИС'ов трудно будет

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 окт 2005, 09:05 
Не в сети
Аватара пользователя

Зарегистрирован: 11 июл 2005, 15:27
Сообщения: 135
Откуда: Ekaterinburg
Chipper писал(а):
И вообще из моего опыта: иногда проще продублировать посылку, чем заниматься отысканием и исправлением ошибок...


Это по моему тоже наилучшее решение. На таком принципе море девайсов общаються.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 окт 2005, 12:01 
Не в сети
Мастер Самоделкин
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 окт 2005, 14:01 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 окт 2005, 14:38 
Не в сети
Аватара пользователя

Зарегистрирован: 24 ноя 2004, 12:36
Сообщения: 195
Откуда: Харьков
//-----------------------------------------------------
// 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);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 окт 2005, 15:27 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 окт 2005, 18:53 
Не в сети
Мастер Самоделкин
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 28 окт 2005, 07:21 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CRС
СообщениеДобавлено: 14 ноя 2005, 18:46 
Не в сети
Аватара пользователя

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

Вообще, чем "длиннее" CRC, тем меньше вероятность прохождения "неотловленной" ошибки (так называемого "ложняка"). CRC8 всё-же маловато для радиоканала. Кстати, CRC бывает не только 8, 16, 32, но и любое другое число :)
Кстати, проблема не только в длине полинома, но и в его виде. Подробней можно почитать вот тут:


Вложения:
CRC_rus.rar [166.83 КиБ]
Скачиваний: 253
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 ноя 2005, 07:47 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Немного не в тему (Круговой ИК датчик)
СообщениеДобавлено: 16 ноя 2005, 18:01 
Не в сети

Зарегистрирован: 16 ноя 2005, 16:49
Сообщения: 20
Откуда: Москва
День добрый, Александр!

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

Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 18 ноя 2005, 19:48 
Не в сети
Мастер Самоделкин
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 4 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO