24 bit analogue to digital converter chip and arduino help.
I am using a ads1256 adc and a arduino and the arduino IDE also known as wiring I think.
It shows the reset causing the data ready signal updating and going high after a reset then I try to read and write to registers with 0’s as results. Please help.
results:
Serial Port Initilised.
set pins data direction
Done seting pins data direction
Initilise pins to defalt states
Initiliseed pins to defalt states
setup spi port.
spi port setup…
SPCR: 1010101
SPSR: 0
Reset chip by reset pin
write to register 0-4, DATA=1
Read registers 0-4 then print them out
0
0
0
0
0
code :
//ads1256 initilisation and read and write to registers in arduino wiring.
#include “ads1256.h”
#include “extera.h”
//define pin names for pin #
#define CS 10 //Chip Select active low on pin 10
#define NEG_RESET 9 //RESET PIN active low on pin 9 on uc
#define DRDY 2 //DATA READY
#define SYNC 8 //syncronisation power down active low
#define DATAOUT 12//MOSI
#define DATAIN 11//MISO
#define SPICLOCK 13//sck
// global variables
int val=0; //a counter
byte clr=0;//used to clear registers to bit trash bin.
int r0=0;//REGISTER CONTAINERS FOR ADC
int r1=0;
int r2=0;
int r3=0;
int r4=0;
//*************************setup for spi to ad
void spi_to_AD_setup(){
SPCR=0;//clear control register
clr=SPCR; //coppy spi control register to clr to print out or clear it similar to clearing a status register
SPSR=0;//clear control register
clr=SPSR;//coppy spi status register to clr to print out or clear it similar to clearing a status register
clr=SPDR;//coppy spi data register to clr to print out or clear it similar to clearing a status register
/*SPCR
SPIE SPI interrupt disabled set to 0
SPE - Enables the SPI set to 1
DORD - most Significant Bit first when set to 0
MSTR - Sets the Arduino in master mode set to 1
CPOL - Sets the data clock to be idle when low set to 0
CPHA - Samples data on the falling edge of the data clock set to 1
SPR1 and SPR0 - Sets the SPI speed, 00 is fastest (4MHz) 11 is slowest (250KHz) set to 01
SPSR=0;//makeing shure SPI is not going 2x speed.
result = 01010011*/
SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPHA)|(1<<SPR0);
delay(10);
} //end of initilise spi
//simple spi transfer function char in char out
char spi_transfer(volatile char data)
{
SPDR = data; // Start the transmission
while (!(SPSR & (1<<SPIF))) // Wait the end of the transmission
{
};
return SPDR; // return the received byte
}
void setup() {
// initialize the communication port
Serial.begin(9600);
Serial.println(“Serial Port Initilised.”);
Serial.println(“set pins data direction”);
pinMode(CS,OUTPUT);//10 //Chip Select active low on pin 10
pinMode(NEG_RESET,OUTPUT); //RESET PIN active low on pin 11
pinMode(DATAOUT,OUTPUT);// MOSI
pinMode(DATAIN,INPUT);//DATAIN MISO
pinMode(SPICLOCK,OUTPUT);// sck
pinMode(DRDY,INPUT);//Data is ready low
pinMode(SYNC,OUTPUT); //sync active low powerdown
Serial.println(“Done seting pins data direction”);
Serial.println(“Initilise pins to defalt states”);
digitalWrite(CS,LOW); //enable device
digitalWrite(SPICLOCK,LOW);//defalt CLOCK NO-RESET state
digitalWrite(NEG_RESET,HIGH);//defalt reset state
digitalWrite(SYNC,HIGH);//defalt POWER UP state
Serial.println(“Initiliseed pins to defalt states”);
Serial.println(“setup spi port.”);
spi_to_AD_setup();
Serial.println(“spi port setup…”);
Serial.print("SPCR: ");
Serial.println(SPCR, BIN);
Serial.print("SPSR: ");
Serial.println(SPSR, BIN);
Serial.println(“Reset chip by reset pin”);
digitalWrite(NEG_RESET,LOW); //disable device reset self calibration is performed
delayMicroseconds(33);
digitalWrite(NEG_RESET,HIGH); //enable device
while((DRDY==0)) //wait for chip to be ready to acsept opcodes
{
Serial.println(“waiting”);
}
Serial.println(“write to register 0-4, DATA=1”);
spi_transfer(CMD_WREG);//write to register opcode
spi_transfer(6);//6-1 number of registers to write to
spi_transfer(1);
spi_transfer(1);
spi_transfer(1);
spi_transfer(1);
spi_transfer(1);
while((DRDY==0)) //wait for chip to be ready to acsept opcodes
{
Serial.println(“waiting”);
}
delayMicroseconds(10);//t6 in datasheet wait before reading.
Serial.println(“Read registers 0-4 then print them out”);
spi_transfer(CMD_RREG);//read register command.
spi_transfer(6);//number of registers to write to -1
delayMicroseconds(10);//t6 in datasheet wait before reading.
r0=spi_transfer(0xFF);
r1=spi_transfer(0XFF);
r2=spi_transfer(0XFF);
r3=spi_transfer(0XFF);
r4=spi_transfer(0XFF);
Serial.println(r0, DEC);
Serial.println(r1, DEC);
Serial.println(r2, DEC);
Serial.println(r3, DEC);
Serial.println(r4, DEC);
}//END OF SETUP
void loop() {
val= digitalRead(DRDY);
if (val==LOW){
Serial.println(“LOW data is ready?”);
}
if (val==HIGH){
Serial.println(“HIGH data is not ready?”);
}
}//END OF LOOP