Skip to content

Driver for st7565 based displays

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

Finomnis/st7565

Folders and files

NameName
Last commit message
Last commit date

Latest commit

126dd80 · Oct 20, 2024
Oct 18, 2024
May 20, 2024
Aug 6, 2022
Oct 20, 2024
Oct 19, 2024
Aug 6, 2022
Oct 19, 2024
Aug 16, 2022
Aug 16, 2022
Oct 20, 2024
Aug 13, 2022

Repository files navigation

st7565

DOGM132W-5 display showing the graphics example

Crates.io Crates.io License Build Status docs.rs

This crate aims to provide an embedded-graphics compatible driver for displays based on the ST7565 chipset.

Example

The following example is intended for the DOGM132W-5 display connected to an nRF52840 microcontroller.

Note the MODE_3 of the SPI. The DOGM132W-5 display expects the clock to be configured with CPOL=1 and CPHA=1, which is also called SPI Mode 3.

// Create DOGM132W-5 spi bus
let spi_bus = hal::Spim::new(
    peripherals.SPIM0,
    hal::spim::Pins {
        sck: Some(disp_scl),
        mosi: Some(disp_si),
        miso: None,
    },
    hal::spim::Frequency::M8,
    hal::spim::MODE_3,
    0,
);
let disp_spidevice = ExclusiveDevice::new_no_delay(spi_bus, disp_cs).unwrap();
let disp_interface = SPIInterface::new(disp_spidevice, disp_a0);

// Create DOGM132W-5 display driver
let mut page_buffer = GraphicsPageBuffer::new();
let mut disp = ST7565::new(disp_interface, DOGM132W5).into_graphics_mode(&mut page_buffer);
disp.reset(&mut disp_rst, &mut timer).unwrap();
disp.flush().unwrap();
disp.set_display_on(true).unwrap();

// Draw on it using the embedded_graphics library
Circle::new(Point::new(10, 6), 20)
    .into_styled(PrimitiveStyle::with_stroke(BinaryColor::On, 2))
    .draw(&mut disp)
    .unwrap();
disp.flush().unwrap();

Note the DOGM132W5 object. This is the display specification that contains all the display specific configuration options that need to be applied to the ST7565 chip.

Further note the into_graphics_mode() call, which switches the driver from its initial mode to the embedded-graphics driver mode. The disp object can then be used as a DrawTarget in embedded-graphics calls.

After drawing something, a flush() call has to be issued to actually send the modified data to the display.

Adding support for new ST7565 based displays

The example above uses the DOGM132W5 struct in the [ST7565::new()] call.

To initialize the ST7565 driver struct with a different display, a new display specification has to be created. This can be done by creating an empty struct that implements the [DisplaySpecs] trait.

For example, the definition of the DOGM132W5 struct looks like this:

pub struct DOGM132W5;
impl DisplaySpecs<132, 32, 4> for DOGM132W5 {
    const FLIP_ROWS: bool = false;
    const FLIP_COLUMNS: bool = true;
    const INVERTED: bool = false;
    const BIAS_MODE_1: bool = false;
    const POWER_CONTROL: PowerControlMode = PowerControlMode {
        booster_circuit: true,
        voltage_regulator_circuit: true,
        voltage_follower_circuit: true,
    };
    const VOLTAGE_REGULATOR_RESISTOR_RATIO: u8 = 0b011;
    const ELECTRONIC_VOLUME: u8 = 0b011111;
    const BOOSTER_RATIO: BoosterRatio = BoosterRatio::StepUp2x3x4x;
    const COLUMN_OFFSET: u8 = 0;
}

The exact values for the respective display have to be taken from the display's manual.

If you created a specification for a new display, please open a pull request on https://github.com/Finomnis/st7565/pulls to make it available to the public.

About

Driver for st7565 based displays

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Languages