/* * DS18B20.cpp * * Created on: Feb 28, 2018 * Author: sebastian */ #define READ_SCRATCH 0xBE #define WRITE_SCRATCH 0x4E #define READ_ROM 0x33 #define SKIP_ROM 0xCC #define CONVERT_T 0x44 #include "DS18B20.h" /* * | -- 8 BIT CRC -- | -- 48 BIT SERIAL NUMBER -- | -- 8 BIT FAMILY CODE (28h) -- | */ uint8_t ROM[8] = {0,0,0,0,0,0,0,0}; double deviceID; /** * initialize the Temperatur Sensor * This lib is written for only ONE device on the 1-Wire Bus */ void DS18B20_init(void){ if(OW_reset()){ logger_error("Unable to reset 1-Wire Bus, no Device present %s\n", strerror(errno)); return; } DS18B20_readRom(); deviceID = (double (ROM[6]) | ROM[5] << 8 | ROM[5] << 16 | ROM[5] << 24 | ROM[5] << 32 | ROM[5] << 40); if(ROM[7] == 0x28){ logger(V_HAL, "Found Temperatur Sensor on 1-Wire Bus\n"); logger(V_HAL, "Device ID: %12X", deviceID); } } void DS18B20_readRom(void){ OW_writeByte(READ_ROM); uint8_t i; for(i = 8; i >= 0; i--){ ROM[i] = OW_readByte(); } } uint16_t DS18B20_readTemp (void){ OW_writeByte(CONVERT_T); while(!OW_readBit()){ //wait to finish conversion //TODO don't wait forever } OW_writeByte(READ_SCRATCH); uint8_t scratchPad[9]; uint8_t i; for(i = 0; i < 9; i++){ scratchPad[i] = OW_readByte(); } }