Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MAX30003 max32630fthr DS1307
Revision 23:288c5d1babd1, committed 2021-08-03
- Comitter:
- kidecha_rahul
- Date:
- Tue Aug 03 19:39:42 2021 +0000
- Parent:
- 22:07eec382c267
- Commit message:
- 832021;
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DS1307.lib Tue Aug 03 19:39:42 2021 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/harrypowers/code/DS1307/#c3e4da8feb10
--- a/ds3231.lib Fri Jul 02 16:22:17 2021 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://os.mbed.com/teams/MH/code/ds3231/#c13d48b7ebd9
--- a/main.cpp Fri Jul 02 16:22:17 2021 +0000
+++ b/main.cpp Tue Aug 03 19:39:42 2021 +0000
@@ -1,76 +1,84 @@
-
+
#include "MAX30003.h"
#include "mbed.h"
#include "max32630fthr.h"
-//#include "ds1307.h"
+#include "ds1307.h"
//#include <BufferedSerial.h>
-//#include <string>
+#include <string>
//#include <Serial.h>
-#include "ds3231.h"
-
+
#define TARGET_TX_PIN P3_1
#define TARGET_RX_PIN P3_0
-
-#define SDA P3_4
-#define SCL P3_5
-
+
+
//Timer timer_fast;
-//Timer t;
+Timer t;
MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
-
-//void task_fast(void);
+
+void task_fast(void);
//DigitalOut ledA(LED2);
-
-//DigitalOut EN(P1_7);
-//DigitalOut A0(P1_4);
-//DigitalOut A1(P7_2);
-
-// mux controller pins
-DigitalOut S0(P5_6);
-DigitalOut S1(P5_5);
-DigitalOut S2(P3_3);
-DigitalOut S3(P3_2);
+
+DigitalOut S0(P4_0);
+DigitalOut S1(P5_6);
+//DigitalOut S2(P7_2);
+//DigitalOut S3(P7_2);
//channel feedback
-DigitalIn A(P5_7); //P17
-DigitalIn B(P6_0); //P18
-DigitalIn C(P4_0); //P19
+DigitalIn A(P6_0); //P17
+DigitalIn B(P3_5); //P18
+DigitalIn C(P3_4); //P19
-
-
+
void ecg_config(MAX30003 &ecgAFE);
//BufferedSerial pc(P3_1,P3_0); // Use USB debug probe for serial link static Unbuffered
static BufferedSerial pc(TARGET_TX_PIN, TARGET_RX_PIN, 230400); // 230400 works well
-
+
//Serial uart_1(USBTX, USBRX); // Use USB debug probe for serial link static Unbuffered
//
//Serial pc(P3_1,P3_0);
volatile bool ecgFIFOIntFlag = 0;
-//volatile bool timerflag = 0;
-
+volatile bool timerflag = 0;
+
FileHandle *mbed::mbed_override_console(int fd)
{
return &pc;
}
-
+
void ecgFIFO_callback_1() { // Triggered when the ECG FIFO is about to be full
ecgFIFOIntFlag = 1;
}
-
-
+
+time_t asUnixTime(int year, int mon, int mday, int hour, int min, int sec) {
+ struct tm t;
+ t.tm_year = year - 1900;
+ t.tm_mon = mon - 1; // convert to 0 based month
+ t.tm_mday = mday;
+ t.tm_hour = hour;
+ t.tm_min = min;
+ t.tm_sec = sec;
+ t.tm_isdst = -1; // Is Daylight saving time on? 1 = yes, 0 = no, -1 = unknown
+
+ return mktime(&t); // returns seconds elapsed since January 1, 1970 (begin of the Epoch)
+}
int main(void)
{
- int t=0;
-
-
- S0=0;
- S1=0;
- S2=0;
- S3=0;
-
-
+ uint16_t tic=0;
+
+ /* S1S0
+ 00 - C0
+ 01 - C1
+ 10 - C2
+ 11 - C3 */
+
+
+ S0=0; //C0
+ S1=0;
+ // S2=0;
+ // S3=0;
+
+
// Constants
const int EINT_STATUS_MASK = 1 << 23;
const int FIFO_OVF_MASK = 0x7;
@@ -78,35 +86,7 @@
const int FIFO_FAST_SAMPLE_MASK = 0x1;
const int ETAG_BITS_MASK = 0x7;
-//-------------------------------------------------------------RTC-------------------------------------------------------------//
- //instantiate rtc object
-Ds3231 rtc(SDA, SCL);
-
- uint16_t rtn_val;
-
- //time = 12:00:00 AM 12hr mode
-ds3231_time_t time = {50,30,11,1,0}; //seconds, min, hours, am_pm, mode
-
-
-rtn_val = rtc.set_time(time);
-
-
- //see datasheet for calendar format
- ds3231_calendar_t calendar = {6,2,7,21}; //day date month year
-
-
- rtn_val = rtc.set_calendar(calendar);
-
-
-//see datasheet for calendar format
-
- ds3231_cntl_stat_t data = {0x1C, 0x08};
-
- rtn_val = rtc.set_cntl_stat_reg(data);
- //------------------------------------------------------------------------------------------------------------------------------//
-
-
- //timer_fast.start();
+ // timer_fast.start();
DigitalOut rLed(LED2, LED_ON);
// pc.baud(9600);
@@ -117,6 +97,8 @@
// /* stop bit */ 1 //1
//);
//uart_1.baud(115200);
+
+//--------------------------------- ECG Initialization ---------------------------------------------//
InterruptIn ecgFIFO_int(P5_4); // Config P5_4 as int. in for the
ecgFIFO_int.fall(&ecgFIFO_callback_1); // ecg FIFO interrupt at falling edge
@@ -130,17 +112,19 @@
ecgAFE.writeRegister( MAX30003::SYNCH , 0);
+//-------------------------------------------------------------------------------------------------//
+
uint32_t ecgFIFO, readECGSamples, idx, ETAG[32], status;
int16_t ecgSample[32];
//bool timerflag = false;
- int16_t ecgSample_1sec[125];
- uint8_t ecg_1 = 0;
- uint8_t ecg_2 = 0;
+ int16_t ecgSample_1sec[256];
+ // uint8_t ecg_1 = 0;
+ // uint8_t ecg_2 = 0;
uint16_t onesec_counter = 0;
uint16_t onesec_counter_temp = 0;
// int16_t sample = 300;
- // uint8_t final[10];
+ // uint8_t final[10];
uint16_t checksum_ = 0;
uint16_t mod_checksum = 0;
@@ -157,51 +141,78 @@
uint8_t cksm_1 = 0;
uint8_t cksm_2 = 0;
uint8_t header_device_id[3] = {0,0,210};
- // uint8_t header_device_id[3] = {0,0,1}; //for rahul
+ //uint8_t header_device_id[3] = {0,0,1}; //for rahul
uint8_t header_packet_type[2] = {0,2};
uint8_t ending[5] = {'@','#','%','!','7'};
bool flip = true;
- uint8_t sampleps = 0;
+ int sampleps = 0;
- char buf[20];//={"1622326341"};
+ char buf[20];
// pc.write("Welcome",8*sizeof(char));
// printf("In the main loop"); //printf("In the main loop");
- bool flag_first = false;
- bool timestamp_reader = false;
+ bool flag_first = false;
+ bool timestamp_reader = false;
-//---------------------------------hardware RTC check---------------------------------------------//
- time_t epoch_time;
-
- do {
- rtc.get_time(&time);
- rtc.get_calendar(&calendar);
- epoch_time = rtc.get_epoch();
- //printf("seconds since the Epoch: %ld\n", epoch_time);
+//---------------------------------software RTC Start---------------------------------------------//
+ do
+ {
+ if (pc.readable())
+ {
+ scanf("%s",buf);
+ //printf("The entered string is %s : \n ",buf);*/
+ // buf[20] = 1621297647;
+ packet_1 = atoi(buf);
+ set_time(packet_1);
- packet_1 = epoch_time;
- }while((epoch_time % 60)!=0); // come out at the start of minute
-
-
+ if ((packet_1 % 60) == 0)
+ {
+ for (int u = 0;u<3;u++)
+ {
+ if (pc.readable())
+ {
+ scanf("%s",buf);
+ printf("Entered the minute string %s : \n ",buf);
+
+ packet_1 = atoi(buf);
+ set_time(packet_1);
+ }
+ }
+ timestamp_reader = true;
+ }
+ else
+ {
+ //printf("The timestamp is not divisible by 60 \n");
+ }
+ flag_first = true;
+
+ }
+
+ } while (timestamp_reader==false); // take the third timestamp
+
+//---------------------------------software RTC End---------------------------------------------//
+
while(1)
{
-
- if ((onesec_counter>=125))
- { t++;
- //t.start();
- //ledA = !ledA;
+
+
+ if ((onesec_counter>=112))
+ {
+ tic++;
+
pc.write((uint8_t *)header_device_id, sizeof(header_device_id)); // device ID
pc.write((uint8_t *)header_packet_type, sizeof(header_packet_type)); // packet type
- epoch_time = rtc.get_epoch();
+ time_t seconds = time(NULL);
+ packet_1 = seconds;
+
//time_t seconds = time(NULL); // if remove it the timestamp will be static
- packet_1 = epoch_time; //
- //packet_1 ++;
- // printf("Time as seconds since January 1, 1970 = %d\n", packet_1);
+ //packet_1 ++;
+ // printf("Time as seconds since January 1, 1970 = %d\n", packet_1);
p_1 = packet_1 & 0xff;
p_2 = (packet_1 >> 8) & 0xff;
p_3 = (packet_1 >> 16) & 0xff;
@@ -242,59 +253,71 @@
// t.reset();
// timer_fast.reset();
- if (t==10) //C1
+
+ if (tic==10) //C1
{
S0=1;
S1=0;
- S2=0;
- S3=0;
+ // S2=0;
+ // S3=0;
channel_num[0]= {1};
}
- if (t==20) //C2
+ if (tic==20) //C2
{
S0=0;
S1=1;
- S2=0;
- S3=0;
+ // S2=0;
+ // S3=0;
channel_num[0]= {2};
}
- if (t==30) // C0
+ if (tic==30) // C0
{
S0=0;
S1=0;
- S2=0;
- S3=0;
+ // S2=0;
+ // S3=0;
channel_num[0]= {0};
- t=0;}
+ tic=0;}
+
- if (A==0) //5_7 = P17
- {//t=50;
+ // for channel selection
+
+ if (A==0) //
+ {tic=50;
S0=0;
S1=0;
- S2=0;
- S3=0;
+ // S2=0;
+ // S3=0;
channel_num[0]= {0};}
- if (B==0) // 6_0 = P18
- {
+ if (B==0) //
+ {tic=60;
S0=1;
S1=0;
- S2=0;
- S3=0;
+ // S2=0;
+ // S3=0;
channel_num[0]= {1};}
- if (C==0) // 4_0 = P19
- {
+ if (C==0) //
+ {tic=70;
S0=0;
S1=1;
- S2=0;
- S3=0;
+ // S2=0;
+ // S3=0;
channel_num[0]= {2};}
+
+
+
+
+
+
+
+
}
// Read back ECG samples from the FIFO
- else if(ecgFIFOIntFlag==1)// && (timerflag == 0))
+ else if((ecgFIFOIntFlag==1))// && (timerflag == 0))
{
ecgFIFOIntFlag = 0;
@@ -359,19 +382,18 @@
}
}
}
-
-
-
-
+
+
+
+
void ecg_config(MAX30003& ecgAFE) {
-
+
// Reset ECG to clear registers
ecgAFE.writeRegister( MAX30003::SW_RST , 0);
// General config register setting
MAX30003::GeneralConfiguration_u CNFG_GEN_r;
CNFG_GEN_r.bits.en_ecg = 1; // Enable ECG channel
- CNFG_GEN_r.bits.fmstr = 1; // set frequency to 32000kHz
CNFG_GEN_r.bits.rbiasn = 1; // Enable resistive bias on negative input
CNFG_GEN_r.bits.rbiasp = 1; // Enable resistive bias on positive input
CNFG_GEN_r.bits.en_rbias = 1; // Enable resistive bias
@@ -386,7 +408,7 @@
CNFG_ECG_r.bits.dlpf = 1; // Digital LPF cutoff = 40Hz
CNFG_ECG_r.bits.dhpf = 1; // Digital HPF cutoff = 0.5Hz
CNFG_ECG_r.bits.gain = 3; // ECG gain = 160V/V
- CNFG_ECG_r.bits.rate = 2; // Sample rate = 125 sps
+ CNFG_ECG_r.bits.rate = 2; // Sample rate = 128 sps
ecgAFE.writeRegister( MAX30003::CNFG_ECG , CNFG_ECG_r.all);
@@ -425,4 +447,4 @@
return;
}
-
+
\ No newline at end of file
--- a/max32630fthr.lib Fri Jul 02 16:22:17 2021 +0000 +++ b/max32630fthr.lib Tue Aug 03 19:39:42 2021 +0000 @@ -1,1 +1,1 @@ -http://developer.mbed.org/teams/MaximIntegrated/code/max32630fthr/#02d6b69121e5 +http://developer.mbed.org/teams/MaximIntegrated/code/max32630fthr/#8f6e6a800f2f