您好!
我们计划将一些旧机器连接到软件。 为此、我们设计了一个具有 Olimex ESP32-PoE-ISO、数字隔离器(ADuM151)和 ADS124S08的小型电路板。 当我们要测量0和10V 之间的电压信号时、我们使用分压器将信号设置为0-2.5V。
对于本软件、我使用的是 Jens Chr Brynildsen 的 ADS124S08.CPP/ADS124S08.h 的改编自版、 可在此处找到。 我只更改了 SPI 引脚以使用 ESP 的引脚。 一切似乎都运行正常(我可以读取和写入寄存器、在重新读取之后、它们会发生变化)、除非我想读取 AIN、我只会得到零。 因此、我假设通信正常、但代码中存在错误。
下面是一个小测试脚本、显示了相同的错误和修改后的 Lib。
ADS124S08_test.ino:
#include //BSDL
#include
#define MOSI 15
#define MISO 2
#define CS 5
#define RESET 13
#define CLK 14
ADS124S08 ADC;
uint8_t STATUSBIT = 1;
uint8_t DATA;
uint8_t CRCBIT = 1;
//##############################################
//#################### 读取 ADC 配置######的寄存器####
//############################################################################################################################
void read_adc_registers (){
Serial.print ("RegRead ID:");
Serial.println (adc.regRead (0x00)、hex);
Serial.print ("RegRead status:");
Serial.printn (adc.read (0x01)、hex);
Serial.print ("RegRead INPMUX"):
serial.println (adc.regRead (0x02)、hex);
serial.print ("RegRead PGA:");
serial.println (adc.regRead (0x03)、hex);
serial.print ("RegRead datarate:");
serial.println (adc.regRead (0x04)、hex);
serial.print ("RegRead REF:");
serial.println (adc.regRead (0x05)、hex);
serial.print ("RegRead IDACMAG:");
serial.println (adc.regRead (0x06)、hex);
serial.print ("RegRead IDACMUX:");
serial.println (adc.regRead (0x07)、hex);
serial.print ("RegRead VBIAS:");
serial.println (adc.regRead (0x08)、hex);
serial.print ("RegRead SYS:");
serial.println (adc.regRead (0x09)、hex))
//################################
//#################### 设置################
//################################
void setup(){
Serial.begin(115200);
Serial.println ("---");
//设置 CS 引脚并重置 ADS124S08
引脚模式(CS、输出);
pinMode (RESET、输出);
digitalWrite (RESET、LOW);
delay(100次);
digitalWrite (重置,高电平);
delay(1000次);
ADC.begin();
delay (1000);
ADC.sendCommand(RESET_OPCODE_MASK);
delay (1000);
ADC.sendCommand(START_OPCODE_MASK);
read_adc_registers ();
if (adc.regRead (0x01)= 0x80){
serial.println ("重置状态标志");
ADC.regWrite (0x01、0x40);//如果发出复位标志,则复位状态标志
}
Serial.println ("config...");
ADC.regWrite (0x02、0x0C);//将 MUX 设置为 AIN0和 AINCOM
ADC.regWrite (0x03、0x00);//禁用 PGA ADC.regWrite
(0x02、0x39)
;禁用内部缓冲区:0、0x20SPS、0x20SPS、0、0、0、0、0;0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、 NEG RefBuf、选择基准输入引脚、dis。 内部参考电压
ADC.regWrite (0x09、0x13);//启用 CRC 和 Statusbit
ADC.regWrite (0x10、0xF0);//将 GPIO 设置为输入
READ_ADC_REGISTERs ();
}
//##################################################################
//#################### 主循环##################
//####################################
void loop(){
delay (2000);
Serial.println ("下一读...");
Serial.println (adc.RDATA (&STATUSBIT、&data、&CRCBIT));
//仅检查是否有任何更改
READ_ADC_REGISTERS ();
}
ADS124S08.CPP:
/*-版权所有-、BSD
*版权所有(c) 2016、德州仪器(TI)公司
*保留所有权利。
*
*
只要
符合以下条件*、允许以源代码和二进制形式重新分发和使用:
*
*源代码的重新分发必须保留上述版权
声明*、此条件列表和以下免责声明。
*
***二进制形式的再发行必须在
*随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
*
***未经
事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
*
*本软件由版权所有者和贡献者"按原样"提供
*、
不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
*贡献者都不对任何直接、间接、偶然、特殊、
*模范、 或相应的损害(包括但不限于
*采购替代产品或服务;丧失使用、数据或利润;
*或业务中断)、但出于任何责任理论
、*无论是在合同中、严格责任还是由于
使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
、*即使已获悉可能会发生此类损坏。
*-/copyrights-*/*
本课程基于 TI 提供的 ADS124S08.c、并经过调整可与
* Particle Photon 和其他类似 Arduino 的 MCU 配合使用。
*
*请注意、名称为"selectDeviceCSLow"的*
实际上会选择器件、"releaseChipSelect"会取消选择该器件。
在命名中不明显*、但根据数据表、CS 为低电平有效。
*/
#include "ADS124S08.h"
#include <./Arduino.h>
#define MOSI 15
#define MISO 2
#define CS 5
#define RESET 13
#define CLK 14
SPIClass ADCSPI (HSPI);
/*
*将 nCS 引脚写入低电平并等待一段时间、器件完成工作、然后
*将控制权交还给调用方进行 SPI 传输。
//
void ADS124S08:::selectDeviceCSLow (void){
digitalWrite (CS_PIN,low);
}
//
*将 nCS 引脚拉高。 无需等待。
//
void ADS124S08:::releasaseChipSelect (void){
digitalWrite (CS_PIN,HIGH);
}
//
*初始化器件以在 ADS124S08 EVM 中使用。
*
*\Return True if device is in correct hardware defaults and is connected
*
//
ADS124S08::::ADS124S08 (void)
{
pinMode (CS_PIN、output);
pinMode (start_PIN、output);
pinMode (reset_PIN、 输出);
pinMode (CKEN_PIN,输出);
pinMode (DRDY_PIN,输入);
digitalWrite (start_PIN,low);
digitalWrite (reset_PIN,high);
digitalWrite (CKEN_PIN, 低电平);
//默认寄存器设置*/
寄存器[ID_ADDR_MASK]= 0x08;
寄存器[STATUS_ADDR_MASK]= 0x80;
寄存器[INPMUX_ADDR_MASK]= 0x01;
寄存器[PGA_ADDR_MASK]= 0x00;
寄存器[DATARATE_ADDR_MASK]= 0x14;
寄存器[REF_ADDR_MASK]= 0x10;
寄存器[IDACMAG_ADDR_MASK]= 0x00;
寄存器[IDACMUX_ADDR_MASK]= 0xFF;
寄存器[VBIAS_ADDR_MASK]= 0x00;
寄存器[SYS_ADDR_MASK]= 0x10;
寄存器[OFCAL0_ADDR_MASK]= 0x00;
寄存器[OFCAL1_ADDR_MASK]= 0x00;
寄存器[OFCAL2_ADDR_MASK]= 0x00;
寄存器[FSCAL0_ADDR_MASK]= 0x00;
寄存器[FSCAL1_ADDR_MASK]= 0x00;
寄存器[FSCAL2_ADDR_MASK]= 0x40;
寄存器[GPIODAT_ADDR_MASK]= 0x00;
寄存器[GPIOCON_ADDR_MASK]= 0x00;
fStart = false;
releaseChipSelect ();
deassertStart();
}
void ADS124S08:::开始()
{
ADCSPI.begin(CLK,MISO,MOSI,CS);
ADCSPI.setBitOrder(MSBFIRST);
ADCSPI.setDataMode (SPI_MODE1);
//ADCSPI.setClockSpeed (1000000);
#if defined (SPI_HAS_TRANSACTION)
mySPISettings = SPISettings (1000000、MSBFIRST、SPI_MODE1);
#endif
}
//
*从指定地址读取单个寄存器内容
*
*\param RegNum 标识要读取的地址
*
/
char ADS124S08:::regRead (unsigned int RegNum)
{
int i;
uint8_t ulDataTx[3];
uint8_t ulDataRx[3];
ulDataRD[0]=
0x00;
select1 = 0x00;selectData1 = 0x00;= 0x00 (1)
#if defineed (SPI_has_transaction)
ADCSPI.beginTransaction(mySPISettings);
#endif
for (i = 0;i < 3;i++)
ulDataRx[i]= ADCSPI.transfer (ulDataTx[i]);
if (RegNum < NUM_registers)
[Regnum]= ulDataRx[2];
#if defined (SPI_hase_transaction)(ulDataRx[%02x
、%/ulDataRx](%ulDataReq021]
;%202[ulDataRx](%202[ulDataRx])[ulDataRx[%2];%/ulDataRx[ulDataRx[ulDataRx];%202[ulDataRx];%202[ulDataRx[%202]2、2)[ulDatarx (%/ulDataRx[urq];%202[urq1.rx (%/ulDataRx[urq.021];%/ulDatarx、[ur
/*
*从指定地址开始读取一组寄存器
*
\param Regnum 是我们开始读取的寄存器的 addr_mask 8位掩码
*\param 计数我们希望读取的寄存器数
*\param *指向要写入的存储器中位置的位置指针 数据
*
/
void ADS124S08:::readRegs (unsigned int RegNum、unsigned int count、uint8_t * data)
{
int i;
uint8_t ulDataTx[2];
ulDataTx[0]= REGRD_OCODE_MASK +(RegNum & 0x1f);
ulDataTx[1]=-DeviceTransfer[0];
ulCSRT1];ult1[transfer
(ult1];ultSPI);ultcssp1[transfer (ult1];ultcssi)
for (i = 0;i < count;i++)
{
data[i]= ADCSPI.transfer (0);
if (Regnum+i < NUM_registers)
register[Regnum+i]= data[i];
}
releaseChipSelect ();
}
/*
*写入具有指定数据的单个寄存器
*
*\param Regnum addr_mask 我们开始写入的寄存器的8位掩码
*\param 数据要写入
*
**/
void ADS124S08:::regWrite (unsigned int RegNum、unsigned char data)
{
uint8_t ulDataTx[3];
ulDataTx[0]= REGWR_OPODLE_MASK +(RegNum & 0x1f);
ulDataTx[1]= 0x00;
ulDataTx[2]= DATA;
selectDeviceCSLow ();
ADCSPI.transfer (ulDataTx[0]);
ADCSPI.transfer (ulDataTx[1]);
ADCSPI.transfer (ulDataTx[2]);
releaseChipSelect ();
//Serial.printlnf ("regWrite TX:%02x %02x %02x"、ulDataTx[0]、ulDataTx[1]、ulDataTx[2]);
return;
}
/*
*写入一组从指定地址开始
的寄存器*
*\param Regnum 是我们开始写入的寄存器的 addr_mask 8位掩码
*\param 计数我们希望写入
的寄存器数*\param *指向要读取的存储器中位置的位置指针 数据
*
/
void ADS124S08:::writeRegs (unsigned int RegNum、unsigned int howhowhow、unsigned char * data)
{
unsigned int i;
uint8_t ulDataTx[2];
ulDataTx[0]= REGWR_OPCODE_MASK +(RegNum & 0x1f);
ulDataTx[1]= TOWSTX1[
低];self-transfer
(UCTS1]);ultC1[signiftSPI (UCTS1](UCTS1]);select.ADC1[0](UCTS1[
for (i=0;i < howloos; i++)
{
spi.transfer (data[i]);
if (Regnum+i < NUM_registers)
register[Regnum+i]= data[i];
}
releaseChipSelect ();
return;
}
//
*向 ADS124S08发送命令
*
\param_op_code 是命令(
releaseChips_dele8)
;* seleS124_transfer (sude_spi_spi_s_delt)
;*命令为命令(sele_transfer);命令为命令:send_selt (send_s_delt);命令为命令
/*
*向 ADS124S08发送停止/启动命令序列以重新启动转换(SYNC)
*
//
void ADS124S08:::重新启动(void)
{
sendCommand (stop_opcode_mask);
sendCommand (start_opcode_mask);
return;
}
//
*将 GPIO 硬件启动引脚设置为高电平(红色 LED)
*
*/
(sidertStart = void
;tstart (sid);{sumtpse08:tpin = void);tstart_mask = void;tid.Start (void)
/*
*将 GPIO 硬件起始引脚设置为低
电平*
/
void ADS124S08:::deassertStart()
{
fStart = false;
digitalWrite (start_PIN、low);
}
//
*将 GPIO 硬件外部振荡器使能引脚设置为高电平
*
/
void ADS124S08:::::digitalClock ()
{
digitalWrite (CKEN_PIN、1)};
}
/*
*将 GPIO 硬件外部振荡器使能引脚设置为低
电平*
/
void ADS124S08:::deprintClock ()
{
digitalWrite (CKEN_PIN、LOW);
}
int ADS124S08::::RDATA (uint8_t * dstatus、uint8_t * dData、uint8_t * dCRC)
;}int
命令(c
)(rdcrc);("命令/t)/rdata)("命令/rd/命令
(rdata);()("命令/rd/命令/t)(rdata)(rd/()()(rdata)();()
//如果状态字节已设置-将其捕捉
uint8_t shouldWeReceiveTheStatusByte =(寄存器[SYS_ADDR_MASK]& 0x01)= DATA_MODE_STATUS;
if (shouldWeReceiveTheStatusByte)
{
//Serial.printn ("Getting Status bit");
dstatus[0]/[0]/
(
串
行数据
转换)= 0x000[ADCD0]/数据转换[AD0]/数据转换[0].SPI[0]/(串行数据转换);[ADC000[0].INT0]/串行数据转换[AD0]/串行数据[ADCD.END20](串行数据[AD0]/串行数据转换);[ADCD.END20[AD0]/串行数据转换[0]/串行数据转换[ADC000[0]/串行数据转换
DATA[2]= ADCSPI.transfer (0x00);
结果= data[0];
结果=(结果<8)+数据[1];
结果=(结果<8)+数据[2];
Serial.print ("Data0:");Serial.println (data[0]);
Serial.print ("Data1:");Serial.tln (data[1]);Serial.println
(Serial.printn);Serial.printn (data2:);Serial.printn (Data2:)
// CRC 是否已启用?
uint8_t isCrcEnabled =(寄存器[SYS_ADDR_MASK]和0x02)= DATA_MODE_CRC;
if (isCrcEnabled)
{
//Serial.println ("CRC enabled ");
dCRC[0]= ADCSPI.transfer (0x00);
}
* return results;
}
*
dcru8 uint_detrt translation ** dcrc (uint8)
if ((register[SYS_ADDR_MASK]& 0x01)= DATA_MODE_STATUS)
{
xstatus = ADCSPI.transfer (0x00);
//
获取转换数据("0:");//Serial.print (xstatus);dstatus[0]=(uint8_t) xstatus;}//获取转换数据(0x00](uint8_transfer);
[ADCdata
= 0x00]
(uint8_transfer = 0x00](uSPI)= 0x3[t);[ADCdata transfer = 0x00](uint8_transfer = 0x00](uSPI = 0x00](uint8_transfer);[t)[t.transfer = 0x00](uintuSPI)[t
serial.print (data[0]);
serial.print (" 2:");
serial.print (data[1]);
serial.print (" 3:");
serial.println (data[2]);
iDATA = DATA[0];
iData =(iData<8)+ DATA[1];
iData =(iData<8)+ DATA[2];
if ((register[SYS_ADDR_MASK]& 0x02)= DATA_MODE_CRC)
{
xcrc = ADCSPI.transfer (0x00);
dcrcc
(releaseu8);iintc (icrut)=
0);iintcr (ut 选择)
ADS124S08.h:
/*-版权所有-、BSD *版权所有(c) 2016、德州仪器(TI)公司 *保留所有权利。 * * 只要 符合以下条件*、允许以源代码和二进制形式重新分发和使用: * *源代码的重新分发必须保留上述版权 声明*、此条件列表和以下免责声明。 * ***二进制形式的再发行必须在 *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。 * ***未经 事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。 * *本软件由版权所有者和贡献者"按原样"提供 *、 不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或 *贡献者都不对任何直接、间接、偶然、特殊、 *模范、 或相应的损害(包括但不限于 *采购替代产品或服务;丧失使用、数据或利润; *或业务中断)、但出于任何责任理论 、*无论是在合同中、严格责任还是由于 使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他) 、*即使已获悉可能会发生此类损坏。 *--/copyrights-*/* ADS124S08.h * */ #ifndef ADS124S08_H_ #define ADS124S08_H_ #include /*为 ISENSU*定义 SPI 引脚*/ #define MOSI15 #define MISO2 #define CS5 #define RESET13 #define CLK14 //开始定义*/ #define NUM_REGISTERS 18 // *用于寄存器寻址的地址掩码 * REGRD 的 REGWR 掩码 * */ #define ID_ADDR_MASK0x00 #define 0x000_MASK 状态 #define INPMUX_ADDR_MASK0x02 #define PGA_ADDR_MASK0x03 #define DATARATE_ADDR_MASK0x04 #define REF_ADDR_MASK0x05 #define IDACMAG_ADDR_MASK0x06 #define IDACMUX_ADDR_ADDR_MASK0x07 #define ADDR_ADDR_ADDR_MASK 0x08 #define 0xFASCADDR_MASK #define 0x0_ADDR_MASK #define #define 0xADDR_ADDR_ADDR_MASK0x10 #define 0xADDR_ADDR_MASK #define 0xADDR_ADDR_MASK #define 0xA011_ADDR_ADDR_ADDR_MASK #define #define 0xADDR_ADDR_ADDR_MASK #define #define 0xFF_ANCE 0xFF_ANCE 0x0_ANCE 0x10 #define 0xFF_ 掩码(或"命令"、如果您愿意...) // #define NOP_OPS_MASK0x00 #define WAKE_OCODE_MASK0x02 #define SLEEP_OCODE_MASK0x04 #define RESET_OCODE_MASK0x06 #define START_OCODE_MASK0x08 #define STOPCODE_MASK0x0A #define SFOCL_OCODE_MASK0x19 #define RDCART_MASK 0x20 #define 0x20 #define RDCTRD #RECODE_MASK 0x20 * 0x20 #define RDIOCODE_MASK 0x20 #RECODE_MASK 0x20 #define RTOCODE_MASK 0x20 #define R0_MASK 0x20 #define RD_MASK 0x20 #REWR_ 7 |第6位|第5位|第4位|第3位|第2位|第1位|第0 位*-------------------------- *保留[4:0]|DEV_ID[2:0] * / /* define ID (修订版)*/ #define ADS_ID_A0x00 #define ADS_ID_B0x80 // define VER (器件版本) /#define ADS_124S080x00 #define ADS_124S060x01 #define ADS_114S080x04 #define ADS_114S060x05 /* ADS124S08寄存器1 (状态)定义*/*/*位 7 |位6 |位5 |位4 |位3 |位2 |位1 |位0 *------- * FL_POR | nRDY | FL_P_RAILP| FL_P_RAILN| FL_N_RAILP| FL_REF_L1 | FL_REF_L0 * / #define ADS_FL_POR0x80 #define ADS_RDY0x40 #define FL_FL_P_RAILN| FL_REF_L0*#define ADS_RAREF_RA01240#define ADS_RAL0_RFL_RFL_RFL_RREF_RREF_RREF_R0 *#define AD_RREF_RREF_RREF_RREF_RREF_R0 *#define 0x0_RFL_RFL_RFL_RFL_RFL_RFL_RFL_RFL_RFL_RFL_RFL_RFL_RFL_R0_R0_R 6 |第5位|第4位|第3位|第2位|第1位|第0位 *-------------------------------- *MUXP[3:0]|MUXN[3:0] * / /*定义 ADC 正输入通道(MUXP)*/ #define ADS_P_AIN00x00 #define ADS_P_AIN10x10 #define ADS_P_AIN20x20 #define ADS_P_AIN30x30 #define ADS_P_AIN40x40 #define ADS_P_AIN8 #define ADS_AIN6 0x70 #define AD_AIN_AIN_AIN6 #define 0x70 #define 0xAIN_AIN_AIN_AIN_IN_IN_IN_AIN_IN_AIN6 #define 0x70 #define 0xAIN_AIN_AIN_AIN_AIN_AIN_AIN_AIN_IN_AIN_IN_AIN_AIN6 #define 0xAIN_ 0xC0 /*定义 ADC 负输入通道(MUXN)*/ #define ADS_N_AIN00x00 #define ADS_N_AIN10x01 #define ADS_N_AIN20x02 #define ADS_N_AIN30x03 #define ADS_N_AIN40x04 #define ADS_N_AIN5 0x01246_AIN011#define ADS_AIN011#define ADS_AIN011_AIN011#define AD_A012_AIN0_AIN012_A0_A011#AD_AIN011#AD_AIN012_A0_A012_AD_A0_A0_A011#AD_AIN0_A0_A0_A011#AD_AD_A0_A0_A0_A 寄存器3 (PGA)定义*//* 位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0 *------------------- *延迟[2:0]| PGA_EN[1:0] | GAIN[2:0] * // *在 tmod 时钟周期中定义转换延迟*/ #define ADS_DELAY_140x00 #define ADS_DELAY_250x20 #define ADS_DELAY_640x40 #define ADS_DELAY_2560x60 #define ADS_DELAY_10240x80 #define ADS_DELAY_20480xA0 #define ADS_DELAY_0x4096 0x40 0x40 #define ADS_CFG_0x408_DELAY_define 0x0 *#define 0x408_DELAY_define 0x4096_CFG_CTRL #define 0x0 */ #define ADS_GAIN_10x00 #define ADS_GAIN_20x01 #define ADS_GAIN_40x02 #define ADS_GAIN_80x03 #define ADS_GAIN_160x04 #define ADS_GAIN_320x05 #define ADS_GAIN_640x06 #define ADS_GAIN_1280x07 //* ADS124S08寄存器4 ( 位4 |位4 |位4 |位4 |位6 |位6)***/位定义|位6 |位6 |位6 |位定义|位6 |位6 |位1 |位0 *------------------------------------------------------ * G_CHOP | CLK | MODE |滤波器|DR[3:0] * / #define ADS _GLOBALCHOP0x80 #define ADS_CLKSEL_EXT0x40 #define ADS_CONVDE_SS0x20 #define ADS_ADS_FILTERT_LL0x10 //定义数据速率*/#define ADS_CLKSEL_EXT 0x40 #define ADS DR_CONVMODE_SS 0x20 #define ADS 0x04 #define 0x20 #define ADS AD_AD_DR_CL_DR_CFG_0X015_DR_DR_DR_define 0x20 #define 0x04 #015_DR_DR_DR_define 0x20 #define 0x 0x06 #define ADS_DR_1000x07 #define ADS_DR_2000x08 #define ADS_DR_4000x09 #define ADS_DR_8000x0A #define ADS_DR_10000x0B #define ADS_DR_20000x0C #define ADS_DR_40000x0D /* ADS124S08寄存器5 (REF)定义** /位4 |位4 |位4 |位4 |位4 |位|位4 |位|位4 |位 |第0位 *------------------ *FL_REF_EN[1:0]| nREFP_BUF | nREFN_BUF |REFSEL[1:0]|REFYP[1:0] * / #define ADS_FLAG_REF_DISABLE0x00 #define ADS_FLAG_REF_EN_L00x40 #define ADS_REF_EN_REYP_EN_REF_NOT_REF_REF_REF_EN_REF_EN_EN_REF_EN_REF_EN_REF_EN_EN_REF_REF_EN_REF_REF_EN_REF_EN_EN_REF_EN_EN_REF_EN_#define #define 0x0X0_INT_REF_INT_REF_INT_REF_INT_REF_INT_REF_INT_REF_REF_REF_REF_REF_REF_EN_EN_EN_EN_EN_EN_EN_INT_REF_INT_REF_INT_REF_INT_REF_INT_REF_INT_REF_EN#define #define #define AD_EN 0x01 #define ADS_REFINT_ON_Always0x02 //* ADS124S08寄存器6 (IDACMAG)定义*/* 位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0 *-------------- * FL_RAILE_EN|PSW| 0 |0|Imag[3:0] * */ #define ADS_FLAG_RAIL_ENABLE0x80 #define ADS_FLAG_RAIL_DISABLE_DISABLE_DISABLE0x00 #define ADS_PSW_OPEN0x00 #define ADS_PS_PS_PHSW_CLOSED0x40 #define ADS_IDACADS_OFF0x00 #define ADS_IDACADS_ADS_01250-0x01250_ADDS_ADDS_IDAD_IDAC01240#define AD_AD_ADDS_IDAC01240-0x01240_AD_AD_AD_ADDS_ADDS_ADDS_ADA0x2000_IDAD_IDAD_AD_AD01250*#define 0_IDAD_IDAD_IDAD_IDAD_AD_AD_AD01240#define 0x07_AD_AD_ 定义*/* 位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0 *------------------------ * I2MUX[3:0] | I1MUX[3:0] * // *定义 IDAC2输出*/ #define ADS_IDAC2_A00x00 #define ADS_IDAC2_A10x10 #define ADS_IDAC2_A20x20 #define ADS_IDAC2_ADS 0x30 #define ADS_IDAC2_ADS0x40 #A7_IDAC2_ADA0xA0_IDAC2_ADA0_AD0_ADS 0xA0_IDAC2_AD0_AD0_ADA0_AD0_AD0_AD0_ADA0_AD0_AD0_AD0_ADA2#define #define 0xA0_ADA0_ADS 0xA0_ADA0_ADA0_ADA0_ADA0_ADA0_ADA0_ADA0_AD0_ADA0_ADA0_ADA0_ADA0_ADS #define /*定义 IDAC1输出*/ #define ADS_IDAC1_A00x00 #define ADS_IDAC1_A10x01 #define ADS_IDAC1_A20x02 #define ADS_IDAC1_A30x03 #define ADS_IDAC1_A40x04 #define ADS_IDAC1_A50x05 #define ADS_IDAC1_A01_IDAC011#define ADS011_IDAC1_IDAC011_AD0_AD0_AD0_AD0_AD011_AD0_AD0_AD011#define AD0_ADA0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_AD0_ 8 (VBIAS)定义*//* 位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0 *----------------- * Vb_level |Vb_AINC | Vb_AIN5 | Vb_AIN4 | Vb_AIN2 | Vb_AIN1 | Vb_AIN0 * */ #define ADS_VBIAS_LVT_DIV20x00 #define ADS_VBIAS_LVIAS_DIV120x80 //* Vb_AIN0 *#define VB_IN0X0_IN4 #define AD_INVb 0x04 #Vb_INAD_IN_INAD_IN0X0X0_IN4 #Vb #define #AD_INAD_IN_AND_AD_IN0X0X0X0X0_AND_AD_IN4 #Vb #define /* ADS124S08寄存器9 (SYS)定义*/* 位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0 *-------------------- *SYS_MON[2:0]|CAL_SAMP[1:0] | 超时| CRC | SENDSTAT */#define ADS_SYS_MON_OFF 0x00 #define ADS_SYS_MON_SHORT 0x20 #define ADS_SYS_MON_TEMP 0x40 #define ADS_SYS_MON_ADIV4 0x60 #define ADS_SYS_MON_DDIV4 0x80 #define ADS_SYS_SYS_SYS_BCS_TEMP_0 0x40 #define ADLM_SALE_0x40x04 #define 0x40_CALE_#define #define 0x00_CALL_CALL_0x4 #define 0x00 #define 0x40_CALL_CALL_CALL_CALL_0x4 #define 0x4 #define 0x000_CALL_CALL_CALL_CALL_CALL_CALL_CALL_CALL_0x4 #define 0x04 #define #AD_CALL_CALL_CALL_ #define ADS_CRC_DISABLE0x00 #define ADS_CRC_ENABLE0x02 #define ADS_SENDSTATUS_DISABLE0x00 #define ADS_SENDSTATUS_ENABLE0x01 //* ADS124S08寄存器 A (OFCAL0)定义*/* 位7 |位6 |位5 |位4 |位3 |位2 |位1 |位1---- * OFC[7:0] * // //* ADS124S08寄存器 B (OFCAL1)定义*// * bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 *--------- * OFC[15:8] * // //* ADS124S08寄存器 C (OFCAL2)定义*// * bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 *--------- * OFC[23:16] * // * ADS124S08寄存器 D (FSCAL0)定义*// * bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 *--------- * FSC[7:0] * // * ADS124S08寄存器 E (FSCAL1)定义*// * bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 *--------- * FSC[15:8] * // //* ADS124S08寄存器 F (FSCAL2)定义*// * bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 *--------- * FSC[23:16] * // //* ADS124S08寄存器10 (GPIODAT)定义*// * bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 *--------- * 方向[3:0]|DAT[3:0] * / //*定义 GPIO 方向(0输出;1输入) 此处*/ #define ADS_GPIO0_DIR_INPUT0x10 #define ADS_GPIO1_DIR_INPUT0x20 #define ADS_GPIO2_DIR_INPUT0x40 #define ADS_GPIO3_DIR_INPUT0x80 //* //*在此处定义 GPIO 数据* //* //**//* ADS124S08寄存器11 (位 3 |位3 |位4 |位3)|位定义|位4 |位4 |位3 2 |位1 |位0 *-------------------------------------------------- * 0|0|0|0 | CON[3:0] * // *定义 GPIO 配置(0模拟输入;1 GPIO) 此处*/ #define ADS_GPIO0_DIR_INPUT0x10 #define ADS_GPIO1_DIR_INPUT0x20 #define ADS_GPIO2_DIR_INPUT0x40 #define ADS_GPIO3_DIR_INPUT0x80 //* *////*转换数据组件的长度*/ #define DATA_LENGTH3 #CS STATUS_LENGTH1 #define *等待我们定义 GPIO 长度1 ******并等待我们实际 下拉时间* 在开始发送 SCLK 之前 * / #define CHIP_SELECT_WAIT_TIME0 //标记到我们正在收集数据的信号*/ #define DATA_MODE_NORMAL0x00 #define DATA_MODE_STATUS0x01 #define DATA_MODE_CRC0x02 //内部 XTAL 的时钟速率... // #define DEVICE_ICLK 16384000 //*设置 SPI SCLK 速度*/ #define SPI_SPEED 5000000 //* Tiva 具有4到16位字大小,以处理32位字 Tiva 需要将 两组字组合在一起。 32位由2x16字(或4x8字)组成。 // #define SPI_WORD_SIZE 8 //芯片选择馈通 GPIO -我们手动馈送芯片选择,以便溢出。 // #define CS_PIN 5 #define DRDY_PIN -1 //* GPIO 定义。 // #define START_PIN -1 #define RESET_PIN 13 #define CKEN_PIN -1 #define SPI_HAS_TRANSACTION 0 #if defined (SPI_HAS_TRANSACTION) static SPISettings mySPISettings; #endif class ADS124S08 { //器件命令原型 public: ADS124S08 (void); void Begin(); char regRead ( void);char regRead (void int)、unsigned int regt (void int);statut regint (void int) void regWrite (unsigned int Regnum、unsigned char 数据); void writeRegs (unsigned int Regnum、unsigned int howhowhowhow、unsigned char * data); void restart (void); void sendCommand (uint8_t op_code); int RDATA (uint8_t * dstatus、uint8_t * dData、uint8_t * dCRC); int dataRead (uint8_t * dstatus、uint8_t * dData、 uint8_t *dCRC); void selectDeviceCSLow (void); void releaseChipSelect (void); void assertStart (void); void deassertStart (void); void assertClock (void); void deassertClock (void); bool 转换; uint8_t 寄存器[NUM_REGISTER]; private: bool fStart; void DRDY_int (void); uint8_t _drdy_pin; uint8_t _start_pin; uint8_t _reset_pin; }; #endif /* ADS124S08_H_*
