4 #include "1-wire-drv.h"
6 #include <lpc23xx.h> /* LPC23xx definitions */
13 /* Update 8-bit CRC value
14 using polynomial X^8 + X^5 + X^4 + 1 */
18 void update_crc(unsigned char new, unsigned char *crc)
23 for (i = 0; i < 8; i++)
26 c = (c >> 1 ) ^ POLYVAL;
36 uint8_t read_temp(struct ds18s20_dev * dev)
38 uint8_t i, crc =0, data[9];
41 init_1_wire(dev->port, dev->pin, 72000000);
43 if( Detect_Slave_Device())
44 return DEVICE_NOT_FOUND;
48 OW_write_byte (0xCC); // Send a command to prepare read temp
52 while(T3TC < ( (72000000/100000) * 6));
56 OW_write_byte (0xCC); // Read temp
59 for(i = 0; i < 9; i++)
60 data[i] = OW_read_byte(); // Read 64-bit registration (48-bit serial number) number from 1-wire Slave Device
62 for(i = 0; i < 8; i++)
63 update_crc(data[i], &crc);
67 return DEVICE_CRC_FAIL;
69 temp = ((uint16_t)(data[7] - data[6]) * 100)/data[7] - 25;
70 temp = (temp + 5) / 10;
71 temp += ((data[0] | ((uint16_t)data[1] << 8)) & ~(0x0001)) * 5;