Kim GiJeong
/
HydraulicControlBoard_LIGHT_GJ
eeprom_test
Embed:
(wiki syntax)
Show/hide line numbers
I2C_AS5510.cpp
00001 #include "mbed.h" 00002 #include "setting.h" 00003 00004 void look_for_hardware_i2c() 00005 { 00006 //pc.printf("\r\n\n\n"); 00007 //pc.printf("Note I2C address 0x1C used by FXOS8700CQ 3-axis accelerometer and 3-axis magetometer\r\n"); 00008 //pc.printf("Start hardware search..... \r\n"); 00009 00010 int count = 0; 00011 for (int address=12; address<256; address+=2) { 00012 if (!i2c.write(address, NULL, 0)) { // 0 returned is OK 00013 //pc.printf(" - I2C device found at address 0x%02X\n\r", address >>1); 00014 count++; 00015 } 00016 } 00017 //pc.printf("%d devices found \n\r", count); 00018 } 00019 00020 void init_as5510(int i2c_address) 00021 { 00022 int i2c_adrs=0; 00023 char idata[2]; 00024 int result=0; 00025 00026 //pc.printf("\r\n"); 00027 //pc.printf("Start AS5510 init.. \r\n"); 00028 00029 i2c_adrs= (i2c_address << 1); // AS5510 Slave address lsb= 0 for write 00030 00031 //---------- Magnet selection -------------------------------- 00032 //----0x00= <50mT-----------Strong magnet 00033 //----0x01= <25mT 00034 //----0x02= <18.7mT 00035 //----0x03= <12.5mT---------Weak magnet 00036 //----------------------------------------------------------- 00037 idata[0]=0x0B; // Register for Sensitivity 00038 idata[1]=0x00; // Byte 00039 result= i2c.write(i2c_adrs, idata, 2, 0); // Now write_sensitivity 00040 // if (result != 0) pc.printf("No ACK bit! (09)\n\r"); 00041 00042 //----------- Operation mode selection------------------------ 00043 idata[0]=0x02; // 0x02 address setup register for operation, speed, polarity 00044 idata[1]=0x04; // Normal Operation, Slow mode (1), NORMAL Polarity (0), Power Up (0) 00045 result= i2c.write(i2c_adrs, idata, 2, 0); // Now write_operation 00046 // if (result != 0) pc.printf("No ACK bit! (11)\n\r"); 00047 00048 //pc.printf("AS5510 init done\r\n"); 00049 } 00050 00051 00052 int offset_comp(int i2c_address) 00053 { 00054 int adrss=0; 00055 int oresult=0; 00056 char off_data[2]; 00057 int ocf_done=0; 00058 00059 // First, now Write pointer to register 0x00---------------------------- 00060 adrss= (i2c_address << 1); // AS5510 Slave address lsb= 0 for write 00061 oresult= i2c.write(adrss, 0x00, 1, 0); // write one byte 00062 if (oresult != 0) //pc.printf("No ACK bit! (33)\n\r"); 00063 00064 // Second, now Read register 0x00 and 0x01-------------------------------- 00065 memset(off_data, 0, sizeof(off_data)); 00066 adrss= (i2c_address << 1) | 0x01; // AS5510 address lsb= 1 for read 00067 oresult= i2c.read(adrss, off_data, 2, 0); // read two bytes 00068 00069 // Now analyse register 0x01 ---------------------------------------------- 00070 ocf_done= off_data[1] & 0x08; // mask off bits, 1= done 00071 if (ocf_done== 0) return(0); // return(0)= compensation process is pending 00072 else return(1); // return(1)= compensation process is completed 00073 } 00074 00075 00076 void read_field(int i2c_address) 00077 { 00078 int adr=0; 00079 char rx_data[2]; 00080 int rresult=0; 00081 char lsb, msb; 00082 00083 // First, now Write pointer to register 0x00---------------------------- 00084 adr= (i2c_address << 1); // AS5510 address lsb= 0 for write 00085 rresult= i2c.write(adr, 0x00, 1, 0); // write one byte to register 0x00 for magnetic field strength 00086 // if (rresult != 0) pc.printf("No ACK bit! (22)\n\r"); 00087 00088 // Second, now Read register 0x00 and 0x01-------------------------------- 00089 memset(rx_data, 0, sizeof(rx_data)); 00090 adr= (i2c_address << 1) | 0x01; // AS5510 address lsb= 1 for read 00091 rresult= i2c.read(adr, rx_data, 2, 0); // read two bytes 00092 00093 00094 // Now analyse register 0x01 ---------------------------------------------- 00095 lsb= rx_data[0]; // get LSB 00096 msb= rx_data[1]&0x03; // need only 2 low bits og MSB 00097 value = ((msb & 0x03)<<8) + lsb; 00098 // pc.printf("I2C adres= 0x%02X, Magnetic Field => msb= 0x%02X, lsb= 0x%02X, decimal 10-bit value = %u \r\n ", i2c_address, rx_data[0],rx_data[1], value); 00099 00100 }
Generated on Sat Jul 16 2022 06:11:12 by 1.7.2