This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ads124s06如何啟動轉換?

Other Parts Discussed in Thread: ADS124S06, ADS124S08

你好

我使用Arduino控制ads124s06來轉換類比-數位訊號

當我在控制時,我可以用RREG、WREG設定並讀取register

但是當我使用0x08啟動轉換,0x12 RDATA時,卻都看不到轉換數據(回傳都是0)

請幫我檢查我的code哪裡有錯好嗎?

謝謝

以下是我的code

#include <SPI.h>
#include <TimerOne.h>
#define STA 11
#define DRDY 12
#define RESET 13
const int CS = 53;
int stat;
int stat1;
int stat2;
int stat3;
int stat4;
int stat5;
volatile int DRDY_state = LOW;
SPISettings settings1(4000000, MSBFIRST, SPI_MODE1); 
void setup() {
SPI.begin();
pinMode(CS,OUTPUT);
pinMode(RESET, OUTPUT);
pinMode(DRDY, INPUT);
pinMode(STA,OUTPUT);
digitalWrite(RESET , HIGH); 
Serial.begin(115200);
SPI.beginTransaction(settings1);
digitalWrite(CS, LOW);
digitalWrite(STA,LOW);
}
void loop() {
for(int i=0;i>=0;i++)
if(i==0){
SPI.transfer(0x42); // WREG FL_POR 
SPI.transfer(0x02); // WREG byte number -1
SPI.transfer(0x2C); // WREG write AIN2-AINCOM
SPI.transfer(0x00); // 03h PGA reg(closed)
SPI.transfer(0x10); // DATA RATE 20 SPS
SPI.transfer(0x08); // start converting command
delayMicroseconds(10);
}
else
{
//Serial.println("start converting");
SPI.transfer(0x12); //RDATA command
delayMicroseconds(10);
stat = SPI.transfer(0) ; // get data from miso
stat1= SPI.transfer(0);
stat2= SPI.transfer(0);
Serial.println("ADC output");
Serial.println(stat);
Serial.println(stat1);
Serial.println(stat2);
}
SPI.endTransaction();
}
  • 補充以下是 pin 連結訊號

    標示pin+数字 為Arduino 的pin

    PIN function connect
    1 AINCOM 0V
    2 AIN5 2.12V
    3 AIN4 2.63V
    4 AIN3 2.05V
    5 AIN2 2.65V
    6 AIN1 2.23V
    7 AIN0 2.21V
    8 START pin11
    9 CS pin53
    10 DIN pin51
    11 SCLK pin52
    12 DOUT pin50
    13 DRDY pin12
    14 DGND 0V
    15 IOVDD 5V
    16 DVDD 3.3V
    17 CLK 0V
    18 RESET pin13
    19 GPIO3 NA
    20 GPIO2 NA
    21 GPIO1 NA
    22 GPIO0 NA
    23 REFOUT 1uF to AVSS
    24 REFCOM 0V
    25 NC NA
    26 AVDD 5V
    27 AVSS 0V
    28 AVSS-SW 0V
    29 REFN0 2.5V
    30 REFP0 0V
    31 REFN1 2.5V
    32 REFP1 0V
  • 也没有看见你的程序, 那几个 statx 在哪里赋值了, 却 print 了
  • ADS124S06的源代码没有提供,您可以参考一下ADS124S08 的source code中关于采集和处理数据部分。 www.ti.com/.../ADS124S08EVM
  • 1.一开始就已经先int statX定义了,在Arduino里SPI一次只能传送8bit,因此把24bit资料分三次读取,在data sheet第69页图90显示,读取资料时,DIN为low,所以我code为stat=SPI.transfer(0);让Arduino传送low讯号,并在同时交换DOUT讯号给Arduino(依我的理解:在Arduino里,SPI为同时输出与接收,要有输出讯号才能同时接收到讯号,且使用同一个SPI,因此我用stat=SPI.transfer(0) 传送8bit的0讯号借此收到data并将称为stat)

    2.stat=SPI.transfer(0) 再print出去应该是没问题的,因为我可以用这方式读取register的值,输出值正确

    3.目前我看到似乎跟我把REFP0/REFN0 Pin接错有关,改成REFP0=5V,REFN0=0V 读取值不再是只有输出的最大/最小值,但他对于即时反应好像怪怪的,调为AIN1/AINCOM,改变AIN1的电压,ADS124s06输出值却不会即时变化,我还不了解为什么?