Post by sinai1 on Mar 27, 2019 16:53:41 GMT
Hello Admins, me again.
Im developing a base system for CAN, LIN, ADS8688 & LCD interface, rigth now i have finished to implement the LCD, LIN & ADC reading. but i noted that when I use miliis() for my sampling all works greats, but when i change to micros(), to have better sampling rates this stops working on about 42.83 seconts.
This seems to be due the micros(), My question is wich is the maximun number for micros & millis on Aurix, on arduino normal boards is 32 bits.
void Read_ADCs()
{
if (millis() >= Sampling_Control_ADCs) // Sincronizacion con Lcd.
{
pinMode(23, OUTPUT);
digitalWrite(23,1);
//Full ADC Adquisition/Convertion took about 487 uS
Sampling_Control_ADCs = millis() + Analog_Sampling_mS;
//UPDATE ADCS from arduino
Volts_TC275[0] = ((ReadAD0() + 1) * (5.0 / 4096.0));
Volts_TC275[1] = ((ReadAD1() + 1) * (5.0 / 4096.0));
Volts_TC275[2] = ((ReadAD2() + 1) * (5.0 / 4096.0));
Volts_TC275[3] = ((ReadAD3() + 1) * (5.0 / 4096.0));
Volts_TC275[4] = ((ReadAD4() + 1) * (5.0 / 4096.0));
Volts_TC275[5] = ((ReadAD5() + 1) * (5.0 / 4096.0));
Volts_TC275[6] = ((ReadAD6() + 1) * (5.0 / 4096.0));
Volts_TC275[7] = ((ReadAD7() + 1) * (5.0 / 4096.0));
Volts_TC275[8] = ((ReadAD8() + 1) * (5.0 / 4096.0));
Volts_TC275[9] = ((ReadAD9() + 1) * (5.0 / 4096.0));
Volts_TC275[10] = ((ReadAD10() + 1) * (5.0 / 4096.0));
Volts_TC275[11] = ((ReadAD11() + 1) * (5.0 / 4096.0));
//UPDATE ADCS from ADS8688
Int_Voltage[0] = bank.noOp();
Int_Voltage[1] = bank.noOp();
Int_Voltage[2] = bank.noOp();
Int_Voltage[3] = bank.noOp();
Int_Voltage[4] = bank.noOp();
Int_Voltage[5] = bank.noOp();
Int_Voltage[6] = bank.noOp();
Int_Voltage[7] = bank.noOp();
//get float values of ADS8688 from integers
Volts_HC[0] = bank.I2V(Int_Voltage[0], m[0], b[0]);
Volts_HC[1] = bank.I2V(Int_Voltage[1], m[1], b[1]);
Volts_HC[2] = bank.I2V(Int_Voltage[2], m[2], b[2]);
Volts_HC[3] = bank.I2V(Int_Voltage[3], m[3], b[3]);
Volts_HC[4] = bank.I2V(Int_Voltage[4], m[4], b[4]);
Volts_HC[5] = bank.I2V(Int_Voltage[5], m[5], b[5]);
Volts_HC[6] = bank.I2V(Int_Voltage[6], m[6], b[6]);
Volts_HC[7] = bank.I2V(Int_Voltage[7], m[7], b[7]);
digitalWrite(23,0);
//Uncomment to debug via serial
// for (byte i = 0; i < 8; i++)
// {
// dtostrf(Volts_HC, 2, 3, V_Tem1);
// dtostrf(Volts_TC275, 2, 3, V_Tem2);
// dtostrf(Volts_TC275, 2, 3, V_Tem3);
// sprintf(outstr1, "HC %d: %sV", i , V_Tem1); //Uncomment To shown only HC
// //sprintf(outstr1, "HC %d: %sV / LC %d: %sV / LC %d: %sV", i , V_Tem1, i, V_Tem2, (i + 8) , V_Tem3); //Show All ADCs
// String_To_SerialDebug(outstr1); // print Volt label
// }
}
}
Im developing a base system for CAN, LIN, ADS8688 & LCD interface, rigth now i have finished to implement the LCD, LIN & ADC reading. but i noted that when I use miliis() for my sampling all works greats, but when i change to micros(), to have better sampling rates this stops working on about 42.83 seconts.
This seems to be due the micros(), My question is wich is the maximun number for micros & millis on Aurix, on arduino normal boards is 32 bits.
void Read_ADCs()
{
if (millis() >= Sampling_Control_ADCs) // Sincronizacion con Lcd.
{
pinMode(23, OUTPUT);
digitalWrite(23,1);
//Full ADC Adquisition/Convertion took about 487 uS
Sampling_Control_ADCs = millis() + Analog_Sampling_mS;
//UPDATE ADCS from arduino
Volts_TC275[0] = ((ReadAD0() + 1) * (5.0 / 4096.0));
Volts_TC275[1] = ((ReadAD1() + 1) * (5.0 / 4096.0));
Volts_TC275[2] = ((ReadAD2() + 1) * (5.0 / 4096.0));
Volts_TC275[3] = ((ReadAD3() + 1) * (5.0 / 4096.0));
Volts_TC275[4] = ((ReadAD4() + 1) * (5.0 / 4096.0));
Volts_TC275[5] = ((ReadAD5() + 1) * (5.0 / 4096.0));
Volts_TC275[6] = ((ReadAD6() + 1) * (5.0 / 4096.0));
Volts_TC275[7] = ((ReadAD7() + 1) * (5.0 / 4096.0));
Volts_TC275[8] = ((ReadAD8() + 1) * (5.0 / 4096.0));
Volts_TC275[9] = ((ReadAD9() + 1) * (5.0 / 4096.0));
Volts_TC275[10] = ((ReadAD10() + 1) * (5.0 / 4096.0));
Volts_TC275[11] = ((ReadAD11() + 1) * (5.0 / 4096.0));
//UPDATE ADCS from ADS8688
Int_Voltage[0] = bank.noOp();
Int_Voltage[1] = bank.noOp();
Int_Voltage[2] = bank.noOp();
Int_Voltage[3] = bank.noOp();
Int_Voltage[4] = bank.noOp();
Int_Voltage[5] = bank.noOp();
Int_Voltage[6] = bank.noOp();
Int_Voltage[7] = bank.noOp();
//get float values of ADS8688 from integers
Volts_HC[0] = bank.I2V(Int_Voltage[0], m[0], b[0]);
Volts_HC[1] = bank.I2V(Int_Voltage[1], m[1], b[1]);
Volts_HC[2] = bank.I2V(Int_Voltage[2], m[2], b[2]);
Volts_HC[3] = bank.I2V(Int_Voltage[3], m[3], b[3]);
Volts_HC[4] = bank.I2V(Int_Voltage[4], m[4], b[4]);
Volts_HC[5] = bank.I2V(Int_Voltage[5], m[5], b[5]);
Volts_HC[6] = bank.I2V(Int_Voltage[6], m[6], b[6]);
Volts_HC[7] = bank.I2V(Int_Voltage[7], m[7], b[7]);
digitalWrite(23,0);
//Uncomment to debug via serial
// for (byte i = 0; i < 8; i++)
// {
// dtostrf(Volts_HC, 2, 3, V_Tem1);
// dtostrf(Volts_TC275, 2, 3, V_Tem2);
// dtostrf(Volts_TC275, 2, 3, V_Tem3);
// sprintf(outstr1, "HC %d: %sV", i , V_Tem1); //Uncomment To shown only HC
// //sprintf(outstr1, "HC %d: %sV / LC %d: %sV / LC %d: %sV", i , V_Tem1, i, V_Tem2, (i + 8) , V_Tem3); //Show All ADCs
// String_To_SerialDebug(outstr1); // print Volt label
// }
}
}