📄 onewirei.h
字号:
#ifndef _ONEWIREI_H
#define _ONEWIREI_H
#define CPU_FREQUENCY 7.3728
#define OWI_USE_INTERNAL_PULLUP
#define OWI_PORT PORTD //!< 1-Wire PORT Data register.
#define OWI_PIN PIND //!< 1-Wire Input pin register.
#define OWI_DDR DDRD //!< 1-Wire Data direction register.
#define OWI_PIN_0 0x01
#define OWI_PIN_1 0x02
#define OWI_PIN_2 0x04
#define OWI_PIN_3 0x08
#define OWI_PIN_4 0x10
#define OWI_PIN_5 0x20
#define OWI_PIN_6 0x40
#define OWI_PIN_7 0x80
/****************************************************************************
ROM commands
****************************************************************************/
#define OWI_ROM_READ 0x33 //!< READ ROM command code.
#define OWI_ROM_SKIP 0xcc //!< SKIP ROM command code.
#define OWI_ROM_MATCH 0x55 //!< MATCH ROM command code.
#define OWI_ROM_SEARCH 0xf0 //!< SEARCH ROM command code.
/****************************************************************************
Return codes
****************************************************************************/
#define OWI_ROM_SEARCH_FINISHED 0x00 //!< Search finished return code.
#define OWI_ROM_SEARCH_FAILED 0xff //!< Search failed return code.
#define OWI_CRC_OK 0x00 //!< CRC check succeded
#define OWI_CRC_ERROR 0x01 //!< CRC check failed
/*****************************************************************************
Timing parameters
*****************************************************************************/
#define OWI_DELAY_OFFSET_CYCLES 13 //!< Timing delay when pulling bus low and releasing bus.
// Bit timing delays in clock cycles (= us*clock freq in MHz).
#define OWI_DELAY_A_STD_MODE ((6 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
#define OWI_DELAY_B_STD_MODE ((64 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
#define OWI_DELAY_C_STD_MODE ((60 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
#define OWI_DELAY_D_STD_MODE ((10 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
#define OWI_DELAY_E_STD_MODE ((9 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
#define OWI_DELAY_F_STD_MODE ((55 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
//#define OWI_DELAY_G_STD_MODE ((0 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
#define OWI_DELAY_H_STD_MODE ((480 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
#define OWI_DELAY_I_STD_MODE ((70 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
#define OWI_DELAY_J_STD_MODE ((410 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
//======================================================================================
#define DS1820_FAMILY_ID 0x10
#define DS1820_START_CONVERSION 0x44
#define DS1820_READ_SCRATCHPAD 0xbe
#define DS1820_ERROR -1000 // Return code. Outside temperature range.
#define DS2890_FAMILY_ID 0x2c
#define DS2890_WRITE_CONTROL_REGISTER 0X55
#define DS2890_RELEASE_CODE 0x96
#define DS2890_WRITE_POSITION 0x0f
#define SEARCH_SUCCESSFUL 0x00
#define SEARCH_CRC_ERROR 0x01
#define OWI_PULL_BUS_LOW(bitMask) \
OWI_DDR |= bitMask; \
OWI_PORT &= ~bitMask;
#ifdef OWI_USE_INTERNAL_PULLUP
// Set 1-Wire pin(s) to input and enable internal pull-up resistor.
#define OWI_RELEASE_BUS(bitMask) \
OWI_DDR &= ~bitMask; \
OWI_PORT |= bitMask;
#else
// Set 1-Wire pin(s) to input mode. No internal pull-up enabled.
#define OWI_RELEASE_BUS(bitMask) \
OWI_DDR &= ~bitMask; \
OWI_PORT &= ~bitMask;
#endif
//=========================================
void OWI_WriteBit1(unsigned char pins);
void OWI_WriteBit0(unsigned char pins);
unsigned char OWI_ReadBit(unsigned char pins);
unsigned char OWI_DetectPresence(unsigned char pins);
void OWI_SendByte(unsigned char data, unsigned char pins);
unsigned char OWI_ReceiveByte(unsigned char pin);
void OWI_SkipRom(unsigned char pins);
void OWI_ReadRom(unsigned char * romValue, unsigned char pin);
void OWI_MatchRom(unsigned char * romValue, unsigned char pins);
unsigned char OWI_SearchRom(unsigned char * bitPattern, unsigned char lastDeviation, unsigned char pin);
unsigned char OWI_ComputeCRC8(unsigned char inData, unsigned char seed);
unsigned int OWI_ComputeCRC16(unsigned char inData, unsigned int seed);
unsigned char OWI_CheckRomCRC(unsigned char * romValue);
extern void OWI_Init(unsigned char pins);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -