Autor Tema: Termometro 16f877 con ds1624  (Leído 1496 veces)

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

Desconectado padron70

  • PIC10
  • *
  • Mensajes: 3
Termometro 16f877 con ds1624
« en: 04 de Diciembre de 2005, 16:15:00 »
Hola a todos.NavidadNavidad
Estoy intentando realizar un proyecto con un 16f877 que lea la temperatura de un ds1624. He recogido algunos ejemplos que tenemos por ahí (Jesus Trelles) pero no consigo mostrar una temperatura correcta. El programa que tengo en estos momentos es:

#include <16f877.h>
#use delay (clock=4000000)
#use I2C(MASTER, SDA=PIN_C4, SCL=PIN_C3, fast)
#use fast_io(A)
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD

#include <lcd_lolo.c>

#define simbolo_grados 0b11011111
#define simbolo_coma 0b00101100
#define I2CWRITE 0b10010000
#define I2CREAD 0b100100001
#define DS1624_CMD_ACCESSCONFIG  0xAC
#define DS1624_CMD_INITIATECONVERT  0xEE
#define DS1624_CMD_ACCESSTEMPERATURE 0xAA
#define DS1624_CMD_ACCESSMEMORY  0x17

# byte port_a=6
int datah, datal;

void i2c_conversion()
{

   i2c_start();
   i2c_write(I2CWRITE);
   i2c_write(DS1624_CMD_INITIATECONVERT);
   i2c_stop();
}

void i2c_ds1624_inicia()
{
   i2c_start();
   i2c_write(I2CWRITE);
   i2c_write(DS1624_CMD_ACCESSCONFIG);
   i2c_write(0b01001011);
   i2c_stop();
   delay_ms(20);
   i2c_conversion();
}

int i2c_ds1624_leer_temp_c()
{
   i2c_start();
   i2c_write(I2CWRITE);
   i2c_write(DS1624_CMD_ACCESSTEMPERATURE);
   i2c_start();
   i2c_write(I2CREAD);
   datah=i2c_read(0);
   datal=i2c_read(0);
   i2c_stop();
}

void main (void)
{
   int temperatura;
   int dec;
   lcd_inicia();
   i2c_ds1624_inicia();
   set_tris_a(0b111110);
   lcd_ponc("f"Giño;
   port_a=0;
   while(1)
   {
      temperatura=i2c_ds1624_leer_temp_c();
      i2c_conversion();
      lcd_ponc("f"Giño;
      switch(datal)
      {
         case 120: dec=9; break;
         case 112: dec=9; break;
         case 104: dec=8; break;
         case  96: dec=8; break;
         case  88: dec=7; break;
         case  80: dec=6; break;
         case  72: dec=6; break;
         case  64: dec=5; break;
         case  56: dec=4; break;
         case  48: dec=4; break;
         case  40: dec=3; break;
         case  32: dec=3; break;
         case  24: dec=2; break;
         case  16: dec=1; break;
         case   8: dec=1; break;
         case   0: dec=0; break;
      }
      lcd_vaixy(1,1);
      printf(lcd_ponc,"T= %d%c%d%cC",datah,simbolo_coma,dec,simbolo_grados);
      if ((datah>26) & (dec>5)) output_high (PIN_A0);
      if (datah<25) output_low (PIN_A0);
      delay_ms(2000);
   }
}

Lo unico que he conseguido es sacar: "T= -1º -2ªC"
En donde esta el fallo o fallos...

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Termometro 16f877 con ds1624
« Respuesta #1 en: 04 de Diciembre de 2005, 17:52:00 »
Haz probado a usar la libreria que trae el CCS?
Si juegas contra el mejor, pierdes como los demás.