This repository has been archived by the owner on Feb 27, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 31
/
Copy path1wire.h
169 lines (150 loc) · 5.09 KB
/
1wire.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
/*********************************************************************
* Software License Agreement (BSD License)
*
* Copyright (c) 2018
*
* Balint Cristian <cristian dot balint at gmail dot com>
*
* TinnyModbus
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
*
* * Neither the name of the copyright holders nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*********************************************************************/
/*
1wire.h (1WIRE protocol implementation)
*/
#ifndef ONEWIRE_H
#define ONEWIRE_H
#include <avr/io.h>
#define DS18B20_FAMILY_ID 0x28
#define DS18B20_START_CONVERSION 0x44
#define DS18B20_READ_SCRATCHPAD 0xbe
#define BUS ONEWIRE_PIN_4
#define MAX_DEVICES 0x20
#define MAX_REPEATS 20
/*
* configuration
*/
#define ONEWIRE_USE_INTERNAL_PULLUP
#define ONEWIRE_PORT PORTB // 1wire PORT sata
#define ONEWIRE_PIN PINB // 1wire INPUT pin
#define ONEWIRE_DDR DDRB // 1wire DATA DIRECTION
/*
* bitmasks
*/
#define ONEWIRE_PIN_0 0x01
#define ONEWIRE_PIN_1 0x02
#define ONEWIRE_PIN_2 0x04
#define ONEWIRE_PIN_3 0x08
#define ONEWIRE_PIN_4 0x10
/*
* ROM commands
*/
#define ONEWIRE_READ (0x33) // READ ROM
#define ONEWIRE_SKIP (0xcc) // SKIP ROM
#define ONEWIRE_MATCH (0x55) // MATCH ROM
#define ONEWIRE_SEARCH (0xf0) // SEARCH ROM
/*
* return codes
*/
#define ONEWIRE_OK (0x00)
#define ONEWIRE_ERROR (0x01)
#define ONEWIRE_SEARCH_COMPLETE (0x00) // Search completed ok
#define ONEWIRE_SEARCH_FAILED (0xff) // Search failed
/*
* Pull the 1-wire bus low.
*/
#define ONEWIRE_PULL_BUS_LOW(bitMask) \
ONEWIRE_DDR |= bitMask; \
ONEWIRE_PORT &= ~bitMask;
#ifdef OWI_ONEWIRE_USE_INTERNAL_PULLUP
/*
* 1-Wire pin(s) to input.
* Enable internal pull-up.
*/
#define ONEWIRE_RELEASE_BUS(bitMask) \
ONEWIRE_DDR &= ~bitMask; \
ONEWIRE_PORT |= bitMask;
#else
/*
* 1-Wire pin(s) to input mode.
* No internal pull-up enabled.
*/
#define ONEWIRE_RELEASE_BUS(bitMask) \
ONEWIRE_DDR &= ~bitMask; \
ONEWIRE_PORT &= ~bitMask;
#endif
/*
* 1wire stucture
*/
typedef struct
{
uint8_t bus; // Bitmask of the bus that the device is on
uint8_t id[8]; // The 64-bit identifier for the device
} oneWireDevice;
/*
* API - CRC functions
*/
uint8_t oneWireCrc8(uint8_t inData, uint8_t seed);
unsigned int oneWireCrc16(uint8_t inData, unsigned int seed);
uint8_t oneWireRomCrc(uint8_t * romValue);
/*
* API - bit functions
*/
void oneWireInit(uint8_t pins);
void oneWireWriteBit1(uint8_t pins);
void oneWireWriteBit0(uint8_t pins);
uint8_t oneWireReadBit(uint8_t pins);
uint8_t oneWireDetectPresence(uint8_t pins);
/*
* API - 1wire functions
*/
void oneWireSendByte(uint8_t data, uint8_t pins);
void oneWireSkipRom(uint8_t pins);
void oneWireReadRom(uint8_t * romValue, uint8_t pins);
void oneWireMatchRom(uint8_t * romValue, uint8_t pins);
uint8_t oneWireReceiveByte(uint8_t pin);
uint8_t oneWireSearchRom(uint8_t * bitPattern, uint8_t lastDeviation, uint8_t pins);
uint8_t oneWireSearchBuses(oneWireDevice * devices, uint8_t len, uint8_t buses);
oneWireDevice * oneWireFindFamily(uint8_t familyID, oneWireDevice * devices, uint8_t size);
/*
* timing parameters
*/
#define ONEWIRE_DELAY_480 (480)
#define ONEWIRE_DELAY_6 (6)
#define ONEWIRE_DELAY_9 (9)
#define ONEWIRE_DELAY_64 (64)
#define ONEWIRE_DELAY_60 (60)
#define ONEWIRE_DELAY_70 (70)
#define ONEWIRE_DELAY_10 (10)
#define ONEWIRE_DELAY_55 (55)
#define ONEWIRE_DELAY_410 (410)
#endif