MAX32625PICO LP0 mode

Dependencies:   SX1276GenericLib USBDevice

Fork of PICO_LP0 by Walter Luu

Committer:
walterluu
Date:
Mon Oct 12 21:55:22 2020 +0000
Revision:
3:85fc843a9d7d
Child:
5:9e751733a6f3
MAX20361 Demo Firmware version 1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
walterluu 3:85fc843a9d7d 1
walterluu 3:85fc843a9d7d 2 #include "mbed.h"
walterluu 3:85fc843a9d7d 3 #include "AO32_lib.h"
walterluu 3:85fc843a9d7d 4
walterluu 3:85fc843a9d7d 5 // *****************************************************************************
walterluu 3:85fc843a9d7d 6 // AO32_write_register(char, char, char) writes single byte to AO32
walterluu 3:85fc843a9d7d 7 // char I2C address
walterluu 3:85fc843a9d7d 8 // char AO32 register address
walterluu 3:85fc843a9d7d 9 // char data byte to be writen
walterluu 3:85fc843a9d7d 10 // returns 0 on success ACK, 1 on NACK
walterluu 3:85fc843a9d7d 11 // *****************************************************************************
walterluu 3:85fc843a9d7d 12
walterluu 3:85fc843a9d7d 13 int AO32_write_register(I2C *i2c, char I2C_add, char reg_add, char byte){
walterluu 3:85fc843a9d7d 14 char data[2]; // char type ranges from 0 to 255 (8 bytes)
walterluu 3:85fc843a9d7d 15 int error;
walterluu 3:85fc843a9d7d 16 data[0] = reg_add;
walterluu 3:85fc843a9d7d 17 data[1] = byte;
walterluu 3:85fc843a9d7d 18 error = i2c->write(I2C_add,data,2);
walterluu 3:85fc843a9d7d 19 //if(DEBUG)db.printf("wr[%02X %02X %d]\r\n", data[0], data[1], error);
walterluu 3:85fc843a9d7d 20 return error;
walterluu 3:85fc843a9d7d 21
walterluu 3:85fc843a9d7d 22 }
walterluu 3:85fc843a9d7d 23
walterluu 3:85fc843a9d7d 24 /// ****************************************************************************
walterluu 3:85fc843a9d7d 25 // AO32_write_register(char, char, char *, int) writes multiple bytes to AO32
walterluu 3:85fc843a9d7d 26 // char I2C address
walterluu 3:85fc843a9d7d 27 // char AO32 register address
walterluu 3:85fc843a9d7d 28 // char * data vector of bytes to be written
walterluu 3:85fc843a9d7d 29 // int number of bytes to write
walterluu 3:85fc843a9d7d 30 // returns 0 on success ACK, 1 on NACK
walterluu 3:85fc843a9d7d 31 // *****************************************************************************
walterluu 3:85fc843a9d7d 32
walterluu 3:85fc843a9d7d 33 int AO32_write_register(I2C *i2c, char I2C_add, char reg_add, char *bytes, int n){
walterluu 3:85fc843a9d7d 34 int i;
walterluu 3:85fc843a9d7d 35 //set start address
walterluu 3:85fc843a9d7d 36 char data[16];
walterluu 3:85fc843a9d7d 37 int error;
walterluu 3:85fc843a9d7d 38 data[0] = reg_add;
walterluu 3:85fc843a9d7d 39 for(i=1;i<=n;i++){
walterluu 3:85fc843a9d7d 40 data[i] = bytes[i-1];
walterluu 3:85fc843a9d7d 41 }
walterluu 3:85fc843a9d7d 42 error = i2c->write(I2C_add,data,n+1); // send n bytes of data
walterluu 3:85fc843a9d7d 43
walterluu 3:85fc843a9d7d 44 return error;
walterluu 3:85fc843a9d7d 45 }
walterluu 3:85fc843a9d7d 46
walterluu 3:85fc843a9d7d 47 // *****************************************************************************
walterluu 3:85fc843a9d7d 48 // AO32_read_register(char, char, char *) reads single byte from AO32
walterluu 3:85fc843a9d7d 49 // char I2C address
walterluu 3:85fc843a9d7d 50 // char AO32 register address
walterluu 3:85fc843a9d7d 51 // char * data vector for read bytes to be stored in
walterluu 3:85fc843a9d7d 52 // returns 0 on success, 1 on fail
walterluu 3:85fc843a9d7d 53 // *****************************************************************************
walterluu 3:85fc843a9d7d 54
walterluu 3:85fc843a9d7d 55 int AO32_read_register(I2C *i2c, char I2C_add, char reg_add, char *bytes){
walterluu 3:85fc843a9d7d 56 int error;
walterluu 3:85fc843a9d7d 57 error = i2c->write(I2C_add,&reg_add,1,1);
walterluu 3:85fc843a9d7d 58 if(error)return error;
walterluu 3:85fc843a9d7d 59 error = i2c->read(I2C_add,bytes,1);
walterluu 3:85fc843a9d7d 60 //if(DEBUG)db.printf("rr e[%d]\r\n",error);
walterluu 3:85fc843a9d7d 61 return error;
walterluu 3:85fc843a9d7d 62 }
walterluu 3:85fc843a9d7d 63
walterluu 3:85fc843a9d7d 64 // *****************************************************************************
walterluu 3:85fc843a9d7d 65 // AO32_read_register(char, char, char *, int) reads byte(s) from AO32
walterluu 3:85fc843a9d7d 66 // char I2C address
walterluu 3:85fc843a9d7d 67 // char OT07 register address
walterluu 3:85fc843a9d7d 68 // char * data vector for read bytes to be stored in
walterluu 3:85fc843a9d7d 69 // int number of bytes to read
walterluu 3:85fc843a9d7d 70 // returns 0 on success, 1 on fail
walterluu 3:85fc843a9d7d 71 // *****************************************************************************
walterluu 3:85fc843a9d7d 72
walterluu 3:85fc843a9d7d 73 int AO32_read_register(I2C *i2c, char I2C_add, char reg_add, char *bytes, int n){
walterluu 3:85fc843a9d7d 74 int error;
walterluu 3:85fc843a9d7d 75 error = i2c->write(I2C_add,&reg_add,1,1);
walterluu 3:85fc843a9d7d 76 if(error)return error;
walterluu 3:85fc843a9d7d 77 error = i2c->read(I2C_add,bytes,n);
walterluu 3:85fc843a9d7d 78 //if(DEBUG)db.printf("rr e[%d]\r\n",error);
walterluu 3:85fc843a9d7d 79 return error;
walterluu 3:85fc843a9d7d 80 }
walterluu 3:85fc843a9d7d 81
walterluu 3:85fc843a9d7d 82 //******************************************************************************
walterluu 3:85fc843a9d7d 83 // get_OCV(char) read Open Circuit Voltage from AO32 device register
walterluu 3:85fc843a9d7d 84 // char I2C address
walterluu 3:85fc843a9d7d 85 // returns VOCMeas VOCvalue = Open-Circuit Voltage Measurement in Volt
walterluu 3:85fc843a9d7d 86 // status = Status of OCV read. 0 for success, 1 for error
walterluu 3:85fc843a9d7d 87 //******************************************************************************
walterluu 3:85fc843a9d7d 88 VOCMeas get_OCV(I2C *i2c, char I2C_add) {
walterluu 3:85fc843a9d7d 89
walterluu 3:85fc843a9d7d 90 char data[2]; // only needs 1 byte
walterluu 3:85fc843a9d7d 91 double voltage;
walterluu 3:85fc843a9d7d 92
walterluu 3:85fc843a9d7d 93 // Read lux value, 2 bytes
walterluu 3:85fc843a9d7d 94 int error = AO32_read_register(i2c, I2C_add, AO32_VOC, data);
walterluu 3:85fc843a9d7d 95
walterluu 3:85fc843a9d7d 96 // Calculate Open Circuit Voltage from data
walterluu 3:85fc843a9d7d 97 voltage = int(data[0]) / 100;
walterluu 3:85fc843a9d7d 98
walterluu 3:85fc843a9d7d 99 VOCMeas resp;
walterluu 3:85fc843a9d7d 100 resp.VOCvalue = voltage;
walterluu 3:85fc843a9d7d 101 resp.status = error; // 1 for nack/error. 0 for ack/success
walterluu 3:85fc843a9d7d 102 return resp;
walterluu 3:85fc843a9d7d 103 }
walterluu 3:85fc843a9d7d 104
walterluu 3:85fc843a9d7d 105 //******************************************************************************
walterluu 3:85fc843a9d7d 106 // get_Harvest(char) read harvesting counts from AO32 device register
walterluu 3:85fc843a9d7d 107 // char I2C address
walterluu 3:85fc843a9d7d 108 // returns HarvCnt harvCount = Harvester Count "LX Pulses" in decimal
walterluu 3:85fc843a9d7d 109 // status = Status of harvesting count read. 0 for success, 1 for error
walterluu 3:85fc843a9d7d 110 //******************************************************************************
walterluu 3:85fc843a9d7d 111 HarvCnt get_Harvest(I2C *i2c, char I2C_add) {
walterluu 3:85fc843a9d7d 112
walterluu 3:85fc843a9d7d 113 char data[2];
walterluu 3:85fc843a9d7d 114 int countHi;
walterluu 3:85fc843a9d7d 115 int countLo;
walterluu 3:85fc843a9d7d 116 int counts;
walterluu 3:85fc843a9d7d 117
walterluu 3:85fc843a9d7d 118 // Read harvesting counts, 2 bytes
walterluu 3:85fc843a9d7d 119 int error = AO32_read_register(i2c, I2C_add, AO32_HARV_H, data, 2); // burst read AO32_HARV_H and AO32_HARV_L
walterluu 3:85fc843a9d7d 120
walterluu 3:85fc843a9d7d 121 // Calculate harvesting counts from data
walterluu 3:85fc843a9d7d 122 countHi = int(data[0] << 8); // might cause trouble, * 256 instead?
walterluu 3:85fc843a9d7d 123 countLo = int(data[1]);
walterluu 3:85fc843a9d7d 124 counts = countHi + countLo;
walterluu 3:85fc843a9d7d 125
walterluu 3:85fc843a9d7d 126 HarvCnt resp;
walterluu 3:85fc843a9d7d 127 resp.harvCount = counts;
walterluu 3:85fc843a9d7d 128 resp.status = error; // 1 for nack/error. 0 for ack/success
walterluu 3:85fc843a9d7d 129 return resp;
walterluu 3:85fc843a9d7d 130 }
walterluu 3:85fc843a9d7d 131
walterluu 3:85fc843a9d7d 132
walterluu 3:85fc843a9d7d 133 //******************************************************************************
walterluu 3:85fc843a9d7d 134 // get_luxvalue(char) read lux value from AO32 device register
walterluu 3:85fc843a9d7d 135 // char I2C address
walterluu 3:85fc843a9d7d 136 // returns LuxResponse luxValue = light intensity in lux
walterluu 3:85fc843a9d7d 137 // status = register read result
walterluu 3:85fc843a9d7d 138 //******************************************************************************
walterluu 3:85fc843a9d7d 139
walterluu 3:85fc843a9d7d 140 //LuxResponse get_luxvalue(I2C *i2c, char I2C_add){
walterluu 3:85fc843a9d7d 141 // char data[2]; // 2 bytes of raw Lux Register
walterluu 3:85fc843a9d7d 142 // double lux;
walterluu 3:85fc843a9d7d 143 //// int count;
walterluu 3:85fc843a9d7d 144 //
walterluu 3:85fc843a9d7d 145 // // Read lux value, 2 bytes
walterluu 3:85fc843a9d7d 146 // int error = AO32_read_lux_register(i2c, I2C_add, AO32_LUX_HI, data);
walterluu 3:85fc843a9d7d 147 //
walterluu 3:85fc843a9d7d 148 // //calculate lux from data
walterluu 3:85fc843a9d7d 149 //// count = (int)(data[0]*256 + data[1]);
walterluu 3:85fc843a9d7d 150 //// if (count >= 32768)count = count - 65536; // 2s comp
walterluu 3:85fc843a9d7d 151 //// T = (double)count*0.005;
walterluu 3:85fc843a9d7d 152 //
walterluu 3:85fc843a9d7d 153 // int exponent;
walterluu 3:85fc843a9d7d 154 // int mantissa;
walterluu 3:85fc843a9d7d 155 // exponent = data[0] >> 4;
walterluu 3:85fc843a9d7d 156 // mantissa = (data[0] << 4) + data[1];
walterluu 3:85fc843a9d7d 157 // lux = 0.045 * mantissa * pow(2, exponent);
walterluu 3:85fc843a9d7d 158 //
walterluu 3:85fc843a9d7d 159 // LuxResponse resp;
walterluu 3:85fc843a9d7d 160 // resp.luxValue = lux;
walterluu 3:85fc843a9d7d 161 // resp.status = error; // 1 for nack/error. 0 for ack/success
walterluu 3:85fc843a9d7d 162 // return resp;
walterluu 3:85fc843a9d7d 163 //}