Other Parts Discussed in Thread: ADS1198
您好!
我正在尝试使用通道1 ADS1198捕获信号、并在我的学校项目中通过 SPI 将其发送到 Arduino UNO。 由于隔离、我没有电极、因此我尝试使用电位器来模拟数据源。 在使用电位计移动时、我无法看到捕获的数据有任何差异。
我的接线是:
ADS1198 -> Arduino UNO
DIN ->引脚11
CS -> 引脚 A5
DOUT->Pin 12
DRDY->引脚2
SCLK->引脚13
AVDD->5V
DGND->3、3V
IN1P->电位器
IN1N->GND
我的代码是在 Arduino IDE 中编写的:
#include
#define MOSI1 11 //MOSI
#define MISO1 12 //MISO
#define CLK1 13 //SCK
#define PIN_CS A5
#define PIN_RESET A4
#define PIN_DRDY 2
#define RREG 0x20
#define WREG 0x40
#define ID 0x00
#define SDATAC 0x11
#define RDATAC 0x10
#define RDATA 0x12
#define WAKEUP 0x02
#define STANDBY 0x04
#define RESET 0x06
#define START 0x08
#define STOP 0x0A
#define CH1 0x05
#define CH2 0x06
#define CH3 0x07
#define CH4 0x08
#define CH5 0x09
#define CH6 0x0A
#define CH7 0x0B
#define CH8 0x0C
#define setoff B10000001
#define SETPGA6 B00000000
#define SETPGA1 B00010000
#define SETPGA12 B01100000
#define SPI_SPEED 2500000
#define NOP 0x00
uint16_t chSet;
double real-val;
const int datasize = 400;
volatile int data[datasize];
volatile int DRDY_state = HIGH;
void waitforDRDY ();
void DRDY_Interrupt ();
void prepare_init ();
void packet_ADS ();
int16_t read_value ();
void send_command (uint8_t cmd);
uint8_t out1、out2、out3;
uint8_t debug_msg = 1U;
字符串 Sep =------------------------------------------------------- ";
字符串 hex_to_char (int hex_in){
int precision = 2;
char tmp[16];
char format[128];
sprintf (format、"0x%.%DX"、 Precision);
sprintf (tmp、格式、hex_in);
//Serial.print (tmp);
return (String (tmp));
}
void DRDY_Interrupt (){
DRDY_state = low;
}
void waitforDRDY (){
while (DRDY_state){
CONTINUE;
}
noInterrupts ();
DRDY_ST态=高电平;
INTERRUPTS ();
}
Int16_t READ_VALUE (){
Int16_t ADC_val = 0;
waitforDRDY ();
SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV8、MSBFIRST、SPI_MODE1));
digitalWrite (PIN_CS,低电平);
delayMicroseconds (5);
spi.transfer (RDATA);
delayMicroseconds (7);
adc_val |= spi.transfer (NOP);
sery.println (adc_val);
delayMicroseconds (10);
adc_val <= 8;
adc_val |= spi.transfer (NOP);
serial.println (adc_val);
delayMicroseconds (10);
digitalWrite (PIN_CS、HIGH);
spi.endTransaction ();
返回 ADC_val;
}
uint8_t read_Byte (uint8_t reg_addr)
{
INT OUT = 0;
digitalWrite (PIN_CS、低电平);
SEND_COMMAND (RDATA);
OUT1 = SPI.transfer (0x00);
serial.println (out1);
delayMicroseconds (5);
OUT2 = SPI.transfer (0x00);
serial.println (out2);
delayMicroseconds (5);
out3 = spi.transfer (0x00);
serial.println (out3);
delayMicroseconds (1);
digitalWrite (PIN_CS、HIGH);
OUT =(OUT1 << 8)+ OUT2;
/*if (debug_msg)
{
serial.println (Sep);
serial.println ("sent:\t"+ hex_to_char (reg_addr));
serial.println ("已接收:\t"+输出);
}
*
return (out);
}
void preping_ADS (){
digitalWrite (PIN_CS、LOW);
delay (2);
SPI.setDataMode(SPI_MODE1);
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV8);
SPI.begin();
}
void ADS_init_config(){
attachInterrupt (digitalPinToInterrupt (PIN_DRDY)、DRDY_Interrupt、Falling);
digitalWrite (PIN_CS、LOW);
SPI.transfer (WAKEUP);
SPI.transfer (SDATAC);
delay (2);
SPI.transfer (WREG | 0x01);
SPI.transfer (0x02);
//Config1
SPI.transfer (B10000110);
//Config2
SPI.transfer (0x00);
//Config3
SPI.transfer (B11101001);
SPI.transfer (WREG | 0x05);
SPI.transfer (0x07);
//CH1
SPI.transfer (B00000001);
//CH2
SPI.transfer (B00000001);
//CH3
SPI.transfer (B00000001);
//CH4
SPI.transfer (B00000001);
//CH5
SPI.transfer (B00000001);
//CH6
SPI.transfer (B00000001);
//CH7
SPI.transfer (B00000001);
//CH8
SPI.transfer (B00000001);
digitalWrite (PIN_CS、HIGH);
}
void send_command (uint8_t cmd)
{
digitalWrite (PIN_CS、低电平);
delayMicroseconds (5);// 5 = 6us (32时)
spi.transfer (cmd);
delayMicroseconds (10);
digitalWrite (PIN_CS、HIGH);
}
void set_channel (uint8_t ch、uint8_t 设置){
SPI.transfer (WREG | ch);
SPI.transfer (0x00);
spi.transfer (settings);
}
void packet_init(){
for (int i = 0;i < datasize;++I){
data[i]= 0;
}
}
void setup()
{
Serial.begin(9600);
引脚模式(CLK1、输出);
引脚模式(MISO1、输入);
引脚模式(MOSI1、输出);
引脚模式(PIN_CS、输出);
PinMode (PIN_RESET、OUTPUT);
//pinMode (PIN_START、OUTPUT);
引脚模式(PIN_DRDY、输入);
digitalWrite (PIN_CS、HIGH);
//digitalWrite (PIN_START、LOW);
preping_ads();
ads_init_config();
延迟(1000);
digitalWrite (PIN_CS、低电平);
延迟(1000);
digitalWrite (PIN_CS、HIGH);
延迟(1000);
SEND_COMMAND (SDATAC);
延迟(10);
SET_CHANNEL (CH1、SETPGA1);
}
void loop()
{
//chSet = READ_BYTE (RREG | ID);
//Serial.print ("-" ID"+ String (chSet)+"-");
//real-val =(double) 5*(double) read_value ()/(double) 65535;
read_value ();
serial.println (real_val);
延迟(1000);
}
我很乐意提供任何建议。
此致、
Michael