This example code is written for the MAX32625PICO board to program the MAX31875 silicon temperature sensor to output 12-bit temperature readings every 125ms. The MAX32625PICO will appear as a virtual COM port to print readings to a terminal, and the on-board LEDs will alternate between red, green, and blue during normal operation.

Dependencies:   USBDevice max32625pico maxim-dev

Files at this revision

API Documentation at this revision

Comitter:
MI
Date:
Wed Nov 01 01:47:38 2017 +0000
Commit message:
Preliminary demo code for MAX31875.

Changed in this revision

USBDevice.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
max32625pico.lib Show annotated file Show diff for this revision Revisions of this file
maxim-dev.lib Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r bc0f96339b73 USBDevice.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice.lib	Wed Nov 01 01:47:38 2017 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/MaximIntegrated/code/USBDevice/#8ca8b458434a
diff -r 000000000000 -r bc0f96339b73 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Nov 01 01:47:38 2017 +0000
@@ -0,0 +1,105 @@
+#include "mbed.h"
+#include "USBSerial.h"
+#include "max32625pico.h"
+
+USBSerial pc;
+
+int readTemp(I2C &i2cbus);
+void configTemp(I2C &i2cbus);
+
+#define WRITE_ADDRESS   0x90
+#define READ_ADDRESS    0x91
+#define TEMP_REG        0x00
+#define CONFIG_REG      0x01
+
+int main()
+{
+    //initialize the MAX32625PICO board for +3.3V logic levels
+    MAX32625PICO pico(MAX32625PICO::IOH_3V3, MAX32625PICO::VIO_IOH, MAX32625PICO::VIO_IOH);
+    
+    //initialize RGB LED channels and turn them off
+    DigitalOut rLED(LED1, LED_OFF);
+    DigitalOut gLED(LED2, LED_OFF);
+    DigitalOut bLED(LED3, LED_OFF);
+    
+    //initialize the I2C master interface
+    I2C i2c(P1_6, P1_7);    //SDA, SCL
+    
+    //delcare variables to store the raw temperature readings and the converted Celsius temperature
+    int temperature_raw;
+    float temperature_C;
+    
+    //write the configuration register
+    configTemp(i2c);
+    
+    //the while loop will read the temperature reading, convert to Celsius, and then
+    //print the result to a serial terminal. It will then toggle each on-board LED
+    //for 11ms for a total of 33ms. A new temperature value is available every 12.5ms.
+    while (true) {
+        //the readTemp() function returns a raw 16-bit temperature reading
+        //if successful and a zero if unsuccessful
+        temperature_raw = readTemp(i2c);
+        
+        //print temperature only if valid data is received. Readings of exactly 0.00 degrees
+        //will be thrown out but really what are the chances?
+        if(temperature_raw != 0)
+        {
+            temperature_C = temperature_raw/256.0;
+            
+            //print a floating point value with 4 decimal places
+            pc.printf("\r\n%.4f C",temperature_C);
+        }
+        else {
+            pc.printf("\r\nTemp Read Error");
+        }
+        
+        //toggle LEDs one at a time for a total of 33ms
+        bLED = LED_OFF;
+        rLED = LED_ON;
+        wait(0.11);
+        rLED = LED_OFF;
+        gLED = LED_ON;
+        wait(0.11);
+        gLED = LED_OFF;
+        bLED = LED_ON;
+        wait(0.11);
+    }
+}
+
+void configTemp(I2C &i2cbus)
+{
+    //creates an array to store the values to be written to the configuration register
+    //values chosen will program the MAX31875 for 8 conversions/second and 12-bit resolution
+    char data[3] = {CONFIG_REG, 0x00, 0x66};
+    
+    //this built-in I2C write function from mbed sends the configuration data to the MAX31875
+    i2cbus.write(WRITE_ADDRESS, data, 3, false);
+}
+
+int readTemp(I2C &i2cbus)
+{
+    int temp_raw = 0;
+    char data[2] = {TEMP_REG, 0};
+    
+    //the first I2C command sets the MAX31875 to point to the temperature register
+    //it returns a zero on success or non-zero if unsuccessful
+    int rtn_val = i2cbus.write(WRITE_ADDRESS, data, 1, true);
+    
+    //proceeds to read temperature only if previous command was successful
+    if(rtn_val == 0)
+    {
+        //this I2C command reads the temperature and stores it in the 'data' array.
+        //it returns a zero on success or non-zero if unsuccessful
+        rtn_val = i2cbus.read(READ_ADDRESS, data, 2, false);
+        
+        //proceeds to format raw temperature data only if previous command was successful
+        if(rtn_val == 0)
+        {
+            //combine both 8-bit register readings into one 16-bit variable
+            temp_raw = ((data[0] << 8) | data[1]);
+        }
+    }
+    //returns the 16-bit raw temperature reading
+    return temp_raw;
+}
+    
\ No newline at end of file
diff -r 000000000000 -r bc0f96339b73 max32625pico.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/max32625pico.lib	Wed Nov 01 01:47:38 2017 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/switches/code/max32625pico/#65bda25808e4
diff -r 000000000000 -r bc0f96339b73 maxim-dev.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/maxim-dev.lib	Wed Nov 01 01:47:38 2017 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/switches/code/maxim-dev/#2e7515f8c45d