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

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

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

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

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

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

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

 
Опции темы
Непрочитано 25.09.2011, 22:09  
GremLine
Частый гость
 
Регистрация: 08.03.2009
Сообщений: 28
Сказал спасибо: 96
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
GremLine на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

как всегда скопипастил
Код:
char crc8 ( char *data_in, int number_of_bytes_to_read )
{
	char	 crc;
	int loop_count;
	char  bit_counter, data, feedback_bit;
	
	crc = CRC8INIT;

	for (loop_count = 0; loop_count != number_of_bytes_to_read; loop_count++)
	{
		data = data_in[loop_count];
		
		bit_counter = 8;
		do {
			feedback_bit = (crc ^ data) & 0x01;
	
			if ( feedback_bit == 0x01 ) {
				crc = crc ^ CRC8POLY;
			}
			crc = (crc ›› 1) & 0x7F;
			if ( feedback_bit == 0x01 ) {
				crc = crc | 0x80;
			}
		
			data = data ›› 1;
			bit_counter--;
		
		} while (bit_counter › 0);
	}
	
	return crc;
}
так сойдет ?
Реклама:
GremLine вне форума  
Сказали "Спасибо" GremLine
Easyrider83 (25.09.2011)
Непрочитано 25.09.2011, 22:15  
Bar_boss
Гражданин KAZUS.RU
 
Регистрация: 22.04.2007
Адрес: Минск
Сообщений: 565
Сказал спасибо: 53
Сказали Спасибо 104 раз(а) в 81 сообщении(ях)
Bar_boss на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Сообщение от Easyrider83 Посмотреть сообщение
Да знаю я этот полином. Я его понять не могу. Что такое х8? Формулу можно? Или готовую процедуру, что проще на мой взгляд.
На Ассемблере подойдёт?
Bar_boss вне форума  
Непрочитано 25.09.2011, 22:15  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,532
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Сообщение от GremLine Посмотреть сообщение
так сойдет ?
Что-то громоздко, как-то. На вики есть функция расчета crc8. Только переворачивать байты данных надо и конечный результат.
Код:
BYTE ReverseByte(BYTE value)
{
    value = ((value & 0xAA) ›› 1) | ((value & 0x55) ‹‹ 1);
    value = ((value & 0xCC) ›› 2) | ((value & 0x33) ‹‹ 2);
    value = ((value & 0xF0) ›› 4) | ((value & 0x0F) ‹‹ 4);
    
    return value;
}

BYTE Crc8Dallas(BYTE len, BYTE *pData)
{
    BYTE crc = 0;
    BYTE i;
    
    while (len--)
    {
        crc ^= ReverseByte(*pData++);
        
        for (i = 0; i ‹ 8; i++)
        crc = crc & 0x80 ? (crc ‹‹ 1) ^ 0x31 : crc ‹‹ 1;
    }
    
    return ReverseByte(crc);
}

Последний раз редактировалось realid; 25.09.2011 в 22:36.
realid вне форума  
Сказали "Спасибо" realid
Easyrider83 (25.09.2011)
Непрочитано 25.09.2011, 22:16  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

а что тут непонятного, полином СRС poly = x8 + x5 + x4 + 1=0x31=110001, т.е. на каждом шаге цикла полином и наше число будет подвергаться XOR, при условии, что старший бит числа не равен нулю, далее сдвигаться, вставляется новый бит и так до конца. В даташите есть блок схема алгоритма, там и надо смотреть.
nonamedov вне форума  
Непрочитано 25.09.2011, 22:20  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Вот код из википедии:
Цитата:
unsigned char Crc8(unsigned char *pcBlock, unsigned int len)
{
unsigned char crc = 0xFF;
unsigned int i;

while (len--)
{
crc ^= *pcBlock++;

for (i = 0; i ‹ 8; i++)
crc = crc & 0x80 ? (crc ‹‹ 1) ^ 0x31 : crc ‹‹ 1;
}

return crc;
}
nonamedov вне форума  
Непрочитано 25.09.2011, 22:28  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,532
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Сообщение от nonamedov Посмотреть сообщение
Вот код из википедии:
Для далласа без изменения он не пойдет. Это просто CRC8. Надо переворачивать входные байты данных и конечный результат. См. выше. Или перевернуть полином и поменять направление сдвига:

Код:
BYTE Crc8Dallas(BYTE len, BYTE *pData)
{
    BYTE crc = 0;
    BYTE i;
    BYTE temp;
    
    while (len--)
    {
        crc ^= *pData++;
        
        for (i = 0; i ‹ 8; i++)
        crc = crc & 0x01 ? (crc ›› 1) ^ 0x8C : crc ›› 1;
    }
    
    return crc;
}

Последний раз редактировалось realid; 25.09.2011 в 22:42. Причина: извините
realid вне форума  
Непрочитано 25.09.2011, 22:37  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

А почему у Вас реверсирование не сделано в самом цикле?
nonamedov вне форума  
Непрочитано 25.09.2011, 22:46  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

realid, а нельзя ли соблюдать хоть какую-то хронологию? Зачем экономить на постах, читать ведь не удобно.
nonamedov вне форума  
Непрочитано 25.09.2011, 22:49  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,532
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Сообщение от nonamedov Посмотреть сообщение
realid, а нельзя ли соблюдать хоть какую-то хронологию? Зачем экономить на постах, читать ведь не удобно.
Прошу прощения
realid вне форума  
Непрочитано 25.09.2011, 22:57  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,532
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Сообщение от nonamedov Посмотреть сообщение
А почему у Вас реверсирование не сделано в самом цикле?
Согласитесь что 0x31 нагляднее чем 0x8C, хотя это просто перевернутый 0x31

Просто на вики двигают старшим битом вперед, а для далласа надо младшим.
realid вне форума  
 

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

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

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

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


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


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