Other Parts Discussed in Thread: AFE4490
hi, i write this code in c, but when i test it i can't read a valide Ratio or SPO2:
I test to write and read a singel register and i haven't problem.
this is my code:
AFE4490Init();
while(1){
delay_ms(3000);
for(i = 0; i<=count; i++)
{
delay_ms(2000);
AFE4490Write(TIAGAIN,0x000000); // CF = 5pF, RF = 500kR
AFE4490Write(TIA_AMB_GAIN,0x000005); // Timers ON, average 3 samples
// AFE4490Write(LEDCNTRL,0x0011414); // Switch to READ mode ORI
AFE4490Write(LEDCNTRL,0x008080); // Switch to READ mode
AFE4490Write(CONTROL2,0x020000); // vedi datasheet
//AFE4490Write(CONTROL1,0x010707); // Timers ON, average 3 samples ORI
AFE4490Write(CONTROL1,0x000103); // Timers ON, average 3 samples
AFE4490Write(CONTROL0,0x000001); // Switch to READ mode
shorttostr(i,MAX17048_string);
UART1_Write_Text("i= ");
UART1_Write_Text(MAX17048_string);
UART1_Write(0x0D);
UART1_Write(0x0A);
delay_MS(100);
if (portf.b1 == 1)
{
//UART1_Write_Text ("SOMI is connected, Reading register is proceed!");
UART1_Write(0x0D);
UART1_Write(0x0A);
IRheartsignal[i] = AFE4490Read(LED1VAL);
Redheartsignal[i] = AFE4490Read(LED2VAL);
IRdc[i]= mean (IRheartsignal, count);
Reddc[i]= mean (Redheartsignal, count);
difIRheartsig_dc= IRheartsignal[i] -IRdc[i];
difREDheartsig_dc = Redheartsignal[i] - Reddc[i];
powdifIR = pow(difIRheartsig_dc, 2.0);
powdifRed = pow(difREDheartsig_dc, 2.0);
IRac= (powdifIR)/i;
Redac= (powdifRed)/i;
Ratio= (Redac/Reddc[i])/(IRac/IRdc[i]);
SpOpercentage = 100 - (Ratio);
UART1_Write_Text("Red Data: ");
temp1=AFE4490Read(LED2VAL);
FloatToStr(temp1, MAX17048_string);
UART1_Write_Text(MAX17048_string);
UART1_Write(0x0D);
UART1_Write(0x0A);
UART1_Write_Text("Red Ambient Data: ");
temp1=AFE4490Read(ALED2VAL);
FloatToStr(temp1, MAX17048_string);
UART1_Write_Text(MAX17048_string);
UART1_Write(0x0D);
UART1_Write(0x0A);
UART1_Write_Text("Red Different: ");
temp1=AFE4490Read(LED2ABSVAL);
FloatToStr(temp1, MAX17048_string);
UART1_Write_Text(MAX17048_string);
UART1_Write(0x0D);
UART1_Write(0x0A);
UART1_Write_Text("IR Data: ");
temp1=AFE4490Read(LED1VAL);
FloatToStr(temp1, MAX17048_string);
UART1_Write_Text(MAX17048_string);
UART1_Write(0x0D);
UART1_Write(0x0A);
UART1_Write_Text("IR Ambient: ");
temp1=AFE4490Read(ALED1VAL);
FloatToStr(temp1, MAX17048_string);
UART1_Write_Text(MAX17048_string);
UART1_Write(0x0D);
UART1_Write(0x0A);
UART1_Write_Text("IR Different: ");
temp1=AFE4490Read(LED1ABSVAL);
FloatToStr(temp1, MAX17048_string);
UART1_Write_Text(MAX17048_string);
UART1_Write(0x0D);
UART1_Write(0x0A);
UART1_Write_Text("Ratio: ");
FloatToStr(Ratio, MAX17048_string);
UART1_Write_Text(MAX17048_string);
UART1_Write(0x0D);
UART1_Write(0x0A);
if ((SpOpercentage>100) ||(SpOpercentage<0))
{
UART1_Write_Text("SpO2:--");
UART1_Write(0x0D);
UART1_Write(0x0A);
}
else
{
UART1_Write_Text("");
UART1_Write_Text("SpO2:");
FloatToStr(SpOpercentage, MAX17048_string);
UART1_Write_Text(MAX17048_string);
UART1_Write_Text(" ");
UART1_Write_Text("%");
UART1_Write(0x0D);
UART1_Write(0x0A);
}
AFE4490Write(CONTROL0,0x000000); // disable READ mode
}
else
{
// UART1_Write_Text ("SOMI is not connected, check the wire!");
UART1_Write(0x0D);
UART1_Write(0x0A);
}
}
}
and the method init is:
void AFE4490Init (void)
{
AFE4490Write(CONTROL1, 0x000101);
AFE4490Write(CONTROL2, 0x020000); //vedi datasheet
AFE4490Write(PRPCOUNT, 0X001F3F);
AFE4490Write(LED2STC, 0X001770); //timer control
AFE4490Write(LED2ENDC,0X001F3E); //timer control
AFE4490Write(LED2LEDSTC,0X001770); //timer control
AFE4490Write(LED2LEDENDC,0X001F3F); //timer control
AFE4490Write(ALED2STC, 0X000000); //timer control
AFE4490Write(ALED2ENDC, 0X0007CE); //timer control
AFE4490Write(LED2CONVST,0X000002); //timer control
AFE4490Write(LED2CONVEND, 0X0007CF); //timer control
AFE4490Write(ALED2CONVST, 0X0007D2); //timer control
AFE4490Write(ALED2CONVEND,0X000F9F); //timer control
AFE4490Write(LED1STC, 0X0007D0); //timer control
AFE4490Write(LED1ENDC, 0X000F9E); //timer control
AFE4490Write(LED1LEDSTC, 0X0007D0); //timer control
AFE4490Write(LED1LEDENDC, 0X000F9F); //timer control
AFE4490Write(ALED1STC, 0X000FA0); //timer control
AFE4490Write(ALED1ENDC, 0X00176E); //timer control
AFE4490Write(LED1CONVST, 0X000FA2); //timer control
AFE4490Write(LED1CONVEND, 0X00176F); //timer control
AFE4490Write(ALED1CONVST, 0X001772); //timer control
AFE4490Write(ALED1CONVEND, 0X001F3F); //timer control
AFE4490Write(ADCRSTCNT0, 0X000000); //timer control
AFE4490Write(ADCRSTENDCT0,0X000000); //timer control
AFE4490Write(ADCRSTCNT1, 0X0007D0); //timer control
AFE4490Write(ADCRSTENDCT1, 0X0007D0); //timer control
AFE4490Write(ADCRSTCNT2, 0X000FA0); //timer control
AFE4490Write(ADCRSTENDCT2, 0X000FA0); //timer control
AFE4490Write(ADCRSTCNT3, 0X001770); //timer control
AFE4490Write(ADCRSTENDCT3, 0X001770);
delay_ms(1000);
}
can you help me?
i don't understand the method to obtain the ratio and the spo2
i use the classical "plug" for the finger (i buy it with your evaulation board), and i have the NJL5501R, i can work with 3.3v and with 5v...
thanks, i 'll wait for help