您好!
我正在尝试使用通道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