dcexpert

个性签名:一起来玩 microbit/micropython

  • 2019-07-18
  • 回复了主题帖: 这个是怎么弄得?

    什么效果,板子中抠掉一块吗?

  • 回复了主题帖: LIS2MDL磁场传感器的MicroPython驱动移植

    目前遇到的一个问题是,LIS2MDL带有温度补偿功能,但是内部的温度传感器(TEMP_OUT_L_REG (6Eh), TEMP_OUT_H_REG (6Fh) )没有详细说明,读取的温度参数和实际温度也对应不上。

  • 回复了主题帖: LIS2MDL磁场传感器的MicroPython驱动移植

    github网站上的驱动:   https://github.com/micropython-Chinese-Community/mpy-lib/tree/master/sensor/LIS2MDL

  • 回复了主题帖: LIS2MDL磁场传感器的MicroPython驱动移植

    驱动用法: from machine import I2C import LIS2MDL i2c = I2C(1) mdl = LIS2MDL.LIS2MDL(i2c) mdl.x() mdl.get()   中断程序用法: from machine import I2C from pyb import Timer import LIS2MDL i2c = I2C(1) mdl = LIS2MDL.LIS2MDL(i2c) def tim_irq(t): print(mdl.get()) tim = Timer(1, freq = 1) tim.callback(tim_irq)  

  • 发表了主题帖: LIS2MDL磁场传感器的MicroPython驱动移植

    LIS2MDL是磁场传感器,可以测试三轴方向的磁场强度。LIS2MDL使用了标准I2C接口,通过寄存器的方式读取内部的传感器数据和设置工作模式。   LIS2MDL有三种工作模式:连续模式、单次模式、待机模式。单次模式(Single mode)和其它传感器的oneshot模式类似,都是为了降低功耗而设计,在单次模式下,传感器采集数据,完成后自动转入待机模式。不过LIS2MDL没有单独的oneshot/Single mode寄存器,而是每次都需要在寄存器 CFG_REG_A 中修改 MD (模式)位。在默认情况下(上电后),传感器处于待机模式,因此需要改变传感器的工作模式才能读取磁场的数据。   虽然没有专门的oneshot寄存器,但是为了保持和其它传感器驱动用法一致,在这次移植的驱动中增加了oneshot_mode()函数,用于设置传感器工作模式。   完整的驱动程序如下:   # LIS2MDL magnetic seneor micropython drive # ver: 1.0 # License: MIT # Author: shaoziyang (shaoziyang@micropython.org.cn) # v1.0 2019.7 LIS2MDL_CFG_REG_A = const(0x60) LIS2MDL_CFG_REG_C = const(0x62) LIS2MDL_STATUS_REG = const(0x67) LIS2MDL_OUTX_L_REG = const(0x68) LIS2MDL_OUTY_L_REG = const(0x6A) LIS2MDL_OUTZ_L_REG = const(0x6C) class LIS2MDL(): def __init__(self, i2c, addr = 0x1E): self.i2c = i2c self.addr = addr self.tb = bytearray(1) self.rb = bytearray(1) # LP=0 ODR=0 MD=0 self.setreg(LIS2MDL_CFG_REG_A, 0x00) # BDU=1 self.setreg(LIS2MDL_CFG_REG_C, 0x10) self.oneshot = False self.irq_v = [0, 0, 0] def int16(self, d): return d if d < 0x8000 else d - 0x10000 def setreg(self, reg, dat): self.tb[0] = dat self.i2c.writeto_mem(self.addr, reg, self.tb) def getreg(self, reg): self.i2c.readfrom_mem_into(self.addr, reg, self.rb) return self.rb[0] def get2reg(self, reg): return self.getreg(reg) + self.getreg(reg+1) * 256 def oneshot_mode(self, oneshot=None): if oneshot is None: return self.oneshot else: self.get2reg(LIS2MDL_OUTX_L_REG) self.get2reg(LIS2MDL_OUTY_L_REG) self.get2reg(LIS2MDL_OUTZ_L_REG) self.getreg(LIS2MDL_CFG_REG_A) self.oneshot = oneshot self.rb[0] &= 0xFC if oneshot: self.rb[0] |= 0x01 pyb.delay(5) self.setreg(LIS2MDL_CFG_REG_A, self.rb[0]) def ONE_SHOT(self): if self.oneshot: self.oneshot_mode(1) while 1: if self.getreg(LIS2MDL_STATUS_REG) & 0x08: return def x(self): self.ONE_SHOT() return self.int16(self.get2reg(LIS2MDL_OUTX_L_REG)) def y(self): self.ONE_SHOT() return self.int16(self.get2reg(LIS2MDL_OUTY_L_REG)) def z(self): self.ONE_SHOT() return self.int16(self.get2reg(LIS2MDL_OUTZ_L_REG)) def get(self): self.ONE_SHOT() self.irq_v[0] = self.int16(self.get2reg(LIS2MDL_OUTX_L_REG)) self.irq_v[1] = self.int16(self.get2reg(LIS2MDL_OUTY_L_REG)) self.irq_v[2] = self.int16(self.get2reg(LIS2MDL_OUTZ_L_REG)) return self.irq_v   值得注意的是,LIS2MDL寄存器风格和 X-NUCLEO-IKS01A3 中另外几个传感器不太一致,使用上也稍有区别。     此内容由EEWORLD论坛网友dcexpert原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 发表了日志: LIS2MDL磁场传感器的MicroPython驱动移植

  • 发表了主题帖: MicrPython中新增对STM32WB55的支持

    MicroPython中新增了对超低功耗无线双核的STM32WB55支持: https://github.com/micropython/micropython/commit/0c12adca4611c35763b7aaff1c7a4d76d160a29e https://github.com/micropython/micropython/commit/d2a8fb747fbe2ac67cd266f6bc0fcccd9a5874e6 https://github.com/micropython/micropython/commit/9849567a065a1abee1dc406856ce4b50d1f678e5 https://github.com/micropython/micropython/commit/59b7166d87b480517ca5905ee2239dc2cace18b9  

  • 发表了日志: MicrPython中新增对STM32WB55的支持

  • 回复了主题帖: 【麦昆试用】迟来的第二帖——调通小车上的基础输入\输出外设

    donatello1996 发表于 2019-7-18 09:35 嗯,因为我熟悉C/C++家族的编程习惯,用python是真心不习惯
    对嵌入式,python是一种新的开发方式,可以体验一下。

  • 回复了主题帖: 【麦昆试用】迟来的第三帖——无线控制小车简单篇

    donatello1996 发表于 2019-7-18 09:33 有了解过这个软件,但是我还是想用lightblue抓一下透传的数据,不知道为啥不能识别,是MAC地址配置有问题 ...
    是不是底层程序问题?

  • 回复了主题帖: 【麦昆试用】迟来的第三帖——无线控制小车简单篇

    本帖最后由 dcexpert 于 2019-7-18 09:28 编辑 http://www.bittysoftware.com/apps/bitty_controller.html   bitty controller可以配合makecode进行编程,其它软件不知道行不行,没有试过。  

  • 回复了主题帖: 【麦昆试用】迟来的第三帖——无线控制小车简单篇

    蓝牙控制可以用 bitty game controller 这个App,支持8个键,每个键对应按下和释放两个命令。

  • 2019-07-17
  • 回复了主题帖: 一种基于TPS61022的恒定且可调输出功率的电子烟供电方案

    电子烟危害小是非常有争议的。只从产品来说,并不复杂。

  • 回复了主题帖: 【麦昆试用】迟来的第二帖——调通小车上的基础输入\输出外设

    用的是Arduino编程啊

  • 回复了主题帖: 再次升级HTS221的mpy驱动

    为HTS221驱动增加了oneshot模式: https://github.com/micropython-Chinese-Community/mpy-lib/tree/master/sensor/HTS221

  • 回复了主题帖: LPS22的micropython驱动

    改进了LPS22的oneshot模式,保证在转换完成后才读取数据。更新后的程序请见github。

  • 回复了主题帖: STTS751的MicroPython驱动移植

    回调函数中用法 from machine import I2C from pyb import Timer import STTS751 i2c = I2C(1) stt = STTS751.STTS751(i2c) def tim_irq(t): print(stt.temperature_irq()) tim = Timer(1, freq = 1) tim.callback(tim_irq) 因为回调函数不支持浮点计算,所以在回调函数中只能读取温度的整数部分。  

  • 回复了主题帖: STTS751的MicroPython驱动移植

      使用方法: from machine import I2C import STTS751 i2c = I2C(1) stt = STTS751.STTS751(i2c) stt.temperature()  

  • 回复了主题帖: 问一下关于LM35CZ温度传感器的问题

    StruggleMySen 发表于 2019-7-17 10:05 大神能给推荐几个吗。。。别的传感器,主要是做一个电压数据采集
    为什么必须用电压型的,如果是普通单片机的ADC,还不一定比数字型温度传感器中的ADC好。   有一个TMP235可以试试,也是10mv/C,0度时输出500mV。更多的型号可以到各芯片厂家网站上找找。

  • 发表了主题帖: STTS751的MicroPython驱动移植

    本帖最后由 dcexpert 于 2019-7-17 10:25 编辑 看到STTS751的名称,很容易联想到Si7051这个温度传感器。两者都是高精度温度传感器,STTS751最高可以达到12位分辨率,而Si7051是14位。功耗方面Si7051占优,1Hz采样率下平均电流195nA。电源范围上Si7051也稍好,最低是1.9V。而封装上STTS751更小,只有2x2mm。功能上STTS751明显胜出,支持事件和中断输出,可以设置温度上下限和过温启动风扇。软件方面也是STTS751更方便,可以直接读取温度,而Si7051还需要经过换算才行。   STTS7551的使用非常简单,上电后默认参数就可以读取温度,不像有些传感器上电后是掉电状态,需要设置为工作模式才运行。温度值存放在寄存器0和2,寄存器0存放整数部分和符号位,寄存器2存放小数部分,如果不需要太高精度,只读取寄存器0就可以。稍有不便的是两个寄存器地址不连续。   寄存器3是配置寄存器,可以设置数据分辨率(Tres1/Tres0),默认是10bit。而RUN/STOP可以设置为运行和待机模式。在待机模式下,如果向oneshot寄存器(0F)写入任意数据,就会启用oneshot功能(运行一次),转换温度后自动进行待机模式以降低功耗。 上面简单分析了STTS751的工作模式,下面是完整的micropython驱动: 此内容由EEWORLD论坛网友dcexpert原创,如需转载或用于商业用途需征得作者同意并注明出处   # STTS751 temperature seneor micropython drive # ver: 1.0 # License: MIT # Author: shaoziyang (shaoziyang@micropython.org.cn) # v1.0 2019.7 STTS751_RESOLUTION = (8, 0, 4, 12, 10, 11, 9, 12) STTS751_REG_STATUS = const(1) STTS751_REG_CONFIG = const(3) STTS751_REG_CONRAT = const(4) STTS751_REG_TEMPVH = const(0) STTS751_REG_TEMPVL = const(2) STTS751_REG_TEMPHH = const(5) STTS751_REG_TEMPHL = const(6) STTS751_REG_TEMPLH = const(7) STTS751_REG_TEMPLL = const(8) STTS751_REG_ONESHOT = const(15) STTS751_REG_THERM = const(32) STTS751_REG_THERMHYS = const(33) class STTS751(): def __init__(self, i2c, addr = 0x4A): self.i2c = i2c self.addr = addr self.tb = bytearray(1) self.rb = bytearray(1) self.oneshot = False self.mode(False) def int16(self, d): return d if d < 0x8000 else d - 0x10000 def setreg(self, reg, dat): self.tb[0] = dat self.i2c.writeto_mem(self.addr, reg, self.tb) def getreg(self, reg): self.i2c.readfrom_mem_into(self.addr, reg, self.rb) return self.rb[0] def get2reg(self, reg): return self.getreg(reg) + self.getreg(reg+1) * 256 def resolution(self, res = None): self.getreg(STTS751_REG_CONFIG) if res is None: return STTS751_RESOLUTION[(self.rb[0] & 0x0C)//4 + 4] else: if res > 12 or res < 9: return self.rb[0] = (self.rb[0] & 0xF3) | STTS751_RESOLUTION[res-9] self.setreg(STTS751_REG_CONFIG, self.rb[0]) def mode(self, oneshot=None): if oneshot is None: return self.oneshot else: self.getreg(STTS751_REG_CONFIG) self.oneshot = oneshot if oneshot: self.rb[0] |= 0x40 else: self.rb[0] &= 0xBF self.setreg(STTS751_REG_CONFIG, self.rb[0]) def ONE_SHOT(self): if self.oneshot: self.setreg(STTS751_REG_ONESHOT, 1) while 1: if self.getreg(STTS751_REG_STATUS) < 0x80: return def temperature(self): try: self.ONE_SHOT() return self.int16((self.getreg(STTS751_REG_TEMPVH)<<8) + self.getreg(STTS751_REG_TEMPVL))/256 except MemoryError: return self.temperature_irq() def temperature_irq(self): self.ONE_SHOT() self.getreg(STTS751_REG_TEMPVH) return self.rb[0] if self.rb[0] < 128 else self.rb[0] - 256  

最近访客

< 1/6 >

统计信息

已有1665人来访过

  • 芯币:44913
  • 好友:43
  • 主题:1040
  • 回复:6169
  • 课时:1
  • 资源:14

留言

你需要登录后才可以留言 登录 | 注册


dcexpert 2019-4-7
和C语言中用法是一样的
szl123456 2019-4-6
您好 我正在在micropython上搞485通信,因为没有历程,大家好像都没搞过 大神能指导一下吗   help  help
werjufour 2018-8-28
你好!向你请教个问题。PIC24fj64ga004 AD转换值放在哪个寄存器当中?
MSYuan0317 2018-8-9
您好!我们是代理乐鑫产品的,如果有需要可以联系我,QQ:285254096 ,谢谢!
dcexpert 2018-8-2
在《MicroPython中文教程》电子版和《MicroPython入门指南》一书中都有
15588608145 2018-8-2
具体的MicroPython所支持的模块和语法说明在哪里呢?
MSYuan0317 2018-7-27
您好!我们是代理乐鑫产品的,如果有需要可以联系我,QQ:285254096 ,谢谢!
dcexpert 2018-6-6
还没有开始做,等做好了我送你两片
mo2016 2018-6-6
DIY一个micropython的多功能无线电子钟 想要有偿PCB板二片,谢谢!
dcexpert 2015-1-22
不是5个DIY项目,是围绕DIY F429示波器,有5个小专题,希望大家一起讨论完成。

5个都在DIY示波器帖子中的。
xu__changhua 2015-1-22
5个DIY项目,我就查到示波器,还有4个能给出链接么?
查看全部