Compare commits

...

2 Commits

Author SHA1 Message Date
Astro feae22b277 ad5680: idle low for powersaving 2020-05-16 01:18:14 +02:00
Astro c53c9a289f pins: fix ref_pins 2020-05-16 01:09:38 +02:00
3 changed files with 12 additions and 9 deletions

View File

@ -25,7 +25,7 @@ pub struct Dac<SPI: Transfer<u8>, S: OutputPin> {
impl<SPI: Transfer<u8>, S: OutputPin> Dac<SPI, S> { impl<SPI: Transfer<u8>, S: OutputPin> Dac<SPI, S> {
pub fn new(spi: SPI, mut sync: S) -> Self { pub fn new(spi: SPI, mut sync: S) -> Self {
let _ = sync.set_high(); let _ = sync.set_low();
Dac { Dac {
spi, spi,
@ -34,11 +34,14 @@ impl<SPI: Transfer<u8>, S: OutputPin> Dac<SPI, S> {
} }
fn write(&mut self, mut buf: [u8; 3]) -> Result<(), SPI::Error> { fn write(&mut self, mut buf: [u8; 3]) -> Result<(), SPI::Error> {
let _ = self.sync.set_low(); // pulse sync to start a new transfer. leave sync idle low
let result = self.spi.transfer(&mut buf); // afterwards to save power as recommended per datasheet.
let _ = self.sync.set_high(); let _ = self.sync.set_high();
cortex_m::asm::nop();
let _ = self.sync.set_low();
result.map(|_| ()) self.spi.transfer(&mut buf)?;
Ok(())
} }
/// value: `0..0x20_000` /// value: `0..0x20_000`

View File

@ -144,7 +144,7 @@ fn main() -> ! {
let ref_adc_data = channels.read_ref_adc(channel); let ref_adc_data = channels.read_ref_adc(channel);
let state = channels.channel_state(channel); let state = channels.channel_state(channel);
let _ = writeln!( let _ = writeln!(
socket, "t={} raw{}=0x{:06X} ref_adc={}", socket, "t={} raw{}=0x{:06X} ref_adc=0x{:X}",
state.adc_time, channel, adc_data, state.adc_time, channel, adc_data,
ref_adc_data ref_adc_data
); );

View File

@ -35,7 +35,7 @@ impl ChannelPins for Channel0 {
type DacSync = PE4<Output<PushPull>>; type DacSync = PE4<Output<PushPull>>;
type Shdn = PE10<Output<PushPull>>; type Shdn = PE10<Output<PushPull>>;
type RefAdc = Adc<ADC1>; type RefAdc = Adc<ADC1>;
type RefPin = PA0<Analog>; type RefPin = PA4<Analog>;
} }
impl ChannelPins for Channel1 { impl ChannelPins for Channel1 {
@ -43,7 +43,7 @@ impl ChannelPins for Channel1 {
type DacSync = PF6<Output<PushPull>>; type DacSync = PF6<Output<PushPull>>;
type Shdn = PE15<Output<PushPull>>; type Shdn = PE15<Output<PushPull>>;
type RefAdc = Adc<ADC2>; type RefAdc = Adc<ADC2>;
type RefPin = PA3<Analog>; type RefPin = PA5<Analog>;
} }
/// SPI peripheral used for communication with the ADC /// SPI peripheral used for communication with the ADC
@ -108,7 +108,7 @@ impl Pins {
let _ = shdn0.set_low(); let _ = shdn0.set_low();
let mut ref0_adc = Adc::adc1(adc1, true, Default::default()); let mut ref0_adc = Adc::adc1(adc1, true, Default::default());
ref0_adc.enable(); ref0_adc.enable();
let ref0_pin = gpioa.pa0.into_analog(); let ref0_pin = gpioa.pa4.into_analog();
let channel0 = ChannelPinSet { let channel0 = ChannelPinSet {
dac_spi: dac0_spi, dac_spi: dac0_spi,
dac_sync: dac0_sync, dac_sync: dac0_sync,
@ -125,7 +125,7 @@ impl Pins {
let _ = shdn1.set_low(); let _ = shdn1.set_low();
let mut ref1_adc = Adc::adc2(adc2, true, Default::default()); let mut ref1_adc = Adc::adc2(adc2, true, Default::default());
ref1_adc.enable(); ref1_adc.enable();
let ref1_pin = gpioa.pa3.into_analog(); let ref1_pin = gpioa.pa5.into_analog();
let channel1 = ChannelPinSet { let channel1 = ChannelPinSet {
dac_spi: dac1_spi, dac_spi: dac1_spi,
dac_sync: dac1_sync, dac_sync: dac1_sync,