Mercurial > templog
comparison onewire.h @ 4:54d369e3d689
Fill out more main.c structure
Add onewire files
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Wed, 09 May 2012 00:22:28 +0800 |
parents | |
children | 7da9a3f23592 |
comparison
equal
deleted
inserted
replaced
3:888be1b234b6 | 4:54d369e3d689 |
---|---|
1 #ifndef ONEWIRE_H_ | |
2 #define ONEWIRE_H_ | |
3 | |
4 #ifdef __cplusplus | |
5 extern "C" { | |
6 #endif | |
7 | |
8 #include <stdint.h> | |
9 | |
10 /*******************************************/ | |
11 /* Hardware connection */ | |
12 /*******************************************/ | |
13 | |
14 /* Define OW_ONE_BUS if only one 1-Wire-Bus is used | |
15 in the application -> shorter code. | |
16 If not defined make sure to call ow_set_bus() before using | |
17 a bus. Runtime bus-select increases code size by around 300 | |
18 bytes so use OW_ONE_BUS if possible */ | |
19 // #define OW_ONE_BUS | |
20 | |
21 #ifdef OW_ONE_BUS | |
22 | |
23 #define OW_PIN PD6 | |
24 #define OW_IN PIND | |
25 #define OW_OUT PORTD | |
26 #define OW_DDR DDRD | |
27 #define OW_CONF_DELAYOFFSET 0 | |
28 | |
29 #else | |
30 #if ( F_CPU < 1843200 ) | |
31 #warning | Experimental multi-bus-mode is not tested for | |
32 #warning | frequencies below 1,84MHz. Use OW_ONE_WIRE or | |
33 #warning | faster clock-source (i.e. internal 2MHz R/C-Osc.). | |
34 #endif | |
35 #define OW_CONF_CYCLESPERACCESS 13 | |
36 #define OW_CONF_DELAYOFFSET ( (uint16_t)( ((OW_CONF_CYCLESPERACCESS) * 1000000L) / F_CPU ) ) | |
37 #endif | |
38 | |
39 // Recovery time (T_Rec) minimum 1usec - increase for long lines | |
40 // 5 usecs is a value give in some Maxim AppNotes | |
41 // 30u secs seem to be reliable for longer lines | |
42 //#define OW_RECOVERY_TIME 5 /* usec */ | |
43 //#define OW_RECOVERY_TIME 300 /* usec */ | |
44 #define OW_RECOVERY_TIME 10 /* usec */ | |
45 | |
46 // Use AVR's internal pull-up resistor instead of external 4,7k resistor. | |
47 // Based on information from Sascha Schade. Experimental but worked in tests | |
48 // with one DS18B20 and one DS18S20 on a rather short bus (60cm), where both | |
49 // sensores have been parasite-powered. | |
50 #define OW_USE_INTERNAL_PULLUP 1 /* 0=external, 1=internal */ | |
51 | |
52 /*******************************************/ | |
53 | |
54 | |
55 #define OW_MATCH_ROM 0x55 | |
56 #define OW_SKIP_ROM 0xCC | |
57 #define OW_SEARCH_ROM 0xF0 | |
58 | |
59 #define OW_SEARCH_FIRST 0xFF // start new search | |
60 #define OW_PRESENCE_ERR 0xFF | |
61 #define OW_DATA_ERR 0xFE | |
62 #define OW_LAST_DEVICE 0x00 // last device found | |
63 | |
64 // rom-code size including CRC | |
65 #define OW_ROMCODE_SIZE 8 | |
66 | |
67 extern uint8_t ow_reset(void); | |
68 | |
69 extern uint8_t ow_bit_io( uint8_t b ); | |
70 extern uint8_t ow_byte_wr( uint8_t b ); | |
71 extern uint8_t ow_byte_rd( void ); | |
72 | |
73 extern uint8_t ow_rom_search( uint8_t diff, uint8_t *id ); | |
74 | |
75 extern void ow_command( uint8_t command, uint8_t *id ); | |
76 extern void ow_command_with_parasite_enable( uint8_t command, uint8_t *id ); | |
77 | |
78 extern void ow_parasite_enable( void ); | |
79 extern void ow_parasite_disable( void ); | |
80 extern uint8_t ow_input_pin_state( void ); | |
81 | |
82 #ifndef OW_ONE_BUS | |
83 extern void ow_set_bus( volatile uint8_t* in, | |
84 volatile uint8_t* out, | |
85 volatile uint8_t* ddr, | |
86 uint8_t pin ); | |
87 #endif | |
88 | |
89 #ifdef __cplusplus | |
90 } | |
91 #endif | |
92 | |
93 #endif |