Tengo 2 termómetros digitales Dallas / Maxim DS18b20 conectados en modo de energía parásita. Si incluyo un fuerte pull-up como se muestra en la página 6 de la hoja de datos , el dispositivo más cercano da buenos resultados. datos; el que sigue lee 85C (== el valor de reinicio). Si desconecto el pullup fuerte, obtengo lecturas de temperatura válidas en ambos dispositivos.
Omití el interruptor MOSFET en el pullup y conecté el pin de i / o strong-pullup directamente al bus de un solo cable, flotando al hacer que el pin sea una entrada sin pullup.
¿Por qué el pullup fuerte no funciona como se esperaba? ¿Por qué funcionan bien los dispositivos sin uno?
Función de lectura del sensor:
int8_t DSSensorsSample(TempSens_t t[SENSORS_REQD], uint8_t nsens){
for( TempSens_t *p = t; nsens-- > 0; ++p ){
p->type = p->addr[0];
ds.reset();
ds.select(p->addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the end
pinMode(DSSTRONGPULLUPPIN, OUTPUT);
digitalWrite(DSSTRONGPULLUPPIN, HIGH);
delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
pinMode(DSSTRONGPULLUPPIN, INPUT);
digitalWrite(DSSTRONGPULLUPPIN, LOW);
p->is_present = ds.reset();
ds.select(p->addr);
ds.write(0xBE); // Read Scratchpad
for ( uint8_t j = 0; j < 9; j++) { // we need 9 bytes
p->data[j] = ds.read();
}
}
return( 0 );
}