Quantcast
Channel: Arduino Forum - Latest topics
Viewing all articles
Browse latest Browse all 15346

CS5530 with Arduino

$
0
0

Hello friends, is there anyone among us who has dealt with CS5530? The results I get in ADC conversion are not stableand I could not find how to convert them to volts. When I give 0 volts, I get 127, 0, 0, 0 bytes. When I give more than 1.5 volts, I get 127, 255, 255, 255 values.

Code:

#include <SPI.h>
#include <Wire.h>
int CS = 10;
void initialise_ADC(){

Serial.println("initialise_ADC");
digitalWrite(CS,LOW);
for (int i = 0; i < 15; i++) SPI.transfer(0xFF);
SPI.transfer(0xFE);
delay(1);

SPI.transfer(0x03);//configuration register
SPI.transfer(0b00100000);//RS bit
SPI.transfer(0b00000000);
SPI.transfer(0b00000000);
SPI.transfer(0b00000000);
delayMicroseconds(20);
digitalWrite(CS, HIGH);
delayMicroseconds(1);
digitalWrite(CS, LOW);
delayMicroseconds(1);
SPI.transfer(0x03);//configuration
SPI.transfer(0b00000000);// RS
SPI.transfer(0b00000000);
SPI.transfer(0b00000000);
SPI.transfer(0b00000000);
digitalWrite(CS, HIGH);
delayMicroseconds(1);
digitalWrite(CS, LOW);
delayMicroseconds(1);

byte RV1 = 0, RV2 = 0, RV3 = 0, RV4 = 0;
SPI.transfer(0x0B);
RV1 = SPI.transfer(0x00);
RV2 = SPI.transfer(0x00);
RV3 = SPI.transfer(0x00);
RV4 = SPI.transfer(0x00);
digitalWrite(CS, LOW);
delay(20);

Serial.print("RV1:");
Serial.print(RV1,BIN);
Serial.print(" RV2:");
Serial.print(RV2,BIN);
Serial.print(" RV3:");
Serial.print(RV3,BIN);
Serial.print(" RV4:");
Serial.println(RV4,BIN);
digitalWrite(CS,HIGH);

//********************************************************

//gain
byte g1=0,g2=0,g3=0,g4=0;
digitalWrite(CS, LOW);
delayMicroseconds(1);
SPI.transfer(0x0A);//0X02
g1 = SPI.transfer(0x00);
g2 = SPI.transfer(0x00);
g3 = SPI.transfer(0x00);
g4 = SPI.transfer(0x00);
digitalWrite(CS, HIGH);

Serial.print("G1:");
Serial.print(g1,BIN);
Serial.print(" G2:");
Serial.print(g2,BIN);
Serial.print(" G3:");
Serial.print(g3,BIN);
Serial.print(" G4:");
Serial.println(g4,BIN);

//offset
byte of1=0,of2=0,of3=0,of4=0;
digitalWrite(CS, LOW);
delayMicroseconds(1);
SPI.transfer(0x09);//0x01
of1 = SPI.transfer(0x00);
of2 = SPI.transfer(0x00);
of3 = SPI.transfer(0x00);
of4 = SPI.transfer(0x00);
digitalWrite(CS, HIGH);

Serial.print("OFF1:");
Serial.print(of1, BIN);
Serial.print(" OFF2:");
Serial.print(of2, BIN);
Serial.print(" OFF3:");
Serial.print(of3, BIN);
Serial.print(" OFF4:");
Serial.println(of4, BIN);

delay(200);

}
void set_ADC(){
Serial.println("set_ADC");
digitalWrite(CS, LOW);
SPI.transfer(0x03); //configuration register
SPI.transfer(0b00000000); //RS 0
SPI.transfer(0b00000000);
SPI.transfer(0b01010100);
SPI.transfer(0b00000000);
digitalWrite(CS, HIGH);

/*
byte g1=0,g2=0,g3=0,g4=0;
digitalWrite(CS, LOW);
delayMicroseconds(1);
SPI.transfer(0x02);
g1 = SPI.transfer(0x00);
g2 = SPI.transfer(0x00);
g3 = SPI.transfer(0x00);
g4 = SPI.transfer(0x00);
digitalWrite(CS, HIGH);
Serial.println("CONFIG");
Serial.println(g1, BIN);
Serial.println(g2, BIN);
Serial.println(g3, BIN);
Serial.println(g4, BIN);
*/
}

void setup()
{
Serial.begin(115200);
pinMode(CS,OUTPUT);
digitalWrite(CS,HIGH);

SPI.begin();
//SPI.setBitOrder(MSBFIRST);
//SPI.setDataMode(SPI_MODE0);
//SPI.setClockDivider(SPI_CLOCK_DIV8);
initialise_ADC();
delay(100);

byte b1,b2,b3,b4;
digitalWrite(CS, LOW);
delayMicroseconds(1);
SPI.transfer(0x0B);
b1 = SPI.transfer(0x00);
b2 = SPI.transfer(0x00);
b3 = SPI.transfer(0x00);
b4 = SPI.transfer(0x00);
digitalWrite(CS, HIGH);
Serial.print("B1:");
Serial.print(b1);
Serial.print(" B2:");
Serial.print(b2);
Serial.print(" B3:");
Serial.print(b3);
Serial.print(" B4:");
Serial.println(b4);

set_ADC();
}

void loop()
{

convert_data();
delay(1000);

}
void convert_data()
{
Serial.println("convert_data");
byte data_avalaible1, data_avalaible2, data_avalaible3, data_avalaible4;
digitalWrite(CS, LOW);
delayMicroseconds(1);
SPI.transfer(0b11000000);// b10000001
digitalWrite(CS, HIGH);

digitalWrite(CS, LOW);
delayMicroseconds(1);
while(digitalRead(12)==1);

//pinMode(11,OUTPUT);
//for (int i = 0; i < 8; i++)digitalWrite(11,1);
//pinMode(11,INPUT);
delayMicroseconds(20);
data_avalaible1 = SPI.transfer(0x00);
data_avalaible2 = SPI.transfer(0x00);
data_avalaible3 = SPI.transfer(0x00);
data_avalaible4 = SPI.transfer(0x00);
Serial.println(data_avalaible1);
Serial.println(data_avalaible2);
Serial.println(data_avalaible3);
Serial.println(data_avalaible4);
digitalWrite(CS, HIGH);

uint32_t result=0;
int b;
for (int i = 0; i < 4; i++) {
if(i==0) b=data_avalaible1;
else if(i==1) b=data_avalaible2;
if(i==2) b=data_avalaible3;
if(i==3) b=data_avalaible4;
result = (result << 8) | b;
}
Serial.print("Result:");
Serial.println(result);

}

3 posts - 3 participants

Read full topic


Viewing all articles
Browse latest Browse all 15346

Trending Articles