Host software for the MAX30001 ECG, PACE, biopotential, bioimpedance, R-to-R peak sensor. Hosted on the MAX32630FTHR.

Dependencies:   SDFileSystem USBDevice max32630fthr

Fork of MAX30001 SYS EvKit by Emre Eken

MAX30001-MAX32630FTHR ECG Evaluation System

The MAX30001 EVKIT SYS-MBED Evaluation System (EV System) is used to evaluates the MAX30001 sensor, which is an ECG (electrocardiogram), biopotential and bioimpedance analog front end solution for wearable applications. The full evaluation system consists of the MAX32630FTHR board, MAX30001 EVKIT sensor board and the evaluation software. The evaluation kit features ECG, PACE, R-to-R (R-peak timing) detection; bioimpedance (BioZ) AFE; and raw data logging.

The MAX30001 EVKIT evaluation system is assembled, tested and contains the necessary circuitry and connections to evaluate the MAX30001 ECG sensor.

When evaluated as an evaluation system, the MAX32630FTHR board provides the necessary logic rails, master clock, SPI, USB-to-Serial interfaces that are needed to evaluate the MAX30001 sensor board. MAX32630FTHR can be used as an independent development platform.

Communication between the PC and the MAX32630FTHR board is facilitated by a Windows 7, Windows 8 and Windows 10 compatible software that provides a simple and intuitive graphical user interface (GUI).

For more information, visit the wiki pages by clicking the wiki tab above and MAX30001EVSYS product page.

C++ source code, library for the MAX30001 ECG drivers are in the links at the bottom of this page. The sample code includes the ability to log data to the SD card of the MAX32630FTHR.

MAX30001 EVKIT Pinout Connections

/media/uploads/EmreE/max30001_sensor_board_connector_pinout.png

Where to Buy

MAX30001EVSYS-Buy

Committer:
Emre.Eken
Date:
Tue Jul 24 15:15:22 2018 +0300
Revision:
11:1dde68750ed1
Parent:
0:8e4630a71eb1
Files' hierarchy is changed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1 /*******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 3 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 4 * Permission is hereby granted, free of charge, to any person obtaining a
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 5 * copy of this software and associated documentation files (the "Software"),
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 6 * to deal in the Software without restriction, including without limitation
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 8 * and/or sell copies of the Software, and to permit persons to whom the
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 9 * Software is furnished to do so, subject to the following conditions:
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 10 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 11 * The above copyright notice and this permission notice shall be included
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 12 * in all copies or substantial portions of the Software.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 13 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 20 * OTHER DEALINGS IN THE SOFTWARE.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 21 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 22 * Except as contained in this notice, the name of Maxim Integrated
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 24 * Products, Inc. Branding Policy.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 25 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 26 * The mere transfer of this software does not imply any licenses
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 27 * of trade secrets, proprietary technology, copyrights, patents,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 28 * trademarks, maskwork rights, or any other form of intellectual
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 30 * ownership rights.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 31 *******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 32 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 33 #ifndef _LED_H_
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 34 #define _LED_H_
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 35
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 36 #include "mbed.h"
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 37
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 38 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 39 * Driver for the HSP Led, supports different blink rates and patterns
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 40 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 41 * @code
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 42 * #include <stdio.h>
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 43 * #include "mbed.h"
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 44 * #include "xxx.h"
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 45 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 46 * I2C i2c(I2C_SDA, I2C_SCL);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 47 * xxx xxx(&i2c);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 48 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 49 * int main(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 50 * printf("Initialized xxx\n");
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 51 * while(1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 52 * if (xxx.init() != 0) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 53 * printf("Error communicating with xxx\n");
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 54 * } else {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 55 * printf("Initialized xxx\n");
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 56 * break;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 57 * }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 58 * wait(1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 59 * }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 60 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 61 * while(1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 62 * printf("");
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 63 * wait(1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 64 * }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 65 * }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 66 * @endcode
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 67 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 68
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 69 class HspLed {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 70 public:
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 71 static const int LED_ON = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 72 static const int LED_OFF = 1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 73
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 74 /// define all of the modes the LED can support
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 75 typedef enum eMode {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 76 eLedOn,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 77 eLedOff,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 78 eLedPeriod,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 79 eLedPattern
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 80 } eMode;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 81 /// define the values that turn the LED on or off at the pin
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 82 #define HSP_LED_ON 0
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 83 #define HSP_LED_OFF 1
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 84
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 85 /*
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 86 * @brief Constructor where you specify the LED pin name
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 87 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 88 HspLed(PinName ledPin);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 89
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 90 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 91 * Blink the HSP LED at a set time interval
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 92 * @param mSeconds Number of seconds to set the timer interval
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 93 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 94 void blink(uint32_t mSeconds);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 95
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 96 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 97 * @brief Start rotating the LED through a 32-bit pattern at a mS rate specified
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 98 * @param pattern 32-bit pattern to rotate through
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 99 * @param mSeconds the amount of time to take per bit in the pattern
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 100 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 101 void pattern(uint32_t pattern, uint32_t mSeconds);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 102
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 103 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 104 * @brief Turn the LED on
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 105 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 106 void on(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 107
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 108 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 109 * @brief Turn the LED off
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 110 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 111 void off(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 112
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 113 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 114 * @brief Update the LED
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 115 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 116 void service(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 117
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 118 private:
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 119
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 120 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 121 * Set the mode of the LED, the mode include blinking at a set rate or blinking
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 122 * according to a pattern
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 123 * @param mode Mode to set the LED to
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 124 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 125 void setMode(eMode state);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 126
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 127 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 128 * Toggle the state of the LED
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 129 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 130 void toggle(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 131
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 132 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 133 * Start the LED blinking or rotating through a pattern
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 134 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 135 void start(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 136
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 137 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 138 * Stop blinking or rotating through a pattern
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 139 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 140 void stop(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 141
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 142 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 143 * Write the LED pin to a state
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 144 * @param state A one or zero value to write to the LED pin
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 145 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 146 void state(int state);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 147
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 148 /*
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 149 * @brief Single step through the pattern and output to the LED
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 150 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 151 void patternToLed(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 152
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 153 /// timer interval in mS
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 154 float timerInterval;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 155 /// last timer interval set to... used to prevent resetting the timer to the same value
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 156 float timerIntervalLast;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 157 /// local state of the pattern to rotate through
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 158 uint32_t bitPattern;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 159 /// current mode of the LED
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 160 eMode mode;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 161 /// the LED digital output
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 162 DigitalOut redLed;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 163 /// Timer service used to update the LED
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 164 Ticker ticker;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 165 /// Flag to indicate if the timer has been started
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 166 bool isStarted;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 167 };
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 168
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 169 #endif /* _LED_H_ */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 170