0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MCP3421-18bit ADC调试方案

云深之无迹 来源:云深之无迹 2023-10-19 09:25 次阅读

MicroChip芯片手册真的好看,恨不得都做笔记,今天这篇文章先对IIC协议进行了一个回顾,针对具体的数据手册逐位描述。

后面就是STM32的工程,以及一个数据处理上面的运算。

5块钱性价比真的很高

时钟的高电平周期内,SDA线上的数据必须保持稳定,数据线仅可以在时钟SCL为低电平时改变。

2f366a40-6e1e-11ee-939d-92fbcf53809c.png

SCL高的时候,DATA是要稳定读取的

2f4abba8-6e1e-11ee-939d-92fbcf53809c.png

每次都是8位的数据一个字节,+读写+ACK

2f6add8e-6e1e-11ee-939d-92fbcf53809c.png

高->低

2f6ec8f4-6e1e-11ee-939d-92fbcf53809c.png

前面的1101,是固定的电平,也叫器件码。后面的A2,A1,A1,是000,闭合图形的意思大概是固定的。

2f9587be-6e1e-11ee-939d-92fbcf53809c.png

2f998a4e-6e1e-11ee-939d-92fbcf53809c.png

一次传输一个字节,那么最后就是一个第九位,为0的时候是ACK收到

2fc98726-6e1e-11ee-939d-92fbcf53809c.png

前面的7位为地址码,第八位是写入标志,第九位是回复

在总线的一次数据传输过程中,可以有以下几种组合方式:

[1]主机向从机发送数据,数据传送方向在整个传送过程中不变:

2fcd39c0-6e1e-11ee-939d-92fbcf53809c.png

注:有阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送。

A表示应答(低电平), A非表示非应答(高电平)。S表示起始信号,P表示终止信号。

[2]主机在第一个字节后,立即从从机读数据:

2fe62bf6-6e1e-11ee-939d-92fbcf53809c.png

[3]在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相:

2ffd2bda-6e1e-11ee-939d-92fbcf53809c.png

3018b5da-6e1e-11ee-939d-92fbcf53809c.png

我来说一个这个18位是什么意思,一个数据有18位,除去别的样板数据。我们知道这个18bit的数据就是18个2进制位置,红色的部分,D0-D17就是18个也就是说18位的数据都是传输完整了,LSB就是D0,数据从这里开始。接着从右往左排列三个时钟周期,一个完整的应该是9位,前两个数据位满满的,第三个用了两位,最后的数据位怎么办?因为是连续完整的,所以这里的做法就是把剩下的位置都补18位数据的MSB,就是最后一个数字,我们忽略就可以。

30511d26-6e1e-11ee-939d-92fbcf53809c.png

这个就是说你是12或者是14的情况下,也是有多余的位置没有传输

30552f42-6e1e-11ee-939d-92fbcf53809c.png

这是低位数下的传输

30742d16-6e1e-11ee-939d-92fbcf53809c.png

3077f9aa-6e1e-11ee-939d-92fbcf53809c.png

309a6882-6e1e-11ee-939d-92fbcf53809c.png

30a53a28-6e1e-11ee-939d-92fbcf53809c.png

IIC的输入输出结构采用的是开漏的结构。

开漏结构不能够自主得到高电平,所以需要通过外部上拉电阻Rp来的实现IIC通信过程中的高电平。

Rp的大小取决于IIC不同模式时的灌电流大小。

由于种类的设备都有可能连接到IIC总线上面,比如说CMOS、NMOS等,所以IIC的高电平和低电平的标准是不一定的。高电平和低电平的值分别为0.7VDD和0.3VDD。

30be7a88-6e1e-11ee-939d-92fbcf53809c.png

应答位、非应答位:当主机传送8位数据结束后,主机会将SDA线拉高,此时如果从机正确接收数据则会将SDA拉低并在SCL高电平时保持低电平,这个信号为ACK信号。如果在传输8位数据后从机没有将SDA拉低则该信号为NACK。如果出现NACK则表示数据传输出错。

30da56ae-6e1e-11ee-939d-92fbcf53809c.png

是主动拉低的意思

数据有效性:当时钟信号为高电平的时候,数据线上的信号需要保持不变也就是在时钟线为高电平的时候数据线出现上升下降沿的话就会产生停止和启动信号,从而导致数据的传输出错。

30f4870e-6e1e-11ee-939d-92fbcf53809c.png

byte:SDA上的数据传输是以8bit即一个字节为单位传输的,每一次传输的字节数没有限制,每传输完一个字节后必须跟随一个应答位。 我们以01001001(0X49)为例,其时序图如下:

311159b0-6e1e-11ee-939d-92fbcf53809c.png

写操作:主机确定了从机的设备地址后,生成一个开始信号,然后向IIC总线上面发送设备的地址和读写方向标志。从机检测到该地址和自己设备地址相对应后,回复主机一个应答信号。主机接收到应答信号后就开始向这个设备以字节为单位发送数据,每一个字节后面都会带有从机的应答信号,直到主机发送完成最后一个数据后生成一个停止信号结束此次数据的传输。

3114fd18-6e1e-11ee-939d-92fbcf53809c.png

写就是主机一直捣鼓,后来问下从机,逼崽子听见没有

3128db76-6e1e-11ee-939d-92fbcf53809c.png

读操作:读操作与写操作有一些类似,同样的是需要确定需要读取的从设备的地址。然后主机生成开始信号,再向IIC总线上发送从设备的地址和读数据的指令。从设备接收到地址与自己的吻合后会产生一个应答信号。就这从设备就开始向主机发送主机想要读取的数据,主机正确接收数据后会向从机回复应答信号,当主机想要结束读取操作时,主机会回复一个非应答信号,然后生成停止信号结束数据的读取。

312e1348-6e1e-11ee-939d-92fbcf53809c.png

31470dc6-6e1e-11ee-939d-92fbcf53809c.png

牛鼻

314baf20-6e1e-11ee-939d-92fbcf53809c.png

3166cb16-6e1e-11ee-939d-92fbcf53809c.png

所示是示波器采集的IIC信号,我们通过自己的观察得到这一段IIC包含的信息,主机向地址为0XA0 的设备写入0X0C。

3187c6ea-6e1e-11ee-939d-92fbcf53809c.png

配置寄存器

IIC总线的传输速率一般是几百KHZ,传输速率设置为几MHz就可以。这里我们采用4MHz的采样率对IIC进行采样。

31a1f876-6e1e-11ee-939d-92fbcf53809c.png

这些是一些函数,顺手翻译

31c48774-6e1e-11ee-939d-92fbcf53809c.png

这个是配置位

31cca80a-6e1e-11ee-939d-92fbcf53809c.png

31e61966-6e1e-11ee-939d-92fbcf53809c.png

第4位

31fd0bee-6e1e-11ee-939d-92fbcf53809c.png

11 18位

3219f164-6e1e-11ee-939d-92fbcf53809c.png

最后两个00,不增益

322caed0-6e1e-11ee-939d-92fbcf53809c.png

1101是跑不了的

324a72ee-6e1e-11ee-939d-92fbcf53809c.png

那就000,最后再补一个

3269e53e-6e1e-11ee-939d-92fbcf53809c.png

地址也就是这样的

328a3dde-6e1e-11ee-939d-92fbcf53809c.png

IIC的CubeMX配置,就默认就好

32a4f232-6e1e-11ee-939d-92fbcf53809c.png

这个是初始化函数

32b6417c-6e1e-11ee-939d-92fbcf53809c.png

翻译的另外一个函数

32d3debc-6e1e-11ee-939d-92fbcf53809c.png

计数值满了以后就开始一次转换

32e99360-6e1e-11ee-939d-92fbcf53809c.png

输出的位数字

33051f18-6e1e-11ee-939d-92fbcf53809c.png

这个就是建立的一个数组

330f12e8-6e1e-11ee-939d-92fbcf53809c.png

好,两个位

332a029c-6e1e-11ee-939d-92fbcf53809c.png

先留啊

3366c484-6e1e-11ee-939d-92fbcf53809c.png

具体就是这样算的,然后除了最后两位,前面都是0

3385980a-6e1e-11ee-939d-92fbcf53809c.png

中,低

33a7800a-6e1e-11ee-939d-92fbcf53809c.png

直接拼接

33b3ceaa-6e1e-11ee-939d-92fbcf53809c.png

这是就是左移,将一个二进制数的所有位向左移动指定的位数,右边用0填充。

之后相加是很简单的事情了。

33bf9cbc-6e1e-11ee-939d-92fbcf53809c.png

也可以写成完整的位运算的样子,一个字节一个字节的去取

33daf35e-6e1e-11ee-939d-92fbcf53809c.png

我们上面拿到的数据才是一堆位数据,我们要变成人类可读的数字

所有的数据都是补码:

33fd82de-6e1e-11ee-939d-92fbcf53809c.png

判断一个32位无符号整数(Voltage)的最高位符号位是否为1。 & 是按位与运算符,用于将两个数的对应位进行逻辑与操作。 0x00020000 是一个十六进制数,其二进制表示为 : 00000001 00000000 00000000 00000000。 Voltage & 0x00020000 的结果是将 Voltage 的最高位符号位与 0x00020000 进行按位与操作。 如果结果等于 0x00020000,则说明 Voltage 的最高位符号位为1,返回 True;否则返回 False。

如果是1的话,也就是算过的数字是不变的

340f9974-6e1e-11ee-939d-92fbcf53809c.png

我们知道了是负数,接着把他还原

这段代码是用于将一个32位无符号整数(Voltage)的最高位符号位清零,并将其转换为正数。 Voltage &= 0x0001ffff; 这行代码将 Voltage 与十六进制数 0x0001ffff 进行按位与操作。 0x0001ffff 的二进制表示为: 00000001 11111111 11111111 11111111。 这个操作的目的是保留 Voltage 的低20位,并将最高位符号位清零。 Voltage = (~Voltage) + 1; 这行代码首先对 Voltage 进行按位取反操作,然后加1。加1是为了将取反后的负数转换为正数。 Voltage &= 0x0001ffff; 这行代码再次将 Voltage 与十六进制数 0x0001ffff 进行按位与操作。 这个操作的目的是保留 Voltage 的低20位,将其转换为正数。 最终,这段代码的作用是将一个32位无符号整数的最高位符号位清零,并将其转换为正数。

3424c394-6e1e-11ee-939d-92fbcf53809c.png

这个就是负数的

344aff82-6e1e-11ee-939d-92fbcf53809c.png

正数的

345bd0a0-6e1e-11ee-939d-92fbcf53809c.png

如果是CubeMX的工程,记得把自己的头文件放这里

3474cdd0-6e1e-11ee-939d-92fbcf53809c.png

C文件是在这里添加

3486dd40-6e1e-11ee-939d-92fbcf53809c.png

这样就添加好了

349cfc9c-6e1e-11ee-939d-92fbcf53809c.png

编译通过

34b1f9bc-6e1e-11ee-939d-92fbcf53809c.png

34c0d1e4-6e1e-11ee-939d-92fbcf53809c.png

34ce4220-6e1e-11ee-939d-92fbcf53809c.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    455

    文章

    50756

    浏览量

    423336
  • microchip
    +关注

    关注

    52

    文章

    1506

    浏览量

    117572
  • adc
    adc
    +关注

    关注

    98

    文章

    6497

    浏览量

    544515
  • STM32
    +关注

    关注

    2270

    文章

    10897

    浏览量

    355815
  • IIC协议
    +关注

    关注

    0

    文章

    16

    浏览量

    3931

原文标题:MCP3421-18bit ADC 调试

文章出处:【微信号:TT1827652464,微信公众号:云深之无迹】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MCP3421电流检测问题

    MCP3421读数显示电流有25mA,MCP341配置为16bit 2倍PGA,不清楚是哪里出了问题,有没有大佬解答
    发表于 03-15 09:25

    mcp3421驱动如何写,求指导

    mcp3421驱动
    发表于 09-22 23:04

    模数转换器MCP3421电子资料

    概述:MCP3421是△-∑A/D转换器系列的一款18位分辨率器件。它可在2.7~5.5V单电源下电压工作,并消耗很低的电流。在VDD=3 V、单次转换、1 sps条件下,电流消耗仅为39μA(典型值)。
    发表于 04-08 08:00

    MCP3421的基础知识点,总结的太到位了

    MCP3421封装形式与结构MCP3421的工作原理MCP3421的应用
    发表于 04-12 06:02

    mcp3421 18不起作用是怎么回事?

    我正在使用 mcp3421 adc,它只能在默认模式 12 位下工作。 我在很多板子里用c语言写的这个ic。 这在我的测试程序中 i2c.setup(4,5) let address =104
    发表于 04-26 08:02

    MCP3421 pdf datasheet

    The MCP3421 is a single channel low-noise, highaccuracy ΔΣ A/D converter with differential inputs
    发表于 08-07 12:58 53次下载

    MCP3421电池电量监测演示板

    本视频将向您介绍如何利用高精度∆-Σ ADC和PIC®单片机开发高性价比的电池电量监测解决方案。在本解决方案中,采用的是Microchip MCP3421
    的头像 发表于 06-06 13:46 5438次阅读
    <b class='flag-5'>MCP3421</b>电池电量监测演示板

    MCP3421 SOT23-6评估板的详细中文资料概述

    本文档介绍了如何将 MCP3421 SOT23-6 评估板用作开发工具,在目标电路板上仿真和调试固件。
    发表于 06-13 11:27 63次下载

    MCP3421电池电量计演示板的详细中文资料概述

    MCP3421 电池电量计演示板用于演示 MCP3421 器件在电池电量计量应用中的使用。 MCP3421 电池电量计演示板包括两个 MCP3421 器件、
    发表于 06-13 10:27 56次下载
    <b class='flag-5'>MCP3421</b>电池电量计演示板的详细中文资料概述

    关于MCP3421电池电量监测演示板的特点介绍

    MCP3421电池电量监测演示板
    的头像 发表于 07-10 11:19 5991次阅读

    电池电量监测解决方案的演示介绍

    视频简介:本视频将向您介绍如何利用高精度∆-Σ ADC和PIC®单片机开发高性价比的电池电量监测解决方案。在本解决方案中,采用的是Microchip MCP3421
    的头像 发表于 03-27 06:22 7153次阅读

    MCP3421 18位delta-sigma ADC,采用小型SOT-23封装,具有基准电压源。

    电子发烧友网为你提供()MCP3421相关产品参数、数据手册,更有MCP3421的引脚图、接线图、封装手册、中文资料、英文资料,MCP3421真值表,MCP3421管脚等资料,希望可以
    发表于 04-18 21:46

    MCP3421DM 电池电力测定参考设计

    电子发烧友网站提供《MCP3421DM 电池电力测定参考设计.pdf》资料免费下载
    发表于 12-31 02:27 10次下载

    基于MCP3421DM-WS权重系统的参考设计

    View the reference design for MCP3421DM-WS. http://www.elecfans.com/soft/ has thousands of reference designs to help bring your project to life.
    发表于 06-26 09:46 4次下载
    基于<b class='flag-5'>MCP3421</b>DM-WS权重系统的参考设计

    基于MCP3421EV模拟到数字转换的参考设计

    View the reference design for MCP3421EV. http://www.elecfans.com/soft/ has thousands of reference designs to help bring your project to life.
    发表于 07-08 21:35 2次下载
    基于<b class='flag-5'>MCP3421</b>EV模拟到数字转换的参考设计