[资料干货] MCU模拟ADC芯片IIC通信

[复制链接]
liao6 发表于 2025-8-27 09:34 | 显示全部楼层 |阅读模式
@21小跑堂


MCU模拟ADC芯片(片外AD作为从机)
MCU采用的是S9KEAZ128,通信方式硬件IIC,ADC芯片为ADS1015。
模拟从机通信主要考虑2个方面:
1.硬件IIC中断通过信号判断状态
        1)起始位检测;
        2)停止位检测。停止位检测中接收数据,判断寄存器值;
        3)判断主机是读模式,还是写模式;
        4)清中断标志位。状态寄存器判断主机发送完一个字节数据后,确认信号是否被接收,也就是第九个时钟周期,当主机读到ACK/NACK,从机释放SDA。
2.数据处理
        通信的流程:  1)主机通过0x01寄存器配置通道,例如:通道0xE3,0x83----AIN2;
                                2)主机读取配置的0x01寄存器数据,即AIN_H AIN_L,
                                        例如:0x63,0x83为对应0xE3,0x83;
                                3)主机读数据寄存器0x00的数据:MSB , LSB。
                                第二条数据:0x63,0x83为MCU模拟从机器件发给主机的
                                第三条数据:MSB , LSB---MCU读取的ADC数据,经过处理发给主机
        首先,要搞清楚配置寄存器和数据寄存器,即主机配置寄存器要配置哪一个通道,主机要读哪一个寄存器是数据寄存器0x00,还是配置寄存器0x01。
        通过逻辑分析仪抓取某一通道数据可以看出,主机配置0x01寄存器通道是一个完整的通信过程,这个数据MCU可以通过中断接收到,即0x92 0x01 0xE3 0x83,如下图。通过这一条数据,可以判断主机要配置的通道,接下来要读取的就是这个通道的数据。


紧接着是读取刚才配置的通道数据,即0x92 0x01 0x93 AIN_H AIN_L,这个可以在中断中的读写模式中获取0x92 0x01 0x93,结合上面收到的配置通道数据,然后把 AIN_H AIN_L数据发给主机。通信过程如下图



最后,主机读数据,即0x92 0x00 0x93 MSB LSB,在中断中的读写模式中获取0x92 0x00 0x93,结合上面收到的配置通道数据,把对用通道的数据发给主机。见下图




MCU读取的ADC数据如何转换成从机的ADC数据?如下
        例如:ADS1015 12位 单端输入(0~2017),MCU 12位
        依据电路采集电压值相同,和精度无关,即11位,12位,16位精度采集同一点,输出电压值应该一致,公式如下:
        (MCUadc/4096)*3.3 = (ADS1015/2048)*4.096
        得出ADS1015采集的ADC值。

                        

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

19

主题

44

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部