8通道
This commit is contained in:
parent
200baa6f88
commit
b620c5820c
103
lib/ADS1256.h
103
lib/ADS1256.h
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
ADS1256.h - Arduino Library for communication with Texas Instrument ADS1256 ADC
|
ADS1256.h - Arduino Library for communication with Texas Instrument ADS1256 ADC
|
||||||
Written by Adien Akhmad, August 2015
|
Written by Adien Akhmad, August 2015
|
||||||
Modifified Jan 2019 by Axel Sepulveda for ATMEGA328
|
Modifified Jan 2019 by Axel Sepulveda for ATMEGA328
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef ADS1256_h
|
#ifndef ADS1256_h
|
||||||
|
@ -9,32 +9,32 @@
|
||||||
|
|
||||||
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
|
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
|
||||||
|
|
||||||
#define pinDRDY 9
|
#define pinDRDY 9
|
||||||
#define pinRST 8
|
#define pinRST 8
|
||||||
#define pinCS 10
|
#define pinCS 10
|
||||||
|
|
||||||
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
|
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
|
||||||
|
|
||||||
#define pinDRDY 49
|
#define pinDRDY 49
|
||||||
#define pinRST 48
|
#define pinRST 48
|
||||||
#define pinCS 53
|
#define pinCS 53
|
||||||
|
|
||||||
// Contributions are welcome
|
|
||||||
#elif defined(ARDUINO_ARCH_ESP8266)
|
|
||||||
//https://esp8266-shop.com/esp8266-guide/esp8266-nodemcu-pinout/
|
|
||||||
#define pinDRDY D0
|
|
||||||
#define pinRST D1
|
|
||||||
#define pinCS D8 // D8 Hw Cs in esp8266
|
|
||||||
|
|
||||||
#elif defined(ARDUINO_ARCH_ESP32)
|
// Contributions are welcome
|
||||||
// Contributions are welcome
|
#elif defined(ARDUINO_ARCH_ESP8266)
|
||||||
//https://circuits4you.com/wp-content/uploads/2018/12/ESP32-Pinout.jpg
|
// https://esp8266-shop.com/esp8266-guide/esp8266-nodemcu-pinout/
|
||||||
#define pinDRDY 17
|
#define pinDRDY D0
|
||||||
#define pinRST 16
|
#define pinRST D1
|
||||||
#define pinCS 5 //
|
#define pinCS D8 // D8 Hw Cs in esp8266
|
||||||
#else
|
|
||||||
// Contributions are welcome
|
#elif defined(ARDUINO_ARCH_ESP32)
|
||||||
#warning "Oops! Pins for your board are not defined: pinDRDY, pinRST, pinCS"
|
// Contributions are welcome
|
||||||
|
// https://circuits4you.com/wp-content/uploads/2018/12/ESP32-Pinout.jpg
|
||||||
|
#define pinDRDY 17
|
||||||
|
#define pinRST 16
|
||||||
|
#define pinCS 5 //
|
||||||
|
#else
|
||||||
|
// Contributions are welcome
|
||||||
|
#warning "Oops! Pins for your board are not defined: pinDRDY, pinRST, pinCS"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ADS1256 Register address
|
// ADS1256 Register address
|
||||||
|
@ -123,34 +123,35 @@
|
||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#include "SPI.h"
|
#include "SPI.h"
|
||||||
|
|
||||||
class ADS1256 {
|
class ADS1256
|
||||||
public:
|
{
|
||||||
ADS1256(float clockspdMhz, float vref, bool useresetpin);
|
public:
|
||||||
void writeRegister(unsigned char reg, unsigned char wdata);
|
ADS1256(float clockspdMhz, float vref, bool useresetpin);
|
||||||
unsigned char readRegister(unsigned char reg);
|
void writeRegister(unsigned char reg, unsigned char wdata);
|
||||||
void sendCommand(unsigned char cmd);
|
unsigned char readRegister(unsigned char reg);
|
||||||
float readCurrentChannel();
|
void sendCommand(unsigned char cmd);
|
||||||
long readCurrentChannelRaw();
|
float readCurrentChannel();
|
||||||
void setConversionFactor(float val);
|
long readCurrentChannelRaw();
|
||||||
void setChannel(byte channel);
|
void setConversionFactor(float val);
|
||||||
void setChannel(byte AIP, byte AIN);
|
void setChannel(byte channel);
|
||||||
void begin(unsigned char drate, unsigned char gain, bool bufferenable);
|
void setChannel(byte AIP, byte AIN);
|
||||||
void begin();
|
void begin(unsigned char drate, unsigned char gain, bool bufferenable);
|
||||||
uint8_t getStatus();
|
void begin();
|
||||||
void waitDRDY();
|
uint8_t getStatus();
|
||||||
boolean isDRDY();
|
void waitDRDY();
|
||||||
void setGain(uint8_t gain);
|
boolean isDRDY();
|
||||||
void readTest();
|
void setGain(uint8_t gain);
|
||||||
|
void readTest();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void CSON();
|
void CSON();
|
||||||
void CSOFF();
|
void CSOFF();
|
||||||
unsigned long read_uint24();
|
unsigned long read_uint24();
|
||||||
long read_int32();
|
long read_int32();
|
||||||
float read_float32();
|
float read_float32();
|
||||||
byte _pga;
|
byte _pga;
|
||||||
float _VREF;
|
float _VREF;
|
||||||
float _conversionFactor;
|
float _conversionFactor;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -9,20 +9,23 @@ void adc1256_init(void)
|
||||||
{
|
{
|
||||||
SPI.begin();
|
SPI.begin();
|
||||||
sleep(0.5);
|
sleep(0.5);
|
||||||
|
|
||||||
SPI.beginTransaction(
|
SPI.beginTransaction(
|
||||||
SPISettings(clockMHZ * 1000000 / 4, MSBFIRST, SPI_MODE1));
|
SPISettings(clockMHZ * 1000000 / 4, MSBFIRST, SPI_MODE1));
|
||||||
sleep(0.5);
|
sleep(0.5);
|
||||||
adc.begin(ADS1256_DRATE_15SPS, ADS1256_GAIN_1, false);
|
adc.begin(ADS1256_DRATE_15SPS, ADS1256_GAIN_1, false);
|
||||||
|
adc.sendCommand(ADS1256_CMD_SDATAC);
|
||||||
|
}
|
||||||
|
|
||||||
Serial.println("ADC Started");
|
void adc1256_dinit(void)
|
||||||
|
{
|
||||||
// Set MUX Register to AINO-AIN1 so it start doing the ADC conversion
|
adc.sendCommand(ADS1256_CMD_SDATAC);
|
||||||
adc.setChannel(3);
|
SPI.end();
|
||||||
|
Serial.println("ADC Stopped");
|
||||||
}
|
}
|
||||||
|
|
||||||
void adc1256_reset(void)
|
void adc1256_reset(void)
|
||||||
{
|
{
|
||||||
adc.reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void adc1256_set_channel(uint8_t ch)
|
void adc1256_set_channel(uint8_t ch)
|
||||||
|
@ -33,18 +36,23 @@ void adc1256_set_channel(uint8_t ch)
|
||||||
|
|
||||||
float adc1256_read(void)
|
float adc1256_read(void)
|
||||||
{
|
{
|
||||||
|
adc.readRegister(ADS1256_RADD_MUX);
|
||||||
return adc.readCurrentChannel();
|
return adc.readCurrentChannel();
|
||||||
}
|
}
|
||||||
|
|
||||||
void adc1256_loop(void)
|
void adc1256_loop(void)
|
||||||
{
|
{
|
||||||
float rst;
|
for (int i = 0; i < 8; ++i)
|
||||||
adc.waitDRDY(); // wait for DRDY to go low before changing multiplexer register
|
{
|
||||||
adc.setChannel(3); // Set the MUX for differential between ch2 and 3
|
adc.waitDRDY();
|
||||||
rst = adc.readCurrentChannel(); // DOUT arriving here are from MUX AIN0 and AIN1
|
adc.setChannel(i);
|
||||||
|
Serial.print("Current Channel: ");
|
||||||
|
|
||||||
Serial.print(rst, 6);
|
Serial.print(i);
|
||||||
Serial.print("\n");
|
Serial.print(" MUX: ");
|
||||||
|
Serial.print(adc.readRegister(ADS1256_RADD_MUX), BIN); // Read the Input Multiplexer Control Register to see the current active channels
|
||||||
delay(1000);
|
Serial.print(" ADC Value: ");
|
||||||
|
Serial.print(adc.readCurrentChannel());
|
||||||
|
Serial.println();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
// Function declarations
|
// Function declarations
|
||||||
void adc1256_init(void);
|
void adc1256_init(void);
|
||||||
|
void adc1256_dinit(void);
|
||||||
void adc1256_reset(void);
|
void adc1256_reset(void);
|
||||||
void adc1256_loop(void);
|
void adc1256_loop(void);
|
||||||
float adc1256_read(void);
|
float adc1256_read(void);
|
||||||
|
|
|
@ -11,4 +11,5 @@ void board_init(void)
|
||||||
Serial.println("ADS1256 - 2023-12-22");
|
Serial.println("ADS1256 - 2023-12-22");
|
||||||
adc1256_init();
|
adc1256_init();
|
||||||
motor_init();
|
motor_init();
|
||||||
|
Serial.println("初始化完成");
|
||||||
}
|
}
|
||||||
|
|
32
src/main.cpp
32
src/main.cpp
|
@ -33,7 +33,7 @@ String fenge(String str, String fen, int index)
|
||||||
|
|
||||||
void task_ads(void *pt)
|
void task_ads(void *pt)
|
||||||
{
|
{
|
||||||
float array[1000]; // 存储数据
|
float array[8]; // ´æ´¢Êý¾Ý
|
||||||
|
|
||||||
uint16_t i = 0, j = 0;
|
uint16_t i = 0, j = 0;
|
||||||
float temp = 0;
|
float temp = 0;
|
||||||
|
@ -74,16 +74,35 @@ void task_ads(void *pt)
|
||||||
{
|
{
|
||||||
motor_limit_on();
|
motor_limit_on();
|
||||||
}
|
}
|
||||||
|
else if (read_val == "rst")
|
||||||
|
{
|
||||||
|
// ESP32¸´Î»
|
||||||
|
ESP.restart();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Serial.println("¿ªÊ¼¶ÁÈ¡ADC ...");
|
Serial.println("¿ªÊ¼¶ÁÈ¡ADC ...");
|
||||||
String part01 = fenge(read_val, ",", 0);
|
String part01 = fenge(read_val, ",", 0);
|
||||||
String part02 = fenge(read_val, ",", 1);
|
String part02 = fenge(read_val, ",", 1);
|
||||||
String part03 = fenge(read_val, ",", 2);
|
String part03 = fenge(read_val, ",", 2);
|
||||||
if (part01 == "r")
|
if (part01 == "R")
|
||||||
{
|
{
|
||||||
adc1256_set_channel(3);
|
for (i = 0; i < 8; i++)
|
||||||
Serial.printf("r,%.4f", adc1256_read());
|
{
|
||||||
|
adc1256_set_channel(i);
|
||||||
|
vTaskDelay(100); // ÑÓʱ100ms
|
||||||
|
array[i] = adc1256_read();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
Serial.printf("%d\t", i);
|
||||||
|
}
|
||||||
|
Serial.println();
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
Serial.printf("%.4f\t", array[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,12 +189,11 @@ void setup()
|
||||||
|
|
||||||
xTaskCreate(task_serial, "task_serial", 1024 * 4, NULL, 1, NULL);
|
xTaskCreate(task_serial, "task_serial", 1024 * 4, NULL, 1, NULL);
|
||||||
xTaskCreate(task_ads, "task_ads", 1024 * 8, NULL, 1, NULL);
|
xTaskCreate(task_ads, "task_ads", 1024 * 8, NULL, 1, NULL);
|
||||||
xTaskCreate(task_motor, "task_motor", 1024 * 8, NULL, 1, NULL);
|
// xTaskCreate(task_motor, "task_motor", 1024 * 8, NULL, 1, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
// put your main code here, to run repeatedly:
|
// put your main code here, to run repeatedly:
|
||||||
|
vTaskDelay(3000);
|
||||||
vTaskDelay(1000);
|
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue