@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值。
|