Nemanja Neskovic
/
I2c
Q
Revision 0:d66d4aaa919f, committed 2019-03-14
- Comitter:
- nemanja1994
- Date:
- Thu Mar 14 18:10:31 2019 +0000
- Commit message:
- Gg
Changed in this revision
diff -r 000000000000 -r d66d4aaa919f main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Mar 14 18:10:31 2019 +0000 @@ -0,0 +1,162 @@ +#include "mbed.h" + +#define IrThermo_Addr (0x5A<<1) +#define Tamb 0x06 +#define Tobj 0x07 + +I2C i2c(D14, D15); +DigitalOut myled(LED1); +Serial console(SERIAL_TX, SERIAL_RX); + +int temperature=0; +char data_read[2]; +char data_write[1]= {Tobj}; +char data_add[1]= {(0x2E)}; + +void changeAddress() +{ + //char newAddr[2]= {0x5E,0x00}; + char p1,p2; + bool ch,ch2,ch3; + + //----read address to make sure it worked------------ + + // send start bit + i2c.start(); + // send universal address + ch = i2c.write(0x00); + // prints if sensor acknowledges + if (!ch) console.printf("no ack\n"); + else console.printf("ack\n"); + // send EEPROM slave location address + ch2 = i2c.write(0x2E); + // send repeated start + i2c.start(); + // send universal address 0x00 (seven bit) and use 1 as the eight bit -> 0x01 + i2c.write(0x01); // last bit 1 indicates read request + // read LSB + p1 = i2c.read(1); + // read MSB + p2 = i2c.read(1); + // read PEC + i2c.read(0); + // release the bus + i2c.stop(); + wait(0.1); + // print hex + console.printf("0x%x%x\nMSB 0x%x, LSB 0x%x\n", p2, p1, p2, p1); + wait(10); + + + // make sure i2c is inactive + i2c.stop(); + wait(0.1); + //send start bit + i2c.start(); + // address the sensor using universal address 0x00 not its default 0x5A + ch = i2c.write(0x00); // last bit 0 indicates write + // prints if sensor acknowledges + if (!ch) { + console.printf("no ack\n"); + } else console.printf("ack 0x00\n"); + // write command + // EEPROM address. Datasheet says 0x0E BUT!!! accessing EEPROM requires ading 0x20. Hence, 0x2E + ch2 = i2c.write(0x2E); + // prints if sensor acknowledges + if (!ch2) console.printf("no ack address location\n"); + console.printf("ack 0x0E\n"); + // delete old address + // LSB + i2c.write(0x00); + // MSB + i2c.write(0x00); + // use CRC-8 calculator to obtain PEC bit http://www.sunshine2k.de/coding/javascript/crc/crc_js.html + // I send 2E0000 --> PEC 0x6F + ch3 = i2c.write(0x6F); + // prints if sensor acknowledges + if(!ch3) console.printf("no PEC\n"); + else console.printf("PEC success\n"); + // release the bus + i2c.stop(); + wait(1); + +//-----set new address---------------- + + // send start bit + i2c.start(); + // send universal device address 0x00 + i2c.write(0x00); + // prints if sensor acknowledges + if (!ch) console.printf("no ack\n"); + else console.printf("ack\n"); + // send EEPROM location for slave address + ch2 = i2c.write(0x2E); + // prints if sensor acknowledges + if (!ch2) console.printf("no ack slave address location\n"); + else console.printf("ack 2\n"); + //write new address anything between 0x0000 and 0x007F (default 0x5A, PEC 0xE1) + // LSB + i2c.write(0x04); + // MSB + i2c.write(0x00); + // send PEC calculated from CRC-8 + // I send 2E0400 -> PEC 0x3B + i2c.write(0x3B); + // release the bus + i2c.stop(); + wait(1); + +//----read address to make sure it worked------------ + + // send start bit + i2c.start(); + // send universal address + ch = i2c.write(0x00); + // prints if sensor acknowledges + if (!ch) console.printf("no ack\n"); + else console.printf("ack\n"); + // send EEPROM slave location address + ch2 = i2c.write(0x2E); + // send repeated start + i2c.start(); + // send universal address 0x00 (seven bit) and use 1 as the eight bit -> 0x01 + i2c.write(0x01); // last bit 1 indicates read request + // read LSB + p1 = i2c.read(1); + // read MSB + p2 = i2c.read(1); + // read PEC + i2c.read(0); + // release the bus + i2c.stop(); + wait(0.1); + // print hex + console.printf("0x%x%x\nMSB 0x%x, LSB 0x%x\n", p2, p1, p2, p1); + wait(10); +} + +int main() +{ + console.printf("IrThermo Test\n"); + i2c.write(IrThermo_Addr, data_add, 1, 1); + i2c.read(IrThermo_Addr, data_read, 2, 0); + console.printf("Sensor Address: %x\n",data_read[0]); + //changeAddress(); + + while(1) { + i2c.write(IrThermo_Addr, data_write, 1, 1); + i2c.read(IrThermo_Addr, data_read, 2, 0); + + console.printf("Raw Data: %x %x\n",(data_read[0]), (data_read[1])); + temperature = (int) ((int)data_read[1] << 8) | data_read[0]; + temperature = (temperature * 0.02 - 273.15); + if (data_write[0]==Tamb) { + console.printf("Ambient temperature= %d\n", temperature); + } else { + console.printf("Object temperature= %d\n", temperature); + } + myled = !myled; + wait(1.0); + } + +}
diff -r 000000000000 -r d66d4aaa919f mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Mar 14 18:10:31 2019 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/mbed_official/code/mbed/builds/235179ab3f27 \ No newline at end of file
diff -r 000000000000 -r d66d4aaa919f sdfs.h