4775|5

1297

帖子

2

TA的资源

纯净的硅(中级)

楼主
 

【一起玩MicroPython】05 I2C驱动与FM收音机 [复制链接]

 在FM接收的方案上纠结了半天,最先选择的是tea5767,这货控制简单,有挺多参考代码,控制起来非常方便,如果不使用搜台模式的话,只要写入5个字节就可以了。这5个字节里面最重要就是PLL,而这个是可以根据本地电台,事先算好的。但是tea5767的最大缺点是信号一般,总觉得噪声比较大,不知道是天线问题还是啥。于是换了个Si4703,图省事,买了模块,上面自带了音频口,硬件比较方便,可这软件吧,真是要坑死,跳了半个月,跳出来了,音质还不错,就选他了。

以上两个模块都使用i2c接口。F4DISCO上用了两个I2C,#1 DISCO上用了PB6和PB9,已经有上拉4.7K。I2C2,是PB10(SCL)和PB11(SDA),没有上拉,PB10和音频有联系,不过可以使用。对于I2C而言,在python下已经很简单了,指定一个对象,用scan方法确定I2C的地址,然后就可以开始读写数据了(一般地址就按照说明书上给的就行,但是为了保险起见,可以scan确认下)。I2C的读写有两种方式,主要区别在于是否需要指定从器件的寄存器地址。如果不需要,则用recv和read,对应的函数原型如下:
  1. I2C.recv(recv, addr=0x00)
  2. I2C.send(send, addr=0x00)
复制代码
以上是无需指定内部寄存器地址的,recv的第一个参数可是是个整数,用来指定接收多少个字节,需要指定一个变量来接收,收到的是一个bytearray。而send里面的,一般是一个bytearray,就是用来发送的数据。由于python本身没有字节类型,所以一般都是从整数或者字符串利用struct的pack函数来生成要发送的字节。
如果收发时需要指定器件内部的寄存器地址,必须使用mem_read和mem_write。函数原型如下:
  1. I2C.mem_read(data, addr, memaddr)
  2. I2C.mem_write(data, addr, memaddr)
复制代码
可以看到,比上面就多了一个memaddr,不过为什么python的函数不能重载呢?
当然为了驱动Si4703,还要连一个RST,放到了PB12上。另外SDIO引脚还兼顾总线选择,所以先拿来派下用场
  1. rst=Pin('B12',Pin.OUT_PP)
  2. rst.low()
  3. sdio=Pin('B11',Pin.OUT_PP)
  4. sdio.low()
  5. nrst.high()
  6. i2c=I2C(2,I2C.MASTER,baudrate=400000)
  7. i2c.scan()
复制代码
可以正常扫描的地址是16,就是0x10。这个和datasheet里面的是不一样的。
然后开始控制寄存器,首先读一下。总共16寄存器,每个2字节。16是地址。i2c.recv(32,16)可以看到器件ID都是对的。注意读取的顺序0A-0F-00-09,每次读取都从头开始读。然后就是把驱动从C++移植过来,对python不是很熟悉,绕了很多路,不过还是成功了,最关键一点,就是每次更新寄存器前,先读一遍,这样才比较安全。目前搜台还没做,因为暂时用不到,只做了调台和调节音量。给出测试代码如下(首先要把si4703.py放到pyb里面去)
  1. from si4703 import SI4703
  2. from pyb import Pin,I2C
  3. radio=SI4703(I2C(2),Pin('B11'),Pin('B12'))
  4. radio.powerOn()
  5. radio.setChannel(996)
  6. radio.powerOff()
  7. radio.setVolume(5)
复制代码
终于能正常工作了,离胜利又进了一步。Si的驱动放附件,供参考。不过这个模块用的人不多吧
si4703.py (5.85 KB, 下载次数: 62)

最新回复

刚好需要,下一个来试试。   详情 回复 发表于 2024-12-25 14:04

赞赏

1

查看全部赞赏

点赞 关注(1)
 
 

回复
举报

1万

帖子

203

TA的资源

管理员

来自 5楼
 
汇总帖在此:
【一起玩MicroPython】—by johnrey
https://bbs.eeworld.com.cn/forum ... 9205&fromuid=536508

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

回复

2万

帖子

74

TA的资源

管理员

沙发
 
很详细,支持楼主一个
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

5263

帖子

239

TA的资源

管理员

板凳
 
看那样子也要竣工了
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(初级)

4
 
太好用了
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 

刚好需要,下一个来试试。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表