Test

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /* mbed Microcontroller Library
00002  * Copyright (c) 2018 ARM Limited
00003  * SPDX-License-Identifier: Apache-2.0
00004  */
00005 
00006 #include "mbed.h"
00007 #include "stats_report.h"
00008 
00009 #define ADT7420 0x48
00010 
00011 #define RESET_REG 0x2F
00012 #define TEMP_REG 0x00
00013 #define ID_REG 0x0B
00014 
00015 
00016 DigitalOut led1(LED1);
00017 DigitalOut sensor(D8);
00018 
00019 I2C Myi2c(I2C_SDA, I2C_SCL);
00020 
00021 Serial pc(USBTX, USBRX);
00022 
00023 void ADT7420_reset(void);
00024 char ADT7420_GetID(void);
00025 int ADT7420_GetTemp(void);
00026 
00027 int main() {
00028     float status;
00029     int res;
00030     sensor=1;
00031     //configure for UART
00032     pc.baud(115200);
00033     pc.printf("I2C ADT7420 Demo\n");
00034    
00035     //configure for I2C @100KHz
00036     //Myi2c.init();
00037     Myi2c.frequency(10000);
00038    
00039     //configure for ADT7420
00040     Myi2c.lock();
00041     pc.printf("[RESET ] ADT7420\n"); 
00042     ADT7420_reset();
00043     wait(0.5);
00044 
00045     pc.printf("[CHECK ID] ADT7420\n"); 
00046     ADT7420_GetID();
00047 
00048     
00049     while (true) {
00050         led1 = 0;
00051         
00052         pc.printf("[Get Temp] ADT7420\n"); 
00053         res = ADT7420_GetTemp();
00054         
00055         if(res & 0x1000)
00056         {
00057             status = (float)(res * 0.0625 * -1.0);
00058             
00059         }
00060         else
00061         {
00062             status = (float)(res * 0.0625);
00063         }
00064         
00065         pc.printf("Current Temp %.4f C\n", status);
00066             
00067         wait(0.5);
00068         led1 = 1;
00069         wait(0.5);
00070     }
00071     
00072 }
00073 
00074 void ADT7420_reset(void)
00075 {
00076     char cmd_reset;
00077     cmd_reset = RESET_REG;
00078     Myi2c.write(ADT7420);
00079     if(Myi2c.write(0xFF))
00080     {
00081         pc.printf("Ack \n");
00082     }
00083     else
00084     {
00085         pc.printf("Nack \n");
00086     }
00087     
00088     Myi2c.write(ADT7420);
00089     if(Myi2c.write(cmd_reset))
00090     {
00091         pc.printf("Reset Done\n");
00092     }
00093     else
00094     {
00095         pc.printf("Reset Failure\n");
00096     }
00097 }
00098     
00099 char ADT7420_GetID(void)
00100 {
00101     char cmd_id, read_val;
00102     int sts;
00103     cmd_id=ID_REG;
00104     //Myi2c.write(ADT7420, &cmd_id, 1, 0);
00105     sts = Myi2c.read(ADT7420, &cmd_id, 1, 0);
00106     if(sts==0)
00107     {
00108         pc.printf("ID ACK\n");
00109     }
00110     else
00111     {
00112         pc.printf("ID NACK\n");
00113         pc.printf("Return Value STS %d \n", sts);
00114     }
00115     Myi2c.stop();
00116     pc.printf("ID REG %02x\n", cmd_id);
00117     return cmd_id;
00118 }
00119 
00120 int ADT7420_GetTemp(void)
00121 {
00122     char cmd_temp[1], read_val[2];
00123     int temp=0;
00124     cmd_temp[0]=TEMP_REG;
00125     Myi2c.start();
00126     Myi2c.write(ADT7420, cmd_temp, 2);
00127     wait(0.2);
00128     Myi2c.read(ADT7420, read_val, 3);
00129     pc.printf("Temp Upper %02x\n", read_val[0]);
00130     pc.printf("Temp Lower %02x\n", read_val[1]);
00131     
00132     temp = (int)((read_val[0] << 8) | read_val[1]);
00133     temp >>= 3;
00134     return temp;
00135 }