3、软件设计
AD7192内部具有多个寄存器,对AD7192的操作就是通过这些片内寄存器进行控制和数据寄存器/数据寄存器加状态信息配置。这些寄存器包括:通信寄存器、状态寄存器、模式寄存器、配置寄存器、ID寄存器、GPOCON寄存器、失调寄存器以及满量程寄存器。其中通信寄存器和状态寄存器共享地址,读操作时针对的是状态寄存器,写操作时针对的是通讯寄存器。对任何寄存器的操作都是从写通讯寄存器开始。
(1)、AD7192初始化
在使用AD719前先对其实先初始化。首先是软件复位,连续写入40个1就可对AD7192实现复位。复位完成后,对零点和量程进行较准。而后读取各寄存器状态。具体实现代码如下:
/*AD7192初始化配置*/
void AD7192Initialization(void (*ReadWriteForAd7192)(uint8_t *,uint8_t *,uint16_t ),void (*ChipSelected)(bool),uint16_t (*GetReadyInput)(void))
{
AD7192SoftwareReset(ReadWriteForAd7192,ChipSelected);
AD7192InternalZeroScaleCalibration(ReadWriteForAd7192,ChipSelected,GetReadyInput);
AD7192InternalFullScaleCalibration(ReadWriteForAd7192,ChipSelected,GetReadyInput);
/*读取并存储全部寄存器的值*/
ReadAD7192Register(REG_COM_STA, 8, AD7192Registers, REG_COM_STA,ReadWriteForAd7192,ChipSelected);
AD7192InternalZeroScaleCalibration(ReadWriteForAd7192,ChipSelected,GetReadyInput);
AD7192InternalFullScaleCalibration(ReadWriteForAd7192,ChipSelected,GetReadyInput);
}
零点和量程校准包括内部校准和外部校准,我们这里使用内部校准。
(2)、读取转换数据
读取转换的结果有2中方式:单次获取和连续获取。单次转换模式下,AD7192 在完成转换后处于关断模式。 将模式寄存器中的MD2、MD1和MD0分别设置为0、0、1,便可启动单次转换,此时AD7192将上电,执行单次转换,然后返回关断模式。时序图如下所示:
单次转换数据获取具体实现代码如下:
uint32_t GetStartSingleConvertionValue(uint32_t Channels,void (*ReadWriteForAd7192)(uint8_t *,uint8_t *,uint16_t ),void (*ChipSelected)(bool),uint16_t (*GetReadyInput)(void))
{
uint32_t dataCode=0;
AD7192StartSingleConvertion(Channels,ReadWriteForAd7192,ChipSelected);
dataCode = AD7192ReadConvertingData(ReadWriteForAd7192,ChipSelected,GetReadyInput);
dataCode =dataCode & 0x00FFFFFF;
ReadAD7192Register(REG_DATA, 1, AD7192Registers, REG_DATA,ReadWriteForAd7192,ChipSelected);
return dataCode;
}
连续转换模式是上电后的默认转换模式。AD7192连续转换,每次完成转换后,状态寄存器中的RDY位变为低电平。如果CS为低电平,则完成一次转换时,DOUT/RDY 线路也会变为低电平。若要读取转换结果,用户需要写入通信寄存器,指示下一操作为读取数据寄存器。从数据寄存器中读取数据字后,DOUT/RDY变为高电平。时序图如下所示:
|