您好!
我们计划将一些旧机器连接到软件。 为此、我们设计了一个具有 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_*