Example host software for the Maxim Integrated DS4424/DS4422 I2C Sink/Source Current DAC. Hosted on the MAX32630FTHR.
Dependencies: max32630fthr DS4424_SINK_SOURCE_CURRENT_DAC_INPUT_OUTPUT_DAC USBDevice
Revision 9:36e3c385f119, committed 2019-01-27
- Comitter:
- phonemacro
- Date:
- Sun Jan 27 00:33:06 2019 +0000
- Parent:
- 8:5bbefd9bce9f
- Commit message:
- revert the last commit
Changed in this revision
diff -r 5bbefd9bce9f -r 36e3c385f119 DS4424_SINK_SOURCE_CURRENT_DAC_INPUT_OUT.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DS4424_SINK_SOURCE_CURRENT_DAC_INPUT_OUT.lib Sun Jan 27 00:33:06 2019 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/teams/MaximIntegrated/code/DS4424_SINK_SOURCE_CURRENT_DAC_INPUT_OUT/#fc75fced724f
diff -r 5bbefd9bce9f -r 36e3c385f119 MAX31723_Digital_Temperature_Sensor.lib --- a/MAX31723_Digital_Temperature_Sensor.lib Sun Jan 27 00:22:32 2019 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://os.mbed.com/users/phonemacro/code/MAX31723_Digital_Temperature_Sensor/#4a3d6ac5042d
diff -r 5bbefd9bce9f -r 36e3c385f119 main.cpp
--- a/main.cpp Sun Jan 27 00:22:32 2019 +0000
+++ b/main.cpp Sun Jan 27 00:33:06 2019 +0000
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (C) 2019 Maxim Integrated Products, Inc., All Rights Reserved.
+ * Copyright (C) 2018-2019 Maxim Integrated Products, Inc., All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -32,7 +32,8 @@
*/
#include "mbed.h"
#include "max32630fthr.h"
-#include "max31723.h"
+#include "DS4424.h"
+
#include "USBSerial.h"
MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
@@ -41,56 +42,91 @@
DigitalOut gLED(LED2);
DigitalOut bLED(LED3);
-DigitalOut selectPin(P3_0); /* Pin 3_0 is used to drive chip enable low */
-SPI spi(P5_1, P5_2, P5_0); /* mosi, miso, sclk */
+I2C i2cBus(P3_4, P3_5);
-
+DS4424 ds4424_dac(i2cBus, DS4424::DS4424_I2C_SLAVE_ADRS0, DS4424::DS4424_IC);
+
/** main() runs in its own thread in the OS */
/** (note the calls to Thread::wait below for delays) */
/**
- * @brief Sample main program for Maxim Integrated MAX31723
- * @version 1.0000.0000
+ * @brief Sample main program for Maxim Integrated DS4424, DS4422
+ * @version 1.0000.301
*
- * @details Sample main program for MAX31723/MAX31722
+ * @details Sample main program for DS4424, DS4422
* The prints are sent to the terminal window (9600, 8n1).
- * The program configures the SPI buss and then it performs
- * 5 one shot readings.
- * The program then blinks the green LED.
+ * The program sets the output DAC registers to various values.
+ * These registers are then read back and printed out.
+ * The program then blinks the blue-green LED.
* To run the program, drag and drop the .bin file into the
* DAPLINK folder. After it finishes flashing, cycle the power or
* reset the Pegasus (MAX32630FTHR) after flashing by pressing the button on
* the Pegasus next to the battery connector or the button
* on the MAXREFDES100HDK.
*/
-
-
int main()
{
+ int32_t in_pAmps[4] = {-193675000, -1525000, 6100000, -16012500};
+ uint8_t in_raw[4];
+ int32_t value[4] = {0, 0, 0, 0};
int ret, i;
- float temperature;
+ int32_t out_pAmps[4] = {0, 0, 0, 0};
+ uint32_t rfs_board[4] = {40000, 80000, 100000, 160000};
+
DigitalOut rLED(LED1, LED_OFF);
DigitalOut gLED(LED2, LED_OFF);
DigitalOut bLED(LED3, LED_OFF);
+ bLED = LED_ON;
gLED = LED_ON;
- MAX31723 max31723_temp(spi, selectPin);
- spi.format(8,3); /* 8-bit, SPI mode 3 */
- spi.frequency(5000000); /* Use 5 MHz SPI bus */
- /* Jumpers (JP1) on MAX31723PMB should be set to SPI mode configuration
- * or SERMODE pin should be set to VDD for SPI mode
- */
+ i2cBus.frequency(400000);
+ printf("\r\n");
+
+ /* write to each channel using picoAmps */
+ for (i = 0; i < 4; i++) {
+ ret = ds4424_dac.convert_picoAmps_to_hw_raw(&in_raw[i], in_pAmps[i], rfs_board[i]);
+ printf("Set picoAmps Out %d picoAmps, hw raw = %d, rfs = %d Ohms\r\n", in_pAmps[i], in_raw[i], rfs_board[i]);
+ }
+ printf("\r\n");
+ ret = ds4424_dac.write_hw_raw(in_raw[0], DS4424::REG_OUT0);
+ ret = ds4424_dac.write_hw_raw(in_raw[1], DS4424::REG_OUT1);
+ ret = ds4424_dac.write_hw_raw(in_raw[2], DS4424::REG_OUT2);
+ ret = ds4424_dac.write_hw_raw(in_raw[3], DS4424::REG_OUT3);
- for (i = 0; i < 5; i++) {
- ret = max31723_temp.perform_one_shot(MAX31723_CONV_TIME_MSEC_12BIT);
- wait(MAX31723_CONV_TIME_MSEC_12BIT);
- temperature = max31723_temp.read_temp();
- printf("Temperature = %4.4f Celsius, %4.4f Fahrenheit\r\n",
- temperature, max31723_temp.celsius_to_fahrenheit(temperature));
- wait(2);
- }
+ /* write to each channel using two's complement */
+ /*
+ ret = ds4424_dac.write_raw(-127, DS4424::REG_OUT0);
+ ret = ds4424_dac.write_raw(-2, DS4424::REG_OUT1);
+ ret = ds4424_dac.write_raw(10, DS4424::REG_OUT2);
+ ret = ds4424_dac.write_raw(-42, DS4424::REG_OUT3);
+ */
+ ret = ds4424_dac.read_hw_raw(in_raw[0], DS4424::REG_OUT0);
+ ret = ds4424_dac.read_hw_raw(in_raw[1], DS4424::REG_OUT1);
+ ret = ds4424_dac.read_hw_raw(in_raw[2], DS4424::REG_OUT2);
+ ret = ds4424_dac.read_hw_raw(in_raw[3], DS4424::REG_OUT3);
+ for (i = 0; i < 4; i++) {
+ printf("Read hw raw Out %d = %d\r\n", i, in_raw[i]);
+ }
printf("\r\n");
- while (true) { // Blink the green LED
+
+ ret = ds4424_dac.read_raw(value[0], DS4424::REG_OUT0);
+ ret = ds4424_dac.read_raw(value[1], DS4424::REG_OUT1);
+ ret = ds4424_dac.read_raw(value[2], DS4424::REG_OUT2);
+ ret = ds4424_dac.read_raw(value[3], DS4424::REG_OUT3);
+ for (i = 0; i < 4; i++) {
+ printf("Read raw two's complement Out %d = %d\r\n", i, value[i]);
+ }
+ printf("\r\n");
+
+ /* Convert two's complement values to picoAmps */
+ for (i = 0; i < 4; i++) {
+ ret = ds4424_dac.convert_raw_to_picoAmps(&out_pAmps[i], value[i], rfs_board[i]);
+ printf("Read Out %d = %d picoAmps, rfs = %d Ohms\r\n", i, out_pAmps[i], rfs_board[i]);
+ }
+ printf("\r\n");
+
+ while (true) { // Blink the blue-green LED
+ bLED = !bLED;
gLED = !gLED;
wait(1.0);
}