MAX20361 Demo with LoRa Module on LP0 mode

Dependencies:   SX1276GenericLib USBDevice

Fork of NonPingPong_PICO_LoRa_LP0 by Walter Luu

Committer:
walterluu
Date:
Fri Oct 16 06:50:42 2020 +0000
Revision:
7:c0872971aef4
Parent:
5:9e751733a6f3
MAX20361 Demo with LoRa Module on LP0 mode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
walterluu 3:85fc843a9d7d 1 #include "mbed.h"
walterluu 3:85fc843a9d7d 2
walterluu 3:85fc843a9d7d 3 //AO32 Registers
walterluu 3:85fc843a9d7d 4 #define AO32_DEVICE_ID 0x00 // AO32 Chip ID
walterluu 3:85fc843a9d7d 5 #define AO32_STATUS 0x01 // AO32 Status Register
walterluu 3:85fc843a9d7d 6 #define AO32_INT 0x02 // AO32 Interrupt Register
walterluu 3:85fc843a9d7d 7 #define AO32_INT_MSK 0x03 // AO32 Interrupt Mask Register
walterluu 3:85fc843a9d7d 8 #define AO32_SYS_CFG 0x04 // AO32 SYS configuration
walterluu 3:85fc843a9d7d 9 #define AO32_WK_CFG 0x05 // AO32 Wake configuration
walterluu 3:85fc843a9d7d 10 #define AO32_MPPT_CFG 0x06 // AO32 Maxim Power Point Tracking configuration
walterluu 3:85fc843a9d7d 11 #define AO32_MEAS_CFG 0x07 // AO32 Measurement configuration
walterluu 3:85fc843a9d7d 12 #define AO32_DEV_CTRL 0x08 // AO32 Device Control
walterluu 3:85fc843a9d7d 13 #define AO32_VOC 0x09 // AO32 VOC Measurement
walterluu 3:85fc843a9d7d 14 #define AO32_HARV_H 0x0A // AO32 Harvesting count High byte
walterluu 3:85fc843a9d7d 15 #define AO32_HARV_L 0x0B // AO32 Harvesting count Low byte
walterluu 3:85fc843a9d7d 16 #define AO32_SLP 0x0C // AO32 Sleep threshold
walterluu 3:85fc843a9d7d 17
walterluu 3:85fc843a9d7d 18
walterluu 3:85fc843a9d7d 19 #define DEVICE_ACK 0
walterluu 3:85fc843a9d7d 20 #define DEVICE_NACK 1
walterluu 3:85fc843a9d7d 21 #define DEVICE_BAD_RESP 2
walterluu 3:85fc843a9d7d 22
walterluu 3:85fc843a9d7d 23 #define MAX_DEVICES 64 // Maximum number of rom devices allowed
walterluu 3:85fc843a9d7d 24 #define ID_LENGTH 6 // Rom ID length in bytes
walterluu 3:85fc843a9d7d 25
walterluu 3:85fc843a9d7d 26 struct AO32_struct {
walterluu 3:85fc843a9d7d 27 char rom_id[ID_LENGTH]; // device ROM ID
walterluu 3:85fc843a9d7d 28 char I2C_address; // I2C addess, based on GPIO0 and GPIO1 at power up
walterluu 3:85fc843a9d7d 29 // Why char?
walterluu 3:85fc843a9d7d 30 };
walterluu 3:85fc843a9d7d 31
walterluu 3:85fc843a9d7d 32 struct VOCMeas {
walterluu 3:85fc843a9d7d 33 double VOCvalue; // Open-Circuit Voltage Measurement in Volt
walterluu 3:85fc843a9d7d 34 int status; // Status of OCV read. 0 for success, 1 for error
walterluu 3:85fc843a9d7d 35 };
walterluu 3:85fc843a9d7d 36
walterluu 3:85fc843a9d7d 37 struct HarvCnt {
walterluu 3:85fc843a9d7d 38 double harvCount; // Harvester Count "LX Pulses" in decimal
walterluu 3:85fc843a9d7d 39 int status; // Status of harvesting count read. 0 for success, 1 for error
walterluu 3:85fc843a9d7d 40 };
walterluu 3:85fc843a9d7d 41
walterluu 3:85fc843a9d7d 42 // *****************************************************************************
walterluu 3:85fc843a9d7d 43 // AO32_write_register(char, char, char) writes single byte to AO32
walterluu 3:85fc843a9d7d 44 // char I2C address
walterluu 3:85fc843a9d7d 45 // char AO32 register address
walterluu 3:85fc843a9d7d 46 // char data byte to be writen
walterluu 3:85fc843a9d7d 47 // returns 0 on success ACK, 1 on NACK
walterluu 3:85fc843a9d7d 48 // *****************************************************************************
walterluu 3:85fc843a9d7d 49 int AO32_write_register(I2C *i2c, char I2C_add, char reg_add, char byte);
walterluu 3:85fc843a9d7d 50
walterluu 3:85fc843a9d7d 51 /// ****************************************************************************
walterluu 3:85fc843a9d7d 52 // AO32_write_register(char, char, char *, int) writes multiple bytes to AO32
walterluu 3:85fc843a9d7d 53 // char I2C address
walterluu 3:85fc843a9d7d 54 // char AO32 register address
walterluu 3:85fc843a9d7d 55 // char * data vector of bytes to be written
walterluu 3:85fc843a9d7d 56 // int number of bytes to write
walterluu 3:85fc843a9d7d 57 // returns 0 on success ACK, 1 on NACK
walterluu 3:85fc843a9d7d 58 // *****************************************************************************
walterluu 3:85fc843a9d7d 59 int AO32_write_register(I2C *i2c, char I2C_add, char reg_add, char *bytes, int n);
walterluu 3:85fc843a9d7d 60
walterluu 3:85fc843a9d7d 61 // *****************************************************************************
walterluu 3:85fc843a9d7d 62 // AO32_read_register(char, char, char *) reads single byte from AO32
walterluu 3:85fc843a9d7d 63 // char I2C address
walterluu 3:85fc843a9d7d 64 // char AO32 register address
walterluu 3:85fc843a9d7d 65 // char * data vector for read bytes to be stored in
walterluu 3:85fc843a9d7d 66 // returns 0 on success, 1 on fail
walterluu 3:85fc843a9d7d 67 // *****************************************************************************
walterluu 3:85fc843a9d7d 68 int AO32_read_register(I2C *i2c, char I2C_add, char reg_add, char *bytes);
walterluu 3:85fc843a9d7d 69
walterluu 3:85fc843a9d7d 70 // *****************************************************************************
walterluu 3:85fc843a9d7d 71 // AO32_read_register(char, char, char *, int) reads byte(s) from AO32
walterluu 3:85fc843a9d7d 72 // char I2C address
walterluu 3:85fc843a9d7d 73 // char OT07 register address
walterluu 3:85fc843a9d7d 74 // char * data vector for read bytes to be stored in
walterluu 3:85fc843a9d7d 75 // int number of bytes to read
walterluu 3:85fc843a9d7d 76 // returns 0 on success, 1 on fail
walterluu 3:85fc843a9d7d 77 // *****************************************************************************
walterluu 3:85fc843a9d7d 78 int AO32_read_register(I2C *i2c, char I2C_add, char reg_add, char *bytes, int n);
walterluu 3:85fc843a9d7d 79
walterluu 3:85fc843a9d7d 80 //******************************************************************************
walterluu 3:85fc843a9d7d 81 // get_luxvalue(char) read lux value from AO32 device register
walterluu 3:85fc843a9d7d 82 // char I2C address
walterluu 3:85fc843a9d7d 83 // returns LuxResponse luxValue = light intensity in lux
walterluu 3:85fc843a9d7d 84 // status = register read result
walterluu 3:85fc843a9d7d 85 //******************************************************************************
walterluu 3:85fc843a9d7d 86 //LuxResponse get_luxvalue(I2C *i2c, char I2C_add);
walterluu 3:85fc843a9d7d 87
walterluu 3:85fc843a9d7d 88 //******************************************************************************
walterluu 3:85fc843a9d7d 89 // get_OCV(char) read Open Circuit Voltage from AO32 device register
walterluu 3:85fc843a9d7d 90 // char I2C address
walterluu 3:85fc843a9d7d 91 // returns VOCMeas VOCvalue = Open-Circuit Voltage Measurement in Volt
walterluu 3:85fc843a9d7d 92 // status = Status of OCV read. 0 for success, 1 for error
walterluu 3:85fc843a9d7d 93 //******************************************************************************
walterluu 3:85fc843a9d7d 94 VOCMeas get_OCV(I2C *i2c, char I2C_add);
walterluu 3:85fc843a9d7d 95
walterluu 3:85fc843a9d7d 96 //******************************************************************************
walterluu 3:85fc843a9d7d 97 // get_Harvest(char) read harvesting counts from AO32 device register
walterluu 3:85fc843a9d7d 98 // char I2C address
walterluu 3:85fc843a9d7d 99 // returns HarvCnt harvCount = Harvester Count "LX Pulses" in decimal
walterluu 3:85fc843a9d7d 100 // status = Status of harvesting count read. 0 for success, 1 for error
walterluu 3:85fc843a9d7d 101 //******************************************************************************
walterluu 5:9e751733a6f3 102 HarvCnt get_Harvest(I2C *i2c, char I2C_add);
walterluu 5:9e751733a6f3 103
walterluu 5:9e751733a6f3 104 double calc_OCV(char *data);
walterluu 5:9e751733a6f3 105
walterluu 5:9e751733a6f3 106 int calc_Harvest(char *data);