build_workflow Crates.io Version Crates.io Downloads No Std

TDC1000

This crate is a no_std driver for the TDC1000 Ultrasonic Sensing Analog Front End

Datasheet

https://www.ti.com/lit/gpn/tdc1000

About this driver

This driver allows you to configure the tdc1000 analog frontend device via spi. This driver works on an NUCLEO-L433RC when compiled in release mode.

Usage

Add this to your Cargo.toml:

toml [dependencies] tdc1000 = "0.1.2"

And this to your main.rs

```rust //SPI let sck = gpioa.pa5.intoaf5(&mut gpioa.moder, &mut gpioa.afrl); let miso = gpioa.pa6.intoaf5(&mut gpioa.moder, &mut gpioa.afrl); let mosi = gpioa.pa7.intoaf5(&mut gpioa.moder, &mut gpioa.afrl); let mut cs = gpioa .pa4 .intopushpulloutput(&mut gpioa.moder, &mut gpioa.otyper); cs.set_high().unwrap();

//TDC 1000 enable
let mut enable_pin = gpioc
    .pc8
    .into_push_pull_output(&mut gpioc.moder, &mut gpioc.otyper);
    enable_pin.set_low().unwrap();

//TDC 1000 trigger
let mut trigger_pin = gpioc
.pc9
.into_push_pull_output(&mut gpioc.moder, &mut gpioc.otyper);
trigger_pin.set_low().unwrap();

//TDC 1000 start pulse pin
let start_pin = gpioc
.pc7
.into_pull_down_input(&mut gpioc.moder, &mut gpioc.pupdr);

//TDC 1000 stop pulse pin
let stop_pin = gpioc
.pc6
.into_pull_down_input(&mut gpioc.moder, &mut gpioc.pupdr);

let mut tdc1000 = Tdc1000::default();
tdc1000.set_tx_frequency_divider(TxFrequencyDivider::DivideBy8);
tdc1000.set_number_of_tx_pulses(TxPulses::new(1)); 
tdc1000.set_tx_pulse_shift_position(TxPulseShiftPosition::new(5));
tdc1000.set_time_of_flight(TimeOfFlightValue::new(TimeOfFlightValue::HIGH));
tdc1000.set_short_tof_blank_period(ShortTofBlankPeriod::T0Times32);
tdc1000.write_settings(&mut cs, &mut spi).unwrap();


loop {
    enable_pin.set_high().unwrap();
    delay_ms(10_u32);
    let mut timeout = 0_u32;
    while start_pin.is_low().unwrap() && timeout < SOME_TIMEOUT {
        timeout += 1;
    }
    let start_cnt = DWT::get_cycle_count(); // Use cycle count to measure time

    timeout = 0;
    while stop_pin.is_low().unwrap() && timeout < SOME_TIMEOUT {
        timeout += 1;
    }
    let stop_ctn = DWT::get_cycle_count();

    let measured_cycles = stop_cnt - start_cnt; 

    enable_pin.set_high().unwrap();
    delay_ms(5000_u32);
}

```

License

Licensed under either of

at your option.