Rainer Raul
/
OneWireDrv
Test 1-wire , working wtih parasite power and few sensors with mixed power supply.
Diff: onewire.h
- Revision:
- 0:1197076b78f4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onewire.h Mon May 10 08:14:32 2010 +0000 @@ -0,0 +1,101 @@ +typedef unsigned char BYTE; + + +#define MAXSENSORS 8 +// rom-code size including CRC +#define OW_ROMCODE_SIZE 8 + + + + +BYTE ow_reset(void); +BYTE ow_rom_search( BYTE diff, BYTE *id ); +void ow_command( BYTE command, BYTE *id ); +//void DS18X20_find_sensor(BYTE *diff, BYTE id[]); +BYTE DS18X20_get_power_status(uint8_t id[]); + +extern void DS18X20_show_id_uart( uint8_t *id, size_t n ); +extern void DS18X20_find_sensor(uint8_t *diff, uint8_t id[]); +extern uint8_t DS18X20_get_power_status(uint8_t id[]); +extern uint8_t DS18X20_start_meas( uint8_t with_external, uint8_t id[]); +extern uint8_t DS18X20_read_meas(uint8_t id[], uint8_t *subzero, uint8_t *cel, uint8_t *cel_frac_bits); +extern uint8_t DS18X20_read_meas_single(uint8_t familycode, uint8_t *subzero, uint8_t *cel, uint8_t *cel_frac_bits); +extern uint8_t DS18X20_meas_to_cel( uint8_t fc, uint8_t *sp, uint8_t* subzero, uint8_t* cel, uint8_t* cel_frac_bits); +extern uint16_t DS18X20_temp_to_decicel(uint8_t subzero, uint8_t cel, uint8_t cel_frac_bits); +extern int8_t DS18X20_temp_cmp(uint8_t subzero1, uint16_t cel1, uint8_t subzero2, uint16_t cel2); + + +extern void ow_parasite_enable(void); +extern void ow_parasite_disable(void); + +#define DEBUG 1 + +#define ONEWIRE_PIN p12 + + +#define OW_MATCH_ROM 0x55 +#define OW_SKIP_ROM 0xCC +#define OW_SEARCH_ROM 0xF0 + + +#define OW_SHORT_CIRCUIT 0xFF +#define OW_SEARCH_FIRST 0xFF // start new search +#define OW_PRESENCE_ERR 0x01 +#define OW_DATA_ERR 0xFE +#define OW_LAST_DEVICE 0x00 // last device found +// 0x01 ... 0x40: continue searching + +// rom-code size including CRC +#define OW_ROMCODE_SIZE 8 + + +#define DS18X20_POWER_PARASITE 0x00 +#define DS18X20_POWER_EXTERN 0x01 + +/* DS18X20 specific values (see datasheet) */ +#define DS18S20_ID 0x10 +#define DS18B20_ID 0x28 +#define DS18X20_CONVERT_T 0x44 +#define DS18X20_READ 0xBE +#define DS18X20_WRITE 0x4E +#define DS18X20_EE_WRITE 0x48 +#define DS18X20_EE_RECALL 0xB8 +#define DS18X20_READ_POWER_SUPPLY 0xB4 + +#define DS18X20_OK 0x00 +#define DS18X20_ERROR 0x01 +#define DS18X20_START_FAIL 0x02 +#define DS18X20_ERROR_CRC 0x03 + + +#define DS18B20_CONF_REG 4 +#define DS18B20_9_BIT 0 +#define DS18B20_10_BIT (1<<5) +#define DS18B20_11_BIT (1<<6) +#define DS18B20_12_BIT ((1<<6)|(1<<5)) + +// indefined bits in LSB if 18B20 != 12bit +#define DS18B20_9_BIT_UNDF ((1<<0)|(1<<1)|(1<<2)) +#define DS18B20_10_BIT_UNDF ((1<<0)|(1<<1)) +#define DS18B20_11_BIT_UNDF ((1<<0)) +#define DS18B20_12_BIT_UNDF 0 + +// conversion times in ms +#define DS18B20_TCONV_12BIT 750 +#define DS18B20_TCONV_11BIT DS18B20_TCONV_12_BIT/2 +#define DS18B20_TCONV_10BIT DS18B20_TCONV_12_BIT/4 +#define DS18B20_TCONV_9BIT DS18B20_TCONV_12_BIT/8 +#define DS18S20_TCONV DS18B20_TCONV_12_BIT + +// constant to convert the fraction bits to cel*(10^-4) +#define DS18X20_FRACCONV 625 + +#define DS18X20_SP_SIZE 9 + +// DS18X20 EEPROM-Support +#define DS18X20_WRITE_SCRATCHPAD 0x4E +#define DS18X20_COPY_SCRATCHPAD 0x48 +#define DS18X20_RECALL_E2 0xB8 +#define DS18X20_COPYSP_DELAY 10 /* ms */ +#define DS18X20_TH_REG 2 +#define DS18X20_TL_REG 3