void magnetometer_init() {
   i2c_write_register(MAGNETOMETER_I2C_ADDR,
         MAGNETOMETER_REG_CONF_A_ADDR,
         MAGNETOMETER_REG_CONF_A_SETTING);
   i2c_write_register(MAGNETOMETER_I2C_ADDR,
         MAGNETOMETER_REG_CONF_B_ADDR,
         MAGNETOMETER_REG_CONF_B_SETTING);
   magnetometer_enable();
   magnetometer_configured = TRUE;
}
예제 #2
0
void large_range_accel_init() {
   uint8_t reg[]={LARGE_RANGE_ACCEL_REG_CTRL_REGC_ADDR,LARGE_RANGE_ACCEL_REG_CTRL_REGC_SETTING};
   large_range_accel_vars.configured = FALSE;
   P5OUT |=  0x10;                               // set P5.4 as output
   P5DIR |=  0x10;                               // set P5.4 high to enable I2C
   i2c_write_register(1,LARGE_RANGE_ACCEL_I2C_ADDR, sizeof(reg), reg);
   reg[0]=LARGE_RANGE_ACCEL_REG_CTRL_REGB_ADDR;
   reg[1]=LARGE_RANGE_ACCEL_REG_CTRL_REGB_SETTING;
   i2c_write_register(1,LARGE_RANGE_ACCEL_I2C_ADDR, sizeof(reg), reg);
   large_range_accel_vars.configured = TRUE;
}
void large_range_accel_init() {
   P5OUT |=  0x10;                               // set P5.4 as output
   P5DIR |=  0x10;                               // set P5.4 high to enable I2C
   i2c_write_register(LARGE_RANGE_ACCEL_I2C_ADDR,
         LARGE_RANGE_ACCEL_REG_CTRL_REGC_ADDR,
         LARGE_RANGE_ACCEL_REG_CTRL_REGC_SETTING);
   i2c_write_register(LARGE_RANGE_ACCEL_I2C_ADDR,
         LARGE_RANGE_ACCEL_REG_CTRL_REGB_ADDR,
         LARGE_RANGE_ACCEL_REG_CTRL_REGB_SETTING);
   large_range_accel_configured = TRUE;
}
예제 #4
0
void MPU6050_Initialize()
{
	// Configure Gyroscope
	i2c_write_register(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_GYRO_CONFIG, 0x00);

	// Configure Accelerometer
	i2c_write_register(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_ACCEL_CONFIG, 0x10);

    // Set clock source and disable sleep mode
	i2c_write_register(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_ACCEL_CONFIG, 0x00);

}
예제 #5
0
void pcf8583_init(void) {
  uint8_t tmp[4];

  rtc_state = RTC_NOT_FOUND;
  uart_puts_P(PSTR("RTC "));
  if (i2c_write_register(PCF8583_ADDR, REG_CONTROL, CTL_START_CLOCK) ||
      i2c_read_registers(PCF8583_ADDR, REG_YEAR1, 4, tmp)) {
    uart_puts_P(PSTR("not found"));
  } else {
    if (tmp[0] == (tmp[2] ^ 0xff) &&
        tmp[1] == (tmp[3] ^ 0xff)) {
      rtc_state = RTC_OK;
      uart_puts_P(PSTR("ok"));

      /* Dummy RTC read to update the year if required */
      struct tm time;
      read_rtc(&time);
    } else {
      rtc_state = RTC_INVALID;
      uart_puts_P(PSTR("invalid"));
    }
  }

  uart_putcrlf();
}
예제 #6
0
파일: ngene-cards.c 프로젝트: mona66/sifbox
static int tuner_attach_mt2060(struct ngene_channel *chan)
{
	struct ngene *dev = chan->dev;
	void *tconf = dev->card_info->tuner_config[chan->number];
	u8 drxa = dev->card_info->demoda[chan->number];
	struct dvb_frontend *fe = chan->fe, *fe2;

#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19)
	fe->misc_priv = chan;
#else
	fe->sec_priv = chan;
#endif
	fe->ops.i2c_gate_ctrl = dev->card_info->gate_ctrl;

	dev->card_info->gate_ctrl(fe, 1);
	fe2 = mt2060_attach(fe, &chan->i2c_adapter, tconf, 1220);
	dev->card_info->gate_ctrl(fe, 0);

	i2c_write_register(&chan->i2c_adapter, drxa, 3, 4);
	write_demod(&chan->i2c_adapter, drxa, 0x1012, 15);
	write_demod(&chan->i2c_adapter, drxa, 0x1007, 0xc27);
	write_demod(&chan->i2c_adapter, drxa, 0x0020, 0x003);

	return fe2 ? 0 : -ENODEV;
}
예제 #7
0
/**************************************************************************//**
 * @brief  Main function
 *****************************************************************************/
int main(void)
{
      CHIP_Init();

      //delay(100);

      	  	  I2C_HMC_Initialization();

            // Offset zero is Device ID

            GPIO_I2C1Init();
            uint16_t value = i2c_read_register(0);
            // Set an LED on the Starter Kit if success
            if (value == DEVICE_ID) {
                ///  set_led(1,1);
            }

            i2c_write_register(ConfigurationRegisterA,0x70);
            //i2c_write_register(ConfigurationRegisterB,0xA0);//..for Gain = 5
            i2c_write_register(ConfigurationRegisterB,0x80);//..440lsb/Gauss
            i2c_write_register(ModeRegister,Measurement_SingleShot);
            //uint16_t valuex = i2c_read_register(0x06);

            for (int i=0;i<100;i++);

            int8_t RecData[6] = {0,0,0,0,0,0};
           	int16_t XVal = 0, YVal = 0, ZVal = 0;
           	int i =0;

           	// Measurement data starts at DATAX0, and ends at DATAZ1, 6 bytes long
           	cmd_array[0] = DataRegisterBegin;

            // Read 6 bytes at once
            i2c_transfer(HMC_ADDRESS, cmd_array, data_array, 1, 6, I2C_FLAG_WRITE_READ);


			XVal = (data_array[1]<<8) | data_array[0];
			ZVal = (data_array[3]<<8) | data_array[2];
			YVal = (data_array[5]<<8) | data_array[4];

            // Infinite loop
    	while (1){

    		}
}
예제 #8
0
파일: l3gd20.c 프로젝트: futr/sensor-board
char l3gd20_init( L3GD20Unit *unit, uint8_t address , L3GD20DataRate rate, L3GD20FullScale scale )
{
	/* 初期化 */
	uint8_t data;
	unit->address = address;

	/* デバイスID確認 */
	if ( !i2c_read_register( unit->address, 0x0F, &data, 1, I2CPolling ) ) {
		return 0;
	}

	/* デバイスIDが間違っていれば失敗 */
	if ( data != 0xD4 ) {
		return 0;
	}

	/* バンド幅とデーターレート設定 */
	data = rate | 0x30 | 0x07;
	unit->ctrl_1 = data;

	if ( !i2c_write_register( unit->address, 0x20, &data, 1, I2CPolling ) ) {
		return 0;
	}

	/* フルスケールを設定,データ読み込み中にデーターが更新されないようにしている */
	data = 0x80 | scale;

	if ( !i2c_write_register( unit->address, 0x23, &data, 1, I2CPolling ) ) {
		return 0;
	}

	/* FIFOを有効にする */
	data = 0x04;

	if ( !i2c_write_register( unit->address, 0x24, &data, 1, I2CPolling ) ) {
		return 0;
	}


	return 1;
}
예제 #9
0
파일: ds1307-3231.c 프로젝트: fuxii/sd2iec
/* Set the time in the RTC */
void dsrtc_set(struct tm *time) {
  uint8_t tmp[7];

  if (rtc_state == RTC_NOT_FOUND)
    return;

  tmp[REG_SECOND] = int2bcd(time->tm_sec);
  tmp[REG_MINUTE] = int2bcd(time->tm_min);
  tmp[REG_HOUR]   = int2bcd(time->tm_hour);
  tmp[REG_DOW]    = int2bcd(time->tm_wday+1);
  tmp[REG_DOM]    = int2bcd(time->tm_mday);
  tmp[REG_MONTH]  = int2bcd(time->tm_mon+1) | 0x80 * (time->tm_year >= 2100);
  tmp[REG_YEAR]   = int2bcd(time->tm_year % 100);
  i2c_write_registers(RTC_ADDR, REG_SECOND, 7, tmp);
  i2c_write_register(RTC_ADDR, REG_CONTROL, 0);   // 3231: enable oscillator on battery, interrupts off
                                                  // 1307: disable SQW output
#ifdef CONFIG_RTC_DS3231
  i2c_write_register(RTC_ADDR, REG_CTLSTATUS, 0); // clear "oscillator stopped" flag
#endif
  rtc_state = RTC_OK;
}
예제 #10
0
파일: adxl.c 프로젝트: Rajusr70/makersguide
// Turns on interrupts, sets up the thresholds, and enables interrupts on the ADXL345
void i2c_init_registers()
{
	// Set range to 16g and FULL resolution
	i2c_write_register(ADXL345_REG_DATA_FORMAT, ADXL345_RANGE_16_G );

	// ADXL_BW_RATE = 50 hz, limited by I2C speed
	i2c_write_register(ADXL345_REG_BW_RATE, ADXL345_DATARATE_50_HZ);

	// Set up threshold for activity, found through trial and error
	i2c_write_register(ADXL345_REG_THRESH_ACT, 0x90);

	// Turn on the axes that will participate
	i2c_write_register(ADXL345_REG_ACT_INACT_CTL, ADXL345_ACT_ac_dc | ADXL345_ACT_X | ADXL345_ACT_Y | ADXL345_ACT_Z);

	// Set up interrupt outputs, sent to INT1 pin by default
	i2c_write_register(ADXL345_REG_INT_ENABLE, ADXL345_INT_Activity );

	//uint32_t value = i2c_read_register(ADXL345_REG_INT_ENABLE);

	// Clear interrupts by reading the INT_SOURCE register
	i2c_read_register(ADXL345_REG_INT_SOURCE);

	// Start measurement
	i2c_write_register(ADXL345_REG_POWER_CTL, 0x08);
}
예제 #11
0
/* Set the time in the RTC */
void pcf8583_set(struct tm *time) {
  union {
    uint8_t  bytes[5];
    uint16_t words[2];
  } tmp;

  if (rtc_state == RTC_NOT_FOUND)
    return;

  i2c_write_register(PCF8583_ADDR, REG_CONTROL, CTL_STOP_CLOCK);
  tmp.bytes[0] = int2bcd(time->tm_sec);
  tmp.bytes[1] = int2bcd(time->tm_min);
  tmp.bytes[2] = int2bcd(time->tm_hour);
  tmp.bytes[3] = int2bcd(time->tm_mday) | ((time->tm_year & 3) << 6);
  tmp.bytes[4] = int2bcd(time->tm_mon+1)| ((time->tm_wday    ) << 5);
  i2c_write_registers(PCF8583_ADDR, REG_SECONDS, 5, &tmp);
  tmp.words[0] = time->tm_year + 1900;
  tmp.words[1] = (time->tm_year + 1900) ^ 0xffffU;
  i2c_write_registers(PCF8583_ADDR, REG_YEAR1, 4, &tmp);
  i2c_write_register(PCF8583_ADDR, REG_CONTROL, CTL_START_CLOCK);
  rtc_state = RTC_OK;
}
예제 #12
0
파일: l3gd20.c 프로젝트: futr/sensor-board
char l3gd20_start( L3GD20Unit *unit )
{
	/* パワーダウン解除 */
	uint8_t data;

	data = unit->ctrl_1 | 0x08;

	if ( !i2c_write_register( unit->address, 0x20, &data, 1, I2CPolling ) ) {
		return 0;
	}

	return 1;
}
예제 #13
0
파일: l3gd20.c 프로젝트: futr/sensor-board
char l3gd20_stop( L3GD20Unit *unit )
{
	/* パワーダウンへ */
	uint8_t data;

	data = unit->ctrl_1 & ~0x08;

	/* 修正 */
	if ( !i2c_write_register( unit->address, 0x20, &data, 1, I2CPolling ) ) {
		return 0;
	}

	return 1;
}
예제 #14
0
파일: main.c 프로젝트: dkmatize/digital_ii
int main(int argc, char **argv)
{
    // Initialize TIC
    isr_init();
    tic_init();
    irq_set_mask(0x000FFFFF);
    //irq_enable();

    // Initialize I2C Core
    i2c_core_init(0x00, 0xC7);
    //MPU6050_Initialize();

    for(;;)
    {
        i2c_write_register(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_WHO_AM_I, 0x00);
    }

    //i2c_test();
    //spi_test();
    //gpio_test();
    //uart_test();
    //timer_test();

}
void magnetometer_enable() {
   i2c_write_register(MAGNETOMETER_I2C_ADDR,
         MAGNETOMETER_REG_MODE_ADDR,
         MAGNETOMETER_REG_MODE_WAKEUP);
}
void large_range_accel_disable() {
   i2c_write_register(LARGE_RANGE_ACCEL_I2C_ADDR,
                           LARGE_RANGE_ACCEL_REG_CTRL_REGB_ADDR,
                           LARGE_RANGE_ACCEL_REG_CTRL_REGB_SLEEP);
}
void magnetometer_disable() {
   i2c_write_register(MAGNETOMETER_I2C_ADDR,
                      MAGNETOMETER_REG_MODE_ADDR,
                      MAGNETOMETER_REG_MODE_SLEEP);
}
예제 #18
0
void large_range_accel_disable() {
   uint8_t reg[]={LARGE_RANGE_ACCEL_REG_CTRL_REGB_ADDR,LARGE_RANGE_ACCEL_REG_CTRL_REGB_SLEEP};
   i2c_write_register(1,LARGE_RANGE_ACCEL_I2C_ADDR, sizeof(reg), reg);
}