termocoppia bloccata da DS18B20

Buoncaldo a tutti, ho fatto un piccolo "termometro" con display (che fa anche altre cose tipo l'affumicatura ricordate?)
comunque ha anche una funzione semplice di termometro ed usa sia la DS che la termocoppia con il MAX6675.
Ovvero vorrei poterle usare a seconda del bisogno attancandole e staccandole. Purtroppo mi sono accorto che se stacco il DS
e lascio la termocoppia il valore della temperatura della termocoppia si congela rimanendo fisso, sembra non venga aggiornato.

Ho scoperto che se aggiungo un delay di 100ms prima della richiesta delle temperatura al MAX6675 il tutto funziona correttamente.
Non capisco perchè 100ms giusti non 1ms di meno. La DS è settata a 11bit.
Idee? Spunti?

sketch?

ecco qui ho ripulito dalle parti che non servono semplificando lo sketch.
Facendo questo mi sono accorto che il tempo necessario adesso si è allungato a 140ms
come se la parte di codice che prima veniva eseguita (che ho tolto per semplicità) impiegasse quei ms che mancano.

#include "max6675.h"
int ktcSO = 6;
int ktcCS = 7;
int ktcCLK = 8;
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 12               // pin sensore temperatura su millefori
float temperatura;                    // variabile 32 bit per la temperatura con virgola sensore DS18B20
float temperaturaT;                   // variabile temperatura termocoppia MAX6675

LiquidCrystal_I2C lcd(0x27, 16, 2);   // set the LCD address to 0x27 for a 16 chars and 2 line display

OneWire oneWire(ONE_WIRE_BUS);          // Setup a oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire);    // Pass our oneWire reference to Dallas Temperature sensor

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  sensors.begin();                    //inizializza sensore temperatura
  lcd.begin();
  lcd.backlight();                    //inizializza LCD
  lcd.clear();                        //pulisce display da eventuali caratteri residui
}

void loop() {
  // put your main code here, to run repeatedly:
  char buf[5];
  String tempString;

  sensors.requestTemperatures();                // Call sensors.requestTemperatures() to issue a global temperature and Requests to all devices on the bus
  temperatura = sensors.getTempCByIndex(0);
  delay(140);

  lcd.setCursor(0, 0); // posziono il cursore sulla prima riga al 1° carattere
  lcd.print("DS");
  lcd.setCursor(8, 0);
  lcd.print((char)223); //carattere ° di grado centigrado
  lcd.print("C");

  lcd.setCursor(11, 0);   // posziono il cursore sulla prima riga al 12° carattere
  if (temperatura == -127) lcd.print("-----");   //se la sonda è scollegata e ritorna il valore -127 oppure di inf scrive a display "----"
  else
  { //  dtostrf(FLOAT,WIDTH,PRECSISION,BUFFER);  assegna alla stringa tempString la rappresentazione ASCII del numero float con lunghezza totale 5 e una cifra dopo la virgola
    tempString = dtostrf(temperatura, 5, 1, buf);
    lcd.print(tempString);
  }

  temperaturaT = ktc.readCelsius();


  lcd.setCursor(0, 1);   //posiziono il cursore sulla seconda riga al 1° carattere
  lcd.print("MAX ");
  lcd.setCursor(8, 1);
  lcd.print((char)223); //carattere ° di grado centigrado
  lcd.print("C");
  lcd.setCursor(11, 1);   // posziono il cursore sulla seconda riga al 12° carattere
  tempString = dtostrf(temperaturaT, 5, 1, buf);   // dtostrf(FLOAT,WIDTH,PRECSISION,BUFFER);
  lcd.print(tempString);

  Serial.println(temperatura);
  Serial.println(temperaturaT);
}