MAX77801 Demo. The MAX77801 is a high-current, high-efficiency buck-boost regulator and features I2C-compatible, 2-wire serial interface consisting of a bidirectional serial-data line (SDA) and a serial-clock line (SCL). Datasheet: https://datasheets.maximintegrated.com/en/ds/MAX77801.pdf Tested using MAX32630FTHR. This Demo simply provides the test interface via USB Serial port.

Dependencies:   USBDevice max32630fthr max77801 mbed

Fork of MAX77801_Demo by Daniel Geonsi Jeong

Committer:
daniel_gs_jeong
Date:
Tue Nov 21 05:56:50 2017 +0000
Revision:
1:8b8008d86265
Parent:
0:c1437a5e420b
updated max32630fthr

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daniel_gs_jeong 0:c1437a5e420b 1 /**********************************************************************
daniel_gs_jeong 0:c1437a5e420b 2 * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
daniel_gs_jeong 0:c1437a5e420b 3 *
daniel_gs_jeong 0:c1437a5e420b 4 * Permission is hereby granted, free of charge, to any person obtaining a
daniel_gs_jeong 0:c1437a5e420b 5 * copy of this software and associated documentation files (the "Software"),
daniel_gs_jeong 0:c1437a5e420b 6 * to deal in the Software without restriction, including without limitation
daniel_gs_jeong 0:c1437a5e420b 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
daniel_gs_jeong 0:c1437a5e420b 8 * and/or sell copies of the Software, and to permit persons to whom the
daniel_gs_jeong 0:c1437a5e420b 9 * Software is furnished to do so, subject to the following conditions:
daniel_gs_jeong 0:c1437a5e420b 10 *
daniel_gs_jeong 0:c1437a5e420b 11 * The above copyright notice and this permission notice shall be included
daniel_gs_jeong 0:c1437a5e420b 12 * in all copies or substantial portions of the Software.
daniel_gs_jeong 0:c1437a5e420b 13 *
daniel_gs_jeong 0:c1437a5e420b 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
daniel_gs_jeong 0:c1437a5e420b 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
daniel_gs_jeong 0:c1437a5e420b 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
daniel_gs_jeong 0:c1437a5e420b 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
daniel_gs_jeong 0:c1437a5e420b 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
daniel_gs_jeong 0:c1437a5e420b 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
daniel_gs_jeong 0:c1437a5e420b 20 * OTHER DEALINGS IN THE SOFTWARE.
daniel_gs_jeong 0:c1437a5e420b 21 *
daniel_gs_jeong 0:c1437a5e420b 22 * Except as contained in this notice, the name of Maxim Integrated
daniel_gs_jeong 0:c1437a5e420b 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
daniel_gs_jeong 0:c1437a5e420b 24 * Products, Inc. Branding Policy.
daniel_gs_jeong 0:c1437a5e420b 25 *
daniel_gs_jeong 0:c1437a5e420b 26 * The mere transfer of this software does not imply any licenses
daniel_gs_jeong 0:c1437a5e420b 27 * of trade secrets, proprietary technology, copyrights, patents,
daniel_gs_jeong 0:c1437a5e420b 28 * trademarks, maskwork rights, or any other form of intellectual
daniel_gs_jeong 0:c1437a5e420b 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
daniel_gs_jeong 0:c1437a5e420b 30 * ownership rights.
daniel_gs_jeong 0:c1437a5e420b 31 **********************************************************************/
daniel_gs_jeong 0:c1437a5e420b 32
daniel_gs_jeong 0:c1437a5e420b 33
daniel_gs_jeong 0:c1437a5e420b 34 #include "mbed.h"
daniel_gs_jeong 0:c1437a5e420b 35 #include "max77801.h"
daniel_gs_jeong 0:c1437a5e420b 36 #include "USBSerial.h"
daniel_gs_jeong 0:c1437a5e420b 37
daniel_gs_jeong 0:c1437a5e420b 38 // Virtual serial port over USB
daniel_gs_jeong 0:c1437a5e420b 39 USBSerial microUSB;
daniel_gs_jeong 0:c1437a5e420b 40
daniel_gs_jeong 0:c1437a5e420b 41 int main()
daniel_gs_jeong 0:c1437a5e420b 42 {
daniel_gs_jeong 0:c1437a5e420b 43 int c;
daniel_gs_jeong 0:c1437a5e420b 44 int32_t rData;
daniel_gs_jeong 0:c1437a5e420b 45 double vout_l = 3.3000;
daniel_gs_jeong 0:c1437a5e420b 46 double vout_h = 3.7500;
daniel_gs_jeong 0:c1437a5e420b 47
daniel_gs_jeong 0:c1437a5e420b 48 DigitalOut rLED(LED1, LED_OFF);
daniel_gs_jeong 0:c1437a5e420b 49 DigitalOut gLED(LED2, LED_OFF);
daniel_gs_jeong 0:c1437a5e420b 50 DigitalOut bLED(LED3, LED_OFF);
daniel_gs_jeong 0:c1437a5e420b 51
daniel_gs_jeong 0:c1437a5e420b 52 I2C i2cBus(P5_7, P6_0);
daniel_gs_jeong 0:c1437a5e420b 53 i2cBus.frequency(400000);
daniel_gs_jeong 0:c1437a5e420b 54
daniel_gs_jeong 0:c1437a5e420b 55 MAX77801 max77801(&i2cBus);
daniel_gs_jeong 0:c1437a5e420b 56 wait_ms(100);
daniel_gs_jeong 0:c1437a5e420b 57
daniel_gs_jeong 0:c1437a5e420b 58 rData = max77801.init();
daniel_gs_jeong 0:c1437a5e420b 59 if(rData<0)
daniel_gs_jeong 0:c1437a5e420b 60 {
daniel_gs_jeong 0:c1437a5e420b 61 microUSB.printf("MAX77801 Fail to Init. Stopped\r\n");
daniel_gs_jeong 0:c1437a5e420b 62 rLED = true;
daniel_gs_jeong 0:c1437a5e420b 63 }
daniel_gs_jeong 0:c1437a5e420b 64 else
daniel_gs_jeong 0:c1437a5e420b 65 {
daniel_gs_jeong 0:c1437a5e420b 66 microUSB.printf("MAX77801 Init Done\r\n");
daniel_gs_jeong 0:c1437a5e420b 67 }
daniel_gs_jeong 0:c1437a5e420b 68
daniel_gs_jeong 0:c1437a5e420b 69 while(1)
daniel_gs_jeong 0:c1437a5e420b 70 {
daniel_gs_jeong 0:c1437a5e420b 71 gLED = true;rLED = false;
daniel_gs_jeong 0:c1437a5e420b 72 microUSB.printf("----- [ MAX77801 DEMO ] Usage ----- \r\n");
daniel_gs_jeong 0:c1437a5e420b 73 microUSB.printf("i : Set Registers to POR Staus \r\n");
daniel_gs_jeong 0:c1437a5e420b 74 microUSB.printf("+ : Increase VOUT L&H \r\n");
daniel_gs_jeong 0:c1437a5e420b 75 microUSB.printf("- : Dncrease VOUT L&H \r\n");
daniel_gs_jeong 0:c1437a5e420b 76 microUSB.printf("s : Read Status Registser \r\n");
daniel_gs_jeong 0:c1437a5e420b 77 microUSB.printf("e : Enable Buck Boost \r\n");
daniel_gs_jeong 0:c1437a5e420b 78 microUSB.printf("d : Disable Buck Boost \r\n");
daniel_gs_jeong 0:c1437a5e420b 79 microUSB.printf("\r\nInput >> ");
daniel_gs_jeong 0:c1437a5e420b 80
daniel_gs_jeong 0:c1437a5e420b 81 c = microUSB.getc();
daniel_gs_jeong 0:c1437a5e420b 82
daniel_gs_jeong 0:c1437a5e420b 83 gLED = false;rLED = true;
daniel_gs_jeong 0:c1437a5e420b 84 switch(c)
daniel_gs_jeong 0:c1437a5e420b 85 {
daniel_gs_jeong 0:c1437a5e420b 86 // ReInit
daniel_gs_jeong 0:c1437a5e420b 87 case 'i':
daniel_gs_jeong 0:c1437a5e420b 88 microUSB.printf("Init to POR Status\r\n");
daniel_gs_jeong 0:c1437a5e420b 89 //Set to POR Status
daniel_gs_jeong 0:c1437a5e420b 90 max77801.init();
daniel_gs_jeong 0:c1437a5e420b 91 vout_l = 3.3000;
daniel_gs_jeong 0:c1437a5e420b 92 rData = max77801.write_register(MAX77801::REG_VOUT_DVS_L, 0x38);
daniel_gs_jeong 0:c1437a5e420b 93 if(rData < 0)
daniel_gs_jeong 0:c1437a5e420b 94 microUSB.printf("Error: to access data\r\n");
daniel_gs_jeong 0:c1437a5e420b 95 vout_h = 3.7500; //WLP
daniel_gs_jeong 0:c1437a5e420b 96 rData = max77801.write_register(MAX77801::REG_VOUT_DVS_H, 0x40);
daniel_gs_jeong 0:c1437a5e420b 97 if(rData < 0)
daniel_gs_jeong 0:c1437a5e420b 98 microUSB.printf("Error: to access data\r\n");
daniel_gs_jeong 0:c1437a5e420b 99 break;
daniel_gs_jeong 0:c1437a5e420b 100
daniel_gs_jeong 0:c1437a5e420b 101 //Control VOUT
daniel_gs_jeong 0:c1437a5e420b 102 case '+':
daniel_gs_jeong 0:c1437a5e420b 103 microUSB.printf("Increase VOUT\r\n");
daniel_gs_jeong 0:c1437a5e420b 104 vout_l += 0.0125;
daniel_gs_jeong 0:c1437a5e420b 105 rData = max77801.set_vout(vout_l, MAX77801::VAL_LOW);
daniel_gs_jeong 0:c1437a5e420b 106 if(rData < 0)
daniel_gs_jeong 0:c1437a5e420b 107 microUSB.printf("Error: to access data\r\n");
daniel_gs_jeong 0:c1437a5e420b 108 vout_h += 0.0125;
daniel_gs_jeong 0:c1437a5e420b 109 rData = max77801.set_vout(vout_h, MAX77801::VAL_HIGH);
daniel_gs_jeong 0:c1437a5e420b 110 if(rData < 0)
daniel_gs_jeong 0:c1437a5e420b 111 microUSB.printf("Error: to access data\r\n");
daniel_gs_jeong 0:c1437a5e420b 112 break;
daniel_gs_jeong 0:c1437a5e420b 113
daniel_gs_jeong 0:c1437a5e420b 114 case '-':
daniel_gs_jeong 0:c1437a5e420b 115 microUSB.printf("Decrease VOUT\r\n");
daniel_gs_jeong 0:c1437a5e420b 116 vout_l -= 0.0125;
daniel_gs_jeong 0:c1437a5e420b 117 rData = max77801.set_vout(vout_l, MAX77801::VAL_LOW);
daniel_gs_jeong 0:c1437a5e420b 118 if(rData < 0)
daniel_gs_jeong 0:c1437a5e420b 119 microUSB.printf("Error: to access data\r\n");
daniel_gs_jeong 0:c1437a5e420b 120 vout_h -= 0.0125;
daniel_gs_jeong 0:c1437a5e420b 121 rData = max77801.set_vout(vout_h, MAX77801::VAL_HIGH);
daniel_gs_jeong 0:c1437a5e420b 122 if(rData < 0)
daniel_gs_jeong 0:c1437a5e420b 123 microUSB.printf("Error: to access data\r\n");
daniel_gs_jeong 0:c1437a5e420b 124 break;
daniel_gs_jeong 0:c1437a5e420b 125
daniel_gs_jeong 0:c1437a5e420b 126 //Read Status Register
daniel_gs_jeong 0:c1437a5e420b 127 case 's':
daniel_gs_jeong 0:c1437a5e420b 128 microUSB.printf("Read Status\r\n");
daniel_gs_jeong 0:c1437a5e420b 129 rData = max77801.get_status();
daniel_gs_jeong 0:c1437a5e420b 130 if(rData < 0)
daniel_gs_jeong 0:c1437a5e420b 131 microUSB.printf("Error: to access data\r\n");
daniel_gs_jeong 0:c1437a5e420b 132 else
daniel_gs_jeong 0:c1437a5e420b 133 microUSB.printf("Status 0x%2X\r\n",rData);
daniel_gs_jeong 0:c1437a5e420b 134 break;
daniel_gs_jeong 0:c1437a5e420b 135
daniel_gs_jeong 0:c1437a5e420b 136 //Buck Boost Enable/Disable
daniel_gs_jeong 0:c1437a5e420b 137 case 'e':
daniel_gs_jeong 0:c1437a5e420b 138 microUSB.printf("Enable Buck Boost\r\n");
daniel_gs_jeong 0:c1437a5e420b 139 rData = max77801.config_enable(MAX77801::BUCK_BOOST_OUTPUT,
daniel_gs_jeong 0:c1437a5e420b 140 MAX77801::VAL_ENABLE);
daniel_gs_jeong 0:c1437a5e420b 141 if(rData < 0)
daniel_gs_jeong 0:c1437a5e420b 142 microUSB.printf("Error: to access data\r\n");
daniel_gs_jeong 0:c1437a5e420b 143 break;
daniel_gs_jeong 0:c1437a5e420b 144
daniel_gs_jeong 0:c1437a5e420b 145 case 'd':
daniel_gs_jeong 0:c1437a5e420b 146 microUSB.printf("Disable Buck Boost\r\n");
daniel_gs_jeong 0:c1437a5e420b 147 rData = max77801.config_enable(MAX77801::BUCK_BOOST_OUTPUT,
daniel_gs_jeong 0:c1437a5e420b 148 MAX77801::VAL_DISABLE);
daniel_gs_jeong 0:c1437a5e420b 149 if(rData < 0)
daniel_gs_jeong 0:c1437a5e420b 150 microUSB.printf("Error: to access data\r\n");
daniel_gs_jeong 0:c1437a5e420b 151 break;
daniel_gs_jeong 0:c1437a5e420b 152
daniel_gs_jeong 0:c1437a5e420b 153
daniel_gs_jeong 0:c1437a5e420b 154 default:
daniel_gs_jeong 0:c1437a5e420b 155 microUSB.printf("Unknown Command\r\n");
daniel_gs_jeong 0:c1437a5e420b 156 break;
daniel_gs_jeong 0:c1437a5e420b 157 }
daniel_gs_jeong 0:c1437a5e420b 158
daniel_gs_jeong 0:c1437a5e420b 159 wait_ms(1000);
daniel_gs_jeong 0:c1437a5e420b 160 }
daniel_gs_jeong 0:c1437a5e420b 161 }