Autor Tema: DS18s20  (Leído 14100 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: DS18s20
« Respuesta #15 en: 18 de Mayo de 2007, 04:27:03 »
Me alegro mucho Pablo!!  :D

Ha sido un placer.  :mrgreen: :mrgreen:


Un saludo desde Alicante.

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: DS18s20
« Respuesta #16 en: 03 de Junio de 2007, 23:36:32 »
Azicuetano: volvi, necesito que me ayudes, please.

Volvi al ruedo despues de un tiempo que tuve que para por razon particulares y comence a probar el soft pero con todo lo que tenia antes.
El tema es asi, luego de muchas pruebas logre descubrir cual era el problema que tengo en este momento.
Yo tengo un ds1307 funcionando y que se lee en cada interrupcion del RTCC, ahora descubri que cuando se ejecuta la funcion Send_MatchRom, el reloj se para. Esto me di cuenta porque cuando tenia la sonda conectada el reloj se detenia y cuando la desconectaba continuaba desde la hora actual.
Elimine la funcion Send_MatchRom y el reloj funciona perfecto.

Tenes idea que es lo que puede estar pasando?

Desde ya muchas gracias.
Pablo

Acabo de hacer otra prueba y lei el ds1307 en otro lugar y sigue funcionando osea que el problema concreto es que mientras esta conectado el DS18s20 en RTCC queda deshabilitado.
« Última modificación: 03 de Junio de 2007, 23:44:34 por pablo »

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: DS18s20
« Respuesta #17 en: 04 de Junio de 2007, 04:32:48 »
Hola pablo!

Yo tengo una aplicación exáctamente igual que la que comentas.

Varias sondas + RTC + EEPROM y nunca he tenido ningún problema. Creo que nos tendríamos que poner a analizar el código.

Si te parece, pon el programa y lo analizamos entre todos.


Un saludo desde Alicante.

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: DS18s20
« Respuesta #18 en: 06 de Junio de 2007, 22:47:42 »
Como estas, gracias por la buena onda.
Te cuento que la lectura ahora la estoy haciendo dentro del RTCC y funciona bien. El tema es que la resolucion es de 0.5 y la lectura es mucho mas lenta que con el LM35, antes lo que yo hacia era leer unas 200 veces y sacar un promedio y de esta forma lograba una "resolucion" de 0.1, pero ahora al ponerlo en el RTCC solo puede leer unas 10 veces y no logro mas de un 0.3.
Si la lectura la hago en otro lugar se me cuelga todo, el soft tiene unas 1500 lineas no se si se va a entender lo que hice.
Como haces para poder tener una mejor resolucion, donde lees y cuantas veces podes leer.
Por ejemplo lo que me pasa es que cuando leo en cada ciclo de RTCC, los botones funcionan cuando quieres, es como si se colgara un toque.

Que opinas. Tenes alguna idea.

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: DS18s20
« Respuesta #19 en: 06 de Junio de 2007, 22:49:14 »
Otra cosa el cristal es de 4mhz, que pasa si uso uno mas grande. Deberia hacerlo?

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: DS18s20
« Respuesta #20 en: 07 de Junio de 2007, 19:12:22 »
Hola Pablo.

Es muy extraño lo que comentas. Vamos por partes.

Si utilizas la fórmula que yo utilizaba

t16=(t*1000*636)/1000000;

Obtienes:

t=500   t16=318
t=501   t16=318,636
t=502   t16=319,272
t=503   t16=319,908
t=504   t16=320,544
t=505   t16=321,18
t=506   t16=321,816
t=507   t16=322,452
t=508   t16=323,088
t=509   t16=323,724
t=510   t16=324,36

Para los distintos valores de t (que nos da la sonda) tenemos los distintos valores de temperatura, que en este caso concreto (si corremos la coma un lugar hacia la izquierda) serían:

t=500   t16=31.8 ºC
t=501   t16=31.8 ºC
t=502   t16=31.9 ºC
t=503   t16=31.9 ºC
t=504   t16=32.0 ºC
t=505   t16=32.1 ºC
t=506   t16=32.1 ºC
t=507   t16=32.2 ºC
t=508   t16=32.3 ºC
t=509   t16=32.3 ºC
t=510   t16=32.4 ºC

Ya tenemos una resolución de 0.1, ¿no?

Si estoy equivocado avísame y me lo miro mejor.

Yo hacia una lectura de temperatura cada segundo (más o menos). Desconozco el efecto de hacer 200 lecturas seguidas  :z)

Por otro lado, no entiendo muy bien a que te refieres con el RTCC. Eso es un real time clock, ¿no? El que yo utilizaba, símplemente le pedía la hora y me la daba. No hacía ninguna función especial ni nada por el estilo (utilizaba una librería del ccs). No entiendo muy bien a que te refieres con leer la temperatura dentro del RTCC. Además, el reloj funciona mientras tenga alimentación, no entiendo porque se puede quedar parado ¿?¿? Aunque apagues y enciendas el PIC 1000 veces, si no le quitas la alimentación al reloj, no tiene por que atrasarse ni un segundo ¿?¿?

Bueno, valora lo que te comento al principio de la precisión, que es posible que no necesites hacer tantísimas lecturas y que tus quebraderos de cabeza disminuyan en un grado considerable (con una precisión de 0.1  :mrgreen: :D :mrgreen:)


Un saludo desde Alicante.

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: DS18s20
« Respuesta #21 en: 07 de Junio de 2007, 20:49:11 »
Te muestro la funcion que me pasaste hace un tiempo, porque la lectura que me muestra ahora es 30.0 antes mostraba 24, pero con 0.5 ahora es entre 0.5 y 0.7 grado de resolucion.
No se muy bien que es lo que hace la funcion por eso no puedo corregir nada.

float leer_temperatura(byte n)
{
   int read_ok=0;
   float t=0;

      if(ow_reset()==0)
      {
         //write_byte(0xcc);                 //skip ROM
         Send_MatchRom();
         write_byte(0x44);                //convert T
      }
      delay_ms(1);     // retardo para desahogar al sensor y evitar posibles colisiones que el sensor

      if(ow_reset()==0)
      {
         //write_byte(0xcc);               //skip ROM
          numROMs=n;                    // Metemos en la variable 'numROMs' el número del sensor del cual queremos medir la temperatura
         Send_MatchRom();
         write_byte(0xbe);               //read scratchpad
 

         temperatura_l=read_byte();
         temperatura_h=read_byte();


         read_ok=1;
      }

      if(read_ok)
      {
         

         t=make16(temperatura_h,temperatura_l);        //calcula la temperatura
         t=(t*1000*636)/1000000;
//         t=t*50;
//         t=t-25;
//         t=t/100;
//         t+=0.3;
         return t;
      } else {   
         numero_total_de_ROMs = 0;         
      }
}

Perdoname el tema es que no se electronica, lo hice de tomando cosas de internet y aprendi a programar en este lenguaje solo para hacerme este aparato y hay cosas que no caso una.
Te explico algunas de las cosas que me preguntabas.
El RTCC me referia al clock interno del PIC, como reloj externo uso el DS1307 que tiene una pila para que no se corte. Lo de la cantidad de veces no lo sabia.
Si hay que leer solo una vez por segundo olvidate todo lo que trate de explicarte, creo que yo solo me entiendo jaja.

Aca te paso toda la libreria que me pasaste por las dudas de que haya algo mal.

Desde ya nuevamente te agradesco.

1wire.h
//----------------------------------------------------------------
//
//                                    1wire.h
//
//
//
//
//
//
//----------------------------------------------------------------


//-------------------------data pin definition--------------------
#define DQ pin_A2
//----------------------------------------------------------------
//-----------  AÑADIDO POR AZI - ------------------------------------
////////////////////////////////////////////////////////////////////////////
// GLOBAL VARIABLES
//

//unsigned char ROM_NO[8];
unsigned char ROMs[8]; // ROM Bit
unsigned char lastDiscrep = 0; // last discrepancy
unsigned char doneFlag = 0; // Done flag
unsigned char FoundROM[5][8]; // table of found ROM codes
unsigned char numROMs;
unsigned char dowcrc;

unsigned char dscrc_table[] = {
0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65,
157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220,
35,125,159,193, 66, 28,254,160,225,191, 93, 3,128,222, 60, 98,
190,224, 2, 92,223,129, 99, 61,124, 34,192,158, 29, 67,161,255,
70, 24,250,164, 39,121,155,197,132,218, 56,102,229,187, 89, 7,
219,133,103, 57,186,228, 6, 88, 25, 71,165,251,120, 38,196,154,
101, 59,217,135, 4, 90,184,230,167,249, 27, 69,198,152,122, 36,
248,166, 68, 26,153,199, 37,123, 58,100,134,216, 91, 5,231,185,
140,210, 48,110,237,179, 81, 15, 78, 16,242,172, 47,113,147,205,
17, 79,173,243,112, 46,204,146,211,141,111, 49,178,236, 14, 80,
175,241, 19, 77,206,144,114, 44,109, 51,209,143, 12, 82,176,238,
50,108,142,208, 83, 13,239,177,240,174, 76, 18,145,207, 45,115,
202,148,118, 40,171,245, 23, 73, 8, 86,180,234,105, 55,213,139,
87, 9,235,181, 54,104,138,212,149,203, 41,119,244,170, 72, 22,
233,183, 85, 11,136,214, 52,106, 43,117,151,201, 74, 20,246,168,
116, 42,200,150, 21, 75,169,247,182,232, 10, 84,215,137,107, 53};
//unsigned char page_data[32];

//////////////////////////////////////////////////////////////////////////////
// OW_RESET - performs a reset on the one-wire bus and
// returns the presence detect. Reset is 480us, so delay
// value is (480-24)/16 = 28.5 - we use 29. Presence checked
// another 70us later, so delay is (70-24)/16 = 2.875 - we use 3.
//

ow_reset(void)
{
   int presence;
   output_low(DQ); //pull DQ line low
   delay_us(480);// leave it low for 480us
   output_bit(DQ,1); // allow line to return high
   delay_us(72); // wait for presence
   presence = input(DQ); // get presence signal
   delay_us(424);
   return(presence); // presence signal returned
} // 0=presence, 1 = no part

//////////////////////////////////////////////////////////////////////////////
// READ_BIT - reads a bit from the one-wire bus. The delay
// required for a read is 15us, so the DELAY routine won't work.
// We put our own delay function in this routine in the form of a
// for() loop.
//

byte read_bit(void)
{
   //byte i;
   
   output_bit(DQ,0); // pull DQ low to start timeslot
   output_bit(DQ,1); // then return high
   delay_us(15); // delay 15us from start of timeslot
   return(input(DQ)); // return value of DQ line
}

//////////////////////////////////////////////////////////////////////////////
// WRITE_BIT - writes a bit to the one-wire bus, passed in bitval.
//

void write_bit(byte bitval)
{
   output_bit(DQ,0); // pull DQ low to start timeslot
   if(bitval==1) output_bit(DQ,1); // return DQ high if write 1
   delay_us(104); // hold value for remainder of timeslot
   output_bit(DQ,1);
}// Delay provides 16us per loop, plus 24us. Therefore delay(5) = 104us

//////////////////////////////////////////////////////////////////////////////
// READ_BYTE - reads a byte from the one-wire bus.
//

byte read_byte(void)
{
   byte i;
   byte value=0;
   for (i=0;i<8;i++)
      {
      if(read_bit()) value|=0x01<<i; // reads byte in, one byte at a time and then
      // shifts it left
      delay_us(120); // wait for rest of timeslot
      }
   return(value);
}

//////////////////////////////////////////////////////////////////////////////
// WRITE_BYTE - writes a byte to the one-wire bus.
//

void write_byte(byte val)
{
   byte i;
   byte temp;
   for (i=0; i<8; i++) // writes byte, one bit at a time
      {
      temp = val>>i; // shifts val right 'i' spaces
      temp &= 0x01; // copy that bit to temp
      write_bit(temp); // write bit in temp into
      }
   delay_us(104);
}

//////////////////////////////////////////////////////////////////////////////
// ONE WIRE CRC
//

unsigned char ow_crc( unsigned char x)
{

   dowcrc = dscrc_table[dowcrc^x];
   return dowcrc;
}

/////////////////////////////////////////////////////////////////////////////////
// NEXT
// The Next function searches for the next device on the 1-wire bus. If
// there are no more devices on the 1-wire then false is returned.
//

unsigned char Next(void)
{
   unsigned char m = 1; // ROM Bit index
   unsigned char n = 0; // ROM Byte index
   unsigned char k = 1; // bit mask
   unsigned char x = 0;
   unsigned char discrepMarker = 0; // discrepancy marker
   unsigned char g; // Output bit
   unsigned char nxt; // return value
   int flag;
   nxt = FALSE; // set the next flag to false
   dowcrc = 0; // reset the dowcrc
   flag = ow_reset(); // reset the 1-wire
   if(flag||doneFlag) // no parts -> return false
      {
      lastDiscrep = 0; // reset the search
      return FALSE;
      }
   write_byte(0xF0); // send SearchROM command
   do
   // for all eight bytes
      {
      x = 0;
      if(read_bit()==1) x = 2;
      delay_us(120);
      if(read_bit()==1) x |= 1; // and its complement
      if(x ==3) // there are no devices on the 1-wire
      break;
      else
         {
         if(x>0) // all devices coupled have 0 or 1
         g = x>>1; // bit write value for search
         else
            {
            // if this discrepancy is before the last
            // discrepancy on a previous Next then pick
            // the same as last time
            if(m<lastDiscrep)
            g = ((ROMs[n]&k)>0);
            else // if equal to last pick 1
            g = (m==lastDiscrep); // if not then pick 0
            // if 0 was picked then record
            // position with mask k
            if (g==0) discrepMarker = m;
            }
         if(g==1) // isolate bit in ROM[n] with mask k
         ROMs[n] |= k;
         else
         ROMs[n] &= ~k;
         write_bit(g); // ROM search write
         m++; // increment bit counter m
         k = k<<1; // and shift the bit mask k
         if(k==0) // if the mask is 0 then go to new ROM
            { // byte n and reset mask
            ow_crc(ROMs[n]); // accumulate the CRC
            n++; k++;
            }
         }
      }while(n<8); //loop until through all ROM bytes 0-7
   if(m<65||dowcrc) // if search was unsuccessful then
   lastDiscrep=0; // reset the last discrepancy to 0
   else
      {
      // search was successful, so set lastDiscrep,
      // lastOne, nxt
      lastDiscrep = discrepMarker;
      doneFlag = (lastDiscrep==0);
      nxt = TRUE; // indicates search is not complete yet, more
      // parts remain
      }
   return nxt;
}

////////////////////////////////////////////////////////////////////////////
// FIRST
// The First function resets the current state of a ROM search and calls
// Next to find the first device on the 1-wire bus.
//

unsigned char First(void)
{
   lastDiscrep = 0; // reset the rom search last discrepancy global
   doneFlag = FALSE;
   return Next(); // call Next and return its return value
}

////////////////////////////////////////////////////////////////////////////////
// FIND DEVICES

void FindDevices(void)
{
   unsigned char m;
   
   if(!ow_reset()) //Begins when a presence is detected
   {
      if(First()) //Begins when at least one part is found
      {
         numROMs=0;
         do
         {
            numROMs++;
            for(m=0;m<8;m++)
            {
               FoundROM[numROMs][m]=ROMs[m];  //Identifies ROM
                                             //number on found device
            }

//          printf("\nROM CODE =%02X%02X%02X%02X\n",FoundROM[4][7],FoundROM[4][6],FoundROM[4][5],FoundROM[4][4],FoundROM[4][3],FoundROM[4][2],FoundROM[4][1],FoundROM[4][0]);
         }while (Next()&&(numROMs<10)); //Continues until no additional devices are found
      }
   }
   else
   {
      numROMs=55;
   }
}

////////////////////////////////////////////////////////////////////////////////
// Perform Match ROM
//
unsigned char Send_MatchRom(void)
{
   unsigned char i;
   
   if(ow_reset()) return false;
   
   write_byte(0x55); // match ROM
   
   for(i=0;i<8;i++)
   {
      write_byte(FoundROM[numROMs]); //send ROM code
   }
   return true;

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: DS18s20
« Respuesta #22 en: 11 de Junio de 2007, 20:52:29 »
Otro dato para ver si te podes dar cuenta del error.

t=make16(temperatura_h,temperatura_l);        //calcula la temperatura

Esto me devuelve 48

Espero sirva, quice cambiar las multiplicaciones para probar pero siempre me dan con diferencia mayores 0.1

Gracias.

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: DS18s20
« Respuesta #23 en: 12 de Junio de 2007, 05:04:02 »
Hola pablo!

Esta tarde (en cuanto llegue a mi casa) te explico paso por paso lo que hace mi función.

Un saludo desde Alicante.

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: DS18s20
« Respuesta #24 en: 12 de Junio de 2007, 18:39:17 »
Hola Pablo!

Aquí estoy  :mrgreen:

He estado mirando la función que tienes implementada y... veo algunas diferencias con la que yo te pasé en su día.

Vamos por partes:

Tú pones

Código: [Seleccionar]
float leer_temperatura(byte n)
Y yo tengo

Código: [Seleccionar]
void leer_temperatura(void)
Entiendo que tú lo que quieres es que te lea la temperatura de la sonda que le pasas como parámetro a la función, ¿no? Si es así creo que lo tienes bien, pero, la función la inicializas como un 'float'. Esto sería así si esperaras que dicha función te devolviera una variable del tipo 'float'. Por lo que veo no es tú caso. Es decir, tendrías que poner esto:

Código: [Seleccionar]
void leer_temperatura(byte n)
Mi función completa es:

Código: [Seleccionar]
void leer_temperatura(void)
{
   int read_ok=0;
   int n=0;

   lectura_erronea=1;

   for(n=1; n<=numero_total_de_ROMs; n++)
   {
      lectura_erronea=1;

      if(n==num_sonda || num_sonda==0)
      {

         while(lectura_erronea==1)
         {

            delay_ms(1);                    // retardo para desahogar al sensor y evitar posibles colisiones que el sensor
                                             // si no ponemos el retardo de vez en cuando el sensor nos envía datos erroneos
            if(ow_reset()==0)
          {
   //          write_byte(0xcc);      //skip ROM
               numROMs=n;                    // Metemos en la variable 'numROMs' el número del sensor del cual queremos medir la temperatura
               Send_MatchRom();              // Acto seguido llamamos a la función Send_MatchRom().
            write_byte(0x44);     //convert T
          }

            delay_ms(1);                    // retardo para desahogar al sensor y evitar posibles colisiones que el sensor
                                             // si no ponemos el retardo de vez en cuando el sensor nos envía datos erroneos
            if(ow_reset()==0)
          {
   //          write_byte(0xcc); //skip ROM
               numROMs=n;                    // Metemos en la variable 'numROMs' el número del sensor del cual queremos medir la temperatura
               Send_MatchRom();              // Acto seguido llamamos a la función Send_MatchRom().
            write_byte(0xbe); //read scratchpad

            temperatura_l=read_byte();
               temperatura_h=read_byte();


               read_ok=1;
          }

            if(read_ok)
            {
               t=make16(temperatura_h,temperatura_l);        //calcula la temperatura
               t16=(t*1000*636)/1000000;                    // calculos hechos experimentalmente para calcular la relación
                                                            // entre el valor dado por la sonda y la temperatura en ºC

               if(t16>=1000)
               {
                  lectura_erronea=1;
 //                 printf("LECTURA ERRONEA");
               }
               else
               {
                  lectura_erronea=0;
               }

               if(estabilizar_medida==1 && lectura_erronea==0)                    // Esta variable se pondrá a uno cuando entremos en el bucle infinito
               {                                            // en un principio esta a cero porque hago 5 o 6 medidas antes de empezar a monitorizarlas por el RS232
                  if(t16<100)
                  {
                     disable_interrupts(global);
                     printf("@%d======0%Lu#", n, t16);                 // Envío mensaje de temperatura.
                     enable_interrupts(global);
                  }
                  else
                  {
                     disable_interrupts(global);
                     printf("@%d======%Lu#", n, t16);                 // Envío mensaje de temperatura.
                     enable_interrupts(global);
                  }
               }

               if(ordenador==OFF && lectura_erronea==0)
               {
                  guardar_temperaturas_eeprom();
               }
            }
         }
         delay_ms(200);

         // ********#   trama final sondas;
      }
   }
}

(no se por que diablos no me aparecen bien las tabulaciones  :x )

Bueno, otra diferencia que veo (y a mi juicio muy importante) es:

Tú tienes:

Código: [Seleccionar]
t=make16(temperatura_h,temperatura_l);        //calcula la temperatura
         t=(t*1000*636)/1000000;

Yo tengo:

Código: [Seleccionar]
t=make16(temperatura_h,temperatura_l);        //calcula la temperatura
t16=(t*1000*636)/1000000;                    // calculos hechos experimentalmente para calcular la relación
                                                            // entre el valor dado por la sonda y la temperatura en ºC

Primero meto en la variable 't' el valor y despues en la variable 't16' el valor final.

Esto lo hago así porque los tipos de variables son distintos.

Los que yo utilizo son:

float t=0;
int16 t16=0;
byte temperatura_l=0, temperatura_h=0;

Cambia los tipos de variables por los que yo tengo (es muy probable que sea eso).

Bueno pablo, ya me dices como te va la cosa. Si continuas teniendo problemas... yo continuo estando en el foro  :D :D

Espero noticias tuyas.


Un saludo desde Alicante.

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: DS18s20
« Respuesta #25 en: 12 de Junio de 2007, 19:11:42 »
No puede ser sigo sin lograrlo, ahora copie la funcion como esta y me marca 043 como temperatura de la sonda 1 cuando deberia estar diciendo 34 grados y lo que no tengo es la variable ordenador pero la anule.
No se que esta pasando. Se te ocurre otra cosa?
« Última modificación: 13 de Junio de 2007, 11:48:19 por pablo »

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: DS18s20
« Respuesta #26 en: 12 de Junio de 2007, 19:18:59 »
Me imagino que no leeria nada pero puede ser que tenga algun problema con algun seteo del puerto o algo asi, tenes algun ejemplo sensillo para que pueda probar?

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: DS18s20
« Respuesta #27 en: 13 de Junio de 2007, 12:29:56 »
Hola pablo,

Confírmame, porfa, que las variables las tienes declaradas así:

float t=0;
int16 t16=0;
byte temperatura_l=0, temperatura_h=0;

Esta noche busco algún ejemplo de las primeras versiones simplificadas del programa .



Un saludo desde Alicante.

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: DS18s20
« Respuesta #28 en: 13 de Junio de 2007, 13:34:25 »
Eso esta tal cual lo pusiste, copie la funcion y declare las variables como me indicaste.

Gracias.

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: DS18s20
« Respuesta #29 en: 13 de Junio de 2007, 19:02:09 »
Hola Pablo.

Vamos a hacer una cosa, haz una versión del programa en la que únicamente esté la parte encargada de medir la temperatura.

Quita todo lo demás, RTC, EEPROM, etc. etc.

Quitalo todo exceptuando la parte de la medida. Prueba a ver si te funciona bien. Si tienes algún problema, mándame esa versión del programa y yo le pego un vistazo.

Si no lo hacemos así nos va a resultar muy complicado (y tardaremos mucho tiempo), ¿ok?

Espero noticias.

PD: Tengo fabricandose el equipo en el que yo utilizaba las DS18B20 (en estos momentos no tengo ninguno en mis manos). En cuanto lo tenga te hago un programa simplificado y te lo envio. Si ese programa que te envie no funciona... si queres quedamos un día a una hora y nos suicidamos simultaneamente  :D :D :D :D jajaja


Un saludo desde Alicante y ánimo!!!