Cerco un aiuto per leggere questo sensore AS7263.
Qui sotto il codice per leggere i valori dei registri.
Il mio problema è che molti valori sono pari a 0.
Leggendo il datasheet vedo che dovrei leggere dei registri virtuali ma non capisco cosa intende.
- Codice: Seleziona tutto
/*
I2C comunication
to read from registers
i2c_read_regAS7263
CS pin 3v3
SDA pin SDA +10k to 3v3
SDO pin GND
SCL pin SCL +10k to 3v3
3v3 VCC
GND GND
*//*
#define AS72XX_Device_Type (0x00) // HW_Version Device Type
#define AS72XX_HW_Version (0x01) // HW_Version HW_Version
#define AS72XX_FW_Version_m (0x02) // FW_Version minor
#define AS72XX_FW_Version_M (0x03) // FW_Version major
#define AS72XX_Control_Setup (0x04) // Control_Setup
#define AS72XX_INT_T (0x05) // INT_T
#define AS72XX_Device_Temp (0x06) // Device_Temp
#define AS72XX_LED_Control (0x07) // LED Control
#define AS72XX_R_High (0x08) // R_High
#define AS72XX_R_Low (0x09) // R_Low
#define AS72XX_S_High (0x0A) // S_High
#define AS72XX_S_Low (0x0B) // S_Low
#define AS72XX_T_High (0x0C) // T_High
#define AS72XX_T_Low (0x0D) // T_Low
#define AS72XX_U_High (0x0E) // U_High
#define AS72XX_U_Low (0x0F) // U_Low
#define AS72XX_V_High (0x10) // V_High
#define AS72XX_V_Low (0x11) // V_Low
#define AS72XX_W_High (0x12) // W_High
#define AS72XX_W_Low (0x13) // W_Low
#define AS72XX_R_Cal_1 (0x14) // R_Cal
#define AS72XX_R_Cal_2 (0x15) // R_Cal
#define AS72XX_R_Cal_3 (0x16) // R_Cal
#define AS72XX_R_Cal_4 (0x17) // R_Cal
#define AS72XX_S_Cal_1 (0x18) // S_Cal
#define AS72XX_S_Cal_2 (0x19) // S_Cal
#define AS72XX_S_Cal_3 (0x1A) // S_Cal
#define AS72XX_S_Cal_4 (0x1B) // S_Cal
#define AS72XX_T_Cal_1 (0x1C) // T_Cal
#define AS72XX_T_Cal_2 (0x1D) // T_Cal
#define AS72XX_T_Cal_3 (0x1E) // T_Cal
#define AS72XX_T_Cal_4 (0x1F) // T_Cal
#define AS72XX_U_Cal_1 (0x20) // U_Cal
#define AS72XX_U_Cal_2 (0x21) // U_Cal
#define AS72XX_U_Cal_3 (0x22) // U_Cal
#define AS72XX_U_Cal_4 (0x23) // U_Cal
#define AS72XX_V_Cal_1 (0x24) // V_Cal
#define AS72XX_V_Cal_2 (0x25) // V_Cal
#define AS72XX_V_Cal_3 (0x26) // V_Cal
#define AS72XX_V_Cal_4 (0x27) // V_Cal
#define AS72XX_W_Cal_1 (0x28) // W_Cal
#define AS72XX_W_Cal_2 (0x29) // W_Cal
#define AS72XX_W_Cal_3 (0x2A) // W_Cal
#define AS72XX_W_Cal_4 (0x2B) // W_Cal
*/
#define AS72XX_SLAVE_TX_VALID 0x02
#define AS72XX_SLAVE_RX_VALID 0x01
#define AS72XX_SLAVE_STATUS_REG 0x00
#define AS72XX_SLAVE_WRITE_REG 0x01
#define AS72XX_SLAVE_READ_REG 0x02
//44 registrers
/*=========================================================================*/
#include <Wire.h>
//#define DEVICE (0x49)//ADXL345 device address
#define DEVICE (0x3F)//ADXL345 device address
//#define TO_READ (44)//num of bytes-1 we are going to read each time
#define TO_READ (5)//num of bytes-1 we are going to read each time
byte buff[TO_READ]; //n bytes buffer for saving data read from the device
char* reg[] =
{
/* "AS72XX_Device_Type",
"AS72XX_HW_Version",
"AS72XX_FW_Version_m",
"AS72XX_FW_Version_M",
"AS72XX_Control_Setup",
"AS72XX_INT_T",
"AS72XX_Device_Temp",
"AS72XX_LED Control",
"AS72XX_R_High",
"AS72XX_R_Low",
"AS72XX_S_High",
"AS72XX_S_Low",
"AS72XX_T_High",
"AS72XX_T_Low",
"AS72XX_U_High",
"AS72XX_U_Low",
"AS72XX_V_High",
"AS72XX_V_Low",
"AS72XX_W_High",
"AS72XX_W_Low",
"AS72XX_R_Cal_1",
"AS72XX_R_Cal_2",
"AS72XX_R_Cal_3",
"AS72XX_R_Cal_4",
"AS72XX_S_Cal_1",
"AS72XX_S_Cal_2",
"AS72XX_S_Cal_3",
"AS72XX_S_Cal_4",
"AS72XX_T_Cal_1",
"AS72XX_T_Cal_2",
"AS72XX_T_Cal_3",
"AS72XX_T_Cal_4",
"AS72XX_U_Cal_1",
"AS72XX_U_Cal_2",
"AS72XX_U_Cal_3",
"AS72XX_U_Cal_4",
"AS72XX_V_Cal_1",
"AS72XX_V_Cal_2",
"AS72XX_V_Cal_3",
"AS72XX_V_Cal_4",
"AS72XX_W_Cal_1",
"AS72XX_W_Cal_2",
"AS72XX_W_Cal_3",
"AS72XX_W_Cal_4"*/
"AS72XX_SLAVE_TX_VALID",
"AS72XX_SLAVE_RX_VALID",
"AS72XX_SLAVE_STATUS_REG",
"AS72XX_SLAVE_WRITE_REG",
"AS72XX_SLAVE_READ_REG"
};
byte reg_[] =
{
/* AS72XX_Device_Type,
AS72XX_HW_Version,
AS72XX_FW_Version_m,
AS72XX_FW_Version_M,
AS72XX_Control_Setup,
AS72XX_INT_T,
AS72XX_Device_Temp,
AS72XX_LED_Control,
AS72XX_R_High,
AS72XX_R_Low,
AS72XX_S_High,
AS72XX_S_Low,
AS72XX_T_High,
AS72XX_T_Low,
AS72XX_U_High,
AS72XX_U_Low,
AS72XX_V_High,
AS72XX_V_Low,
AS72XX_W_High,
AS72XX_W_Low,
AS72XX_R_Cal_1,
AS72XX_R_Cal_2,
AS72XX_R_Cal_3,
AS72XX_R_Cal_4,
AS72XX_S_Cal_1,
AS72XX_S_Cal_2,
AS72XX_S_Cal_3,
AS72XX_S_Cal_4,
AS72XX_T_Cal_1,
AS72XX_T_Cal_2,
AS72XX_T_Cal_3,
AS72XX_T_Cal_4,
AS72XX_U_Cal_1,
AS72XX_U_Cal_2,
AS72XX_U_Cal_3,
AS72XX_U_Cal_4,
AS72XX_V_Cal_1,
AS72XX_V_Cal_2,
AS72XX_V_Cal_3,
AS72XX_V_Cal_4,
AS72XX_W_Cal_1,
AS72XX_W_Cal_2,
AS72XX_W_Cal_3,
AS72XX_W_Cal_4*/
AS72XX_SLAVE_TX_VALID,
AS72XX_SLAVE_RX_VALID,
AS72XX_SLAVE_STATUS_REG,
AS72XX_SLAVE_WRITE_REG,
AS72XX_SLAVE_READ_REG
};
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600); // start serial for output
//Turning on the sensor
// writeTo(DEVICE, reg_[7], 0x08); //enter in standby mode to configure
}
void loop()
{
Serial.println("START/////////////////////////////////////////");
for (int k = 0; k < TO_READ; k++)
{
readFrom(DEVICE, reg_, TO_READ, buff); //read the acceleration data from the ADXL345
Serial.println(reg[k]);
Serial.print(k);
Serial.print('\t');
Serial.print("0x");
Serial.print(reg_[k], HEX);
Serial.print('\t');
Serial.print(buff[k], BIN);
Serial.println();
delay(100);//It appears that delay is needed in order not to clog the port
}
delay(100);//It appears that delay is needed in order not to clog the port
}//fine loop
///////////////////////////////////////////////////////////////////////////////////
void readFrom(int device, byte address, int num, byte buff[])
{
Wire.beginTransmission(device); //start transmission to device
Wire.write(address); //sends address to read from
Wire.endTransmission(); //end transmission
Wire.beginTransmission(device); //start transmission to device (initiate again)
Wire.requestFrom(device, num); // request TO_READ bytes from device
int i = 0;
while (Wire.available()) //device may send less than requested (abnormal)
{
buff[i] = Wire.read(); // receive a byte
i++;
}
Wire.endTransmission(); //end transmission
}
/////////////////////////////////////////////////////////////////////////////
void writeTo(int device, byte address, byte val)
{
Wire.beginTransmission(device); //start transmission to device
Wire.write(address); // send register address
Wire.write(val); // send value to write
Wire.endTransmission(); //end transmission
}

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



