- Tema Autor
- #1
TENGO UN PROGRAMA MIKRO C PRO 2009 QUE UTILIZA EL 16F887 CON LAS LIBRERIAS 12C Y USART PERO NO LOGRO HACERLAS FUNCIONAR A AMBAS NOSE QUE PASA SI ALGUIEN SABE COMO SE LO AGRADEZCO
#define ADXL345_W 0b00111010
#define ADXL345_R 0b00111011
int x1=0,y1=0,z1=0;
void inicializacion_adxl345(void);
void Espera_12c(void) ;
int lectura_adxl345(char reg_adr);
void main()
{
OSCCON.IRCF2=1; //Reloj 8 Mhz
OSCCON.IRCF1=1;
OSCCON.IRCF0=1;
OSCCON.SCS=1;
ANSEL = 0;
ANSELH = 0;
UART1_Init(9600);
Delay_ms(101);
I2C1_Init(100000);
inicializacion_adxl345();
Delay_ms(101);
while(1)
{
x1 = lectura_adxl345(0x32);
y1 = lectura_adxl345(0x34);
z1 = lectura_adxl345(0x36);
UART1_Write(0x1);
}
}
//-----------------------------------------------
void inicializacion_adxl345(void)
{
I2C1_Start();
Espera_12c();
I2C1_Wr(ADXL345_W);
Espera_12c();
I2C1_Wr(0x2D);
Espera_12c();
I2C1_Wr((1<<3));
Espera_12c();
I2C1_Stop();
}
//-----------------------------------------------
void Espera_12c(void)
{
while(!I2C1_Is_Idle());
}
//-----------------------------------------------
int lectura_adxl345(char reg_adr)
{
char lsb, msb;
I2C1_Start();
Espera_12c();
I2C1_Wr(ADXL345_W);
Espera_12c();
I2C1_Wr(reg_adr);
Espera_12c();
I2C1_Repeated_Start();
I2C1_Wr(ADXL345_R);
Espera_12c();
lsb = I2C1_Rd(0); //i2cReceiveByte(TRUE);
Espera_12c();
msb = I2C1_Rd(0); //i2cReceiveByte(FALSE);
Espera_12c();
I2C1_Stop();
return( (msb<<8) | lsb);
}
#define ADXL345_W 0b00111010
#define ADXL345_R 0b00111011
int x1=0,y1=0,z1=0;
void inicializacion_adxl345(void);
void Espera_12c(void) ;
int lectura_adxl345(char reg_adr);
void main()
{
OSCCON.IRCF2=1; //Reloj 8 Mhz
OSCCON.IRCF1=1;
OSCCON.IRCF0=1;
OSCCON.SCS=1;
ANSEL = 0;
ANSELH = 0;
UART1_Init(9600);
Delay_ms(101);
I2C1_Init(100000);
inicializacion_adxl345();
Delay_ms(101);
while(1)
{
x1 = lectura_adxl345(0x32);
y1 = lectura_adxl345(0x34);
z1 = lectura_adxl345(0x36);
UART1_Write(0x1);
}
}
//-----------------------------------------------
void inicializacion_adxl345(void)
{
I2C1_Start();
Espera_12c();
I2C1_Wr(ADXL345_W);
Espera_12c();
I2C1_Wr(0x2D);
Espera_12c();
I2C1_Wr((1<<3));
Espera_12c();
I2C1_Stop();
}
//-----------------------------------------------
void Espera_12c(void)
{
while(!I2C1_Is_Idle());
}
//-----------------------------------------------
int lectura_adxl345(char reg_adr)
{
char lsb, msb;
I2C1_Start();
Espera_12c();
I2C1_Wr(ADXL345_W);
Espera_12c();
I2C1_Wr(reg_adr);
Espera_12c();
I2C1_Repeated_Start();
I2C1_Wr(ADXL345_R);
Espera_12c();
lsb = I2C1_Rd(0); //i2cReceiveByte(TRUE);
Espera_12c();
msb = I2C1_Rd(0); //i2cReceiveByte(FALSE);
Espera_12c();
I2C1_Stop();
return( (msb<<8) | lsb);
}