Pages: [1]   Go Down
Author Topic: Duda con Dallas ds18B20  (Read 600 times)
0 Members and 1 Guest are viewing this topic.
Vilalba, Lugo, Spain
Offline Offline
Sr. Member
****
Karma: 23
Posts: 336
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas, estoy intentando hacer un controlador para mi acuario, y me he encontrado con un problema con la sonda de temperatura. Uso Dallas ds18B20 ,
tengo lectura correcta, pero al acceder a la sonda, me ralentiza el programa un monton

la instrucion que me relantiza es :

TmpSen1.requestTemperatures();


que estaré haciendo mal?


Gracias
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

la libreria tiene activado por defecto un delay interno debido a que este sensor necesita un tiempo para hacer la medida, el cual es proporcional a la resolucion con la que trabajas.
puedes desactivar ese delay pero tienes que ponerlo en tu codigo, pero si usar el comando delay, ya que estarias en las mismas, ya que delay para todo.

te pongo una muestra del codigo que uso yo

Code:
void READ_TEMP_18B20(DeviceAddress deviceAddress)
{
  // method 1 - slower
 
  //Serial.print(sensors.getTempC(deviceAddress));
  //Serial.print(" Temp F: ");
  //Serial.print(sensors.getTempF(deviceAddress)); // Makes a second call to getTempC and then converts to Fahrenheit
//delay (1000);
  // method 2 - faster
 // temp18b20 = sensors.getTempC(deviceAddress);

 if (millis() - lastTempRequest >= delayInMillis) // waited long enough??
  {
   
    temp18b20 = sensors.getTempCByIndex(0);   
    idle = 0;
       
    // immediately after fetching the temperature we request a new sample
    // in the async modus
    // for the demo we let the resolution change to show differences
    //TEMPERATURE_PRECISION++;
    //if (TEMPERATURE_PRECISION > 12) TEMPERATURE_PRECISION = 9;
   
    //sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);
    sensors.requestTemperatures();
    delayInMillis = 750 / (1 << (12 - TEMPERATURE_PRECISION));
    lastTempRequest = millis();
    }
}

el codigo lo saque de no se donde, buscando un poco por ahi.
Logged

Vilalba, Lugo, Spain
Offline Offline
Sr. Member
****
Karma: 23
Posts: 336
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muchas gracias por tu respuesta. TEMPERATURE_PRECISION

El motivo de la demora lo entiendo, el codigo que has posteado me funciona a la perfeccion pero con TEMPERATURE_PRECISION=0

 es asi como desactiva el delay?
por cierto, ya metidos en gastos y molestias en esta linea  :

delayInMillis = 750 / (1 << (12 - TEMPERATURE_PRECISION));

te importaria explicarme que hace el operador "<<" que no lo encuentro explicacion por ningun lado

Un saludo
Logged

Vilalba, Lugo, Spain
Offline Offline
Sr. Member
****
Karma: 23
Posts: 336
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Me respondo yo mismo, el << lo enconrtre  smiley-kiss

Lamento preguntas tan choras, pero la ignorancia es muy atrevida
Logged

Pages: [1]   Go Up
Jump to: