Exemplo n.º 1
0
void baro_scp_event( void ) {

  if (scp_trans.status == I2CTransSuccess) {

    if (baro_scp_status == BARO_SCP_RD_TEMP) {

      /* read two byte temperature */
      baro_scp_temperature  = scp_trans.buf[0] << 8;
      baro_scp_temperature |= scp_trans.buf[1];
      if (baro_scp_temperature & 0x2000) {
        baro_scp_temperature |= 0xC000;
      }
      baro_scp_temperature *= 5;

      /* start one byte msb pressure */
      scp_trans.buf[0] = SCP1000_DATARD8;
      baro_scp_status = BARO_SCP_RD_PRESS_0;
      I2CTransceive(SCP_I2C_DEV, scp_trans, SCP1000_SLAVE_ADDR, 1, 1);
    }

    else if (baro_scp_status == BARO_SCP_RD_PRESS_0) {

      /* read one byte pressure */
      baro_scp_pressure = scp_trans.buf[0] << 16;

      /* start two byte lsb pressure */
      scp_trans.buf[0] = SCP1000_DATARD16;
      baro_scp_status = BARO_SCP_RD_PRESS_1;
      I2CTransceive(SCP_I2C_DEV, scp_trans, SCP1000_SLAVE_ADDR, 1, 2);
    }

    else if (baro_scp_status == BARO_SCP_RD_PRESS_1) {

      /* read two byte pressure */
      baro_scp_pressure |= scp_trans.buf[0] << 8;
      baro_scp_pressure |= scp_trans.buf[1];
      baro_scp_pressure *= 25;

#ifdef SENSOR_SYNC_SEND
      DOWNLINK_SEND_SCP_STATUS(DefaultChannel, &baro_scp_pressure, &baro_scp_temperature);
#endif

      baro_scp_status = BARO_SCP_IDLE;
    }

    else baro_scp_status = BARO_SCP_IDLE;
  }
}
Exemplo n.º 2
0
void humid_sht_periodic( void ) {
  switch (sht_status) {

  case SHT_UNINIT:
    /* do soft reset, then wait at least 15ms */
    sht_status = SHT_RESET;
    sht_trans.buf[0] = SHT_SOFT_RESET;
    I2CTransmit(SHT_I2C_DEV, sht_trans, SHT_SLAVE_ADDR, 1);
    break;

  case SHT_SERIAL:
    /* get serial number part 1 */
    sht_status = SHT_SERIAL1;
    sht_trans.buf[0] = 0xFA;
    sht_trans.buf[1] = 0x0F;
    I2CTransceive(SHT_I2C_DEV, sht_trans, SHT_SLAVE_ADDR, 2, 8);
    break;

  case SHT_SERIAL1:
  case SHT_SERIAL2:
    break;

  default:
    /* trigger temp measurement, no master hold */
    sht_trans.buf[0] = SHT_TRIGGER_TEMP;
    sht_status = SHT_TRIG_TEMP;
    I2CTransmit(SHT_I2C_DEV, sht_trans, SHT_SLAVE_ADDR, 1);
    /* send serial number every 30 seconds */
    RunOnceEvery((4*30), DOWNLINK_SEND_SHT_SERIAL(DefaultChannel, &sht_serial1, &sht_serial2));
    break;
  }
}
Exemplo n.º 3
0
uint32_t srf08_read_register(uint8_t srf08_register)
{
  uint8_t cnt;

  union i2c_union {
    uint32_t  rx_word;
    uint8_t   rx_byte[2];
  } i2c;


  srf_trans.buf[0] = srf08_register;

  /* get high byte msb first */
  if (srf08_register>=2)
    cnt = 2;
  else
    cnt = 1;

  I2CTransceive(SRF08_I2C_DEV, srf_trans, SRF08_UNIT_0, 1, cnt);

  /* get high byte msb first */
  if(srf08_register>=2) {
    i2c.rx_byte[1]=srf_trans.buf[1];
  }

  /* get low byte msb first  */
  i2c.rx_byte[0]=srf_trans.buf[0];

  return(i2c.rx_word);
}
Exemplo n.º 4
0
void ir_mlx_event( void ) {
  if ((mlx_trans.status == I2CTransSuccess)) {
    if (ir_mlx_status == IR_MLX_RD_CASE_TEMP) {
      /* read two byte case temperature */
      ir_mlx_itemp_case  = mlx_trans.buf[1] << 8;
      ir_mlx_itemp_case |= mlx_trans.buf[0];
      ir_mlx_temp_case = ir_mlx_itemp_case*0.02 - 273.15;

      /* start two byte obj temperature */
      mlx_trans.buf[0] = MLX90614_TOBJ;
      ir_mlx_status = IR_MLX_RD_CASE_TEMP;
      I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2);
      ir_mlx_status = IR_MLX_RD_OBJ_TEMP;
    }
    else if (ir_mlx_status == IR_MLX_RD_OBJ_TEMP) {
      /* read two byte obj temperature */
      ir_mlx_itemp_obj  = mlx_trans.buf[1] << 8;
      ir_mlx_itemp_obj |= mlx_trans.buf[0];
      ir_mlx_temp_obj = ir_mlx_itemp_obj*0.02 - 273.15;
      mlx_trans.status = I2CTransDone;

      DOWNLINK_SEND_MLX_STATUS(DefaultChannel,
                              &ir_mlx_itemp_case,
                              &ir_mlx_temp_case,
                              &ir_mlx_itemp_obj,
                              &ir_mlx_temp_obj);
    }
  }
}
Exemplo n.º 5
0
void ir_mlx_periodic( void ) {
  if (cpu_time_sec > 1) {
    if (ir_mlx_status >= IR_MLX_IDLE) {
      /* start two byte case temperature */
      mlx_trans.buf[0] = MLX90614_TA;
      I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2);
      ir_mlx_status = IR_MLX_RD_CASE_TEMP;
      /* send serial number every 30 seconds */
      RunOnceEvery((8*30), DOWNLINK_SEND_MLX_SERIAL(DefaultChannel, &ir_mlx_id_01, &ir_mlx_id_23));
    } else if (ir_mlx_status == IR_MLX_UNINIT) {
      /* start two byte ID 0 */
      mlx_trans.buf[0] = MLX90614_ID_0;
      I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2);
      ir_mlx_status = IR_MLX_RD_ID_0;
    }
  }
}
Exemplo n.º 6
0
void ir_mlx_periodic( void ) {
  if (cpu_time_sec > 1) {
    /* start two byte case temperature */
    mlx_trans.buf[0] = MLX90614_TA;
    I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2);
    ir_mlx_status = IR_MLX_RD_CASE_TEMP;
  }
}
Exemplo n.º 7
0
void ads1114_read( struct ads1114_periph * p ) {
  // Config done with success
  // start new reading when previous is done (and read if success)
  if (p->config_done && p->trans.status == I2CTransDone) {
    p->trans.buf[0] = ADS1114_POINTER_CONV_REG;
    I2CTransceive(ADS1114_I2C_DEVICE, p->trans, p->i2c_addr, 1, 2);
  }
}
Exemplo n.º 8
0
void pbn_periodic( void ) {

  if ( startup_delay > 0 ) {
    --startup_delay;
    return;
  }

  // Initiate next read
  pbn_trans.buf[0] = 0;
  I2CTransceive(PBN_I2C_DEV, pbn_trans, PBN_I2C_ADDR, 1, 4);

}
Exemplo n.º 9
0
void atmega_i2c_cam_ctrl_send(uint8_t cmd)
{
  atmega_i2c_cam_ctrl_just_sent_command = 1;

  // Send Command
  atmega_i2c_cam_ctrl_trans.buf[0] = cmd;
  I2CTransceive(ATMEGA_I2C_DEV, atmega_i2c_cam_ctrl_trans, ATMEGA_SLAVE_ADDR, 1, 1);

  if (cmd == DC_SHOOT)
  {
    dc_send_shot_position();
  }
}
Exemplo n.º 10
0
void baro_scp_periodic( void ) {

  if (baro_scp_status == BARO_SCP_UNINIT && cpu_time_sec > 1) {

    baro_scp_start_high_res_measurement();
    baro_scp_status = BARO_SCP_IDLE;
  } else if (baro_scp_status == BARO_SCP_IDLE) {

    /* init: start two byte temperature */
    scp_trans.buf[0] = SCP1000_TEMPOUT;
    baro_scp_status = BARO_SCP_RD_TEMP;
    I2CTransceive(SCP_I2C_DEV, scp_trans, SCP1000_SLAVE_ADDR, 1, 2);
  }
}
Exemplo n.º 11
0
void tmp102_periodic( void ) {
    tmp_trans.buf[0] = TMP102_TEMP_REG;
    I2CTransceive(TMP_I2C_DEV, tmp_trans, TMP102_SLAVE_ADDR, 1, 2);
    tmp_meas_started = TRUE;
}
Exemplo n.º 12
0
void ir_mlx_event( void ) {
  if ((mlx_trans.status == I2CTransSuccess)) {
    switch (ir_mlx_status) {

    case IR_MLX_RD_ID_0:
      /* read two byte ID 0 */
      ir_mlx_id_01  = mlx_trans.buf[0];
      ir_mlx_id_01 |= mlx_trans.buf[1] << 8;
      /* start two byte ID 1 */
      mlx_trans.buf[0] = MLX90614_ID_1;
      I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2);
      ir_mlx_status = IR_MLX_RD_ID_1;
      break;

    case IR_MLX_RD_ID_1:
      /* read two byte ID 1 */
      ir_mlx_id_01 |= mlx_trans.buf[0] << 16;
      ir_mlx_id_01 |= mlx_trans.buf[1] << 24;
      /* start two byte ID 2 */
      mlx_trans.buf[0] = MLX90614_ID_2;
      I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2);
      ir_mlx_status = IR_MLX_RD_ID_2;
      break;

    case IR_MLX_RD_ID_2:
      /* read two byte ID 2 */
      ir_mlx_id_23  = mlx_trans.buf[0];
      ir_mlx_id_23 |= mlx_trans.buf[1] << 8;
      /* start two byte ID 3 */
      mlx_trans.buf[0] = MLX90614_ID_3;
      I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2);
      ir_mlx_status = IR_MLX_RD_ID_3;
      break;

    case IR_MLX_RD_ID_3:
      /* read two byte ID 3 */
      ir_mlx_id_23 |= mlx_trans.buf[0] << 16;
      ir_mlx_id_23 |= mlx_trans.buf[1] << 24;
      ir_mlx_status = IR_MLX_IDLE;
      mlx_trans.status = I2CTransDone;
      DOWNLINK_SEND_MLX_SERIAL(DefaultChannel, &ir_mlx_id_01, &ir_mlx_id_23);
      break;

    case IR_MLX_RD_CASE_TEMP:
      /* read two byte case temperature */
      ir_mlx_itemp_case  = mlx_trans.buf[1] << 8;
      ir_mlx_itemp_case |= mlx_trans.buf[0];
      ir_mlx_temp_case = ir_mlx_itemp_case*0.02 - 273.15;

      /* start two byte obj temperature */
      mlx_trans.buf[0] = MLX90614_TOBJ;
      I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2);
      ir_mlx_status = IR_MLX_RD_OBJ_TEMP;
      break;

    case IR_MLX_RD_OBJ_TEMP:
      /* read two byte obj temperature */
      ir_mlx_itemp_obj  = mlx_trans.buf[1] << 8;
      ir_mlx_itemp_obj |= mlx_trans.buf[0];
      ir_mlx_temp_obj = ir_mlx_itemp_obj*0.02 - 273.15;
      mlx_trans.status = I2CTransDone;

      DOWNLINK_SEND_MLX_STATUS(DefaultChannel,
                              &ir_mlx_itemp_case,
                              &ir_mlx_temp_case,
                              &ir_mlx_itemp_obj,
                              &ir_mlx_temp_obj);
      break;
    default:
      mlx_trans.status = I2CTransDone;
      break;
    }
  }
}
Exemplo n.º 13
0
void humid_sht_event( void ) {
  if (sht_trans.status == I2CTransSuccess) {
    switch (sht_status) {

    case SHT_TRIG_TEMP:
      sht_status = SHT_GET_TEMP;
      sht_trans.status = I2CTransDone;
      break;

    case SHT_READ_TEMP:
      /* read temperature */
      tempsht = (sht_trans.buf[0] << 8) | sht_trans.buf[1];
      tempsht &= 0xFFFC;
      if (humid_sht_crc(sht_trans.buf) == 0) {
        /* trigger humid measurement, no master hold */
        sht_trans.buf[0] = SHT_TRIGGER_HUMID;
        sht_status = SHT_TRIG_HUMID;
        I2CTransmit(SHT_I2C_DEV, sht_trans, SHT_SLAVE_ADDR, 1);
      }
      else {
        /* checksum error, restart */
        sht_status = SHT_IDLE;
        sht_trans.status == I2CTransDone;
      }
      break;

    case SHT_TRIG_HUMID:
      sht_status = SHT_GET_HUMID;
      sht_trans.status = I2CTransDone;
      break;

    case SHT_READ_HUMID:
      /* read humidity */
      humidsht = (sht_trans.buf[0] << 8) | sht_trans.buf[1];
      humidsht &= 0xFFFC;
      fhumidsht = -6. + 125. / 65536. * humidsht;
      ftempsht = -46.85 + 175.72 / 65536. * tempsht;

      sht_status = SHT_IDLE;
      sht_trans.status = I2CTransDone;

      if (humid_sht_crc(sht_trans.buf) == 0) {
        DOWNLINK_SEND_SHT_STATUS(DefaultChannel, &humidsht, &tempsht, &fhumidsht, &ftempsht);
      }
      break;

    case SHT_RESET:
      sht_status = SHT_SERIAL;
      sht_trans.status = I2CTransDone;
      break;

    case SHT_SERIAL1:
      /* read serial number part 1 */
      sht_serial[5] = sht_trans.buf[0];
      sht_serial[4] = sht_trans.buf[2];
      sht_serial[3] = sht_trans.buf[4];
      sht_serial[2] = sht_trans.buf[6];
      /* get serial number part 2 */
      sht_status = SHT_SERIAL2;
      sht_trans.buf[0] = 0xFC;
      sht_trans.buf[1] = 0xC9;
      I2CTransceive(SHT_I2C_DEV, sht_trans, SHT_SLAVE_ADDR, 2, 6);
      break;

    case SHT_SERIAL2:
      /* read serial number part 2 */
      sht_serial[1] = sht_trans.buf[0];
      sht_serial[0] = sht_trans.buf[1];
      sht_serial[7] = sht_trans.buf[3];
      sht_serial[6] = sht_trans.buf[4];
      sht_serial1=sht_serial[7]<<24|sht_serial[6]<<16|sht_serial[5]<<8|sht_serial[4];
      sht_serial2=sht_serial[3]<<24|sht_serial[2]<<16|sht_serial[1]<<8|sht_serial[0];
      DOWNLINK_SEND_SHT_SERIAL(DefaultChannel, &sht_serial1, &sht_serial2);
      sht_status = SHT_IDLE;
      sht_trans.status = I2CTransDone;
      break;

    default:
      sht_trans.status = I2CTransDone;
      break;
    }
  }
}
Exemplo n.º 14
0
void lm75_periodic( void ) {
  lm75_trans.buf[0] = LM75_TEMP_REG;
  I2CTransceive(LM75_I2C_DEV, lm75_trans, LM75_SLAVE_ADDR, 1, 2);
}