Skip to content

Commit 879d36c

Browse files
committed
reorg'd
1 parent 0c556c1 commit 879d36c

File tree

3 files changed

+50
-74
lines changed

3 files changed

+50
-74
lines changed

README.rst

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,19 @@ To install in a virtual environment in your current project:
6161
Usage Example
6262
=============
6363

64-
.. todo:: Add a quick, simple example. It and other examples should live in the examples folder and be included in docs/examples.rst.
64+
.. code-block:: python
65+
66+
import time
67+
import board
68+
import adafruit_tlv493d
69+
70+
i2c = board.I2C()
71+
72+
tlv = adafruit_tlv493d.TLV493D(i2c)
73+
74+
while True:
75+
print("%s, %s, %s"%tlv.magnetic)
76+
time.sleep(1)
6577
6678
Contributing
6779
============

adafruit_tlv493d.py

Lines changed: 26 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
2626
CircuitPython helper library for the TLV493D 3-axis magnetometer
2727
28-
2928
* Author(s): Bryan Siepert
3029
3130
Implementation Notes
@@ -43,18 +42,17 @@
4342
https://github.com/adafruit/circuitpython/releases
4443
4544
* Adafruit's Bus Device library: https://github.com/adafruit/Adafruit_CircuitPython_BusDevice
46-
* Adafruit's Register library: https://github.com/adafruit/Adafruit_CircuitPython_Register
4745
"""
4846

4947
import struct
5048
import adafruit_bus_device.i2c_device as i2cdevice
5149
__version__ = "0.0.0-auto.0"
5250
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_TLV493D.git"
53-
DEFAULT_TLV_ADDRESS = 0x5E
54-
5551

56-
class TLV493D:
57-
"""IT'S A CLASS"""
52+
class TLV493D:
53+
"""Driver for the TLV493D 3-axis Magnetometer.
54+
:param busio.I2C i2c_bus: The I2C bus the TLV493D is connected to.
55+
"""
5856

5957
read_masks = {
6058
"BX1": (0, 0xFF, 0),
@@ -87,63 +85,35 @@ class TLV493D:
8785
"RES3":(3, 0x1F, 0)
8886
}
8987

90-
def __init__(self, i2c_interface, i2c_address=DEFAULT_TLV_ADDRESS):
91-
self.i2c_device = i2cdevice.I2CDevice(i2c_interface, i2c_address)
88+
def __init__(self, i2c_interface):
89+
self.i2c_device = i2cdevice.I2CDevice(i2c_interface, 0x5E)
9290
self.read_buffer = bytearray(10)
9391
self.write_buffer = bytearray(4)
94-
self._setup_write_buffer()
9592

96-
# // get all register data from sensor
97-
# tlv493d::readOut(&mInterface);
98-
# // copy factory settings to write registers
99-
# setRegBits(tlv493d::W_RES1, getRegBits(tlv493d::R_RES1)); THREE TIMES?
100-
# // enable parity detection
93+
# read in data from sensor, including data that must be set on a write
94+
self._setup_write_buffer()
10195

102-
print("\nWrite buffer:")
103-
self.print_bytes(self.write_buffer)
104-
self._set_write_key('PARITY', 1);
105-
print("\nWrite buffer:")
106-
self.print_bytes(self.write_buffer)
107-
# // config sensor to lowpower mode
108-
# // also contains parity calculation and writeout to sensor
109-
# setAccessMode(TLV493D_DEFAULTMODE);
110-
self._set_write_key('PARITY', 1);
111-
self._set_write_key('LOWPOWER', 1);
112-
self._set_write_key('LP_PERIOD', 1);
113-
print("\nWrite buffer:")
114-
self.print_bytes(self.write_buffer)
96+
# setup MASTERCONTROLLEDMODE which takes a measurement for every read
97+
self._set_write_key('PARITY', 1)
98+
self._set_write_key('PARITY', 1)
99+
self._set_write_key('LOWPOWER', 1)
100+
self._set_write_key('LP_PERIOD', 1)
115101
self._write_i2c()
116-
print("wrote output buffer out")
117102

118103
def _read_i2c(self):
119104
with self.i2c_device as i2c:
120105
i2c.readinto(self.read_buffer)
121106
# self.print_bytes(self.read_buffer)
122107

123-
@staticmethod
124-
def print_bytes(bites):
125-
"""DOC STRING"""
126-
for byte in bites:
127-
print("%s (%s)"%(bin(byte), hex(byte)))
128-
129108
def _write_i2c(self):
130109
with self.i2c_device as i2c:
131110
i2c.write(self.write_buffer)
132111

133112
def _setup_write_buffer(self):
134113
self._read_i2c()
135-
print("Read buffer:")
136-
self.print_bytes(self.read_buffer)
137-
print("\nWrite buffer:")
138-
self.print_bytes(self.write_buffer)
139-
140114
for key in ['RES1', 'RES2', 'RES3']:
141115
write_value = self._get_read_key(key)
142116
self._set_write_key(key, write_value)
143-
print("Read buffer:")
144-
self.print_bytes(self.read_buffer)
145-
print("\nWrite buffer:")
146-
self.print_bytes(self.write_buffer)
147117

148118
def _get_read_key(self, key):
149119
read_byte_num, read_mask, read_shift = self.read_masks[key]
@@ -157,42 +127,25 @@ def _set_write_key(self, key, value):
157127
current_write_byte &= ~write_mask
158128
current_write_byte |= value<<write_shift
159129
self.write_buffer[write_byte_num] = current_write_byte
160-
161-
# @staticmethod
162-
# def binPrint(number, places=16, end_str=""):
163-
# out = []
164-
# for i in range(places):
165-
# dig_shift = number >> i
166-
# if dig_shift & 1:
167-
# out.append("1")
168-
# else:
169-
# out.append("0")
170-
# out.reverse()
171-
# print("".join(out), end=end_str)
172130

173131
@property
174-
def x(self):
175-
self._read_i2c()
132+
def magnetic(self):
133+
"""The processed magnetometer sensor values.
134+
A 3-tuple of X, Y, Z axis values in microteslas that are signed floats.
135+
"""
136+
self._read_i2c() # update read registers
176137
x_top = self._get_read_key("BX1")
177138
x_bot = ((self._get_read_key("BX2") << 4) & 0xFF)
178-
binval = struct.unpack_from(">h", bytearray([x_top, x_bot]))[0]
179-
binval = binval >>4
180-
return binval * 0.098
181-
182-
@property
183-
def y(self):
184-
self._read_i2c()
185139
y_top = self._get_read_key("BY1")
186140
y_bot = ((self._get_read_key("BY2") << 4) & 0xFF)
187-
binval = struct.unpack_from(">h", bytearray([y_top, y_bot]))[0]
188-
binval = binval >>4
189-
return binval * 0.098
190-
191-
@property
192-
def z(self):
193-
self._read_i2c()
194141
z_top = self._get_read_key("BZ1")
195142
z_bot = ((self._get_read_key("BZ2") << 4) & 0xFF)
196-
binval = struct.unpack_from(">h", bytearray([z_top, z_bot]))[0]
143+
144+
return (self._unpack_and_scale(x_top, x_bot),
145+
self._unpack_and_scale(y_top, y_bot),
146+
self._unpack_and_scale(z_top, z_bot))
147+
148+
def _unpack_and_scale(self, top, bottom):
149+
binval = struct.unpack_from(">h", bytearray([top, bottom]))[0]
197150
binval = binval >>4
198-
return binval * 0.098
151+
return binval * 0.098

examples/tlv493d_simpletest.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import time
2+
import board
3+
import adafruit_tlv493d
4+
5+
i2c = board.I2C()
6+
7+
tlv = adafruit_tlv493d.TLV493D(i2c)
8+
9+
while True:
10+
print("%s, %s, %s"%tlv.magnetic)
11+
time.sleep(1)

0 commit comments

Comments
 (0)