48 lines
1.5 KiB
C++
48 lines
1.5 KiB
C++
#ifndef AD7606_H
|
||
#define AD7606_H
|
||
|
||
#include <Arduino.h>
|
||
#include <SPI.h>
|
||
|
||
// 可按需修改为你的实际接线。若 OS 引脚已硬连到 GND/3V3,可将其保持为 -1(不配置)。
|
||
namespace ad7606 {
|
||
|
||
// 数据/控制引脚
|
||
static const int PIN_AD_MISO = 8; // DOUTA -> ESP32 MISO
|
||
static const int PIN_AD_CS = 12; // CS_N
|
||
static const int PIN_AD_CONVST = 13; // CONVST(CO-A/CO-B 共用)
|
||
static const int PIN_AD_RESET = 5; // RESET
|
||
static const int PIN_AD_BUSY = 14; // BUSY
|
||
|
||
// 可选:过采样和模式引脚(-1 表示不配置/已硬件固定)
|
||
static const int PIN_AD_OS0 = -1;
|
||
static const int PIN_AD_OS1 = -1;
|
||
static const int PIN_AD_OS2 = -1;
|
||
static const int PIN_AD_SER = -1; // SER=1 串行模式(若已焊 3.3V,可 -1)
|
||
static const int PIN_AD_STBY = -1; // STBY=1 正常工作(若已焊 3.3V,可 -1)
|
||
|
||
// 量程:用于将 16-bit 原码转换为电压(缺省 ±10V)
|
||
static constexpr float AD_FS_VOLTS = 5.0f; // 根据硬件 RANGE 引脚实际设置改成 5.0/2.5 等
|
||
|
||
// 初始化(与 TFT 共用 SPI:外部需已调用 SPI.begin 并指定 MISO=SENSOR_DOUT)
|
||
void init();
|
||
|
||
// 触发并读取 8 路原始数据(阻塞等待 BUSY 变低)
|
||
void readAll(int16_t* data8);
|
||
|
||
// 读取 CH0 原始码
|
||
inline int16_t readCH0() {
|
||
int16_t tmp[8];
|
||
readAll(tmp);
|
||
return tmp[0];
|
||
}
|
||
|
||
// 原码转电压,范围 ±AD_FS_VOLTS
|
||
inline float codeToVolts(int16_t code) {
|
||
return (static_cast<float>(code) / 32768.0f) * AD_FS_VOLTS;
|
||
}
|
||
|
||
} // namespace ad7606
|
||
|
||
#endif
|