#include <i2cmain.h>
#use standard_io(C)
#use standard_io(D)
#use standard_io(B)
#define Master_to_slave 0xD0 //!Para escribir datos al slave //! Con AD0 = 0;
#define Slave_to_master 0xD1 //!Para leer datos del slave //! Con AD0 = 0;
#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7, errors)
#use i2C(master, scl=PIN_C3, sda=PIN_C4, fast, force_hw)
//!#define LCD_ENABLE_PIN PIN_D0
//!#define LCD_RS_PIN PIN_D1
//!#define LCD_RW_PIN PIN_D2
//!#define LCD_DATA4 PIN_D4
//!#define LCD_DATA5 PIN_D5
//!#define LCD_DATA6 PIN_D6
//!#define LCD_DATA7 PIN_D7
//!#include <lcd.c>
#define MPU6050_PWR_MGMT_1 0x6B
signed int16 accel_xout;
signed int16 accel_yout;
signed int16 accel_zout;
#define ACCEL_XOUT_H 0x3B
#define ACCEL_XOUT_L 0x3C
#define ACCEL_YOUT_H 0x3D
#define ACCEL_YOUT_L 0x3E
#define ACCEL_ZOUT_H 0x3F
#define ACCEL_ZOUT_L 0x40
int16 MPU6050_Leer_Registro(int8 registro){
int8 msb, lsb;
int16 valor;
i2c_start();
i2c_write(Master_to_slave);
i2c_write(registro);
i2c_start();
i2c_write(Slave_to_master);
msb = i2c_read(0);
i2c_stop();
i2c_start();
i2c_write(Master_to_slave);
i2c_write(registro + 0x01);
i2c_start();
i2c_write(Slave_to_master);
lsb = i2c_read(0);
i2c_stop();
valor = make16(msb,lsb);
return (valor);
}
void Get_Accel_Values(void){
accel_xout = MPU6050_Leer_Registro(ACCEL_XOUT_H);
//!accel_yout = MPU6050_Leer_Registro(ACCEL_YOUT_H);
//!accel_zout = MPU6050_Leer_Registro(ACCEL_ZOUT_H);
output_low(Pin_B7);
delay_ms(210);
}
void MPU6050_Setup(){
delay_ms(100);
i2c_start();
i2c_write(Master_to_slave);
i2c_write(MPU6050_PWR_MGMT_1);
i2c_write(0x00);
i2c_stop();
delay_ms(100);
}
void main()
{
//! lcd_init();
//! lcd_gotoxy(1,1);
MPU6050_Setup();
char string[30];
while(TRUE)
{
//! lcd_putc("\f");
Get_Accel_Values();
//sprintf(string,"%ld",accel_xout); //!ld = long signed
output_high(Pin_B7);
delay_ms(210);
}
}