Hola a todos! Vereis, estoy utilizando un sensor de temperatura DS1624 e intentar que un PIC18F4550 lea los datos de temperatura que recibe.
El código que estoy utilizando es el siguiente:
#include <xc.h>
#include <pic18f4550.h>
#include <plib/delays.h>
#include <plib/timers.h>
#include <plib/i2c.h>
#include <stdio.h>
#include <stdlib.h>
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
////////////
///DEFINE //
////////////
#define SDA PORTBbits.RB0
#define SCL PORTBbits.RB1
#define DIR_ESC 0b10010000
#define DIR_LEC 0b10010001
#define LED1 PORTDbits.RD2
#define LED2 PORTDbits.RD3
void temperature_config()
{
StartI2C();
IdleI2C();
WriteI2C(0x90);
IdleI2C();
WriteI2C(0xac);
IdleI2C();
WriteI2C(0x01);
IdleI2C();
StopI2C();
}
void inicio_temp()
{
temperature_config();
IdleI2C();
StartI2C();
WriteI2C(0x90);
IdleI2C();
WriteI2C(0xee);
IdleI2C();
StopI2C();
}
int leer_temp() ////// Returns in farenheit
{
int datah,datal;
float dval,fval;
StartI2C();
IdleI2C();
WriteI2C(0x90); //Escritura
IdleI2C();
WriteI2C(0xaa);
IdleI2C();
StartI2C();
IdleI2C();
WriteI2C(0x91); //Lectura
IdleI2C();
datah=ReadI2C();
AckI2C();
datal=ReadI2C();
NotAckI2C();
StopI2C();
//dval=datah+.03125*shift_right(&datal,1,0);
dval=datah+datal/256.0;//temperatura en grados
//fval=(dval*1.

+32;//Para grados Farenheit
return(dval);
}
/*
*
*/
void main()
{
LED1 = 0;
//////////////////////
//CONFIGURACION BIT //
//////////////////////
TRISBbits.RB0 = 1; //SDA
TRISBbits.RB1 = 0; //SCL
TRISDbits.RD2 = 0; //LED1
TRISDbits.RD3 = 0; //LED2
////////////////////
//INI SENSOR TEMP //
////////////////////
OpenI2C (MASTER, SLEW_OFF); //Slew rate disabled for 100 kHz mode
SSPADD = 19; //SSPADD = ((Fosc/BitRate)/4)-1 para master
LED1 = 1;
inicio_temp();
temperatura = leer_temp();
LED2 = 1;
while(1)
{
}
}
Los LEDs los utilizo para ver por donde va el código.
El problema es que cuando lo ejecuto se queda parado en " while ( !SSPSTATbits.BF );" al realizar la función de lectura del bus
A ver si entre todos podemos conseguir que funcione.
Gracias!