Yes dtostrf() is one way to go
from the manual:
char * dtostrf(double val, char width, byte precision, char * s)
The dtostrf() function converts the double value passed in val into an ASCII representationthat will be stored under s. The caller is responsible for providing sufficient storage in s and returns the pointer to the converted string s.
Conversion is done in the format "[-]d.ddd". The minimum field width of the output string (including the possible '.' and the possible sign for negative values) is given in width, and precision determines the number of digits after the decimal sign. width is signed value, negative for left adjustment.
---> so be smart about width and precision do define the length of the buffer.
An alternative way to go for this is to go back to integer arithmetics
say v holds your voltage in V and is calculated as a float to be 3.65938471 and you want to display that with 3 digit precision such as 3.659 V, then a "trick" if this is to multiply v by 1000 and store that into an int (unsigned and/or long if necessary) and let the arduino do the maths, then use itoa() to get the ASCII representation and on the display instead of showing Volts you display milli Volts --> 3659mV that uses the same number of space on a LCD (you have the 'm' but no longer have the decimal '.')
An alternative if you find that dtostrf() is too slow is to again x1000 your value in an int, use itoa() into a buffer and then when you want to display that string instead of printing it in one go is that you print the first part of the buffer until the 3 last chars, print a dot and then print the last 3 chars.
I believe the problem is the 700mS period needed to clear the error registers in the MAX31865s
I don't get that. clearing the error register is done by setting bit 1 of the config register to 1. this is done in taking CS low, doing two SPI.transfer() and taking CS HIGH again — which you do (besides taking cs low twice)
digitalWrite (cs0, LOW);
SPI.transfer(0x80); // send out register #
delayMicroseconds(10); // see if slight delay between write & read helps
SPI.transfer(0b10000010); // send out data -
digitalWrite(cs0, HIGH);
how can that be 700ms??? (even with the 10ns delay that is not needed).