ESPHome 2025.5.0
Loading...
Searching...
No Matches
pcd_8544.cpp
Go to the documentation of this file.
1#include "pcd_8544.h"
2#include "esphome/core/log.h"
5
6namespace esphome {
7namespace pcd8544 {
8
9static const char *const TAG = "pcd_8544";
10
12 this->spi_setup();
13 this->init_reset_();
14 this->dc_pin_->setup();
15}
16
18 if (this->reset_pin_ != nullptr) {
19 this->reset_pin_->setup();
20 this->reset_pin_->digital_write(true);
21 delay(1);
22 // Trigger Reset
23 this->reset_pin_->digital_write(false);
24 delay(10);
25 // Wake up
26 this->reset_pin_->digital_write(true);
27 }
28}
29
32
34 // LCD bias select (4 is optimal?)
35 this->command(this->PCD8544_SETBIAS | 0x04);
36
37 // contrast
38 this->command(this->PCD8544_SETVOP | this->contrast_);
39
40 // normal mode
41 this->command(this->PCD8544_FUNCTIONSET);
42
43 // Set display to Normal
45}
46
48 this->dc_pin_->digital_write(false);
49 this->enable();
50}
51void PCD8544::end_command_() { this->disable(); }
53 this->dc_pin_->digital_write(true);
54 this->enable();
55}
56void PCD8544::end_data_() { this->disable(); }
57
58int PCD8544::get_width_internal() { return 84; }
59int PCD8544::get_height_internal() { return 48; }
60
62 return size_t(this->get_width_internal()) * size_t(this->get_height_internal()) / 8u;
63}
64
65void HOT PCD8544::display() {
66 uint8_t col, maxcol, p;
67
68 for (p = 0; p < 6; p++) {
69 this->command(this->PCD8544_SETYADDR | p);
70
71 // start at the beginning of the row
72 col = 0;
73 maxcol = this->get_width_internal() - 1;
74
75 this->command(this->PCD8544_SETXADDR | col);
76
77 this->start_data_();
78 for (; col <= maxcol; col++) {
79 this->write_byte(this->buffer_[(this->get_width_internal() * p) + col]);
80 }
81 this->end_data_();
82 }
83
84 this->command(this->PCD8544_SETYADDR);
85}
86
88 if (x >= this->get_width_internal() || y >= this->get_height_internal() || x < 0 || y < 0) {
89 return;
90 }
91
92 uint16_t pos = x + (y / 8) * this->get_width_internal();
93 uint8_t subpos = y % 8;
94 if (color.is_on()) {
95 this->buffer_[pos] |= (1 << subpos);
96 } else {
97 this->buffer_[pos] &= ~(1 << subpos);
98 }
99}
100
102 LOG_DISPLAY("", "PCD8544", this);
103 LOG_PIN(" DC Pin: ", this->dc_pin_);
104 LOG_PIN(" Reset Pin: ", this->reset_pin_);
105 LOG_UPDATE_INTERVAL(this);
106}
107
108void PCD8544::command(uint8_t value) {
109 this->start_command_();
110 this->write_byte(value);
111 this->end_command_();
112}
113
115 this->do_update_();
116 this->display();
117}
118
119void PCD8544::fill(Color color) {
120 uint8_t fill = color.is_on() ? 0xFF : 0x00;
121 for (uint32_t i = 0; i < this->get_buffer_length_(); i++)
122 this->buffer_[i] = fill;
123}
124
125} // namespace pcd8544
126} // namespace esphome
virtual void setup()=0
virtual void digital_write(bool value)=0
void init_internal_(uint32_t buffer_length)
const uint8_t PCD8544_EXTENDEDINSTRUCTION
Definition pcd_8544.h:16
int get_width_internal() override
Definition pcd_8544.cpp:58
const uint8_t PCD8544_SETYADDR
Definition pcd_8544.h:25
const uint8_t PCD8544_SETVOP
Definition pcd_8544.h:30
int get_height_internal() override
Definition pcd_8544.cpp:59
const uint8_t PCD8544_FUNCTIONSET
Definition pcd_8544.h:23
void draw_absolute_pixel_internal(int x, int y, Color color) override
Definition pcd_8544.cpp:87
const uint8_t PCD8544_SETXADDR
Definition pcd_8544.h:26
void update() override
Definition pcd_8544.cpp:114
const uint8_t PCD8544_SETBIAS
Definition pcd_8544.h:29
void command(uint8_t value)
Definition pcd_8544.cpp:108
void fill(Color color) override
Definition pcd_8544.cpp:119
const uint8_t PCD8544_DISPLAYNORMAL
Definition pcd_8544.h:19
const uint8_t PCD8544_DISPLAYCONTROL
Definition pcd_8544.h:24
void dump_config() override
Definition pcd_8544.cpp:101
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
void IRAM_ATTR HOT delay(uint32_t ms)
Definition core.cpp:28
bool is_on() ESPHOME_ALWAYS_INLINE
Definition color.h:46
uint16_t x
Definition tt21100.cpp:5
uint16_t y
Definition tt21100.cpp:6