MAX32625PICO LP1 mode

Dependencies:   SX1276GenericLib USBDevice

Fork of PICO_LP1 by Walter Luu

Committer:
walterluu
Date:
Fri Oct 16 06:46:00 2020 +0000
Revision:
7:8875c4d513bb
Parent:
5:9e751733a6f3
MAX32625PICO LP1 mode;

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 5:9e751733a6f3 122 // countHi = int(data[0] << 8); // might cause trouble, * 256 instead?
walterluu 5:9e751733a6f3 123 countHi = int(data[0]) * 256;
walterluu 3:85fc843a9d7d 124 countLo = int(data[1]);
walterluu 3:85fc843a9d7d 125 counts = countHi + countLo;
walterluu 3:85fc843a9d7d 126
walterluu 3:85fc843a9d7d 127 HarvCnt resp;
walterluu 3:85fc843a9d7d 128 resp.harvCount = counts;
walterluu 3:85fc843a9d7d 129 resp.status = error; // 1 for nack/error. 0 for ack/success
walterluu 3:85fc843a9d7d 130 return resp;
walterluu 3:85fc843a9d7d 131 }
walterluu 3:85fc843a9d7d 132
walterluu 5:9e751733a6f3 133 double calc_OCV(char *data) {
walterluu 5:9e751733a6f3 134
walterluu 5:9e751733a6f3 135 // data is an array of size 2, only needs the first byte
walterluu 5:9e751733a6f3 136
walterluu 5:9e751733a6f3 137 double voltage = (double)(data[0]) / 100;
walterluu 5:9e751733a6f3 138
walterluu 5:9e751733a6f3 139 return voltage;
walterluu 5:9e751733a6f3 140
walterluu 5:9e751733a6f3 141 }
walterluu 3:85fc843a9d7d 142
walterluu 5:9e751733a6f3 143 int calc_Harvest(char *data) {
walterluu 5:9e751733a6f3 144
walterluu 5:9e751733a6f3 145 // data is an array of size 2
walterluu 5:9e751733a6f3 146
walterluu 5:9e751733a6f3 147 int countHi = int(data[0]) * 256;
walterluu 5:9e751733a6f3 148 int countLo = int(data[1]);
walterluu 5:9e751733a6f3 149 int harvest_counts = countHi + countLo;
walterluu 5:9e751733a6f3 150
walterluu 5:9e751733a6f3 151 return harvest_counts;
walterluu 5:9e751733a6f3 152
walterluu 5:9e751733a6f3 153 }