Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 20.06.2008, 08:30  
olegras
Прохожий
 
Регистрация: 19.12.2006
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
olegras на пути к лучшему
По умолчанию

Вот это совсем другое дело! Спсибо pambaru. А какой полином использован в этой таблице?
Реклама:
olegras вне форума  
Непрочитано 20.06.2008, 08:32  
sanitar249
Почётный гражданин KAZUS.RU
 
Аватар для sanitar249
 
Регистрация: 19.01.2007
Сообщений: 1,747
Сказал спасибо: 2
Сказали Спасибо 46 раз(а) в 35 сообщении(ях)
sanitar249 на пути к лучшему
По умолчанию

Табличный метод для 51 на ас-ме, аналогичный предыдущему СИ-коду: http://www.8052.com/codelib/crc8.asm

Удачи!
__________________
Я, думаю, нужно подумать...
sanitar249 вне форума  
Непрочитано 20.06.2008, 08:39  
pambaru
Почётный гражданин KAZUS.RU
 
Регистрация: 24.03.2007
Сообщений: 1,352
Сказал спасибо: 85
Сказали Спасибо 610 раз(а) в 369 сообщении(ях)
pambaru на пути к лучшему
По умолчанию

Сообщение от olegras
Вот это совсем другое дело! Спсибо pambaru. А какой полином использован в этой таблице?
Конкретно использую для подсчета CRC в DS18S20.
Писалось по даташиту, полином тот, что в даташите
(лениво открывать). Таблица в даташите приведена.
CRC16 писал для какого-то другого устройства, не помню какого, так что не знаю в каком проекте искать .
Но если сильно нужно будет, найду. В любом случае, все строго по даташиту.
pambaru вне форума  
Непрочитано 20.06.2008, 08:41  
LeonidIwanowitch
Прописка
 
Регистрация: 10.06.2008
Сообщений: 115
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
LeonidIwanowitch на пути к лучшему
По умолчанию Re: вычисление CRC

Сообщение от qaz12345qaz12345
Господа, подскажите пожалуйста алгоритм вычисления CRC далласовских таблеток, смотрел смотрел даташиту, что то ни чего не пойму там.
Неприятности в использовании CRC
LeonidIwanowitch вне форума  
Непрочитано 20.06.2008, 09:06  
sanitar249
Почётный гражданин KAZUS.RU
 
Аватар для sanitar249
 
Регистрация: 19.01.2007
Сообщений: 1,747
Сказал спасибо: 2
Сказали Спасибо 46 раз(а) в 35 сообщении(ях)
sanitar249 на пути к лучшему
По умолчанию

Сообщение от pambaru
Писалось по даташиту, полином тот, что в даташите
(лениво открывать).
X^8 + X^5 + X^4 + 1

Удачи!
__________________
Я, думаю, нужно подумать...
sanitar249 вне форума  
Непрочитано 20.06.2008, 12:52  
globalist
Частый гость
 
Регистрация: 08.12.2006
Сообщений: 24
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
globalist на пути к лучшему
По умолчанию А я вот так делаю

BYTE CrcByte(BYTE b, BYTE crc)
{
BYTE i;
for(i=0;i‹8;i++)
{
if ((b & 0x80) == (crc & 0x80)) //bits are same
{
crc ‹‹= 1; //shift left crc and byte
b ‹‹= 1;
}
else
{
crc ‹‹= 1; //shift left CRC
b ‹‹= 1;
crc ^= 0x30; //invert bits 4 and 5
crc |= 0x01; // set bit[0]
}
}
return crc;
}

BYTE Crc8(BYTE *d,BYTE len,BYTE crc)
{
BYTE i;
for(i=0;i‹len;i++) crc = CrcByte(d[i],crc);
return crc;
}
globalist вне форума  
Непрочитано 20.06.2008, 14:24  
kmw
Частый гость
 
Регистрация: 30.09.2004
Сообщений: 39
Сказал спасибо: 2
Сказали Спасибо 1 раз в 1 сообщении
kmw на пути к лучшему
По умолчанию

А теперь кратко поясним, что такое деление по модулю 2. Пусть массив (последовательность бит) имеет следующий вид: 101111001110 (для простоты берем небольшую разрядность). Число, на которое делим (называемое обычно образующим полиномом) возьмем 10011. Как оно выбирается? Оно должно делиться по модулю 2 без остатка только на единицу и само на себя (то есть это должно быть простое число в смысле деления по модулю 2). Разрядность полинома берется на единицу большая, чем требуемая разрядность контрольной суммы (остатка от деления). Так, чтобы получить 8-разрядный остаток (8-разрядную контрольную сумму), надо брать 9-разрядный полином. В нашем случае полином 5-разрядный, следовательно, остаток будет 4-разрядный. Для получения 8-разрядного остатка можно использовать, например, полином 1 0001 1101 или 11D в 16-ричном коде.

Деление по модулю 2 производится точно так же, как и привычное для нас деление "в столбик" (рис. 14.6), но вместо вычитания в данном случае используется поразрядное сложение по модулю 2, то есть каждый результирующий бит представляет собой функцию Исключающее ИЛИ от соответствующих битов слагаемых. Частное от деления нас не интересует, а остаток, равный в нашем примере 1000, и будет циклической контрольной суммой.

Вычисление циклической контрольной суммы
Рис. 14.6. Вычисление циклической контрольной суммы

Или http://www.intuit.ru/department/hardware/digs/14/4.html
kmw вне форума  
Непрочитано 20.06.2008, 15:15  
LeonidIwanowitch
Прописка
 
Регистрация: 10.06.2008
Сообщений: 115
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
LeonidIwanowitch на пути к лучшему
По умолчанию

Сообщение от kmw
А теперь кратко поясним, что такое деление по модулю 2. Пусть массив (последовательность бит) имеет следующий вид: 101111001110 (для простоты берем небольшую разрядность). Число, на которое делим (называемое обычно образующим полиномом) возьмем 10011. Как оно выбирается? Оно должно делиться по модулю 2 без остатка только на единицу и само на себя (то есть это должно быть простое число в смысле деления по модулю 2). Разрядность полинома берется на единицу большая, чем требуемая разрядность контрольной суммы (остатка от деления). Так, чтобы получить 8-разрядный остаток (8-разрядную контрольную сумму), надо брать 9-разрядный полином. В нашем случае полином 5-разрядный, следовательно, остаток будет 4-разрядный. Для получения 8-разрядного остатка можно использовать, например, полином 1 0001 1101 или 11D в 16-ричном коде.

Деление по модулю 2 производится точно так же, как и привычное для нас деление "в столбик" (рис. 14.6), но вместо вычитания в данном случае используется поразрядное сложение по модулю 2, то есть каждый результирующий бит представляет собой функцию Исключающее ИЛИ от соответствующих битов слагаемых. Частное от деления нас не интересует, а остаток, равный в нашем примере 1000, и будет циклической контрольной суммой.

Вычисление циклической контрольной суммы
Рис. 14.6. Вычисление циклической контрольной суммы

Или http://www.intuit.ru/department/hardware/digs/14/4.html

Неприятности в использовании CRC
LeonidIwanowitch вне форума  
Непрочитано 20.06.2008, 22:08  
ArgusB
Временная регистрация
 
Регистрация: 15.06.2008
Сообщений: 57
Сказал спасибо: 2
Сказали Спасибо 36 раз(а) в 8 сообщении(ях)
ArgusB на пути к лучшему
По умолчанию

Табличный быстр, но жрёт много кода. Обычный медленнее, но экономичнее. Вот пример:

{тут была программа, которая читает ds1820}
call DowRst
ldi r16, 0xcc ;Skip Rom
call DowComm
ldi r16, 0xbe ;Read ScratchPad
call DowComm
clr r18 ; init CRC

call DowReadC ; byte 0
sts TempL,r16
call DowReadC ; byte 1
sts TempH,r16


call DowReadC ; byte 2
call DowReadC ; byte 3
call DowReadC ; byte 4
call DowReadC ; byte 5
call DowReadC ; byte 6
call DowReadC ; byte 7
call DowRead ; byte 8 - CRC
cpse r16,r18 ; сравниваем с посчитанной CRC
rjmp RetryReadTemp

{Тут опять корова языком слизнула...}

;------------------------------------------------------
; Чтение DOW + CRC
;------------------------------------------------------
DowReadC: rcall DowRead
;----------------------------------------------------------
; Процедура обновления CRC8 (циклическая контрольная сумма, он же dow_crc).
; Параметр в r16, результат r18, временные: r7,r8
;----------------------------------------------------------
DowCRC: push r16
ldi r17,8 ; битовый счётчик
mov r7,r17
mov r8,r16
CRC_LOOP: eor r16,r18
ror r16
mov r16,r18
brcc ZERO
ldi r18,0x18
eor r16,r18
ZERO: ror r16
mov r18,r16
lsr r8
mov r16,r8
dec r7
brne CRC_LOOP
pop r16
ret
ArgusB вне форума  
Непрочитано 20.06.2008, 22:09  
qaz12345qaz12345
Частый гость
 
Регистрация: 06.12.2006
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
qaz12345qaz12345 на пути к лучшему
По умолчанию

Я прошу прощения, вот вроде бы после всех Ваших объяснений и ссылок мне стало понятно как это работает, не пойму только что это X^8+X^5+X^4+1. я так понимаю на месте этого должен быть байт, точнее 9 битов. Это формула? тогда что нужно подставить вместо X ?
qaz12345qaz12345 вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найт алгоритм вычисления CRC для iButton... IgorSHV Цифровые сигнальные процессоры 19 18.01.2012 21:55
Компилятор Hi-Tech, вычисление, на PIC12F675 3ann Микроконтроллеры, АЦП, память и т.д 27 06.07.2009 12:01
DS1990 и crc sergio-nsk Микроконтроллеры, АЦП, память и т.д 13 12.02.2009 11:09
Вычисление параметров синусоиды по отсчетам, снятых с АЦП _DmZ_ Микроконтроллеры, АЦП, память и т.д 11 08.10.2008 16:23
Странное вычисление температуры DS18S20 nagano Микроконтроллеры, АЦП, память и т.д 0 20.08.2008 08:58


Часовой пояс GMT +4, время: 00:46.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot