Autor Tema: ds18s20 con GLCD (ks0108) con envio de datos por RS232  (Leído 3317 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado blackburne44

  • PIC10
  • *
  • Mensajes: 13
ds18s20 con GLCD (ks0108) con envio de datos por RS232
« en: 08 de Octubre de 2011, 19:14:18 »
Hola, he utilizado la libreria ds1820 (entregada por el usuario micro_pepe), pero en diferencia del proyecto suyo, yo quiero mostrar la temperatura en un GLCD (KS0108 controlador). En el programa cambiarian unas ciertas cosas, yo quisiera saber si me podrian decir que puedo cambiar en el programa para que la temperatura sea mostrada en el GLCD. Les dejo mi codigo y la libreria:

Citar
////////////////////////////////////////////////////////////////////////////
////   Library for a Dallas 1820/18S20 Temperature chip                 ////
////                                                                    ////
////   init_temp();          Call before the other functions are used   ////
////                                                                    ////
////                                                                    ////
////   d = read_full_temp(); Read the temp in degrees C (0 to 125)      ////
////                                                                    ////
////////////////////////////////////////////////////////////////////////////
 
 
#ifndef DS1820_PIN
   #define DS1820_PIN  PIN_A2
#endif
 
#define TOUCH_PIN  DS1820_PIN
#include <touch.c>
 
//uncomment if your using parasite power
//#define   PARASITE
   //if your using parasite power, you must specify the model you're using.
   //#define     DS1820
   //#define     DS18S20
 
#ifdef   PARASITE
   #ifdef   DS1820
      #define      waitForConversion()        delay_ms(500);       //check http://www.maxim-ic.com/datasheet/index.mvp/id/3021 to see why this value...
   #else   
      #ifdef   DS18S20
         #define      waitForConversion()        delay_ms(750);    //check http://www.maxim-ic.com/datasheet/index.mvp/id/3021 to see why this value...
      #endif
   #endif
#else
   #define        waitForConversion()         while(!touch_read_bit());
#endif
 
void init_temp() {
 
}
 
float read_full_temp()
{
    BYTE i, buffer[9];
    float minstep;
 
    if (touch_present()) {         // get present (reset)                    (2)
        touch_write_byte(0xCC);    // Skip ROM                               (3)
        touch_write_byte (0x44);   // Start Conversion
       
        waitForConversion();
       
        touch_present();           // get present (reset)                    (5)
        touch_write_byte(0xCC);    // Skip ROM                               (6)
        touch_write_byte (0xBE);   // Read Scratch Pad
 
        for(i=0; i<9;i++)          // read 9 bytes                           (7)
            buffer = touch_read_byte();
    }
 
//minstep = (float)(buffer[0]/2)-0.25+((float)( buffer[7]-buffer[6])/buffer[7]);
     if(buffer[1]){
      minstep = (float)(-1)*(~make16(buffer[1],buffer[0])+1)/2;
     }else{
      minstep = (float)(make16(buffer[1],buffer[0])/2);
     }
      minstep = minstep - 0.25 + ((float)( buffer[7] - buffer[6])/buffer[7]);
      return (minstep);
}

Citar
#include <prueba.h>
#include <HDM64GS12.c>
#include <graphics.c>
#include <touch.c>
#include <ds1820.c>
#define DS1820_PIN  PIN_C2
#define DS18S20
#define PARASITE

float Temp[]="Temperatura";
float minstep ;
char palabra [64];


void main()
{
  glcd_init(ON);
 
  minstep = read_full_temp();

while (1) {
  sprintf(palabra,"Temp = %3.2f  C",minstep);
  glcd_text57(0, 0, palabra, 1, ON);
  delay_ms(1000);
}
   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
}

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ds18s20 con GLCD (ks0108) con envio de datos por RS232
« Respuesta #1 en: 08 de Octubre de 2011, 19:20:42 »
Así como está parece estar bien. Que problema te da  :huh:

Solo vas a ver una sola lectura del ds1820 ya que la lectura la haces una sola vez.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado blackburne44

  • PIC10
  • *
  • Mensajes: 13
Re: ds18s20 con GLCD (ks0108) con envio de datos por RS232
« Respuesta #2 en: 08 de Octubre de 2011, 19:32:58 »
Hola Suky, muchisimas gracias por tu contestacion y por tu tiempo. Yendo al grano, el problema que tengo es que en el glcd, me aparece una temperatura de -0.25 °C (todo realizando la simulacion en Proteus), y por mas que cambie el valor del ds18s20 e inicie nuevamente la simulacion, no hay alteraciones, sigue mostrandose esos "-0.25 °C"  :(

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: ds18s20 con GLCD (ks0108) con envio de datos por RS232
« Respuesta #3 en: 08 de Octubre de 2011, 20:22:58 »
Hola.

Eso sucede cuando no se le da el tiempo necesario al protocolo del sensor ... mirando tu código, la sección de lectura del sensor esta por fuera del while{} no?

Saludos
El papel lo aguanta todo

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: ds18s20 con GLCD (ks0108) con envio de datos por RS232
« Respuesta #4 en: 08 de Octubre de 2011, 20:43:05 »
pon minstep = read_full_temp(); dentro del while

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ds18s20 con GLCD (ks0108) con envio de datos por RS232
« Respuesta #5 en: 08 de Octubre de 2011, 20:58:27 »
.... y por mas que cambie el valor del ds18s20 e inicie nuevamente la simulacion, no hay alteraciones, sigue mostrandose esos "-0.25 °C"  :(

Solo vas a ver una sola lectura del ds1820 ya que la lectura la haces una sola vez.

 :mrgreen:
No contesto mensajes privados, las consultas en el foro

Desconectado blackburne44

  • PIC10
  • *
  • Mensajes: 13
Re: ds18s20 con GLCD (ks0108) con envio de datos por RS232
« Respuesta #6 en: 09 de Octubre de 2011, 14:47:04 »
Muchas gracias muchachos por las respuestas de todos, lo que hice fue poner el minstep=read_full_temp(); dentro del while (1), pero lo simule nuevamente en el Proteus, y me sigue mostrando "-0.25 °C" en el GLCD. Pude hablar con el usuario micro_pepe, y me dijo que la temperatura es guardada en la variable "minstep", pero lo que no se acuerda es de que tipo es, pero le parece que es una cadena de valores, lo que tendria que ver es como mostrarla en el GLCD esa cadena...  :?. ¿Alguna idea?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ds18s20 con GLCD (ks0108) con envio de datos por RS232
« Respuesta #7 en: 09 de Octubre de 2011, 16:25:59 »
Está claro que la llamar a read_full_temp, esta función devuelve un float. Lo que haces para mostrar un float en el GLCD es correcto, solo que antes de visualizar otro valor debes borrar ese sector del GLCD.

Lo que puede fallar es la simulación del ds1820 o algo falla en la librería. Prueba cargando un valor establecido al float y visualizarlo en el GLCD.. También puedes ir paso a paso y ver si desde el ds1820 recibes el valor correcto, todo eso junto a su datasheet.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado blackburne44

  • PIC10
  • *
  • Mensajes: 13
Re: ds18s20 con GLCD (ks0108) con envio de datos por RS232
« Respuesta #8 en: 10 de Octubre de 2011, 16:48:32 »
Logre hacerlo funcionar muchachos!, muchisimas gracias a todos sus consejos y ayudas  :mrgreen: :mrgreen: :mrgreen:

Desconectado Palomino86

  • PIC16
  • ***
  • Mensajes: 180
Re: ds18s20 con GLCD (ks0108) con envio de datos por RS232
« Respuesta #9 en: 26 de Junio de 2012, 16:37:38 »
Hola que tal.

Tengo una duda acerca del DS18S20

Quisiera saber como cambiar su resolución de 0.5 °C a 0.1 °C.

He intentado con la formula que viene en la hoja de datos pero no han sido satisfactorias mis pruebas...

http://datasheets.maxim-ic.com/en/ds/DS18S20.pdf

temperature = temp-read - 0.25 + ((count per °c - count remain)/count per °c)

Saludos
Lo que no me destruye, me fortalece


 

anything