ADS8028与K60的SPI通信采集

    新出炉的ADS8028与K60的SPI通信刚刚调试完成!
   大概调试了整整五天,也就是一星期。。。。经历了从寄存器配置到逻辑分析,再到用示波器分析调试。虽然很辛苦但是结果还是没有失望哦。大概说下我的调试过程吧
   本人是用的是山外的MK60FN的库,库有bug!!倒不是说库写发有什么问题 主要是SPI初始化寄存器的配置,因为山外库历程的教程是基于nrf+做的SPI通信,所以一些配置并不适用于ADS8028,比如说时钟极性CPOL配置,nrf+是空闲时钟低电平,但是ADS8028空闲时是高电平。

ADS8028的配置

  ADS8028的数据手册基本上百度都有,但是!!!找不到中文手册。所以我就简单的把一些重要的东西在这总结一下。本人也是英语渣渣,所以往大家海涵啊,保证正确度,但表述可能不是很精炼哈。

ADS8028 是一款 12 位模数转换器 (ADC),此转换器采样速度高达 1MSPS, 八通道。模拟电源 (AVDD):2.7V 至 5.25V;数字电源 (DVDD):1.65V 至 5.25V;模拟通道输入电压值 –0.3 to AVDD + 0.3 。时钟极性CPOL—1(无效时,SCK为高电平),时钟相位CPHA—0(前沿采样)。

接下来说一说关于ADS与K60的通信吧
我用的是山外的库,主要用来两个函数,一个是SPI初始化,一个是SPI接受和发送函数,关于SPI通信的原理就不扯了,百度随便搜一下就能搜出来,而且很详细。
我们主要说一下SPI的配置吧,我是把K60当做主机配置,配置是10M的波特率,ADS8028的最高频率是20M,所以10~15M的波特率都是比较合适的。
其实初始化里面的配置主要是关于时钟极性和时钟相位的配置,还有就是此接受和发送都必须设为高字节数据先输入输出,基本上初始化底层的东西就这么多。
ADS8028中我们只需要用到两个寄存器,一个读数据,一个发送指令,发送指令到达CR寄存器中,CR寄存器是十六位的,我简单做如下介绍:
bit15 WRITE:写操作使能
0是进行进行写操作,1是使能写操作,如果置0,那么后面所 有的寄存器的位操作都将无效
所以如果进行写操作,此位必须置1
bit14 REPEAT:此位表示下一个循环的命令和此命令相同
1是代表使能这项应用,一般置1,因为每次读取的通道是一致的
bit【13:6】:模拟输入通道的选择,一共是8个通道,AIN7-AIN0,1表示选择此通道,0则反之亦然。
bit5 内部温度传感器的选择,高电平有效
bit【4:3】 这两位可以忽视
bit2 表示是否使用外置参考电压,1有效
bit1 也是关于内部温度传感器的操作,因为我没有到此温度传感器,所以直接置0
bit0 待机模式 1有有效
好了,以上就是关于CR寄存器的参考了,我是用的是山外库里面的发送接收函数。

注意!请注意!
在接受和发送时,由于是16位寄存器的操作,所以发送和接受都是两个字节,它的发送时一个字节一个字节发送,相当于它把你16位的数据看成一个数组,这个数组有两个u8的数据,它先发数组0,再发数组1,但是我们的ADS接受会默认你是高位在前低位数据在后,所以呢,你发送的数据和ADS接受到的数据并不一样。我知道你没听懂,所以用一个例子说下吧

**

**比如我想发送的是0XFF04到CR寄存器里面,但是如果调用山外库里面的接受发送函数的话,它对这个值做的是这样的操作,将0XFF04看成一个数组data,
data【0】=04,data【1】=FF;然后进行发送,还记得吗?所以发送时先进行数组data[0] ,再发送data[1],所以ADS8028接受的数据是04FF。所以你想接受到的数据是0XFF,发送时应设置为0X04FF。接受数据同理。

接下来聊一聊接受的数据吧。
接受的数据也是十六位的,bit[0:11]是模拟输出,bit【12:15】是输出数据对应的模拟通道号。

最后我们再聊一聊调试吧,一开始我用的是逻辑分析仪进行的分析,嗯,很傻逼,因为使用的硬件SPI,所以其实根本用不着逻辑分析仪,反而因为我的频率太快,导致分析出来的时钟是乱的,但是当我使用1M的时候这个时候逻辑分析仪可以使用了,最好还是用示波器做测试吧。

OK,今天的分析就这么多,表述不是很准确,希望大家海涵!!!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
OpenMV是一款高度集成的视觉开发板,而K60则是一款32位嵌入式微控制器。要实现OpenMV与K60之间的串口通信,可以按照以下步骤进行: 首先,需要在OpenMV配置串口通信。打开OpenMV IDE,选择“工具”菜单下的“串口”选项。确定串口的波特率、校验位、数据位和停止位等参数与K60的串口设置一致。 然后,在OpenMV的Python脚本中,导入`pyb`模块,该模块提供了对控制器的低级别访问功能。使用`pyb.UART()`函数初始化一个串口对象,并指定串口号和波特率。 接下来,可以使用串口对象的`read()`方法读取K60发来的数据,或者使用`write()`方法向K60发送数据。可以在OpenMV的循环中反复调用`read()`和`write()`方法,实现持续的串口通信。 在K60的代码中,也需要配置串口通信。根据K60的开发环境,选择相应的串口初始化函数,并设置波特率和其他参数与OpenMV一致。使用适当的函数来接收OpenMV发送的数据,并使用相应函数向OpenMV发送数据。 最后,将OpenMV与K60分别连接到电脑,确保串口线连接正确。在OpenMV上运行Python脚本,同时在K60上运行相关代码。如果一切正常,OpenMV和K60之间应该能够成功地进行串口通信。 需要注意的是,串口通信的成功与否不仅取决于硬件连接的正确性,还与软件的配置和代码编写的正确性有关。因此,在实施串口通信之前,建议仔细查阅OpenMV和K60的官方文档,并确保正确配置和编写代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值