Arduino ADS 1015采样率

Arduino ADS 1015采样率,arduino,adc,arduino-c++,Arduino,Adc,Arduino C++,我最近得到了ADS 1015(为了对电容器的电压进行高频测量)。数据表规定了3.3 kSPS(每秒取样)。但是我最多只能得到500个SP左右。 在环顾四周之后,我发现了几个关于寄存器重写的资源。。。然而,我不是这个领域的专家,需要你的帮助 这是我用来测试采样率的代码(使用ARDUINO Nano,ARDUNO代码是C++变体):< /P> #包括 #包括 #包括 Adafruit_ADS1015 ADS_0(0x48); int i=0; 长期结果=0; 作废设置(作废) { Serial.be

我最近得到了ADS 1015(为了对电容器的电压进行高频测量)。数据表规定了3.3 kSPS(每秒取样)。但是我最多只能得到500个SP左右。 在环顾四周之后,我发现了几个关于寄存器重写的资源。。。然而,我不是这个领域的专家,需要你的帮助

这是我用来测试采样率的代码(使用ARDUINO Nano,ARDUNO代码是C++变体):< /P>

#包括
#包括
#包括
Adafruit_ADS1015 ADS_0(0x48);
int i=0;
长期结果=0;
作废设置(作废)
{
Serial.begin(9600);
//在INTERNET上找到代码,但未定义readRegister函数的拒绝错误BC…但是,我没有发现缺少任何库…奇怪---------------
常数8_t adcadress=0x48;
const uint8\u t configRegister=0x01;
uint16\u t configValue=读取寄存器(adcAddress,configRegister);
Serial.print(“读取配置值0x”);
Serial.println(配置值,十六进制);
configValue=(configValue&!ADS1015_REG_CONFIG_DR_MASK)| ADS1015_REG_CONFIG_DR_3300; sps;
writeRegister(adcAddress、configRegister、configValue);
Serial.print(“发送的配置值0x”);
Serial.println(配置值,十六进制);
configValue=readRegister(adcAddress,configRegister);
Serial.print(“通过重新读取配置值0x进行验证”);
Serial.println(配置值,十六进制);
// -------------------------------------------------------------
ads1015.begin();
}
无效循环(无效)
{
int i=0;
长距离=微秒();
而(i!=1000){
i++;
结果=ads1015.readADC_单端(0);
}
Serial.println(micros()-depart);
}
此代码返回大约2000000,对应于2秒或500 Hz采样率

提前感谢,, ~TBD

根据我认为您必须首先在配置寄存器(第24页)中将
模式设置为
0
(连续转换模式)并将
DR
设置为
0b111

然后,您可能可以在
警报/RDY引脚上使用
ISR
(正确配置后-第15页),并在每次触发中断时读取数据

第15页:

警报/RDY引脚也可以配置为转换就绪引脚。 将Hi_thresh寄存器的最高有效位设置为1,并将 Lo_thresh寄存器的最高有效位为0,以启用引脚作为 转换准备引脚


为什么每次循环都要读1000次?你没有积累任何东西,只是在阅读。您的意思是执行
结果+=
?不,实际上,此代码仅用于测试目的。我只是执行1000次测量来得到平均值。之后,为了得到我所做的频率,结果是r,即1000的时间测量频率=1/(r/1000)。最好把它放在计时器中,看看它会走多快。如果你认真的话,学习计时器并获得一个范围。另外,永远不要相信库,特别是当您对性能感兴趣时。阅读数据表,学习如何读取设备。要检查一下;)
  #include <Wire.h>
  #include <Adafruit_ADS1015.h>
  #include <SPI.h>
  
  
  
   
  Adafruit_ADS1015 ADS_0(0x48);
  
  int i = 0;
  long results = 0;
   
  void setup(void)
  {
    Serial.begin(9600);
  
  
  
    
          // CODE FOUND ON THE INTERNET BUT REJECT ERROR BC OF readRegister function not defined... However, I haven't found any library missing... Strange ---------------
           const uint8_t adcAddress = 0x48;
           const uint8_t configRegister = 0x01;
           uint16_t configValue = readRegister( adcAddress, configRegister );
           
           Serial.print( "read config value 0x" );
           Serial.println( configValue, HEX );
           
           configValue = ( configValue & !ADS1015_REG_CONFIG_DR_MASK) | ADS1015_REG_CONFIG_DR_3300SPS;
           writeRegister( adcAddress, configRegister, configValue );
        
           Serial.print( "sent config value 0x" );
           Serial.println( configValue, HEX );
        
           configValue = readRegister( adcAddress, configRegister );
        
           Serial.print( "verifying by rereading config value 0x" );
           Serial.println( configValue, HEX );
           // -------------------------------------------------------------
  
  
    ads1015.begin();
  }
  
  
   
  void loop(void)
  {
    int i=0;
    long depart = micros();
    while(i != 1000) {
        i++;
        results = ads1015.readADC_SingleEnded(0);
    }
    Serial.println(micros() - depart); 
  }