Test program for MAX30101 Barely working.
Dependencies: MAX30101 mbed vt100
Diff: main.cpp
- Revision:
- 3:f3d19ad49aee
- Parent:
- 1:fd8bee9b3647
--- a/main.cpp Mon Mar 27 07:34:32 2017 +0000 +++ b/main.cpp Mon May 01 00:58:26 2017 +0000 @@ -18,6 +18,30 @@ MAX30101 *max30101 = 0 ; InterruptIn *int0 ; +/* data read test following the pseudo code + * written in the datasheet + */ +void doPseudo(void) +{ + uint32_t data[3] ; + uint8_t fifo_wr_ptr, fifo_rd_ptr ; + int num_available_samples = 0 ; +// int num_samples_to_read = 0 ; + int i ; + + fifo_wr_ptr = max30101->getFIFO_WR_PTR() ; + fifo_rd_ptr = max30101->getFIFO_RD_PTR() ; + num_available_samples = (fifo_wr_ptr + FIFO_DEPTH - fifo_rd_ptr) % FIFO_DEPTH ; + printf("=== %d data ===\n", num_available_samples) ; + for (i = 0 ; i < num_available_samples ; i++ ) { + data[0] = max30101->readFIFO() ; /* LED1 */ + data[1] = max30101->readFIFO() ; /* LED2 */ + data[2] = max30101->readFIFO() ; /* LED3 */ + printf("LED1: 0x%05X, LED2: 0x%05X, LED3: 0x%05X\n", + data[0], data[1], data[2]) ; + } +} + void initSPO2(void) { uint8_t config_byte = 0 ; @@ -97,6 +121,7 @@ } if (flag & INT_ST_PPG_RGY) { /* New FIFO Data Ready */ printf("New FIFO Data Ready\n") ; + doPseudo() ; } if (flag & INT_ST_ALC_OVF) { /* Ambient Light Cancellaration Overflow */ printf("Ambient Light Cancellaration Overflow\n") ; @@ -164,17 +189,17 @@ mode = // (0x02 << 5) /* SMP_AVE = 2 -> avarage of 4 data */ (0x05 << 5) /* SMP_AVE = 5 -> avarage of 32 data */ -// | (0x01 << 4) /* FIFO_ROLLOVER_EN = 1 */ - | (0x00 << 4) /* FIFO_ROLLOVER_EN = 0 */ + | (0x01 << 4) /* FIFO_ROLLOVER_EN = 1 */ +// | (0x00 << 4) /* FIFO_ROLLOVER_EN = 0 */ | (0x0C) /* FIFO ALMOST FULL at 12 (0x0C) */ ; max30101->setFIFO_CONFIG(mode) ; max30101->setLED1_PA(0x80) ; max30101->setLED2_PA(0x80) ; -// max30101->setLED3_PA(0x80) ; -// max30101->setPILOT_PA(0x80) ; -#if 0 + max30101->setLED3_PA(0x80) ; + max30101->setPILOT_PA(0x80) ; +#if 1 slot_config = (0x02 << 24) /* SLOT2 LED2(IR) */ | (0x01 << 16) /* SLOT1 LED1(RED) */ @@ -187,8 +212,6 @@ max30101->setPROX_INT_THR(mode) ; // max30101->setIntEnable(0xF002) ; - - } void reportID(void) @@ -199,31 +222,6 @@ printf("MAX30101 ID: 0x%02X, Rev: 0x%02X\n", id, rev) ; } - -/* data read test following the pseudo code - * written in the datasheet - */ -void doPseudo(void) -{ - uint32_t data[3] ; - uint8_t fifo_wr_ptr, fifo_rd_ptr ; - int num_available_samples = 0 ; -// int num_samples_to_read = 0 ; - int i ; - - fifo_wr_ptr = max30101->getFIFO_WR_PTR() ; - fifo_rd_ptr = max30101->getFIFO_RD_PTR() ; - num_available_samples = (fifo_wr_ptr + FIFO_DEPTH - fifo_rd_ptr) % FIFO_DEPTH ; - printf("=== %d data ===\n", num_available_samples) ; - for (i = 0 ; i < num_available_samples ; i++ ) { - data[0] = max30101->readFIFO() ; /* LED1 */ - data[1] = max30101->readFIFO() ; /* LED2 */ - data[2] = max30101->readFIFO() ; /* LED3 */ - printf("LED1: 0x%05X, LED2: 0x%05X, LED3: 0x%05X\n", - data[0], data[1], data[2]) ; - } -} - void doInt(void) { uint16_t flag ; @@ -261,22 +259,22 @@ init() ; - printf("%s : %s\n", BOARD_NAME, __DATE__) ; + printf("test MAX30101 for %s (%s)\n", BOARD_NAME, __DATE__) ; reportID() ; initSPO2() ; int0->fall(&SPO2_isr) ; max30101->setMODE_CONFIG(MODE_SPO2) ; - max30101->setIntEnable( INT_EN_A_FULL | INT_EN_DIE_TEMP_RDY ) ; + max30101->setIntEnable( INT_EN_A_FULL | INT_EN_DIE_TEMP_RDY | INT_ST_PPG_RGY ) ; int_config = max30101->getIntEnable() ; printf("Int enable: 0x%04X\n", int_config) ; - flag = max30101->getIntStatus() ; + printf("Temperature, Interrupt flags\n") ; while(1) { max30101->setTEMP_EN() ; /* trigger temperature read */ temp = max30101->getTEMP() ; flag = max30101->getIntStatus() ; - printf("Temp = %.2f interrupt flags = 0x%02X\n", temp, flag) ; + printf("%.2f, 0x%02X\n", temp, flag) ; wait(1) ; } }