Merge pull request #55 from icewind1991/reset-timing

Make reset timing device specific
embedded-hal-1.0
Chris 2020-10-19 19:46:49 +02:00 committed by GitHub
commit 43aba4ddb1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 19 additions and 14 deletions

View File

@ -94,7 +94,7 @@ where
spi: &mut SPI,
delay: &mut DELAY,
) -> Result<(), SPI::Error> {
self.interface.reset(delay);
self.interface.reset(delay, 10);
// 3 Databytes:
// A[7:0]

View File

@ -52,7 +52,7 @@ where
spi: &mut SPI,
delay: &mut DELAY,
) -> Result<(), SPI::Error> {
self.interface.reset(delay);
self.interface.reset(delay, 10);
// set the power settings
self.interface

View File

@ -71,7 +71,7 @@ where
delay: &mut DELAY,
) -> Result<(), SPI::Error> {
// HW reset
self.interface.reset(delay);
self.interface.reset(delay, 10);
if self.refresh == RefreshLUT::QUICK {
self.set_vcom_register(spi, (-9).vcom())?;

View File

@ -94,7 +94,7 @@ where
spi: &mut SPI,
delay: &mut DELAY,
) -> Result<(), SPI::Error> {
self.interface.reset(delay);
self.interface.reset(delay, 10);
self.wait_until_idle();

View File

@ -111,7 +111,7 @@ where
) -> Result<(), SPI::Error> {
// Values taken from datasheet and sample code
self.interface.reset(delay);
self.interface.reset(delay, 10);
// start the booster
self.interface

View File

@ -105,7 +105,7 @@ where
delay: &mut DELAY,
) -> Result<(), SPI::Error> {
// reset the device
self.interface.reset(delay);
self.interface.reset(delay, 10);
// set the power settings
self.interface.cmd_with_data(

View File

@ -55,7 +55,7 @@ where
delay: &mut DELAY,
) -> Result<(), SPI::Error> {
// Reset the device
self.interface.reset(delay);
self.interface.reset(delay, 10);
// Set the power settings
self.cmd_with_data(spi, Command::POWER_SETTING, &[0x37, 0x00])?;

View File

@ -59,7 +59,7 @@ where
delay: &mut DELAY,
) -> Result<(), SPI::Error> {
// Reset the device
self.interface.reset(delay);
self.interface.reset(delay, 2);
// V2 procedure as described here:
// https://github.com/waveshare/e-Paper/blob/master/RaspberryPi%26JetsonNano/python/lib/waveshare_epd/epd7in5bc_V2.py

View File

@ -159,13 +159,18 @@ where
///
/// Often used to awake the module from deep sleep. See [EPD4in2::sleep()](EPD4in2::sleep())
///
/// TODO: Takes at least 400ms of delay alone, can it be shortened?
pub(crate) fn reset<DELAY: DelayMs<u8>>(&mut self, delay: &mut DELAY) {
let _ = self.rst.set_low();
//TODO: why 200ms? (besides being in the arduino version)
delay.delay_ms(200);
/// The timing of keeping the reset pin low seems to be important and different per device.
/// Most displays seem to require keeping it low for 10ms, but the 7in5_v2 only seems to reset
/// properly with 2ms
pub(crate) fn reset<DELAY: DelayMs<u8>>(&mut self, delay: &mut DELAY, duration: u8) {
let _ = self.rst.set_high();
//TODO: same as 3 lines above
delay.delay_ms(10);
let _ = self.rst.set_low();
delay.delay_ms(duration);
let _ = self.rst.set_high();
//TODO: the upstream libraries always sleep for 200ms here
// 10ms works fine with just for the 7in5_v2 but this needs to be validated for other devices
delay.delay_ms(200);
}
}