ilian 0 16 августа, 2007 Опубликовано 16 августа, 2007 · Жалоба Привет, У меня такая задача. Нужно работает по RS-485 , RF наводки по кабелем болшие. PC мастер и управляет 6 MSP430.Сейчас у меня протокол простой и нет CRC. Если кто нибутъ может предложит хорошии протокол и литература для CRC-16. Спосиба. Илиян Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 16 августа, 2007 Опубликовано 16 августа, 2007 · Жалоба По RS-485 большие наводки??? Странно, как же так. Они однозначно должны быть синфазные, т.е. на входе приемника они должны исчезнуть при вычитании. Или я чего-то не понимаю. Может быть простой контрольной суммы будет достаточно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilian 0 16 августа, 2007 Опубликовано 16 августа, 2007 · Жалоба По RS-485 большие наводки??? Странно, как же так. Они однозначно должны быть синфазные, т.е. на входе приемника они должны исчезнуть при вычитании. Или я чего-то не понимаю. Может быть простой контрольной суммы будет достаточно. Наводки я имею предвид що среда агресивная. Да CRC должна работает харашо.У меня нужна литература по CRC16 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syv 0 16 августа, 2007 Опубликовано 16 августа, 2007 · Жалоба Наводки я имею предвид що среда агресивная. Да CRC должна работает харашо.У меня нужна литература по CRC16 Начните с описания стандартного протокола Modbus/RTU или какого еще. В такого рода вещах лучше не заниматься отсебятиной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yura_K 0 16 августа, 2007 Опубликовано 16 августа, 2007 · Жалоба Я изучал CRC по файлу CRC Guide. Смотрите в приложении. crcguide.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilian 0 16 августа, 2007 Опубликовано 16 августа, 2007 · Жалоба Я изучал CRC по файлу CRC Guide. Смотрите в приложении. Болшое Спосиба! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAI 0 17 августа, 2007 Опубликовано 17 августа, 2007 · Жалоба #if !defined( BYTE ) #define BYTE unsigned char #endif #if !defined( WORD ) #define WORD unsigned short #endif /* --- crc16() -------------------------------------------------------------------------------------------- ** * Контрольная сумма crc16 * BYTE *buf - указатель на байтовый буфер * short num - размер буфера в байтах * Возвращает * unsigned short crc16 буфера * -------------------------------------------------------------------------------------------------------- */ WORD crc16( BYTE *buf, WORD num ) { int i; unsigned short crc = 0xffff; while ( num-- ) { crc ^= *buf++; i = 8; do { if ( crc & 1 ) crc = ( crc >> 1 ) ^ 0xa001; else crc >>= 1; } while ( --i ); } return( crc ); } /* --- crc8() --------------------------------------------------------------------------------------------- ** * Контрольная сумма crc8 * BYTE *buf - указатель на байтовый буфер * short num - размер буфера в байтах * Возвращает * BYTE crc8 буфера * -------------------------------------------------------------------------------------------------------- */ BYTE crc8( BYTE *buf, WORD num ) { int i; BYTE chr, crc = 0; while ( num-- ) { chr = *buf++; i = 8; do { crc = (( chr ^ crc ) & 1 ) ? ((( crc ^ 0x18 ) >> 1 ) | 0x80 ) : (( crc >> 1 ) & ~0x80 ); chr >>= 1; } while ( --i ); } return( crc ); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shasik 0 17 августа, 2007 Опубликовано 17 августа, 2007 · Жалоба Небольшое дополнение к сказанному VAI: его программулину пихаем не в MSP, а в PC, вычисляем массив констант и уже эти константы пихаем в MSP. Так быстрее будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAI 0 17 августа, 2007 Опубликовано 17 августа, 2007 · Жалоба Небольшое дополнение к сказанному VAI: его программулину пихаем не в MSP, а в PC, вычисляем массив констант и уже эти константы пихаем в MSP. Так быстрее будет. Пихаем и в MSP и в РС. А съэкономленные микросекунды, по сравнению со временем передачи.... P.S. Не забыть, что в IAR для MSP по умолчанию - выравниванивание по словам, т.е. по 2 байта. Надо в PC установить такое-же при описании принимаемых данных. Надежнее один и тот-же файл применять и в PC и в MSP... Пример: /* -------------------------------------------------------------------------------------------------------- ** * Директива "#pragma pack()" работает одинакого в "MSP430 IAR C/EC++ Compiler" и "Borland C++Builder" и "VC" * -------------------------------------------------------------------------------------------------------- */ #pragma pack( 2 ) // выравнивание по 2-м байтам, в MSP дает оптимальный код typedef struct { short reset_status; volatile unsigned short t_tick; // при измерении температуры делает ++ signed char term_f; signed char term_q; signed char term_m; } termometer; typedef struct { double ratio; double Zero; } predesign; typedef struct { float gse[gse_cnt]; predesign pre_gse[ch_cnt]; struct { short delta; float Paskal; } pressure; float mabda; unsigned short axue; unsigned long tick_ms;работы прибора termometer term_data; } TM2_result; #pragma pack() // выравнивание по умолчанию Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilian 0 17 августа, 2007 Опубликовано 17 августа, 2007 · Жалоба Пихаем и в MSP и в РС. А съэкономленные микросекунды, по сравнению со временем передачи.... P.S. Не забыть, что в IAR для MSP по умолчанию - выравниванивание по словам, т.е. по 2 байта. Надо в PC установить такое-же при описании принимаемых данных. Надежнее один и тот-же файл применять и в PC и в MSP... Пример: /* -------------------------------------------------------------------------------------------------------- ** * Директива "#pragma pack()" работает одинакого в "MSP430 IAR C/EC++ Compiler" и "Borland C++Builder" и "VC" * -------------------------------------------------------------------------------------------------------- */ #pragma pack( 2 ) // выравнивание по 2-м байтам, в MSP дает оптимальный код typedef struct { short reset_status; volatile unsigned short t_tick; // при измерении температуры делает ++ signed char term_f; signed char term_q; signed char term_m; } termometer; typedef struct { double ratio; double Zero; } predesign; typedef struct { float gse[gse_cnt]; predesign pre_gse[ch_cnt]; struct { short delta; float Paskal; } pressure; float mabda; unsigned short axue; unsigned long tick_ms;работы прибора termometer term_data; } TM2_result; #pragma pack() // выравнивание по умолчанию Спосиба! Ето будет помочъ мне. Я на асемблер буду написатъ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 18 августа, 2007 Опубликовано 18 августа, 2007 · Жалоба По протоколу могу порекомендовать WAKE. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться