OneWire DS18B20,DS2450,MAX31850

Dependents:   MAX31850_HelloWorld

Committer:
fblanc
Date:
Thu Feb 12 14:03:55 2015 +0000
Revision:
0:9acbbb021a43
MAX31850 ok

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fblanc 0:9acbbb021a43 1 #include <inttypes.h>
fblanc 0:9acbbb021a43 2 #include "mbed.h"
fblanc 0:9acbbb021a43 3 #include "onewire.h"
fblanc 0:9acbbb021a43 4
fblanc 0:9acbbb021a43 5 #define CRC16INIT 0x0000
fblanc 0:9acbbb021a43 6 //#define CRC16POLY 0x8005; // Polynome =x^16 + x^15 + x^2 + x^0 = 0x18005
fblanc 0:9acbbb021a43 7 #define CRC16POLY 0xA001;
fblanc 0:9acbbb021a43 8
fblanc 0:9acbbb021a43 9 uint16_t crc16(uint8_t* octets, uint16_t nboctets)
fblanc 0:9acbbb021a43 10 {
fblanc 0:9acbbb021a43 11 uint16_t crc = CRC16INIT;
fblanc 0:9acbbb021a43 12 int i, done = 0;
fblanc 0:9acbbb021a43 13 uint8_t todo;
fblanc 0:9acbbb021a43 14 if (nboctets != 0) {
fblanc 0:9acbbb021a43 15 do {
fblanc 0:9acbbb021a43 16 todo = octets[done];
fblanc 0:9acbbb021a43 17 crc ^= todo;
fblanc 0:9acbbb021a43 18 for (i = 0; i < 8; i++) {
fblanc 0:9acbbb021a43 19 if (crc % 2 != 0) {
fblanc 0:9acbbb021a43 20 crc = (crc >> 1) ^ CRC16POLY;
fblanc 0:9acbbb021a43 21 } else {
fblanc 0:9acbbb021a43 22 crc = crc >> 1;
fblanc 0:9acbbb021a43 23 }
fblanc 0:9acbbb021a43 24 }
fblanc 0:9acbbb021a43 25 done++;
fblanc 0:9acbbb021a43 26 } while (done < nboctets);
fblanc 0:9acbbb021a43 27
fblanc 0:9acbbb021a43 28
fblanc 0:9acbbb021a43 29 }
fblanc 0:9acbbb021a43 30
fblanc 0:9acbbb021a43 31 return crc;
fblanc 0:9acbbb021a43 32 }
fblanc 0:9acbbb021a43 33 //CRC16 byte, always two bytes, bit inverted, LSByte first
fblanc 0:9acbbb021a43 34 uint8_t ctrl_crc16(uint8_t* octets, uint16_t nboctets)
fblanc 0:9acbbb021a43 35 {
fblanc 0:9acbbb021a43 36 uint16_t crc;
fblanc 0:9acbbb021a43 37 uint8_t *ptr;
fblanc 0:9acbbb021a43 38 #ifdef DEBUG
fblanc 0:9acbbb021a43 39 printf( "\nCRC16 : " );
fblanc 0:9acbbb021a43 40 for ( uint8_t i=0 ; i< nboctets; i++ )
fblanc 0:9acbbb021a43 41 printf(":%2.2X",octets[i]);
fblanc 0:9acbbb021a43 42 printf( "\n" );
fblanc 0:9acbbb021a43 43 #endif
fblanc 0:9acbbb021a43 44 crc =~crc16(octets, nboctets-2);
fblanc 0:9acbbb021a43 45 ptr=(uint8_t*)&crc;
fblanc 0:9acbbb021a43 46 #ifdef DEBUG
fblanc 0:9acbbb021a43 47 printf( "\n" );
fblanc 0:9acbbb021a43 48 printf("CRC16:%X",crc);
fblanc 0:9acbbb021a43 49 printf( "\n" );
fblanc 0:9acbbb021a43 50 #endif
fblanc 0:9acbbb021a43 51 if(*ptr==octets[nboctets-2])
fblanc 0:9acbbb021a43 52 if(*++ptr==octets[nboctets-1])
fblanc 0:9acbbb021a43 53 return 0;
fblanc 0:9acbbb021a43 54
fblanc 0:9acbbb021a43 55 return 1;
fblanc 0:9acbbb021a43 56 }