This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AFE4490 problem

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