Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
7 years, 2 months ago.
MAX30001 with Nordic NRF52DK
Hi,
I used MAX30001 library from EV kit Hello world. I used EV kit and connected it to Nordic nrf52dk I used the code below
max30001
#include "mbed.h"
#include "MAX30001.h"
#define EN_ECG 0b1
#define OPENP 0b1
#define OPENN 0b1
#define POL 0b0
#define CALP_SEL 0b10
#define CALN_SEL 0b11
#define E_FIT 31
#define RATE 0b00
#define GAIN 0b00
#define DHPF 0b0
#define DLPF 0b01
/// Initialization values for CAL_InitStart()
#define EN_VCAL 0b1
#define VMODE 0b1
#define VMAG 0b1
#define FCAL 0b011
#define THIGH 0x7FF
#define FIFTY 0b0
/// Initializaton values for Rbias_FMSTR_Init()
#define EN_RBIAS 0b01
#define RBIASV 0b10
#define RBIASP 0b1
#define RBIASN 0b1
#define FMSTR 0b00
#define BUFFER_LENGTH 50
// @brief SPI Master 0 with SPI0_SS for use with MAX30001
/// DigitalOut for CS
DigitalOut cs(D10);
/// SPI Master 2 with SPI0_SS for use with MAX30001
SPI spi(SPI_PSELMOSI0, SPI_PSELMISO0, SPI_PSELSCK0); // used by MAX30001
//@brief ECG device
MAX30001 max30001(&spi, &cs);
InterruptIn max30001_InterruptB(D8);
InterruptIn max30001_Interrupt2B(D9);
Serial pc(USBTX, USBRX); // tx, rx
//@brief Creating a buffer to hold the data
uint32_t ecgBuffer[BUFFER_LENGTH];
int ecgIndex = 0;
char data_trigger = 0;
//
// @brief Creates a packet that will be streamed via USB Serial
// the packet created will be inserted into a fifo to be streamed at a later time
// @param id Streaming ID
// @param buffer Pointer to a uint32 array that contains the data to include in the packet
// @param number Number of elements in the buffer
//
void StreamPacketUint32_ecg(uint32_t id, uint32_t *buffer, uint32_t number) {
int i;
if (id == MAX30001_DATA_ECG) {
for (i = 0; i < number; i++) {
ecgBuffer[ecgIndex] = buffer[i];
ecgIndex++;
if (ecgIndex > BUFFER_LENGTH)
{
data_trigger = 1;
ecgIndex = 0;
}
}
}
if (id == MAX30001_DATA_BIOZ) {
/// Add code for reading BIOZ data
}
if (id == MAX30001_DATA_PACE) {
/// Add code for reading Pace data
}
if (id == MAX30001_DATA_RTOR) {
/// Add code for reading RtoR data
}
}
int main() {
uint32_t all;
printf("Init MAX30001 callbacks, interrupts...\n");
fflush(stdout);
max30001_InterruptB.disable_irq();
max30001_Interrupt2B.disable_irq();
max30001_InterruptB.mode(PullUp);
max30001_InterruptB.fall(&MAX30001Mid_IntB_Handler);
max30001_Interrupt2B.mode(PullUp);
max30001_Interrupt2B.fall(&MAX30001Mid_Int2B_Handler);
max30001_InterruptB.enable_irq();
max30001_Interrupt2B.enable_irq();
MAX30001_AllowInterrupts(1);
max30001.max30001_sw_rst(); // Do a software reset of the MAX30001
max30001.max30001_INT_assignment(MAX30001::MAX30001_INT_B, MAX30001::MAX30001_NO_INT, MAX30001::MAX30001_NO_INT, // en_enint_loc, en_eovf_loc, en_fstint_loc,
MAX30001::MAX30001_INT_2B, MAX30001::MAX30001_INT_2B, MAX30001::MAX30001_NO_INT, // en_dcloffint_loc, en_bint_loc, en_bovf_loc,
MAX30001::MAX30001_INT_2B, MAX30001::MAX30001_INT_2B, MAX30001::MAX30001_NO_INT, // en_bover_loc, en_bundr_loc, en_bcgmon_loc,
MAX30001::MAX30001_INT_B, MAX30001::MAX30001_NO_INT, MAX30001::MAX30001_NO_INT, // en_pint_loc, en_povf_loc, en_pedge_loc,
MAX30001::MAX30001_INT_2B, MAX30001::MAX30001_INT_B, MAX30001::MAX30001_NO_INT, // en_lonint_loc, en_rrint_loc, en_samp_loc,
MAX30001::MAX30001_INT_ODNR, MAX30001::MAX30001_INT_ODNR);
max30001.onDataAvailable(&StreamPacketUint32_ecg);
/// Set and Start the VCAL input
/// @brief NOTE VCAL must be set first if VCAL is to be used
max30001.max30001_CAL_InitStart(EN_VCAL , VMODE, VMAG, FCAL, THIGH, FIFTY);
/// ECG Initialization
max30001.max30001_ECG_InitStart(EN_ECG, OPENP, OPENN, POL, CALP_SEL, CALN_SEL, E_FIT, RATE, GAIN, DHPF, DLPF);
/// @details The user can call any of the InitStart functions for Pace, BIOZ, and RtoR
/// @brief Set Rbias & FMSTR over here
max30001.max30001_Rbias_FMSTR_Init(EN_RBIAS, RBIASV, RBIASP, RBIASN,FMSTR);
max30001.max30001_synch();
/// clear the status register for a clean start
max30001.max30001_reg_read(MAX30001::STATUS, &all);
printf("Please wait for data to start streaming\n");
fflush(stdout);
while (1) {
if(data_trigger == 1){
printf("%ld ", ecgBuffer[ecgIndex]); // Print the ECG data on a serial port terminal software
fflush(stdout);
}
}
When I open serial monitor ,I see only "Please wait for data to start streaming."
What is the problem?