M5 ATOM Matrix 连接 ADS1256 采集数据:SPI 连接方式及代码示例
M5 ATOM Matrix 连接 ADS1256 采集数据:SPI 连接方式及代码示例
本文介绍如何使用 M5 ATOM Matrix 作为主控,通过 SPI 连接 ADS1256 采集卡,并给出头文件、主文件和 M5 atom 控制文件的详细代码。
连接方式:
- M5 ATOM Matrix 的 33 脚 MISO、23 脚 CLK、19 脚 MOSI、22 脚分别连接到 ADS1256 的 DOUT、SCLK、DIN、DRDY。
- 传感器连接到 ADS1256 的 AIN0 和 AIN1,使用差分模式采集数据。
代码示例:
头文件:
#include <Arduino.h>
#include <SPI.h>
#include <Wire.h>
#define CS_PIN 32 //ADS1256 的 CS 引脚
#define RESET_PIN 27 //ADS1256 的 RESET 引脚
class ADS1256 {
public:
void begin();
void reset();
void setPGA(int pga);
long readADC(int channel);
private:
void writeCmd(byte cmd);
byte readReg(byte addr);
void writeReg(byte addr, byte data);
long read24bit();
void waitDRDY();
int _pga;
};
void ADS1256::begin() {
pinMode(CS_PIN, OUTPUT);
pinMode(RESET_PIN, OUTPUT);
SPI.begin();
reset();
writeCmd(0x11); //停止连续转换模式
writeCmd(0x01); //选择通道 0
writeCmd(0x50); //设置采样率为 10SPS
setPGA(1); //设置增益为 1
}
void ADS1256::reset() {
digitalWrite(RESET_PIN, HIGH);
delay(10);
digitalWrite(RESET_PIN, LOW);
delay(10);
digitalWrite(RESET_PIN, HIGH);
delay(10);
}
void ADS1256::setPGA(int pga) {
byte reg = readReg(0x01);
reg &= 0xF8;
switch (pga) {
case 1:
reg |= 0x00;
_pga = 1;
break;
case 2:
reg |= 0x01;
_pga = 2;
break;
case 4:
reg |= 0x02;
_pga = 4;
break;
case 8:
reg |= 0x03;
_pga = 8;
break;
case 16:
reg |= 0x04;
_pga = 16;
break;
case 32:
reg |= 0x05;
_pga = 32;
break;
case 64:
reg |= 0x06;
_pga = 64;
break;
default:
reg |= 0x00;
_pga = 1;
break;
}
writeReg(0x01, reg);
}
long ADS1256::readADC(int channel) {
writeCmd(0x08 | channel); //选择通道
waitDRDY(); //等待 DRDY 引脚变为低电平
long val = read24bit(); //读取 24 位数据
if (val & 0x800000) {
val |= 0xFF000000;
}
val = val * 1000000 / 8388608 / _pga; //转换为微伏
return val;
}
void ADS1256::writeCmd(byte cmd) {
digitalWrite(CS_PIN, LOW);
SPI.transfer(cmd);
digitalWrite(CS_PIN, HIGH);
}
byte ADS1256::readReg(byte addr) {
byte data;
digitalWrite(CS_PIN, LOW);
SPI.transfer(0x20 | addr);
data = SPI.transfer(0x00);
digitalWrite(CS_PIN, HIGH);
return data;
}
void ADS1256::writeReg(byte addr, byte data) {
digitalWrite(CS_PIN, LOW);
SPI.transfer(0x40 | addr);
SPI.transfer(data);
digitalWrite(CS_PIN, HIGH);
}
long ADS1256::read24bit() {
long data = 0;
digitalWrite(CS_PIN, LOW);
SPI.transfer(0x01);
data = SPI.transfer(0x00) << 16;
data |= SPI.transfer(0x00) << 8;
data |= SPI.transfer(0x00);
digitalWrite(CS_PIN, HIGH);
return data;
}
void ADS1256::waitDRDY() {
while (digitalRead(22));
}
主文件:
#include "ADS1256.h"
void setup() {
Serial.begin(115200);
while (!Serial);
ADS1256 ads;
ads.begin();
ads.setPGA(1);
}
void loop() {
ADS1256 ads;
long val = ads.readADC(0); //读取 AIN0 的值
Serial.println(val);
delay(100);
}
M5 atom 的控制文件:
#include <M5Atom.h>
void setup() {
M5.begin(true, false, true);
pinMode(33, OUTPUT); //MISO
pinMode(19, OUTPUT); //MOSI
pinMode(23, OUTPUT); //CLK
pinMode(22, INPUT); //DRDY
}
void loop() {
}
完整代码:
- 头文件:
ADS1256.h - 主文件:
main.cpp - M5 atom 控制文件:
M5AtomControl.cpp
注意:
- 代码中的
#define CS_PIN 32和#define RESET_PIN 27是根据 M5 ATOM Matrix 的引脚定义设置的,请根据实际连接情况修改。 - 代码中的
readADC(0)是读取通道 0 的数据,请根据实际连接的传感器通道修改。 - 为了提高数据精度,建议使用差分模式采集数据。
- 可以根据需要修改采样率和增益等参数。
相关资源:
希望本文能帮助您成功使用 M5 ATOM Matrix 连接 ADS1256 采集数据。
原文地址: https://www.cveoy.top/t/topic/nCxA 著作权归作者所有。请勿转载和采集!