From 901b8b4362cb11507e8be6d4694f856038ce3260 Mon Sep 17 00:00:00 2001 From: Elias Ahokas Date: Wed, 15 Oct 2025 20:23:05 +0300 Subject: [PATCH] init display --- main/main.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/main/main.c b/main/main.c index 6599902..7d93f45 100644 --- a/main/main.c +++ b/main/main.c @@ -1,5 +1,8 @@ #include #include "driver/i2c_master.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" + #define I2C_SCL 1 /*FIXME*/ #define I2C_SDA 2 @@ -37,15 +40,61 @@ void init_i2c(void){ void i2c_disp_send_cmd(uint8_t cmd){ uint8_t data[2] = {0x00, cmd}; /*command mode*/ ESP_ERROR_CHECK( - i2c_master_transmit(disp_handle, data, sizeof(data), -1) + i2c_master_transmit(disp_handle, data, sizeof(data), pdMS_TO_TICKS(100)) ); } -void init_display(void){ - +void i2c_disp_send_data(uint8_t *data, size_t len){ + uint8_t *buf = malloc(len + 1); + buf[0] = 0x40; /*data mode*/ + memcpy(&buf[1], data, len); + ESP_ERROR_CHECK( + i2c_master_transmit(disp_handle, buf, len + 1, pdMS_TO_TICKS(100))); + free(buf); } +void init_display(void){ + /*according to https://gist.github.com/pulsar256/564fda3b9e8fc6b06b89*/ + i2c_disp_send_cmd(0xAE); // Set display OFF + + i2c_disp_send_cmd(0xD4); // Set Display Clock Divide Ratio / OSC Frequency + i2c_disp_send_cmd(0x80); // Display Clock Divide Ratio / OSC Frequency + + i2c_disp_send_cmd(0xA8); // Set Multiplex Ratio + i2c_disp_send_cmd(0x3F); // Multiplex Ratio for 128x64 (64-1) + + i2c_disp_send_cmd(0xD3); // Set Display Offset + i2c_disp_send_cmd(0x00); // Display Offset + + i2c_disp_send_cmd(0x40); // Set Display Start Line + + i2c_disp_send_cmd(0x8D); // Set Charge Pump + i2c_disp_send_cmd(0x14); // Charge Pump (0x10 External, 0x14 Internal DC/DC) + + i2c_disp_send_cmd(0xA1); // Set Segment Re-Map + i2c_disp_send_cmd(0xC8); // Set Com Output Scan Direction + + i2c_disp_send_cmd(0xDA); // Set COM Hardware Configuration + i2c_disp_send_cmd(0x12); // COM Hardware Configuration + + i2c_disp_send_cmd(0x81); // Set Contrast + i2c_disp_send_cmd(0xCF); // Contrast + + i2c_disp_send_cmd(0xD9); // Set Pre-Charge Period + i2c_disp_send_cmd(0xF1); // Set Pre-Charge Period (0x22 External, 0xF1 Internal) + + i2c_disp_send_cmd(0xDB); // Set VCOMH Deselect Level + i2c_disp_send_cmd(0x40); // VCOMH Deselect Level + + i2c_disp_send_cmd(0xA4); // Set all pixels OFF + i2c_disp_send_cmd(0xA6); // Set display not inverted + i2c_disp_send_cmd(0xAF); // Set display On +} + + void app_main(void){ init_i2c(); + init_display(); + } \ No newline at end of file