主题:ADS1258 中讨论的其他器件
工具/软件:
我尝试将 ADS1258 ADC 转换器连接到 Arduino Mega 2560 微控制器。 我的 目标是 将信号施加到 ADS1258、将 ADS1258 连接到 Arduino、将 Arduino 连接到计算机、并读取计算机上的时变电压。 我正在使用的固定模式。 连接如下:
#include
const int DRDY=2;
const int DOUT=50;
const int DIN=51;
const int SCLK=52;
const int CS=53;
/* ADS1258 最小固定模式驱动器(单‑Ω 端 AIN0…AIN7)*/
#pragma once
#include
ADS1258 类{
公开:
ADS1258(uint8_t cs、uint8_t drdy、uint8_t start、uint8_t 复位)
:_cs(cs),_drdy(dy),_start(start),_reset(reset){}
void begin(){
pinMode (_cs、output);digitalWrite (_cs、high);
pinMode (_START、OUTPUT);digitalWrite (_START、LOW);
pinMode (_reset、output);digitalWrite (_reset、high);
pinMode(_drdy,输入);
SPI.begin();
SPI.beginTransaction(SPISettings(4000000UL、MSBFIRST、SPI_MODE0);
_hardwareReset();//步骤 1
_writeRegisters ();//步骤 3
digitalWrite (_start、high);//步骤 4
}
//*阻止直到 DRDY 下降、然后返回原始 24‑位样本和通道 id */
bool readSample (int32_t &code、uint8_t &channelId){
if (digitalRead (_drdy)) 返回 false;//尚未就绪
digitalWrite (_cs、low);
_spiTransfer (CMD_RDATA);// 0x30
Uint8_t status =_spiTransfer (0x00);
uint32_t d = 0;
D |=(uint32_t)_spiTransfer (0x00)<< 16;
D |=(uint32_t)_spiTransfer (0x00)<< 8;
D |=(uint32_t)_spiTransfer (0x00);
digitalWrite (_cs、high);
channelId = status 和 0x08;// Chid[4:0]:contentReferenc[oaicite:8]{index=8}
/*符号‑将 24‑位二进制‑补码扩展为 32 位*/
如果 (d & 0x800000) d |= 0xFF000000;
代码=(int32_t) d;
返回 true;
}
私人:
/*---- 低‑级帮助器----- */
静态 constexpr uint8_t CMD_RESET = 0xC0;// C[2:0]=110、MUL/A=0
静态 constexpr uint8_t CMD_WREG = 0x60;// C[2:0]=011、MUL=1、A=0000
静态 constexpr uint8_t CMD_RDATA = 0x30;// C[2:0]=001、MUL=1
void _hardwareReset(){
digitalWrite (_reset、low);delayMicroseconds (10);
digitalWrite (_reset、high);delay (2);//≥218 个 fCLK 周期:contentReferenc[oaicite:9]{index=9}
}
void _writeRegisters (){
静态常量 uint8_t regImage[]={
0x22、// CONFIG0–状态已启用、自动‑扫描、STAT=1:contentReference[oaicite:10]{index=10}
0x80、// CONFIG1–DRATE[1:0]=11(23.7ksps/通道) :contentReferenc[oaicite:11]{index=11}
//0x00、// MUXDIF:无差分对
0x08、// MUXCH–启用 AIN0…7
// 0x00 // MUXSG1–无 AIN8…15
};
digitalWrite (_cs、low);
_spiTransfer (CMD_WREG);
对于 (uint8_t b:regImage)_spiTransfer (b);
digitalWrite (_cs、high);
}
uint8_t _spiTransfer (uint8_t val){return spi.transfe (val);}
uint8_t _cs、_drdy、_start、_reset;
};
包含“ADS1258.h"</s>“
ADS1258 ADC (53、2、4、54);// CS=10、 DRDY= 2、START=3、RESET=4
void setup(){
Serial.begin(115200);
adc.begin();
}
void loop(){
int32_t 代码;uint8_t channelId;
if (adc.readSample (code、channelId)){
浮点 v =(CODE / 8388608.0)* 5.0;// VREF = 2.5V 单极的示例
serial.print(“CH")“);serial.print (channelId);
serial.print (“:“);serial.println (v、6);
}
}
但它不测量 AIN0、而是在 DOUT 随机数出现时进行测量。 您能帮忙吗
