I2C&ThermalSensor
Dependents: COG4050_blink COG4050_adxl35x_adxrs290 COG4050_adxrs290_adxrs453 COG4050_adxl355_adxl357 ... more
main.cpp
- Committer:
- APS_Lab
- Date:
- 2019-05-14
- Revision:
- 1:0901bc032f82
- Parent:
- 0:74a0756399ff
File content as of revision 1:0901bc032f82:
#include "mbed.h" #define ADT7420 0x48 #define RESET_REG 0x2F #define TEMP_REG 0x00 #define ID_REG 0x0B DigitalOut led1(LED1); DigitalOut sensor(D8); I2C Myi2c(I2C_SDA, I2C_SCL); Serial pc(USBTX, USBRX); void ADT7420_reset(void); char ADT7420_GetID(void); int ADT7420_GetTemp(void); int ADT7420_RegDump(void); char ALLREG[16]; // main() runs in its own thread in the OS int main() { float status; int res; sensor=1; //configure for UART pc.baud(115200); pc.printf("I2C ADT7420 Demo\n"); //configure for I2C @100KHz //Myi2c.init(); Myi2c.frequency(10000); //configure for ADT7420 Myi2c.lock(); pc.printf("[RESET ] ADT7420\n"); ADT7420_reset(); wait(0.5); pc.printf("[CHECK ID] ADT7420\n"); ADT7420_GetID(); while (true) { led1 = 0; pc.printf("[Get Temp] ADT7420\n"); res = ADT7420_GetTemp(); if(res & 0x1000) { status = (float)(res * 0.0625 * -1.0); } else { status = (float)(res * 0.0625); } pc.printf("Current Temp %.4f C\n", status); wait(0.5); led1 = 1; wait(0.5); ADT7420_RegDump(); } } void ADT7420_reset(void) { char cmd_reset; cmd_reset = RESET_REG; Myi2c.write(ADT7420); if(Myi2c.write(0xFF)) { pc.printf("Ack \n"); } else { pc.printf("Nack \n"); } Myi2c.write(ADT7420); if(Myi2c.write(cmd_reset)) { pc.printf("Reset Done\n"); } else { pc.printf("Reset Failure\n"); } } char ADT7420_GetID(void) { char cmd_id, read_val; int sts; cmd_id=ID_REG; //Myi2c.write(ADT7420, &cmd_id, 1, 0); sts = Myi2c.read(ADT7420, &cmd_id, 1, 0); if(sts==0) { pc.printf("ID ACK\n"); } else { pc.printf("ID NACK\n"); pc.printf("Return Value STS %d \n", sts); } Myi2c.stop(); pc.printf("ID REG %02x\n", cmd_id); return cmd_id; } int ADT7420_GetTemp(void) { char cmd_temp[1], read_val[2]; int temp=0; cmd_temp[0]=TEMP_REG; Myi2c.start(); Myi2c.write(ADT7420, cmd_temp, 2); wait(0.2); Myi2c.read(ADT7420, read_val, 3); pc.printf("Temp Upper %02x\n", read_val[0]); pc.printf("Temp Lower %02x\n", read_val[1]); temp = (int)((read_val[0] << 8) | read_val[1]); temp >>= 3; return temp; } int ADT7420_RegDump(void) { int idx, result, status; char reg[1], data[16]; reg[0]=0x09; Myi2c.write(ADT7420,reg, 1, 0); wait(0.5); status = Myi2c.read(ADT7420, data, sizeof(data)); //if(status > 10) { for(idx=0; idx < 16; idx++) { pc.printf("Reg ID %d : Reg Val %02x\n", idx+4, data[idx]); } //} //else //{ // pc.printf("Return value %d\n", status); //} //return 0; }