Marek Trojan
/
_8_KL46_M_simple_write
program for I2C master device
Fork of I2C_HelloWorld_Mbed by
main.cpp
- Committer:
- marcus255
- Date:
- 2015-12-16
- Revision:
- 8:3e6945d5d9a1
- Parent:
- 7:b07706b16279
- Child:
- 9:36fc715eb54c
File content as of revision 8:3e6945d5d9a1:
// I2C Master #include "main.h" int main() { init(); wait_ms(1000); while (1) {} } void write_and_read(){ /* write_data(); wait_ms(20); char regaddr = 0x24; read_data(®addr); // works OK (pure read, without pointer setting)*/ rtc_sensor(); } void rtc_sensor() { char temperature[2]; get_temperature_raw(temperature); float result = proceed_temperature(temperature); pc.printf("<Temperature: %1.2f\n\r",result); wait_ms(20); } void get_temperature_raw(char* temperature) { char reg_addr = TEMPERATURE_REGISTER; if(i2c.write(RTC_ADDR, ®_addr, 1)) pc.printf("Writing: Error\n\r"); wait_ms(20); if(i2c.read(RTC_ADDR, temperature, 2)) pc.printf("Reading: Error\n\r"); } float proceed_temperature(char * temperature) { char MSB = temperature[0]; // MSB is a signed int8 and carries temperature in accuracy 1 Celsius degree char LSB = temperature[1]; // LSB carries fraction part of temperature. Possible values are 0, 0.25, 0.5, 0.75 float high = (float)MSB; float low = ((float)((uint8_t)LSB >> 6) * 0.25f); return high + low; } void write_data(){ //writing to slave int write_ack = i2c.write(SLAVE_ADDR, data, DATA_SIZE); if (!write_ack) { //i2c.stop(); pc.printf("<Writing> OK\n\r"); } else pc.printf("<Writing> Error\n\r"); //wait_ms(20); } void read_data(char* cell_addr){ /*int write_ack = i2c.write(SLAVE_ADDR, cell_addr, 1); if (!write_ack) { //i2c.stop(); pc.printf("<Addressing> OK\n\r"); } else { pc.printf("<Addressing> Error\n\r"); return; } //wait_ms(5); */ //reading from slave char fromSlave[DATA_SIZE + 1]; int read_ack = i2c.read(SLAVE_ADDR, fromSlave, DATA_SIZE); if (!read_ack) { //i2c.stop(); pc.printf("<Reading> OK\n\r"); fromSlave[DATA_SIZE] = '\0'; pc.printf("Data from Slave: %s\n\n\r", fromSlave); } else pc.printf("<Reading> Error\n\r"); } /* void i2cReadWrite(void){ for(int a = 0; a < MSG_SIZE; a++) fromSlave[a] = 0; int ack = i2c.write(SLAVE_ADDR, data, strlen(data)); if (!ack) pc.printf("data send to slave\n\r"); else pc.printf("NACK!\n\r"); wait(0.1); int read_ack = i2c.read(SLAVE_ADDR, fromSlave, MSG_SIZE - 1); if (!read_ack) pc.printf("data received from slave\n\r"); else pc.printf("data not received\n\r"); pc.printf("Data from Slave: %s\n\r", fromSlave); for(int y = 0; y < 32; y++) fromSlave[y]='x'; }*/ void init(void){ i2c.frequency(100000); i2c_ticker.attach(&write_and_read, 2.0f); pc.baud(921600); //pc.printf("Master says: Hello World!\n\r"); for (uint8_t i = 0; i < DATA_SIZE; i++) data[i] = i+65; //data[0]=0; }