NB Original thread title was "j'essai de faire une balance avec CS5530 de Cirrus quelque soit les modifications appotées au code j'obtien toujours XFF comme resultat "
#include <SPI.h>
#include <Wire.h>
int CS = 10, SDI = 12, SDO = 11; //slave select
void initialise_ADC()
{
Serial.println("initialise_ADC");
digitalWrite(CS, LOW);
for (int i = 0; i < 15; i++)
{
SPI.transfer(0xFF);
}
SPI.transfer(0xFE);
delay(0.000050);
SPI.transfer(0x03);//commande pour écrire dans le registre de configuration
SPI.transfer(0b00100000);//mise à 1 du bit RS
SPI.transfer(0b00000000);
SPI.transfer(0b00000000);
SPI.transfer(0b00000000);
delayMicroseconds(20);//attendre 20us
digitalWrite(CS, HIGH);
delayMicroseconds(0.000050);
digitalWrite(CS, LOW);
delayMicroseconds(0.000050);
SPI.transfer(0x03);//commande pour écrire dans le registre de configuration
SPI.transfer(0b00000000);//mise à 0 du bit RS
SPI.transfer(0b00000000);
SPI.transfer(0b00000000);
SPI.transfer(0b00000000);
digitalWrite(CS, HIGH);
delayMicroseconds(0.000050);
digitalWrite(CS, LOW);
delayMicroseconds(0.000050);
/*lecture du bit RV pour voir si une réinitialisation valide s'est produite (1)
(la lecture du registre de configuration remet le bit RV à zéro)
*/
byte RV1 = 0, RV2 = 0, RV3 = 0, RV4 = 0, validation = 0;
SPI.transfer(0x0B);//commande pour lire dans le registre de configuration
RV1 = SPI.transfer(0x00);
RV2 = SPI.transfer(0x00);
RV3 = SPI.transfer(0x00);
RV4 = SPI.transfer(0x00);
// Serial.println(" RV 1234 ");
digitalWrite(CS, LOW);
delay(20);
Serial.println(RV1, BIN);
Serial.println(RV2, BIN);
Serial.println(RV3, BIN);
Serial.println(RV4, BIN);
digitalWrite(CS, HIGH);
//lecture du registre de gain
byte g1=0,g2=0,g3=0,g4=0;
digitalWrite(CS, LOW);
delayMicroseconds(0.000050);
SPI.transfer(0x02);
g1 = SPI.transfer(0x00);
g2 = SPI.transfer(0x00);
g3 = SPI.transfer(0x00);
g4 = SPI.transfer(0x00);
digitalWrite(CS, HIGH);
Serial.println(" g 1234 ");
Serial.println(g1, BIN);
Serial.println(g2, BIN);
Serial.println(g3, BIN);
Serial.println(g4, BIN);
//lecture du registre d'offset
byte of1=0,of2=0,of3=0,of4=0;
digitalWrite(CS, LOW);
delayMicroseconds(0.000050);
SPI.transfer(0x01);
of1 = SPI.transfer(0x00);
of2 = SPI.transfer(0x00);
of3 = SPI.transfer(0x00);
of4 = SPI.transfer(0x00);
digitalWrite(CS, HIGH);
Serial.println(" of 1234 ");
Serial.println(of1, BIN);
Serial.println(of2, BIN);
Serial.println(of3, BIN);
Serial.println(of4, BIN);
delay(200);
}
void set_ADC()//parametrage de l'adc
{
Serial.println("set_ADC");
digitalWrite(CS, LOW);
SPI.transfer(0x03); //commande pour écrire dans le registre de configuration
SPI.transfer(0b00000000); //mise à 0 du bit RS
SPI.transfer(0b00001000);
SPI.transfer(0b01010100);
SPI.transfer(0b00000000);
digitalWrite(CS, HIGH);
byte g1=0,g2=0,g3=0,g4=0;
digitalWrite(CS, LOW);
delayMicroseconds(0.000050);
SPI.transfer(0x02);
g1 = SPI.transfer(0x00);
g2 = SPI.transfer(0x00);
g3 = SPI.transfer(0x00);
g4 = SPI.transfer(0x00);
digitalWrite(CS, HIGH);
Serial.println(" LECTURE REG CONFIG ");
Serial.println(g1, BIN);
Serial.println(g2, BIN);
Serial.println(g3, BIN);
Serial.println(g4, BIN);
}
void setup()
{
Serial.begin(9600);
SPI.begin ();
Serial.println("setup");
parametrage = 0;
pinMode(CS, OUTPUT);
pinMode(SDO, OUTPUT);
pinMode(SDI, INPUT);
digitalWrite(CS, HIGH);//disable Slave Select
SPI.begin ();//initialisation du bus SPI
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE1);
SPI.setClockDivider(SPI_CLOCK_DIV8); //divide the clock by 8 5MHz
initialise_ADC(); //initialisation de l'ADC
set_ADC();
delay(100);
}
void loop()
{
Serial.println("convert_data");
convert_data();
}
void convert_data()
{
Serial.println("convert_data");
//acqisition des données
byte data_avalaible1, data_avalaible2, data_avalaible3, data_avalaible4;
digitalWrite(CS, LOW);
delayMicroseconds(0.005);
SPI.transfer(0b10000001);// mode de conversion continue
//if(SDO==0)
//{
digitalWrite(CS, HIGH);
Serial.print("données disponibles");
digitalWrite(CS, LOW);
SPI.transfer(0x00);
for (int i = 0; i < 8; i++)
{
SDI = 1;
}
data_avalaible1 = SPI.transfer(0x00);
data_avalaible2 = SPI.transfer(0x00);
data_avalaible3 = SPI.transfer(0x00);
data_avalaible4 = SPI.transfer(0x00);
Serial.println(data_avalaible1,BIN);
Serial.println(data_avalaible2,BIN);
Serial.println(data_avalaible3,BIN);
Serial.println(data_avalaible4,BIN);
digitalWrite(CS, HIGH);
}
//}