onewire 1-wire ds18x20 ds2450 multi-channel

Dependents:   ibutton

Committer:
fblanc
Date:
Fri Mar 02 08:29:49 2012 +0000
Revision:
0:8c4e1841eb30
v1.1 onewire multi-channel

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fblanc 0:8c4e1841eb30 1 #include <inttypes.h>
fblanc 0:8c4e1841eb30 2
fblanc 0:8c4e1841eb30 3 #define CRC8INIT 0x00
fblanc 0:8c4e1841eb30 4 #define CRC8POLY 0x18 //0X18 = X^8+X^5+X^4+X^0
fblanc 0:8c4e1841eb30 5
fblanc 0:8c4e1841eb30 6 uint8_t crc8 ( uint8_t *data_in, uint16_t number_of_bytes_to_read )
fblanc 0:8c4e1841eb30 7 {
fblanc 0:8c4e1841eb30 8 uint8_t crc;
fblanc 0:8c4e1841eb30 9 uint16_t loop_count;
fblanc 0:8c4e1841eb30 10 uint8_t bit_counter;
fblanc 0:8c4e1841eb30 11 uint8_t data;
fblanc 0:8c4e1841eb30 12 uint8_t feedback_bit;
fblanc 0:8c4e1841eb30 13
fblanc 0:8c4e1841eb30 14 crc = CRC8INIT;
fblanc 0:8c4e1841eb30 15
fblanc 0:8c4e1841eb30 16 for (loop_count = 0; loop_count != number_of_bytes_to_read; loop_count++)
fblanc 0:8c4e1841eb30 17 {
fblanc 0:8c4e1841eb30 18 data = data_in[loop_count];
fblanc 0:8c4e1841eb30 19
fblanc 0:8c4e1841eb30 20 bit_counter = 8;
fblanc 0:8c4e1841eb30 21 do {
fblanc 0:8c4e1841eb30 22 feedback_bit = (crc ^ data) & 0x01;
fblanc 0:8c4e1841eb30 23
fblanc 0:8c4e1841eb30 24 if ( feedback_bit == 0x01 ) {
fblanc 0:8c4e1841eb30 25 crc = crc ^ CRC8POLY;
fblanc 0:8c4e1841eb30 26 }
fblanc 0:8c4e1841eb30 27 crc = (crc >> 1) & 0x7F;
fblanc 0:8c4e1841eb30 28 if ( feedback_bit == 0x01 ) {
fblanc 0:8c4e1841eb30 29 crc = crc | 0x80;
fblanc 0:8c4e1841eb30 30 }
fblanc 0:8c4e1841eb30 31
fblanc 0:8c4e1841eb30 32 data = data >> 1;
fblanc 0:8c4e1841eb30 33 bit_counter--;
fblanc 0:8c4e1841eb30 34
fblanc 0:8c4e1841eb30 35 } while (bit_counter > 0);
fblanc 0:8c4e1841eb30 36 }
fblanc 0:8c4e1841eb30 37
fblanc 0:8c4e1841eb30 38 return crc;
fblanc 0:8c4e1841eb30 39 }