Dallas 1-wire driver with DS18B20 temperature sensor support; custom bus driver to work with https://emir.googlecode.com/svn/emir2/trunk/eagle/emir-shield.sch
Dependents: testing_RTC_OneWire EMIRv2
1wire.h
- Committer:
- alpov
- Date:
- 2014-04-28
- Revision:
- 0:445fe6e6bd68
File content as of revision 0:445fe6e6bd68:
#ifndef _1WIRE_H #define _1WIRE_H /* Dallas 1-wire driver with DS18B20 temperature sensor support * * Copyright (c) 2014 Ales Povalac, MIT License * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software * and associated documentation files (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, publish, distribute, * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or * substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ class OneWire { public: OneWire(PinName OwUp, PinName OwDn, PinName OwIn); void ConvertAll(bool wait); int ReadTemperature(uint8_t *ROMID, int *result); int First(uint8_t *ROMID); int Next(uint8_t *ROMID); void WriteByte(uint8_t data); uint8_t ReadByte(void); void SendCmd(uint8_t *ROMID, uint8_t cmd); void CRC(uint8_t x, uint8_t *crc); private: DigitalOut _OwUp; DigitalOut _OwDn; DigitalIn _OwIn; uint8_t OW_LastDevice; uint8_t OW_LastDiscrepancy; uint8_t OW_LastFamilyDiscrepancy; int Reset(void); void WriteBit(int bit); int ReadBit(void); }; /* INTERNAL CONSTANTS everything below this line */ #define ERR_BADCRC 0x8000 #define ERR_BADFAMILY 0x8001 /* Return codes for OWFirst()/OWNext() */ #define OW_BADWIRE -3 #define OW_BADCRC -2 #define OW_NOPRESENCE -1 #define OW_NOMODULES 0 #define OW_FOUND 1 /* General 1 wire commands */ #define OW_SEARCH_ROM_CMD 0xF0 #define OW_READ_ROM_CMD 0x33 #define OW_MATCH_ROM_CMD 0x55 #define OW_SKIP_ROM_CMD 0xCC /* DS1820 commands */ #define OW_CONVERT_T_CMD 0x44 #define OW_RD_SCR_CMD 0xBE #define OW_WR_SCR_CMD 0x4E /* 1-wire delays */ #define DELAY_A() wait_us(6) #define DELAY_B() wait_us(64) #define DELAY_C() wait_us(60) #define DELAY_D() wait_us(10) #define DELAY_E() wait_us(9) #define DELAY_F() wait_us(55) #define DELAY_G() #define DELAY_H() wait_us(480) #define DELAY_I() wait_us(70) #define DELAY_J() wait_us(410) /* Other */ #define CONVERT_T_DELAY 750 #endif