You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hello, I am using this library but I have some problems with the sincronization of the data-rate coming from the ADS1220 and the reading-rete of my Arduino UNO.
Basically the Arduino loop is executed too fast in comparison than the data-rate and therefore I get a lot of samples that are 0.00 mV between one "real" sample and the other. See the attached picture:
It look like that the execution do not wait new data coming from the ADS1220.
Here is the code I'm using.
`//////////////////////////////////////////////////////////////////////////////////////////
//
// Demo code for the ADS1220 24-bit ADC breakout board
//
// Author: Ashwin Whitchurch
// Copyright (c) 2018 ProtoCentral
//
// This example gives differential voltage across the AN0 and AN1 pins in mVolts
//
// Arduino connections:
//
// |ADS1220 pin label| Pin Function |Arduino Connection|
// |-----------------|:--------------------:|-----------------:|
// | DRDY | Data ready Output pin| D6 |
// | MISO | Slave Out | D12 |
// | MOSI | Slave In | D11 |
// | SCLK | Serial Clock | D13 |
// | CS | Chip Select | D7 |
// | DVDD | Digital VDD | +5V |
// | DGND | Digital Gnd | Gnd |
// | AN0-AN3 | Analog Input | Analog Input |
// | AVDD | Analog VDD | - |
// | AGND | Analog Gnd | - |
//
// This software is licensed under the MIT License(http://opensource.org/licenses/MIT).
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// For information on how to use, visit https://github.com/Protocentral/Protocentral_ADS1220
//
/////////////////////////////////////////////////////////////////////////////////////////
Well, I stumbled upon this strange design decision too (good thing I looked at the code before trying to use the lib). The "WaitForData" name of the functions is actually very misleading. Under the hood there's no wait cycle, just an if statement, that returns 0 if the data is not ready yet, so you are supposed to create your own wait cycle, kinda like:
God knows why the developers have implemented it this way. The library in general looks unfinished, to say the least. For example, field "NewDataAvailable" is defined, but never used. There are nested includes (cpp file includes headers already included in the .h file...), they don't hurt, but are completely redundant.
Personally, since we have defined DRDY pin in our own code, I would've written the wait cycle like this (though _WaitForData starts to look even more WTFish here):
ads1220.Start_Conv();
while(digitalRead(your_DRDY_definition_here));
int32_t data = ads1220.Read_WaitForData();
Serial.println(data);
This library is more like a nice template you can start development with, that has all necessary constants declared and SPI mechanics hidden. But you'll still have to extend it.
Edit: I've looked some more into the lib, and it appears that all read functions, except the most basic Read_WaitForData, are just a copy/paste of the latter with minor modifications. Yeah, so don't expect them to work at all, at least out-of-the-box. Probably, I'll make a proper fork at some point, since I'm using ads1220 on an stm32-based board often.
Hello, I am using this library but I have some problems with the sincronization of the data-rate coming from the ADS1220 and the reading-rete of my Arduino UNO.
Basically the Arduino loop is executed too fast in comparison than the data-rate and therefore I get a lot of samples that are 0.00 mV between one "real" sample and the other. See the attached picture:
It look like that the execution do not wait new data coming from the ADS1220.
Here is the code I'm using.
`//////////////////////////////////////////////////////////////////////////////////////////
//
// Demo code for the ADS1220 24-bit ADC breakout board
//
// Author: Ashwin Whitchurch
// Copyright (c) 2018 ProtoCentral
//
// This example gives differential voltage across the AN0 and AN1 pins in mVolts
//
// Arduino connections:
//
// |ADS1220 pin label| Pin Function |Arduino Connection|
// |-----------------|:--------------------:|-----------------:|
// | DRDY | Data ready Output pin| D6 |
// | MISO | Slave Out | D12 |
// | MOSI | Slave In | D11 |
// | SCLK | Serial Clock | D13 |
// | CS | Chip Select | D7 |
// | DVDD | Digital VDD | +5V |
// | DGND | Digital Gnd | Gnd |
// | AN0-AN3 | Analog Input | Analog Input |
// | AVDD | Analog VDD | - |
// | AGND | Analog Gnd | - |
//
// This software is licensed under the MIT License(http://opensource.org/licenses/MIT).
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// For information on how to use, visit https://github.com/Protocentral/Protocentral_ADS1220
//
/////////////////////////////////////////////////////////////////////////////////////////
#include "Protocentral_ADS1220.h"
#include <SPI.h>
#define PGA 1 // Programmable Gain = 1
#define VREF 3.300 // Internal reference of 2.048V
#define VFSR VREF/PGA
#define FSR (((long int)1<<23)-1)
#define ADS1220_CS_PIN 7
#define ADS1220_DRDY_PIN 6
Protocentral_ADS1220 pc_ads1220;
int32_t adc_data;
void setup(){
Serial.begin(115200);
}
void loop(){
while(true){
adc_data=pc_ads1220.Read_WaitForData();
float Vout = (float)((adc_data * VFSR * 1000)/FSR); //In mV
Serial.print("t = ");Serial.print(millis());Serial.print(" ms, V = ");Serial.print(Vout);Serial.println(" mV");
}
}`
The text was updated successfully, but these errors were encountered: