Skip to main content
edited title
Link
Microk
  • 115
  • 9

Interfacing ADC7606AD7606 with Arduino Due. How to data-log?

#include <EnableInterrupt.h>

#define BUSY 3
#define RD 4  //RD+CS tied together
#define RESET 5
#define CONVST 6 //CONVSTA+CONVSTB soldered together on the board
#define RANGE 7

#define DB0 38
#define DB1 39
#define DB2 40
#define DB3 41
#define DB4 42
#define DB5 43 
#define DB6 44
#define DB7 45
#define DB8 46
#define DB9 47
#define DB10 48
#define DB11 49
#define DB12 50
#define DB13 51
#define DB14 52
#define DB15 53

// declare rawData as an array of 16 integers
int rawData[16];

void setup() {

  enableInterrupt(BUSY, ISR_, FALLING);

  pinMode(RESET, OUTPUT);
  pinMode(CONVST, OUTPUT);
  pinMode(RD, OUTPUT);
  pinMode(RANGE, OUTPUT);
  pinMode(BUSY, INPUT);

  Serial.begin(9600);

  //reset ADC to begin conversion 
  digitalWrite(RESET, HIGH);
  delayMicroseconds(10);
  digitalWrite(RESET, LOW);

  digitalWrite(CONVST, LOW);  
  digitalWrite(RD, HIGH);
  digitalWrite(RANGE, HIGH);
  digitalWrite(BUSY, LOW);  

  delayMicroseconds(1000);

}

void loop() {

  disableInterrupt(BUSY);

  delayMicroseconds(40000); 
  digitalWrite(CONVST, LOW);
  delayMicroseconds(10); 
  digitalWrite(CONVST, HIGH);
  enableInterrupt(BUSY, ISR_, FALLING);

}

void ISR_ ()  {

  //Serial.print(millis());
  //Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH);
  Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH);
  Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH);
  Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH);
  Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH);
  Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH);
  Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH);
  Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH); 

  Serial.println(" ");

}    

void readDBpins()
{
  rawData[0] = digitalRead(DB15);
  //Serial.print (rawData[0]);
  if (rawData[0] > 0) {rawData[0] = 32768;} 
  rawData[1] = digitalRead(DB14);  
  //Serial.print (rawData[1]);
  if (rawData[1] > 0) {rawData[1] = 16384;}
  rawData[2] = digitalRead(DB13);
  //Serial.print (rawData[2]);
  if (rawData[2] > 0) {rawData[2] = 8192;}
  rawData[3] = digitalRead(DB12);
  //Serial.print (rawData[3]);
  if (rawData[3] > 0) {rawData[3] = 4096;}
  rawData[4] = digitalRead(DB11);
  //Serial.print (rawData[4]);
  if (rawData[4] > 0) {rawData[4] = 2048;}
  rawData[5] = digitalRead(DB10);
  //Serial.print (rawData[5]);
  if (rawData[5] > 0) {rawData[5] = 1024;}
  rawData[6] = digitalRead(DB9);
  //Serial.print (rawData[6]);
  if (rawData[6] > 0) {rawData[6] = 512;}
  rawData[7] = digitalRead(DB8);
  //Serial.print (rawData[7]);
  if (rawData[7] > 0) {rawData[7] = 256;}
  rawData[8] = digitalRead(DB7);
  //Serial.print (rawData[8]);
  if (rawData[8] > 0) {rawData[8] = 128;}
  rawData[9] = digitalRead(DB6);
  //Serial.print (rawData[9]);
  if (rawData[9] > 0) {rawData[9] = 64;}
  rawData[10] = digitalRead(DB5);
  //Serial.print (rawData[10]);
  if (rawData[10] > 0) {rawData[10] = 32;}
  rawData[11] = digitalRead(DB4);
  //Serial.print (rawData[11]);
  if (rawData[11] > 0) {rawData[11] = 16;}
  rawData[12] = digitalRead(DB3);
  //Serial.print (rawData[12]);
  if (rawData[12] > 0) {rawData[12] = 8;}
  rawData[13] = digitalRead(DB2);
  //Serial.print (rawData[13]);
  if (rawData[13] > 0) {rawData[13] = 4;}
  rawData[14] = digitalRead(DB1);
  //Serial.print (rawData[14]);
  if (rawData[14] > 0) {rawData[14] = 2;}
  rawData[15] = digitalRead(DB0);
  // Serial.print (rawData[15]);
  if (rawData[15] > 0) {rawData[15] = 1;}

  Serial.print (rawData[0]+rawData[1]+rawData[2]+rawData[3]+rawData[4]+rawData[5]+rawData[6]+rawData[7]+rawData[8]+rawData[9]+rawData[10]+rawData[11]+rawData[12]+rawData[13]+rawData[14]+rawData[15]);
}

}

#include <EnableInterrupt.h>

#define BUSY 3
#define RD 4  //RD+CS tied together
#define RESET 5
#define CONVST 6 //CONVSTA+CONVSTB soldered together on the board
#define RANGE 7

#define DB0 38
#define DB1 39
#define DB2 40
#define DB3 41
#define DB4 42
#define DB5 43 
#define DB6 44
#define DB7 45
#define DB8 46
#define DB9 47
#define DB10 48
#define DB11 49
#define DB12 50
#define DB13 51
#define DB14 52
#define DB15 53

// declare rawData as an array of 16 integers
int rawData[16];

void setup() {

enableInterrupt(BUSY, ISR_, FALLING);

pinMode(RESET, OUTPUT);
pinMode(CONVST, OUTPUT);
pinMode(RD, OUTPUT);
pinMode(RANGE, OUTPUT);
pinMode(BUSY, INPUT);

Serial.begin(9600);

//reset ADC to begin conversion 
digitalWrite(RESET, HIGH);
delayMicroseconds(10);
digitalWrite(RESET, LOW);

digitalWrite(CONVST, LOW);  
digitalWrite(RD, HIGH);
digitalWrite(RANGE, HIGH);
digitalWrite(BUSY, LOW);  

delayMicroseconds(1000);

}

void loop() {

disableInterrupt(BUSY);

delayMicroseconds(40000); 
digitalWrite(CONVST, LOW);
delayMicroseconds(10); 
digitalWrite(CONVST, HIGH);
enableInterrupt(BUSY, ISR_, FALLING);

}

void ISR_ ()  {

//Serial.print(millis());
//Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH);
Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH);
Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH);
Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH);
Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH);
Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH);
Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH);
Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH); 

Serial.println(" ");

}   
void readDBpins()
{
rawData[0] = digitalRead(DB15);
//Serial.print (rawData[0]);
if (rawData[0] > 0) {rawData[0] = 32768;} 
rawData[1] = digitalRead(DB14);  
//Serial.print (rawData[1]);
if (rawData[1] > 0) {rawData[1] = 16384;}
rawData[2] = digitalRead(DB13);
//Serial.print (rawData[2]);
if (rawData[2] > 0) {rawData[2] = 8192;}
rawData[3] = digitalRead(DB12);
//Serial.print (rawData[3]);
if (rawData[3] > 0) {rawData[3] = 4096;}
rawData[4] = digitalRead(DB11);
//Serial.print (rawData[4]);
if (rawData[4] > 0) {rawData[4] = 2048;}
rawData[5] = digitalRead(DB10);
//Serial.print (rawData[5]);
if (rawData[5] > 0) {rawData[5] = 1024;}
rawData[6] = digitalRead(DB9);
//Serial.print (rawData[6]);
if (rawData[6] > 0) {rawData[6] = 512;}
rawData[7] = digitalRead(DB8);
//Serial.print (rawData[7]);
if (rawData[7] > 0) {rawData[7] = 256;}
rawData[8] = digitalRead(DB7);
//Serial.print (rawData[8]);
if (rawData[8] > 0) {rawData[8] = 128;}
rawData[9] = digitalRead(DB6);
//Serial.print (rawData[9]);
if (rawData[9] > 0) {rawData[9] = 64;}
rawData[10] = digitalRead(DB5);
//Serial.print (rawData[10]);
if (rawData[10] > 0) {rawData[10] = 32;}
rawData[11] = digitalRead(DB4);
//Serial.print (rawData[11]);
if (rawData[11] > 0) {rawData[11] = 16;}
rawData[12] = digitalRead(DB3);
//Serial.print (rawData[12]);
if (rawData[12] > 0) {rawData[12] = 8;}
rawData[13] = digitalRead(DB2);
//Serial.print (rawData[13]);
if (rawData[13] > 0) {rawData[13] = 4;}
rawData[14] = digitalRead(DB1);
//Serial.print (rawData[14]);
if (rawData[14] > 0) {rawData[14] = 2;}
rawData[15] = digitalRead(DB0);
// Serial.print (rawData[15]);
if (rawData[15] > 0) {rawData[15] = 1;}

Serial.print (rawData[0]+rawData[1]+rawData[2]+rawData[3]+rawData[4]+rawData[5]+rawData[6]+rawData[7]+rawData[8]+rawData[9]+rawData[10]+rawData[11]+rawData[12]+rawData[13]+rawData[14]+rawData[15]);

}

#include <EnableInterrupt.h>

#define BUSY 3
#define RD 4  //RD+CS tied together
#define RESET 5
#define CONVST 6 //CONVSTA+CONVSTB soldered together on the board
#define RANGE 7

#define DB0 38
#define DB1 39
#define DB2 40
#define DB3 41
#define DB4 42
#define DB5 43 
#define DB6 44
#define DB7 45
#define DB8 46
#define DB9 47
#define DB10 48
#define DB11 49
#define DB12 50
#define DB13 51
#define DB14 52
#define DB15 53

// declare rawData as an array of 16 integers
int rawData[16];

void setup() {

  enableInterrupt(BUSY, ISR_, FALLING);

  pinMode(RESET, OUTPUT);
  pinMode(CONVST, OUTPUT);
  pinMode(RD, OUTPUT);
  pinMode(RANGE, OUTPUT);
  pinMode(BUSY, INPUT);

  Serial.begin(9600);

  //reset ADC to begin conversion 
  digitalWrite(RESET, HIGH);
  delayMicroseconds(10);
  digitalWrite(RESET, LOW);

  digitalWrite(CONVST, LOW);  
  digitalWrite(RD, HIGH);
  digitalWrite(RANGE, HIGH);
  digitalWrite(BUSY, LOW);  

  delayMicroseconds(1000);

}

void loop() {

  disableInterrupt(BUSY);

  delayMicroseconds(40000); 
  digitalWrite(CONVST, LOW);
  delayMicroseconds(10); 
  digitalWrite(CONVST, HIGH);
  enableInterrupt(BUSY, ISR_, FALLING);

}

void ISR_ ()  {

  //Serial.print(millis());
  //Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH);
  Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH);
  Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH);
  Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH);
  Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH);
  Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH);
  Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH);
  Serial.print(",");

  delayMicroseconds(1);
  digitalWrite(RD, LOW);
  delayMicroseconds(1);
  readDBpins(); // do read
  digitalWrite(RD, HIGH); 

  Serial.println(" ");

} 

void readDBpins()
{
  rawData[0] = digitalRead(DB15);
  //Serial.print (rawData[0]);
  if (rawData[0] > 0) {rawData[0] = 32768;} 
  rawData[1] = digitalRead(DB14);  
  //Serial.print (rawData[1]);
  if (rawData[1] > 0) {rawData[1] = 16384;}
  rawData[2] = digitalRead(DB13);
  //Serial.print (rawData[2]);
  if (rawData[2] > 0) {rawData[2] = 8192;}
  rawData[3] = digitalRead(DB12);
  //Serial.print (rawData[3]);
  if (rawData[3] > 0) {rawData[3] = 4096;}
  rawData[4] = digitalRead(DB11);
  //Serial.print (rawData[4]);
  if (rawData[4] > 0) {rawData[4] = 2048;}
  rawData[5] = digitalRead(DB10);
  //Serial.print (rawData[5]);
  if (rawData[5] > 0) {rawData[5] = 1024;}
  rawData[6] = digitalRead(DB9);
  //Serial.print (rawData[6]);
  if (rawData[6] > 0) {rawData[6] = 512;}
  rawData[7] = digitalRead(DB8);
  //Serial.print (rawData[7]);
  if (rawData[7] > 0) {rawData[7] = 256;}
  rawData[8] = digitalRead(DB7);
  //Serial.print (rawData[8]);
  if (rawData[8] > 0) {rawData[8] = 128;}
  rawData[9] = digitalRead(DB6);
  //Serial.print (rawData[9]);
  if (rawData[9] > 0) {rawData[9] = 64;}
  rawData[10] = digitalRead(DB5);
  //Serial.print (rawData[10]);
  if (rawData[10] > 0) {rawData[10] = 32;}
  rawData[11] = digitalRead(DB4);
  //Serial.print (rawData[11]);
  if (rawData[11] > 0) {rawData[11] = 16;}
  rawData[12] = digitalRead(DB3);
  //Serial.print (rawData[12]);
  if (rawData[12] > 0) {rawData[12] = 8;}
  rawData[13] = digitalRead(DB2);
  //Serial.print (rawData[13]);
  if (rawData[13] > 0) {rawData[13] = 4;}
  rawData[14] = digitalRead(DB1);
  //Serial.print (rawData[14]);
  if (rawData[14] > 0) {rawData[14] = 2;}
  rawData[15] = digitalRead(DB0);
  // Serial.print (rawData[15]);
  if (rawData[15] > 0) {rawData[15] = 1;}

  Serial.print (rawData[0]+rawData[1]+rawData[2]+rawData[3]+rawData[4]+rawData[5]+rawData[6]+rawData[7]+rawData[8]+rawData[9]+rawData[10]+rawData[11]+rawData[12]+rawData[13]+rawData[14]+rawData[15]);
}
Source Link
Microk
  • 115
  • 9

Interfacing ADC7606 with Arduino Due. How to data-log?

I have an 16 bit ADC7606. It is in parallel mode. I have a working sketch that allows me to read 8 channels, convert the 16 bit integer to decimal and then serial prints to monitor. I would like to increase the frequency of the sampling rate. The serial monitor can not keep up with a sampling rate faster than 40millis. The Due is connected via USB on COM3.

How do I log the data to a file on my laptop/computer?

All and any help greatly appreciated.

Code below,

#include <EnableInterrupt.h>

#define BUSY 3
#define RD 4  //RD+CS tied together
#define RESET 5
#define CONVST 6 //CONVSTA+CONVSTB soldered together on the board
#define RANGE 7

#define DB0 38
#define DB1 39
#define DB2 40
#define DB3 41
#define DB4 42
#define DB5 43 
#define DB6 44
#define DB7 45
#define DB8 46
#define DB9 47
#define DB10 48
#define DB11 49
#define DB12 50
#define DB13 51
#define DB14 52
#define DB15 53

// declare rawData as an array of 16 integers
int rawData[16];

void setup() {

enableInterrupt(BUSY, ISR_, FALLING);

pinMode(RESET, OUTPUT);
pinMode(CONVST, OUTPUT);
pinMode(RD, OUTPUT);
pinMode(RANGE, OUTPUT);
pinMode(BUSY, INPUT);

Serial.begin(9600);

//reset ADC to begin conversion 
digitalWrite(RESET, HIGH);
delayMicroseconds(10);
digitalWrite(RESET, LOW);

digitalWrite(CONVST, LOW);  
digitalWrite(RD, HIGH);
digitalWrite(RANGE, HIGH);
digitalWrite(BUSY, LOW);  

delayMicroseconds(1000);

}

void loop() {

disableInterrupt(BUSY);

delayMicroseconds(40000); 
digitalWrite(CONVST, LOW);
delayMicroseconds(10); 
digitalWrite(CONVST, HIGH);
enableInterrupt(BUSY, ISR_, FALLING);

}

void ISR_ ()  {

//Serial.print(millis());
//Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH);
Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH);
Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH);
Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH);
Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH);
Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH);
Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH);
Serial.print(",");

delayMicroseconds(1);
digitalWrite(RD, LOW);
delayMicroseconds(1);
readDBpins(); // do read
digitalWrite(RD, HIGH); 

Serial.println(" ");

}   
void readDBpins()
{
rawData[0] = digitalRead(DB15);
//Serial.print (rawData[0]);
if (rawData[0] > 0) {rawData[0] = 32768;} 
rawData[1] = digitalRead(DB14);  
//Serial.print (rawData[1]);
if (rawData[1] > 0) {rawData[1] = 16384;}
rawData[2] = digitalRead(DB13);
//Serial.print (rawData[2]);
if (rawData[2] > 0) {rawData[2] = 8192;}
rawData[3] = digitalRead(DB12);
//Serial.print (rawData[3]);
if (rawData[3] > 0) {rawData[3] = 4096;}
rawData[4] = digitalRead(DB11);
//Serial.print (rawData[4]);
if (rawData[4] > 0) {rawData[4] = 2048;}
rawData[5] = digitalRead(DB10);
//Serial.print (rawData[5]);
if (rawData[5] > 0) {rawData[5] = 1024;}
rawData[6] = digitalRead(DB9);
//Serial.print (rawData[6]);
if (rawData[6] > 0) {rawData[6] = 512;}
rawData[7] = digitalRead(DB8);
//Serial.print (rawData[7]);
if (rawData[7] > 0) {rawData[7] = 256;}
rawData[8] = digitalRead(DB7);
//Serial.print (rawData[8]);
if (rawData[8] > 0) {rawData[8] = 128;}
rawData[9] = digitalRead(DB6);
//Serial.print (rawData[9]);
if (rawData[9] > 0) {rawData[9] = 64;}
rawData[10] = digitalRead(DB5);
//Serial.print (rawData[10]);
if (rawData[10] > 0) {rawData[10] = 32;}
rawData[11] = digitalRead(DB4);
//Serial.print (rawData[11]);
if (rawData[11] > 0) {rawData[11] = 16;}
rawData[12] = digitalRead(DB3);
//Serial.print (rawData[12]);
if (rawData[12] > 0) {rawData[12] = 8;}
rawData[13] = digitalRead(DB2);
//Serial.print (rawData[13]);
if (rawData[13] > 0) {rawData[13] = 4;}
rawData[14] = digitalRead(DB1);
//Serial.print (rawData[14]);
if (rawData[14] > 0) {rawData[14] = 2;}
rawData[15] = digitalRead(DB0);
// Serial.print (rawData[15]);
if (rawData[15] > 0) {rawData[15] = 1;}

Serial.print (rawData[0]+rawData[1]+rawData[2]+rawData[3]+rawData[4]+rawData[5]+rawData[6]+rawData[7]+rawData[8]+rawData[9]+rawData[10]+rawData[11]+rawData[12]+rawData[13]+rawData[14]+rawData[15]);

}