Phone Number Phone Number Телефон: 0898 518 261 Fbook     Fbook     Smiley face Smiley face
Logo
ЕЛЕКТРОНИКС ДИЗАЙН ООД
1 / 3
Проектиране на печатни платки
2 / 3
3D принтиране SLA
3 / 3
Фирмуер за микроконтролери - С и асемблер

Сорс код за управление на OLED 128x64px с контролер SSD1315

sch

Широкоразпространените китайски OLED дисплей са много подходящи за изграждане на устройства за домашна автоматизация. Имат малки размери, добра яркост и разделителна способност. Най-популярни са тези с контролер SSD1306 и SSD1315. Като цяло двата контролера са напълно взаимозаменяеми.

OLED SSD1315

За свързване се използва I2C протокол. Не са свързани пул ъп резистори. Дисплеят е захранен с 3,3 волта.

#define I2C_SDA 21
#define I2C_SCL 22

За да инициализираме I2C интерфейса на ESP32 се използва комада. Тук се задава честотата в kHz (100 000 или 400 000)

Wire.begin(I2C_SDA, I2C_SCL,400000);

Всеки елемент свързан към I2C има специфичен адрес. В случая адреса на дисплея е 0x3C. Трябва да се предаде инструкция, която показва каква информация ще се предава по комуникацията - команда или данни.

#define SSD1315_COMMAND 0x00
#define SSD1315_DATA 0x40
#define SSD1315_ARDS 0x3C

Предаването на данни по I2C има следния формат

Wire.beginTransmission(SSD1315_ARDS);
Wire.write(SSD1315_COMMAND);
Wire.write(val);	// command value
Wire.endTransmission();    

За да работи дисплея трябва да се инициализира при включване на захранване. Това става като в съответните регистри се запишат подходящи стойности.

byte ssd1315_init_sequence[] = {  // Initialization Sequence
  0xAE,     // Set Display ON/OFF - AE=OFF, AF=ON
  0xD5, 0xF0,   // Set display clock divide ratio/oscillator frequency, set divide ratio
  0xA8, 0x3F,   // Set multiplex ratio (1 to 64) ... (height - 1)
  0xD3, 0x00,   // Set display offset. 00 = no offset
  0x40 | 0x00,  // Set start line address, at 0.
  0x8D, 0x14,   // Charge Pump Setting, 14h = Enable Charge Pump
  //0x20, 0x10,   // Set Memory Addressing Mode - 00=Horizontal, 01=Vertical, 10=Page, 11=Invalid
  0xA0 | 0x01,  // Set Segment Re-map
  0xC8,     // Set COM Output Scan Direction
  0xDA, 0x12,   // Set COM Pins Hardware Configuration - 128x32:0x02, 128x64:0x12
  0x81, 0x3F,   // Set contrast control register
  0xD9, 0x22,   // Set pre-charge period (0x22 or 0xF1)
  0xDB, 0x20,   // Set Vcomh Deselect Level - 0x00: 0.65 x VCC, 0x20: 0.77 x VCC (RESET), 0x30: 0.83 x VCC
  0xA4,     // Entire Display ON (resume) - output RAM to display
  0xA6,     // Set Normal/Inverse Display mode. A6=Normal; A7=Inverse
  0x2E,     // Deactivate Scroll command
  0x20, 0x00,   // Set Memory Addressing Mode - 00=Horizontal, 01=Vertical, 10=Page, 11=Invalid
  0xAF    // Set Display ON/OFF - AE=OFF, AF=ON
};

Има няколко основни функции за комуникация - предаване на данни и команда.

void send_command_start(void) {
  Wire.beginTransmission(SSD1315_ARDS);
  Wire.write(SSD1315_COMMAND);
  
}

void send_command_stop() {
  Wire.endTransmission();
}

void send_byte(byte val) {
  Wire.write(val);
}

void send_data_start(void) {
  Wire.beginTransmission(SSD1315_ARDS);
  Wire.write(SSD1315_DATA);  
}

void send_data_stop() {
  Wire.endTransmission();
}

И определена последователност да се позиционира курсора на точно определено положение по X и Y

void setpos(byte x, byte y)
{
  byte lower, higher;
  send_command_start();
  send_byte(0xb0 | (y & 0x07));
  lower=x;lower=lower&0x0F;
  higher=x;higher=higher>>4;higher=higher&0x07;higher=0x10|higher;
  send_byte(lower);
  send_byte(higher); 
  send_command_stop();
}

Изтеглете rar файл със проект на Arduino за управление на дисплей и четене на няколко бутона свързани към 1 аналогов пин

Коментари

Име

Съобщение

 

ЕЛЕКТРОНИКС ДИЗАЙН ООД

Фирма Електроникс Дизайн ООД е създадена 2007г гр. София. Дейността на фирмата е проектиране и производство на потребителска електроника.

Контакти

phone Телефон: 0898 518 261

maile-mail: info@ekits.eu

address Адрес: София бул. Европа 177