Where is the software located? The link in the documentation doesn’t work. I would also like to talk to engineering about using this power supply for a production board my team is working on.
Arduino sketch for controlling this demo board.
#include <Wire.h>
//A5 = SCL and A5 = SDA on Aruduino UNO
//define the I2C address
int PS_Address = 0x60;
//define the register locations
#define REF_LSB 0x00
#define REF_MSB 0x01
#define CONTROL1 0x02
#define CONTROL2 0x03
#define ILIM 0x04
#define INT_STATUS 0x05
#define INT_MASK 0x06
void setup() {
Wire.begin();
//Initiate the wire library
Serial.begin(9600);
delay(100); //Enable Measurement
//Write all the registers
//Take voltage times 100 convert it to binary. First 8 bits go into MSB and bottom 3 bits go into LSB. For example about
//16V * 100 = 1600 or 0b11001000000 FSB = 11001000 LSB = 000 The FB voltage divider is not quite 100:1 so it will be off a bit
Wire.beginTransmission(PS_Address);
Wire.write(REF_LSB);
Wire.write(0b00000111);
Wire.endTransmission();
Wire.beginTransmission(PS_Address);
Wire.write(REF_MSB);
Wire.write(0b11001000);
Wire.endTransmission();
//Control 1 needs to be 0xFF or 0b11111111 for voltage control to be enabled. Some of the bits might be able to be 0 but I
//didn’t take the time to determine which one was setting the output.
Wire.beginTransmission(PS_Address);
Wire.write(CONTROL1);
Wire.write(0b011111111);
Wire.endTransmission();
//Stuck with the default
Wire.beginTransmission(PS_Address);
Wire.write(CONTROL2);
Wire.write(0b10000101);
Wire.endTransmission();
//8steps current limit for this device.
//0x111=6.8A, 0x110 = 6.2A, 0x101 = 5.6A, 0x100 = 5.0A, 0x011=4.5A, 0x010=3.8A, 0x001=3.8A, 0x000=2.6A
//Finger resolution requires the MP2984 with ILIM set to 0x111 and use of the PWM pin.
Wire.beginTransmission(PS_Address);
Wire.write(ILIM);
Wire.write(0b00000000); //Setting to 2.6A
Wire.endTransmission();
}
void loop() {
//Verify the registers are set correctly by reading them all back over and over
Wire.beginTransmission(PS_Address);
Wire.write(REF_LSB);
Wire.endTransmission();
Wire.requestFrom(PS_Address,1);
Serial.print("REF_LSB (Register 0x00): ");
Serial.println(Wire.read(),BIN);
Wire.beginTransmission(PS_Address);
Wire.write(REF_MSB);
Wire.endTransmission();
Wire.requestFrom(PS_Address,1);
Serial.print("REF_MSB (Register 0x01): ");
Serial.println(Wire.read(),BIN);
Wire.beginTransmission(PS_Address);
Wire.write(CONTROL1);
Wire.endTransmission();
Wire.requestFrom(PS_Address,1);
Serial.print("CONTROL1 (Register 0x02): ");
Serial.println(Wire.read(),BIN);
Wire.beginTransmission(PS_Address);
Wire.write(CONTROL2);
Wire.endTransmission();
Wire.requestFrom(PS_Address,1);
Serial.print("CONTROL2 (Register 0x03): ");
Serial.println(Wire.read(),BIN);
Wire.beginTransmission(PS_Address);
Wire.write(ILIM);
Wire.endTransmission();
Wire.requestFrom(PS_Address,1);
Serial.print("ILIM (Register 0x04): ");
Serial.println(Wire.read(),BIN);
Wire.beginTransmission(PS_Address);
Wire.write(INT_STATUS);
Wire.endTransmission();
Wire.requestFrom(PS_Address,1);
Serial.print("INT_STATUS (Register 0x05): ");
Serial.println(Wire.read(),BIN);
Wire.beginTransmission(PS_Address);
Wire.write(INT_MASK);
Wire.endTransmission();
Wire.requestFrom(PS_Address,1);
Serial.print("INT_MASK (Register 0x06): ");
Serial.println(Wire.read(),BIN);
delay(10000);
}
Hi Eric,
You can utilize Virtual Bench Pro 4.0 GUI with the MP2980.
Virtual Bench Pro 4.0 (monolithicpower.com)
Best Regards,
Yu