4 #include "1-wire-drv.h"
5 #include <lpc23xx.h> /* LPC23xx definitions */
12 /* Update 8-bit CRC value
13 using polynomial X^8 + X^5 + X^4 + 1 */
17 void update_crc(unsigned char new, unsigned char *crc)
22 for (i = 0; i < 8; i++)
25 c = (c >> 1 ) ^ POLYVAL;
35 uint8_t read_temp(struct ds18s20_dev * dev)
37 uint8_t i, crc =0, data[9];
40 init_1_wire(dev->port, dev->pin_read, dev->pin_write, 72000000/4);
42 if( wire_detect_device())
43 return DEVICE_NOT_FOUND;
47 wire_write_byte (0xCC); // Send a command to prepare read temp
48 wire_write_byte (0x44);
53 wire_write_byte (0xCC); // Read temp
54 wire_write_byte (0xBE);
56 for(i = 0; i < 9; i++)
57 data[i] = wire_read_byte(); // Read 64-bit registration (48-bit serial number) number from 1-wire Slave Device
59 for(i = 0; i < 8; i++)
60 update_crc(data[i], &crc);
64 return DEVICE_CRC_FAIL;
66 temp = ((uint16_t)(data[7] - data[6]) * 100)/data[7] - 25;
67 temp = (temp + 5) / 10;
68 temp += ((data[0] | ((uint16_t)data[1] << 8)) & ~(0x0001)) * 5;