Here is the main program
//set pin names
int ledPin = 13; // LED connected to digital pin 13 d13
int RESET = 11; //reset pin active reset low d10.
int START = 10; //start pin activate conversion when high d11.
int DRDY = 12; //active low when data is ready to be read d12.
int cs_main = 9; //selects main chip to configure registers d9
int cs_secondary =8; //selects non-main chip to configure registers d9
int sclk=14; //system clock for all the other pins d14
int doutMISO_0=0; //doutMISO of the main chip 2-7 secondary chips master in slave out
int dinMOSI=15; //data in to all other pins Master out slave in
//global vareables
int buttonState=LOW;
int drdy_State=HIGH;
int dout_input=HIGH;
// The setup() method runs once, when the sketch starts
void setup() {
ads1298_Set_Pins();
ads1298_Power_Up();
send_Reset_Command();
//delay after reset
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
//Stop Read Data Continuously mode
sdatac();
//read = RREG When in RDATAC mode, the RREG command is ignored.
//read register 0
read_reg_0();
read_byte_1();
digitalWrite(sclk, HIGH);
//b7
digitalWrite(sclk, LOW);
dout_input = digitalRead(doutMISO_0);
SerialUSB.print(dout_input);
digitalWrite(sclk, HIGH);
//b6
digitalWrite(sclk, LOW);
dout_input = digitalRead(doutMISO_0);
SerialUSB.print(dout_input);
digitalWrite(sclk, HIGH);
//b5
digitalWrite(sclk, LOW);
dout_input = digitalRead(doutMISO_0);
SerialUSB.print(dout_input);
digitalWrite(sclk, HIGH);
//b4
digitalWrite(sclk, LOW);
dout_input = digitalRead(doutMISO_0);
SerialUSB.print(dout_input);
digitalWrite(sclk, HIGH);
//b3
digitalWrite(sclk, LOW);
dout_input = digitalRead(doutMISO_0);
SerialUSB.print(dout_input);
digitalWrite(sclk, HIGH);
//b2
digitalWrite(sclk, LOW);
dout_input = digitalRead(doutMISO_0);
SerialUSB.print(dout_input);
digitalWrite(sclk, HIGH);
//b1
digitalWrite(sclk, LOW);
dout_input = digitalRead(doutMISO_0);
SerialUSB.print(dout_input);
digitalWrite(sclk, HIGH);
//b0
digitalWrite(sclk, LOW);
dout_input = digitalRead(doutMISO_0);
SerialUSB.print(dout_input);
// digitalWrite(START, HIGH);
//check for drdy change before filling registers...
while(drdy_State==HIGH){
drdy_State = digitalRead(DRDY);
if(drdy_State==LOW){
digitalWrite(ledPin, HIGH);
}
}
}
// the loop() method runs over and over again,
// as long as the Arduino has power
void loop()
{
buttonState = digitalRead(DRDY);
if(buttonState==LOW){
// lowsig++;
} // wait for a second
if(buttonState==HIGH){
// highsig++;
}
//SerialUSB.println("Hello World! low");
// SerialUSB.println(lowsig);
// SerialUSB.println(highsig);
}
here is the functions:
void ads1298_Set_Pins(void){
SerialUSB.println("ADS1298 power up!");
//setup pins for inputs and outputs
pinMode(ledPin, OUTPUT);
pinMode(RESET, OUTPUT);
pinMode(START, OUTPUT);
pinMode(DRDY, INPUT);
pinMode(cs_main, OUTPUT);
pinMode(cs_secondary, OUTPUT);
pinMode(sclk, OUTPUT);
pinMode(doutMISO_0, INPUT);
pinMode(dinMOSI, OUTPUT);
}
void ads1298_Power_Up(void){
//tie all low
digitalWrite(START, LOW);
digitalWrite(ledPin, LOW);
digitalWrite(cs_main, LOW);
digitalWrite(cs_secondary, LOW);
digitalWrite(sclk, LOW);
digitalWrite(dinMOSI, LOW);
//step 1 wait 500ms instead of recomended 150ms
//for power supplies to stableise
delay(500);
//set CLKSEL=1 wait 20us //allready set to 1 unless tie to pin.
delay(500); //wait 500ms instead of 20us to let clk stableise
//wait 2^16 tclk = 65536 tclk 2.x Mhz
delay(1000); //wait 1 s instead of 65536 tclk
//reset pulse low wait 18tclks longer low wait 5 sec for power on reset
//reset allready tied HIGH
digitalWrite(RESET, LOW);
delay(100);
digitalWrite(RESET, HIGH);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
}
void send_Reset_Command(void){
//0000 0110
//msb first
//set configuration registers...
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, LOW);//msb 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//doutMISO 6 =0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//doutMISO 5 =0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//doutMISO 4 =0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//doutMISO 3 =0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, HIGH); //dinMOSI b2=1
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//doutMISO b1=1
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, LOW);//dinMOSI b0=0
digitalWrite(sclk, LOW);
}
void sdatac(void){
//SDATAC
//0001 0001
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, LOW);//msb7 = 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b6 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b5 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, HIGH);//b4 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, LOW);//b3 = 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b2 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b1 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, HIGH);//b0=1
digitalWrite(sclk, LOW);
}
void rreg (void){
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, LOW);//msb7 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b6 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, HIGH);//b5 1
digitalWrite(sclk, LOW);
}
void wr_defalt_pre_num_of_bytes(void){
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, LOW);//msb 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b6 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b5 0
digitalWrite(sclk, LOW);
}
void rwrite(void){
//rwrite = WREG
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, LOW);//msb 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, HIGH);//b7 1
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, LOW);//b6 0
digitalWrite(sclk, LOW);
}
void read_reg_0(void){
rreg();
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, LOW);//b4 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b3 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b2 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b1 1
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b0 0
digitalWrite(sclk, LOW);
}
void read_byte_1(void){
//wr_defalt_pre_num_of_bytes
wr_defalt_pre_num_of_bytes();
//number of bytes 0
digitalWrite(sclk, HIGH);
digitalWrite(dinMOSI, LOW); //b4 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b3 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b2 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b1 0
digitalWrite(sclk, LOW);
digitalWrite(sclk, HIGH);
//b0 0
digitalWrite(sclk, LOW);
}