Add contrast option to PCD8544 (#1348)

* Add contrast option to PCD8544. Closes #1519

* Minor fixes as instructed by @jesserockz
This commit is contained in:
Dimitris Zervas 2020-11-02 23:05:20 +02:00 committed by GitHub
parent a6c46eb8e5
commit e536316e3d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 9 additions and 4 deletions

View file

@ -3,7 +3,7 @@ import esphome.config_validation as cv
from esphome import pins from esphome import pins
from esphome.components import display, spi from esphome.components import display, spi
from esphome.const import ( from esphome.const import (
CONF_DC_PIN, CONF_ID, CONF_LAMBDA, CONF_PAGES, CONF_RESET_PIN, CONF_CS_PIN, CONF_DC_PIN, CONF_ID, CONF_LAMBDA, CONF_PAGES, CONF_RESET_PIN, CONF_CS_PIN, CONF_CONTRAST
) )
DEPENDENCIES = ['spi'] DEPENDENCIES = ['spi']
@ -17,8 +17,9 @@ CONFIG_SCHEMA = cv.All(display.FULL_DISPLAY_SCHEMA.extend({
cv.Required(CONF_DC_PIN): pins.gpio_output_pin_schema, cv.Required(CONF_DC_PIN): pins.gpio_output_pin_schema,
cv.Required(CONF_RESET_PIN): pins.gpio_output_pin_schema, cv.Required(CONF_RESET_PIN): pins.gpio_output_pin_schema,
cv.Required(CONF_CS_PIN): pins.gpio_output_pin_schema, # CE cv.Required(CONF_CS_PIN): pins.gpio_output_pin_schema, # CE
cv.Optional(CONF_CONTRAST, default=0x7f): cv.int_,
}).extend(cv.polling_component_schema('1s')).extend(spi.spi_device_schema()), }).extend(cv.polling_component_schema('1s')).extend(spi.spi_device_schema()),
cv.has_at_most_one_key(CONF_PAGES, CONF_LAMBDA)) cv.has_at_most_one_key(CONF_PAGES, CONF_LAMBDA))
def to_code(config): def to_code(config):
@ -33,6 +34,8 @@ def to_code(config):
reset = yield cg.gpio_pin_expression(config[CONF_RESET_PIN]) reset = yield cg.gpio_pin_expression(config[CONF_RESET_PIN])
cg.add(var.set_reset_pin(reset)) cg.add(var.set_reset_pin(reset))
cg.add(var.set_contrast(config[CONF_CONTRAST]))
if CONF_LAMBDA in config: if CONF_LAMBDA in config:
lambda_ = yield cg.process_lambda(config[CONF_LAMBDA], [(display.DisplayBufferRef, 'it')], lambda_ = yield cg.process_lambda(config[CONF_LAMBDA], [(display.DisplayBufferRef, 'it')],
return_type=cg.void) return_type=cg.void)

View file

@ -35,8 +35,7 @@ void PCD8544::initialize() {
this->command(this->PCD8544_SETBIAS | 0x04); this->command(this->PCD8544_SETBIAS | 0x04);
// contrast // contrast
// TODO: in future version we may add a user a control over contrast this->command(this->PCD8544_SETVOP | this->contrast_);
this->command(this->PCD8544_SETVOP | 0x7f); // Experimentally determined
// normal mode // normal mode
this->command(this->PCD8544_FUNCTIONSET); this->command(this->PCD8544_FUNCTIONSET);

View file

@ -29,9 +29,11 @@ class PCD8544 : public PollingComponent,
const uint8_t PCD8544_SETTEMP = 0x04; const uint8_t PCD8544_SETTEMP = 0x04;
const uint8_t PCD8544_SETBIAS = 0x10; const uint8_t PCD8544_SETBIAS = 0x10;
const uint8_t PCD8544_SETVOP = 0x80; const uint8_t PCD8544_SETVOP = 0x80;
uint8_t contrast_;
void set_dc_pin(GPIOPin *dc_pin) { this->dc_pin_ = dc_pin; } void set_dc_pin(GPIOPin *dc_pin) { this->dc_pin_ = dc_pin; }
void set_reset_pin(GPIOPin *reset) { this->reset_pin_ = reset; } void set_reset_pin(GPIOPin *reset) { this->reset_pin_ = reset; }
void set_contrast(uint8_t contrast) { this->contrast_ = contrast; }
float get_setup_priority() const override { return setup_priority::PROCESSOR; } float get_setup_priority() const override { return setup_priority::PROCESSOR; }
void command(uint8_t value); void command(uint8_t value);

View file

@ -1585,6 +1585,7 @@ display:
cs_pin: GPIO23 cs_pin: GPIO23
dc_pin: GPIO23 dc_pin: GPIO23
reset_pin: GPIO23 reset_pin: GPIO23
contrast: 60
lambda: |- lambda: |-
it.rectangle(0, 0, it.get_width(), it.get_height()); it.rectangle(0, 0, it.get_width(), it.get_height());
- platform: ssd1306_i2c - platform: ssd1306_i2c