Buenas tardes!!
Les dejo el código que he escrito para ver si me pueden dar una mano, debido a que no logro tener una respuesta del sensor
YA ME ESTOY VOLVIENDO LOCO!!!}
Tengo un programador que me permite ir viendo el paso a paso del programa que le cargo al jm60, y se cuelga cuando espera el I2C_WAIT() del I2C_ReadRegister() luego de haber enviado el adress. Les dejo la libreria y el codigo:
Libreria utilizada:
#include "derivative.h"
#include "I2C.h"
void I2C_WriteRegister(unsigned char u8SlaveAddress, unsigned char u8RegisterAddress, /*unsigned*/ char u8Data)
{
I2C_Start();
IICD = u8SlaveAddress << 1; /* Send I2C device address with W/R bit = 0 */
I2C_Wait();
IICD = u8RegisterAddress; /* Send register address */
I2C_Wait();
IICD = u8Data; /* Send the data */
I2C_Wait();
I2C_Stop();
Pause(50);
}
unsigned char I2C_ReadRegister(unsigned char u8SlaveAddress, unsigned char u8RegisterAddress)
{
unsigned char result;
I2C_Start();
IICD = u8SlaveAddress << 1; /* Send I2C device address with W/R bit = 0 */
I2C_Wait();
IICD = u8RegisterAddress; /* Send register address */
I2C_Wait();
I2C_RepeatedStart();
IICD = (u8SlaveAddress << 1) | 0x01; /* Send I2C device address this time with W/R bit = 1 */
I2C_Wait();
I2C_EnterRxMode();
I2C_DisableAck();
result = IICD;
I2C_Wait();
I2C_Stop();
result = IICD;
Pause(50);
return result;
}
Codigo principal:
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#include "I2C.h"
#ifdef __cplusplus
extern "C"
#endif
void MCU_init(void); /* Device initialization function declaration */
unsigned char BMP180_ADRESS = 0x77; // 7-bit address
unsigned char BMP180_REG_CONTROL = 0xF4;
unsigned char BMP180_REG_RESULT = 0xF6;
long ut;
char msb;
char lsb;
char result;
unsigned short ac5;
unsigned short ac6;
short mc;
short md;
long x1;
long x2;
long b5;
#define BMP180_COMMAND_TEMPERATURE 0x2E
void main(void) {
MCU_init(); /* call Device Initialization */
for(;
{
/* Lee datos para calibracion de temperatura */
I2C_ReadRegister(BMP180_ADRESS, 0xB2) ;
ac5=result;
I2C_ReadRegister(BMP180_ADRESS, 0xB4) ;
ac6=result;
I2C_ReadRegister(BMP180_ADRESS, 0xBC) ;
mc=result;
I2C_ReadRegister(BMP180_ADRESS, 0xBE) ;
md=result;
/* Lee temperatura descompensada para luego ser compensada con los valores de calibracion*/
I2C_WriteRegister(BMP180_ADRESS,BMP180_REG_CONTROL, 0x2E) ; /*BMP180_COMMAND_TEMPERATURE*/
I2C_ReadRegister(BMP180_ADRESS, BMP180_REG_RESULT) ;
msb=result;
I2C_ReadRegister(BMP180_ADRESS, 0xF7) ;
lsb=result;
ut= msb << 8 + lsb ;
/* Calcula temperatura con la UT medida y los valores de calibración */
/* __RESET_WATCHDOG(); by default, COP is disabled with device init. When enabling, also reset the watchdog. */
} /* loop forever */
/* please make sure that you never leave main */
}