Merge pull request #7 from robamu-org/mueller/temp-sensor

added temperature sensor module
This commit is contained in:
Robin Mueller
2021-12-04 21:36:42 +01:00
committed by GitHub
3 changed files with 90 additions and 41 deletions

View File

@ -1,26 +1,14 @@
#![no_main]
#![no_std]
use cortex_m_rt::entry;
use embedded_hal::blocking::i2c::SevenBitAddress;
use panic_rtt_target as _;
use rtt_target::{rprintln, rtt_init_print};
use va108xx_hal::{
i2c::{I2cMaster, I2cSpeed, MasterConfig},
pac::{self, interrupt, I2CA},
pac::{self, interrupt},
prelude::*,
timer::{default_ms_irq_handler, set_up_ms_timer, Delay},
};
#[allow(dead_code)]
enum RegAddresses {
Temperature = 0x00,
Configuration = 0x01,
THystSetpoint = 0x02,
TOsSetPoint = 0x03,
OneShot = 0x04,
}
const ADT75_I2C_ADDR: u8 = 0b1001000;
use vorago_reb1::temp_sensor::Adt75TempSensor;
#[entry]
fn main() -> ! {
@ -39,34 +27,13 @@ fn main() -> ! {
cortex_m::peripheral::NVIC::unmask(pac::Interrupt::OC0);
}
let ms_cfg = MasterConfig::default();
let mut i2ca: I2cMaster<I2CA, SevenBitAddress> = I2cMaster::i2ca(
dp.I2CA,
ms_cfg,
50.mhz(),
I2cSpeed::Regular100khz,
Some(&mut dp.SYSCONFIG),
);
let mut cmd: [u8; 4] = [0; 4];
cmd[0] = RegAddresses::Temperature as u8;
let mut reply: [u8; 4] = [0; 4];
i2ca.write(ADT75_I2C_ADDR, &cmd[0..1])
.expect("I2C send transfer failed");
let mut temp_sensor = Adt75TempSensor::new(dp.I2CA, 50.mhz(), Some(&mut dp.SYSCONFIG))
.expect("Creating temperature sensor struct failed");
loop {
i2ca.read(ADT75_I2C_ADDR, &mut reply[0..2])
.expect("I2C read transfer failed");
let adc_code = (((reply[0] as u16) << 8) | reply[1] as u16) >> 4;
let temp_celcius: f32;
if ((adc_code >> 11) & 0x01) == 0 {
// Sign bit not set, positiv value
// Divide ADC code by 16 according to datasheet
temp_celcius = adc_code as f32 / 16.0;
} else {
// Calculation for negative values, assuming all 12 bits are used
temp_celcius = (adc_code - 4096) as f32 / 16.0;
}
rprintln!("Temperature in Celcius: {}", temp_celcius);
let temp = temp_sensor
.read_temperature()
.expect("Failed reading temperature");
rprintln!("Temperature in Celcius: {}", temp);
delay.delay_ms(500);
}
}