Added support for ssd1327 (#985)

Co-authored-by: Ilya Goldberg <iggie@mac.com>
This commit is contained in:
igg 2020-05-28 15:11:25 -07:00 committed by GitHub
parent fed37b48a1
commit ecd65003d4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 5 deletions

View file

@ -14,6 +14,7 @@ MODELS = {
'SSD1325_128X64': SSD1325Model.SSD1325_MODEL_128_64, 'SSD1325_128X64': SSD1325Model.SSD1325_MODEL_128_64,
'SSD1325_96X16': SSD1325Model.SSD1325_MODEL_96_16, 'SSD1325_96X16': SSD1325Model.SSD1325_MODEL_96_16,
'SSD1325_64X48': SSD1325Model.SSD1325_MODEL_64_48, 'SSD1325_64X48': SSD1325Model.SSD1325_MODEL_64_48,
'SSD1327_128X128': SSD1325Model.SSD1327_MODEL_128_128,
} }
SSD1325_MODEL = cv.enum(MODELS, upper=True, space="_") SSD1325_MODEL = cv.enum(MODELS, upper=True, space="_")

View file

@ -48,14 +48,23 @@ void SSD1325::setup() {
this->command(SSD1325_SETCLOCK); /* set osc division */ this->command(SSD1325_SETCLOCK); /* set osc division */
this->command(0xF1); /* 145 */ this->command(0xF1); /* 145 */
this->command(SSD1325_SETMULTIPLEX); /* multiplex ratio */ this->command(SSD1325_SETMULTIPLEX); /* multiplex ratio */
this->command(0x3f); /* duty = 1/64 */ if (this->model_ == SSD1327_MODEL_128_128)
this->command(0x7f); // duty = height - 1
else
this->command(0x3f); // duty = 1/64
this->command(SSD1325_SETOFFSET); /* set display offset --- */ this->command(SSD1325_SETOFFSET); /* set display offset --- */
this->command(0x4C); /* 76 */ if (this->model_ == SSD1327_MODEL_128_128)
this->command(0x00); // 0
else
this->command(0x4C); // 76
this->command(SSD1325_SETSTARTLINE); /*set start line */ this->command(SSD1325_SETSTARTLINE); /*set start line */
this->command(0x00); /* ------ */ this->command(0x00); /* ------ */
this->command(SSD1325_MASTERCONFIG); /*Set Master Config DC/DC Converter*/ this->command(SSD1325_MASTERCONFIG); /*Set Master Config DC/DC Converter*/
this->command(0x02); this->command(0x02);
this->command(SSD1325_SETREMAP); /* set segment remap------ */ this->command(SSD1325_SETREMAP); /* set segment remap------ */
if (this->model_ == SSD1327_MODEL_128_128)
this->command(0x55); // 0x56 is flipped horizontally: enable column swap, disable nibble remap
else
this->command(0x56); this->command(0x56);
this->command(SSD1325_SETCURRENT + 0x2); /* Set Full Current Range */ this->command(SSD1325_SETCURRENT + 0x2); /* Set Full Current Range */
this->command(SSD1325_SETGRAYTABLE); this->command(SSD1325_SETGRAYTABLE);
@ -90,7 +99,10 @@ void SSD1325::display() {
this->command(0x3F); /* set column end address */ this->command(0x3F); /* set column end address */
this->command(SSD1325_SETROWADDR); /* set row address */ this->command(SSD1325_SETROWADDR); /* set row address */
this->command(0x00); /* set row start address */ this->command(0x00); /* set row start address */
this->command(0x3F); /* set row end address */ if (this->model_ == SSD1327_MODEL_128_128)
this->command(0x7F); // 127 is last row
else
this->command(0x3F); // 63 is last row
this->write_display_data(); this->write_display_data();
} }
@ -108,6 +120,8 @@ int SSD1325::get_height_internal() {
return 16; return 16;
case SSD1325_MODEL_64_48: case SSD1325_MODEL_64_48:
return 48; return 48;
case SSD1327_MODEL_128_128:
return 128;
default: default:
return 0; return 0;
} }
@ -116,6 +130,7 @@ int SSD1325::get_width_internal() {
switch (this->model_) { switch (this->model_) {
case SSD1325_MODEL_128_32: case SSD1325_MODEL_128_32:
case SSD1325_MODEL_128_64: case SSD1325_MODEL_128_64:
case SSD1327_MODEL_128_128:
return 128; return 128;
case SSD1325_MODEL_96_16: case SSD1325_MODEL_96_16:
return 96; return 96;
@ -168,6 +183,8 @@ const char *SSD1325::model_str_() {
return "SSD1325 96x16"; return "SSD1325 96x16";
case SSD1325_MODEL_64_48: case SSD1325_MODEL_64_48:
return "SSD1325 64x48"; return "SSD1325 64x48";
case SSD1327_MODEL_128_128:
return "SSD1327 128x128";
default: default:
return "Unknown"; return "Unknown";
} }

View file

@ -12,6 +12,7 @@ enum SSD1325Model {
SSD1325_MODEL_128_64, SSD1325_MODEL_128_64,
SSD1325_MODEL_96_16, SSD1325_MODEL_96_16,
SSD1325_MODEL_64_48, SSD1325_MODEL_64_48,
SSD1327_MODEL_128_128,
}; };
class SSD1325 : public PollingComponent, public display::DisplayBuffer { class SSD1325 : public PollingComponent, public display::DisplayBuffer {