make reset timing device specific
reset timings seem to be device specific, trying to reset the 7in5_v2 with timings from other devices does not reset the display. Timings taken from https://github.com/waveshare/e-Paper/blob/master/RaspberryPi%26JetsonNano/python/lib/waveshare_epdembedded-hal-1.0
parent
ac97aac745
commit
5cb7de5929
|
|
@ -94,7 +94,7 @@ where
|
||||||
spi: &mut SPI,
|
spi: &mut SPI,
|
||||||
delay: &mut DELAY,
|
delay: &mut DELAY,
|
||||||
) -> Result<(), SPI::Error> {
|
) -> Result<(), SPI::Error> {
|
||||||
self.interface.reset(delay);
|
self.interface.reset(delay, 10);
|
||||||
|
|
||||||
// 3 Databytes:
|
// 3 Databytes:
|
||||||
// A[7:0]
|
// A[7:0]
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ where
|
||||||
spi: &mut SPI,
|
spi: &mut SPI,
|
||||||
delay: &mut DELAY,
|
delay: &mut DELAY,
|
||||||
) -> Result<(), SPI::Error> {
|
) -> Result<(), SPI::Error> {
|
||||||
self.interface.reset(delay);
|
self.interface.reset(delay, 10);
|
||||||
|
|
||||||
// set the power settings
|
// set the power settings
|
||||||
self.interface
|
self.interface
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ where
|
||||||
delay: &mut DELAY,
|
delay: &mut DELAY,
|
||||||
) -> Result<(), SPI::Error> {
|
) -> Result<(), SPI::Error> {
|
||||||
// HW reset
|
// HW reset
|
||||||
self.interface.reset(delay);
|
self.interface.reset(delay, 10);
|
||||||
|
|
||||||
if self.refresh == RefreshLUT::QUICK {
|
if self.refresh == RefreshLUT::QUICK {
|
||||||
self.set_vcom_register(spi, (-9).vcom())?;
|
self.set_vcom_register(spi, (-9).vcom())?;
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ where
|
||||||
spi: &mut SPI,
|
spi: &mut SPI,
|
||||||
delay: &mut DELAY,
|
delay: &mut DELAY,
|
||||||
) -> Result<(), SPI::Error> {
|
) -> Result<(), SPI::Error> {
|
||||||
self.interface.reset(delay);
|
self.interface.reset(delay, 10);
|
||||||
|
|
||||||
self.wait_until_idle();
|
self.wait_until_idle();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ where
|
||||||
) -> Result<(), SPI::Error> {
|
) -> Result<(), SPI::Error> {
|
||||||
// Values taken from datasheet and sample code
|
// Values taken from datasheet and sample code
|
||||||
|
|
||||||
self.interface.reset(delay);
|
self.interface.reset(delay, 10);
|
||||||
|
|
||||||
// start the booster
|
// start the booster
|
||||||
self.interface
|
self.interface
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ where
|
||||||
delay: &mut DELAY,
|
delay: &mut DELAY,
|
||||||
) -> Result<(), SPI::Error> {
|
) -> Result<(), SPI::Error> {
|
||||||
// reset the device
|
// reset the device
|
||||||
self.interface.reset(delay);
|
self.interface.reset(delay, 10);
|
||||||
|
|
||||||
// set the power settings
|
// set the power settings
|
||||||
self.interface.cmd_with_data(
|
self.interface.cmd_with_data(
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ where
|
||||||
delay: &mut DELAY,
|
delay: &mut DELAY,
|
||||||
) -> Result<(), SPI::Error> {
|
) -> Result<(), SPI::Error> {
|
||||||
// Reset the device
|
// Reset the device
|
||||||
self.interface.reset(delay);
|
self.interface.reset(delay, 10);
|
||||||
|
|
||||||
// Set the power settings
|
// Set the power settings
|
||||||
self.cmd_with_data(spi, Command::POWER_SETTING, &[0x37, 0x00])?;
|
self.cmd_with_data(spi, Command::POWER_SETTING, &[0x37, 0x00])?;
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ where
|
||||||
delay: &mut DELAY,
|
delay: &mut DELAY,
|
||||||
) -> Result<(), SPI::Error> {
|
) -> Result<(), SPI::Error> {
|
||||||
// Reset the device
|
// Reset the device
|
||||||
self.interface.reset(delay);
|
self.interface.reset(delay, 4);
|
||||||
|
|
||||||
// V2 procedure as described here:
|
// V2 procedure as described here:
|
||||||
// https://github.com/waveshare/e-Paper/blob/master/RaspberryPi%26JetsonNano/python/lib/waveshare_epd/epd7in5bc_V2.py
|
// https://github.com/waveshare/e-Paper/blob/master/RaspberryPi%26JetsonNano/python/lib/waveshare_epd/epd7in5bc_V2.py
|
||||||
|
|
|
||||||
|
|
@ -159,13 +159,18 @@ where
|
||||||
///
|
///
|
||||||
/// Often used to awake the module from deep sleep. See [EPD4in2::sleep()](EPD4in2::sleep())
|
/// 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?
|
/// The timing of keeping the reset pin low seems to be important and different per device.
|
||||||
pub(crate) fn reset<DELAY: DelayMs<u8>>(&mut self, delay: &mut DELAY) {
|
/// Most displays seem to require keeping it low for 10ms, but the 7in5_v2 only seems to reset
|
||||||
let _ = self.rst.set_low();
|
/// properly with 4ms
|
||||||
//TODO: why 200ms? (besides being in the arduino version)
|
pub(crate) fn reset<DELAY: DelayMs<u8>>(&mut self, delay: &mut DELAY, duration: u8) {
|
||||||
delay.delay_ms(200);
|
|
||||||
let _ = self.rst.set_high();
|
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);
|
delay.delay_ms(200);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue