Skip to content

Commit 5ae4187

Browse files
committed
Add MMC5603 Magnetic Sensor
1 parent 9240a7f commit 5ae4187

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed

‎sensor/MMC5603/MMC5603.py‎

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from machine import I2C
2+
from micropython import const
3+
4+
MMC5603ADDR = const(48)
5+
6+
class MMC5603:
7+
8+
def __init__(self, i2c):
9+
self.i2c = i2c
10+
self.tb = bytearray(1)
11+
self.rb = bytearray(1)
12+
self._rawx = 0
13+
self._rawy = 0
14+
self._rawz = 0
15+
if self.reg_get(0x39) != 0x10:
16+
raise Exception('MMC5603 ID error!')
17+
self.on()
18+
19+
def on(self):
20+
# ODR = 10
21+
self.reg_set(0x1A, 10)
22+
self.reg_set(0x1C, 0x03)
23+
# set CONTINUOUS mode
24+
self.reg_set(0x1B, 0xA0)
25+
self.reg_set(0x1D, 0x1B)
26+
27+
def off(self):
28+
# soft reset
29+
self.reg_set(0x1C, 0x80)
30+
31+
def reg_set(self, reg, val):
32+
self.tb[0] = val
33+
self.i2c.writeto_mem(MMC5603ADDR, reg, self.tb)
34+
35+
def reg_get(self, reg):
36+
self.i2c.readfrom_mem_into(MMC5603ADDR, reg, self.rb)
37+
return self.rb[0]
38+
39+
def rawx(self):
40+
self._rawx = self.reg_get(0)*256+self.reg_get(1)-32768
41+
return self._rawx
42+
43+
def rawy(self):
44+
self._rawy = self.reg_get(2)*256+self.reg_get(3)-32768
45+
return self._rawy
46+
47+
def rawz(self):
48+
self._rawz = self.reg_get(4)*256+self.reg_get(5)-32768
49+
return self._rawz
50+
51+
def x(self):
52+
return self.rawx() // 10
53+
54+
def y(self):
55+
return self.rawy() // 10
56+
57+
def z(self):
58+
return self.rawz() // 10
59+
60+
def T(self):
61+
self.reg_set(0x1B, 0xA3)
62+
return self.reg_get(9)*0.8-75
63+

‎sensor/MMC5603/READMD.md‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# [mpy-lib](https://github.com/micropython-Chinese-Community/mpy-lib)
2+
3+
## MMC5603 3-axis Magnetic Sensor
4+
5+
- [DataSheet](
6+
https://www.memsic.com/Public/Uploads/uploadfile/files/20220119/MMC5603NJDatasheetRev.B.pdf)
7+
8+
The MMC5603NJ is a monolithic complete 3-axis AMR magnetic sensor with on-chip signal processing and integrated digital bus (I 2 C fast mode and I3C interface), the device can be connected directly to a microprocessor, eliminating the need for A/D converters or timing resources.
9+
10+
## Example
11+
12+
13+
```py
14+
from machine import I2C, Pin
15+
from time import sleep_ms
16+
17+
from MMC5603 import MMC5603
18+
19+
i2c = I2C(0, sda=Pin(4), scl=Pin(16))
20+
21+
m = MMC5603(i2c)
22+
23+
while 1:
24+
sleep_ms(500)
25+
print(m.x(), m.y(), m.z())
26+
27+
```

0 commit comments

Comments
 (0)