社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 354|回复: 6

[讨论] pyboardCN V2 问题2

[复制链接]

6835

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2018-7-7 11:11:10 | 显示全部楼层 |阅读模式
20芯币
在pyboard/pyboardCN V2上,加速度传感器MMA7660是支持中断功能的,可以实现敲击、翻转、倾斜、晃动等监测,并产生中断信号。但是在官方固件中,并没有提供这个功能。

问题2:

使用micropython编程,实现中断检测功能,并打印出中断信息。

如果有网友找出答案,直接在本贴后回帖就行。第一个找出正确答案的网友将获得奖励。


  • 参考电路




  • 完整原理图


  • MMA7660数据手册
MMA7660FC.pdf (699.63 KB, 下载次数: 9)


回复

使用道具 举报

10

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-7-7 12:45:21 来自手机 | 显示全部楼层
此问题解决方法可以去掉4.7k上拉电阻,如有保护电路需要,可串两个33欧姆电阻

点评

问题2要稍复杂一点,需要看看数据手册,研究一下寄存器的使用。  详情 回复 发表于 2018-7-7 18:17


回复

使用道具 举报

10

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-7-7 12:49:01 来自手机 | 显示全部楼层
看错地方了


回复

使用道具 举报

6835

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

 楼主| 发表于 2018-7-7 18:17:50 | 显示全部楼层
yongfyu 发表于 2018-7-7 12:45
此问题解决方法可以去掉4.7k上拉电阻,如有保护电路需要,可串两个33欧姆电阻

问题2要稍复杂一点,需要看看数据手册,研究一下寄存器的使用。


回复

使用道具 举报

221

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-7-13 09:36:11 | 显示全部楼层
目前大体实现了中断响应,但是对于具体的中断向量确认,却没有成功。关于MMA7760的使用,其实就是对07 、06 寄存器进行设置,然后读取03寄存器。

代码如下:
# main.py -- put your code here!

from pyb import Pin,I2C,ExtInt

def callback1(value):
        #motion_value =mma7760.mem_read(1,76,0x03) #读取mma7660的状态寄存器
        print("interrupt:shake")
        #print("motion_value=",motion_value)
        mma7760.mem_write(0x41,76,0x07)
  
power=Pin(Pin.cpu.B5,Pin.OUT,Pin.OUT_PP)
power.high()

mma7760=I2C(1,I2C.MASTER)
mma7760.scan()
mma7760.mem_write(0x00,76,0x07) #设置mode=0 处于standby模式下
mma7760.mem_write(0x80,76,0x06) #设置X轴shake中断使能
#mma7760.mem_write(0x01,76,0x06) #平放就会产生中断,立起来则不会
#mma7760.mem_write(0x02,76,0x06) #立起来就会产生中断
#mma7760.mem_write(0x04,76,0x06)  #tap检测
#mma7760.mem_write(0x00,76,0x08)  #tap检测 AMSR=000
mma7760.mem_write(0x41,76,0x07) #设置mode=0x41,处于active模式下
#motion_value =mma7760.mem_read(1,76,0x03)
#print(motion_value)
extint=ExtInt(Pin(Pin.cpu.B2),ExtInt.IRQ_FALLING,Pin.PULL_UP,callback1)
print(Pin(Pin.cpu.B2).value())

这段代码,如果去掉回调函数里的注释,运行程序就会产生Memory Error错误。
第一次使用micropython,这个问题留给后面大神解决吧。 1.png



点评

思路是正确的。 一个是尽量使用machine库,这样程序的通用性更好,pyb库是stm32专用,但是部分功能和machine又不同。在中断里不要修改工作模式寄存器,这样可能有影响。 我的参考代码:  详情 回复 发表于 2018-7-14 17:46


回复

使用道具 举报

6835

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

 楼主| 发表于 2018-7-14 17:46:57 | 显示全部楼层
flyword 发表于 2018-7-13 09:36
目前大体实现了中断响应,但是对于具体的中断向量确认,却没有成功。关于MMA7760的使用,其实就是对07 、06 ...

思路是正确的。

一个建议是尽量使用machine库,这样程序的通用性更好,pyb库是stm32专用,但是部分功能和machine又不同。在中断里不要修改工作模式寄存器,这样可能有影响。
我的参考代码:

  1. # ACCEL IRQ
  2. i2c = I2C(1)
  3. acc = MMA7660.MMA7660(i2c)

  4. IRQ_CNT = 0
  5. def MMA7660_IRQ(t):
  6. print("Accel irq")
  7.     ax = acc.getX()
  8.     ay = acc.getY()
  9.     az = acc.getZ()

  10.     print(rtc.datetime(), ax, ay, az)


  11. MMA7660_INTPIN = Pin('B2', Pin.IN)
  12. MMA7660_INTPIN.irq(handler=MMA7660_IRQ, trigger=Pin.IRQ_RISING)
复制代码





回复

使用道具 举报

221

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 7 天前 | 显示全部楼层
这个代码,可以正常运行了,可以针对tilt 03寄存器进行查询判断操作了,之前参考的micropython文档是1.6的,所有好多函数都不太一样,昨天找到最新的文档,好多问题迎刃而解。

# main.py -- put your code here!

from machine import Pin,I2C
from pyb import RTC

def callback1(value):
        motion_value =mma7760.readfrom_mem(76,3,1) #读取mma7660的状态寄存器
        print("motion_value=",motion_value)
        if(motion_value >= b'\0x80'):
                print("shake irq!")

power=Pin(Pin.cpu.B5,Pin.OUT,Pin.OUT_PP)
power.high()
mma7760_irq=Pin(Pin.cpu.B2,Pin.IN,Pin.OUT_PP)

mma7760=I2C(1)
mma7760.scan()
mma7760.writeto_mem(76,7,b'\x00') #设置mode=0 处于standby模式下
mma7760.writeto_mem(76,6,b'\x80') #设置X轴shake中断使能
mma7760.writeto_mem(76,7,b'\x41') #设置mode=0x41,处于active模式下
mma7760_irq.irq(callback1,Pin.IRQ_FALLING)

rtc=RTC()
print("Date & Time is: %s-%s-%s %s:%s" % (rtc.datetime()[0],rtc.datetime()[1],rtc.datetime()[2],rtc.datetime()[4],rtc.datetime()[5]))


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-7-22 01:37 , Processed in 0.202107 second(s), 18 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表