Autor Tema: DS1624  (Leído 2969 veces)

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

Desconectado monchu999

  • PIC10
  • *
  • Mensajes: 17
DS1624
« en: 13 de Abril de 2006, 06:21:19 »
Hola a todo el mundo!
Tengo el siguiente código para manejar el DS1624:

#include <18f4455.h>
#use delay(clock=16000000)
#define DAL_SCL PIN_B7
#define DAL_SDA PIN_B6
#include <ds1624.c>
#include <stdlib.h>
#include <string.h>
#include <lcd.c>
#fuses HS, NOWDT, NOPROTECT, NOPUT, NOBROWNOUT, NOLVP

void main(){

float temp=0.0;
init();
lcd_init();

lcd_putc("\f   Termometru");

while(TRUE){
   init_temp();
   temp=read_temp();
   delay_ms(2000);
   lcd_putc("\f");
   printf(lcd_putc,"%2.1f",temp);
   }

}

Lo único que consigo que me muestre por el LCD es 491.0

¿Alguien sabe que es lo que puede ocurrir?
Muchas gracias a todo el mundo!

Desde Xixón Asturies, un saludu
Desde Xixón, Asturies. 1 saludu

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
Re: DS1624
« Respuesta #1 en: 13 de Abril de 2006, 11:55:08 »
Libreria DS1624

Código: C++
  1. ///////////////////////////////////////////////////////////////////////////
  2. ////   Library for a Dallas 1624 Temperature and memory chip           ////
  3. ////                                                                   ////
  4. ////   init_ds1624()       Call before any other functions are called  ////
  5. ////                                                                   ////
  6. ////   init_temp();          Call before the read temp function is used////
  7. ////                                                                   ////
  8. ////   f = read_temp();      Read the temerature in ºC                 ////
  9. ////                                                                   ////
  10. ////   write_ds1624_eeprom(int address,int val) writes val to eeprom   ////
  11. ////                                                                   ////
  12. ////   dat=read_ds1624_eeprom(int address) reads from the address      ////
  13. ///////////////////////////////////////////////////////////////////////////
  14. ////        (C) Copyright 1996,2003 Custom Computer Services           ////
  15. //// This source code may only be used by licensed users of the CCS C  ////
  16. //// compiler.  This source code may only be distributed to other      ////
  17. //// licensed users of the CCS C compiler.  No other use, reproduction ////
  18. //// or distribution is permitted without written permission.          ////
  19. //// Derivative programs created using this software in object code    ////
  20. //// form are not restricted in any way.                               ////
  21. ///////////////////////////////////////////////////////////////////////////
  22.  
  23.  
  24. #ifndef DAL_SCL
  25. #define DAL_SCL PIN_C3
  26. #define DAL_SDA PIN_C4
  27. #endif
  28.  
  29. #use i2c(master, sda=DAL_SDA, scl=DAL_SCL)
  30.  
  31.  
  32. void temp_config()
  33. {
  34.    i2c_start();
  35.    i2c_write(0x90);
  36.    i2c_write(0xac);
  37.    i2c_write(0x01);
  38.    i2c_stop();
  39. }
  40.  
  41. void init_ds1624()
  42. {
  43.    output_high(DAL_SDA);
  44.    output_high(DAL_SCL);
  45. }
  46.  
  47.  
  48. void init_temp() {
  49.    temp_config();
  50.    delay_ms(50);
  51.    i2c_start();
  52.    i2c_write(0x90);
  53.    i2c_write(0xee);
  54.    i2c_stop();
  55. }
  56.  
  57.  
  58. float read_temp()        ////// Returns in ºC
  59. {
  60.    int datah,datal;
  61.    float dval;
  62.    i2c_start();
  63.    i2c_write(0x90);
  64.    i2c_write(0xaa);
  65.    i2c_start();
  66.    i2c_write(0x91);
  67.    datah=i2c_read();
  68.    datal=i2c_read(0);
  69.    i2c_stop();
  70.    dval=datah + .03125*(datal>>3);
  71.    return(dval);
  72. }
  73.  
  74.  
  75. int read_ds1624_eeprom(int address)
  76. {
  77.    int data;
  78.    i2c_start();
  79.    i2c_write(0x90);
  80.    i2c_write(0x17);
  81.    i2c_write(address);
  82.    i2c_start();
  83.    i2c_write(0x91);
  84.    data=i2c_read();
  85.    i2c_stop();
  86.    return data;
  87.  
  88.  
  89. }
  90.  
  91.  
  92. void write_ds1624_eeprom(int address, int data)
  93. {
  94.    i2c_start();
  95.    i2c_write(0x90);
  96.    i2c_write(0x17);
  97.    i2c_write(address);
  98.    i2c_write(data);
  99.    i2c_stop();
  100.    delay_ms(50);
  101. }

Y una practica con el DS1624:

Código: C++
  1. //***********************************************
  2. //* Prueba LCD a 20 Mhz
  3. //***********************************************
  4.  
  5.   #include "16F877.h"
  6.   #fuses NOLVP,HS,NOWDT,NOPROTECT,PUT,NOBROWNOUT
  7.   #use delay (clock=20000000)
  8.   #use fast_io(B)
  9.  
  10.   #ORG 0x1F00,0x1FFF {} //for the 8k 16F876/7 bootloader
  11.  
  12.   #include "LCD_4x20.C"
  13.   #include "DS1624.C"
  14.  
  15.   void main(void)
  16.   {
  17.    float temp;
  18.    lcd_init();
  19.    printf(lcd_putc,"\fTermometro DS1624\n");
  20.    init_ds1624();
  21.    while(1)
  22.    {
  23.       init_temp();
  24.       temp = read_temp();
  25.       lcd_gotoxy(1,2);
  26.       printf(lcd_putc,"%1.1fºC     ",temp);
  27.       delay_ms(500);
  28.    }
  29.   }
« Última modificación: 13 de Abril de 2006, 11:56:58 por RaDoN »
Si juegas contra el mejor, pierdes como los demás.

Desconectado monchu999

  • PIC10
  • *
  • Mensajes: 17
Re: DS1624
« Respuesta #2 en: 15 de Abril de 2006, 04:36:36 »
Nada chico no hay manera. No consigo que me de una lectura coherente. Me sigue dando lo mismo. probé con tu librería pero nada. No consigo encontrar el fallo. Voy a mirar a ver si es algo de hard. Es lo único que se me ocurre que pueda ser. Muchas gracias por todo!!!!!!!

Desde Xixón, Asturies 1 saludu!!
Desde Xixón, Asturies. 1 saludu

Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
Re: DS1624
« Respuesta #3 en: 15 de Abril de 2006, 06:26:01 »
Yo no he realizado nunca una comunicacion i2c, pero ¿has puesto las resistencias de pull-up?
Saludos desde Córdoba, españa

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
Re: DS1624
« Respuesta #4 en: 15 de Abril de 2006, 07:03:53 »
Yo no he realizado nunca una comunicacion i2c, pero ¿has puesto las resistencias de pull-up?

Ahi las dao, ¿no te faltará estas? La libreria y el ejemplo funcionan te lo puedo garantizar. (las pull-up que yo pongo para i2c son entre 2k2 y 4k7 por si te sirven de referencia)
Si juegas contra el mejor, pierdes como los demás.

Desconectado monchu999

  • PIC10
  • *
  • Mensajes: 17
Re: DS1624
« Respuesta #5 en: 15 de Abril de 2006, 10:24:59 »
 :shock:Ostras!!!!!!!!!!! pues no. Pues igual ye eso. Voy a probar cuando tenga un ratín
ya comentaré. Muchas gracias!!!!
Desde Xixón, Asturies, 1 saludu!
Desde Xixón, Asturies. 1 saludu

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: DS1624
« Respuesta #6 en: 15 de Abril de 2006, 14:13:01 »
Si no has puesto las pull-up no te va funcionar el bus i2c....


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte