Explorar el Código

Есть проблема с выводом на экран.

unknown hace 1 semana
padre
commit
ba52a3bf79

+ 64 - 3
desk/libs/thirdparty/oled_ssd1327/OLED_SSD1327.c

@@ -137,6 +137,61 @@ void SSD1327_StopScroll(void)
 //
 void SSD1327_Init(void)
 {
+#if 0  
+    SSD1327_Command(SSD1327_DISPLAYOFF);  // Display Off
+    
+    SSD1327_Command(SSD1327_SETCOLUMNADDRESS);
+	SSD1327_Command(0x00);
+    SSD1327_Command(0x00);
+
+	SSD1327_Command(SSD1327_SETROWADDRESS);
+	SSD1327_Command(0x00);
+	SSD1327_Command(0x7F);
+    
+    SSD1327_SetContrast(0x7F);
+    
+    SSD1327_Command(SSD1327_SEGREMAP);
+	SSD1327_Command(0x51);
+    
+    SSD1327_Command(SSD1327_SETDISPLAYSTARTLINE);
+	SSD1327_Command(0x00);
+    
+    SSD1327_Command(SSD1327_SETDISPLAYOFFSET);
+    SSD1327_Command(0x0);
+    
+    SSD1327_Command(SSD1327_DISPLAYALLON_RESUME);  // Entire Display ON
+    SSD1327_Command(SSD1327_SETMULTIPLEX);
+	SSD1327_Command(0x7F);
+    
+    SSD1327_Command(SSD1327_SETPHASELENGTH);
+	SSD1327_Command(0x0F);  // !
+    
+    SSD1327_Command(SSD1327_SETFRONTCLOCKDIVIDER_OSCILLATORFREQUENCY);
+	SSD1327_Command(0x00);
+    
+    SSD1327_Command(SSD1327_FUNCTIONSELECTIONA); // !
+	SSD1327_Command(0x01); // !
+    
+    SSD1327_Command(SSD1327_SETSECONDPRECHARGEPERTIOD);
+	SSD1327_Command(0x0F); // !
+    
+    SSD1327_Command(SSD1327_SETSETVCOMVOLTAGE);
+	SSD1327_Command(0x0F); // !
+    
+    SSD1327_Command(SSD1327_SETPRECHARGEVOLTAGE);
+	SSD1327_Command(0x08); // !
+    
+    SSD1327_Command(SSD1327_FUNCTIONSELECTIONB);
+	SSD1327_Command(0x62);
+    
+    SSD1327_Command(SSD1327_SETCOMMANDLOCK); // !
+	SSD1327_Command(0x12);  // !
+    
+    SSD1327_DisplayON(1);
+    
+#endif
+      
+#if 1
 	SSD1327_Command(SSD1327_DISPLAYOFF);  // Display Off
 
 	SSD1327_Command(SSD1327_SETMULTIPLEX);
@@ -151,7 +206,8 @@ void SSD1327_Init(void)
 	SSD1327_Command(SSD1327_SEGREMAP);
 	SSD1327_Command(0x51);
 
-	SSD1327_SetContrast(0x7F);
+	//SSD1327_SetContrast(0x7F);
+    SSD1327_SetContrast(0xFF);
 
 	SSD1327_Command(SSD1327_SETPHASELENGTH);
 	SSD1327_Command(0x22);
@@ -175,7 +231,8 @@ void SSD1327_Init(void)
 
 	SSD1327_Command(SSD1327_SETCOLUMNADDRESS);
 	SSD1327_Command(0x00);
-	SSD1327_Command(0x3F);
+	//SSD1327_Command(0x3F);
+    SSD1327_Command(0x7F);
 
 	SSD1327_Command(SSD1327_SETROWADDRESS);
 	SSD1327_Command(0x00);
@@ -190,6 +247,7 @@ void SSD1327_Init(void)
 #endif
 
 	SSD1327_DisplayON(1);
+#endif    
 }
 
 #ifdef SSD1327_I2C_CONTROL
@@ -254,11 +312,14 @@ void SSD1327_Display(void)
 {
 	SSD1327_Command(SSD1327_SETCOLUMNADDRESS);
 	SSD1327_Command(0x00);
-	SSD1327_Command(0x3F);
+	//SSD1327_Command(0x3F);
+    //SSD1327_Command(0x7F);
+    SSD1327_Command(0x3F);
 
 	SSD1327_Command(SSD1327_SETROWADDRESS);
 	SSD1327_Command(0x00);
 	//SSD1327_Command(0x5F);
+    //SSD1327_Command(0x7F);
     SSD1327_Command(0x7F);
 
 #ifdef SSD1327_I2C_CONTROL

+ 4 - 0
desk/modules/configs/config.h

@@ -38,9 +38,13 @@
 // Фильтр антидребезга для кнопки энкодера
 #define BUTTON_GLICH_TIMEOUT        50
 
+// Выводменю в консоль
 // Стрелки клавиатуры "a", "s", "d" управляют меню в консоли
 #define KEYBOARD_MENU   
 
+// Вывод на экран
+#define SCREEN_MENU
+
 // Коэффициент 1, верхний порог
 #define FACTOR_1_UP_THR     1050
 

+ 2 - 2
desk/modules/menu/menu.cpp

@@ -39,7 +39,7 @@ void menu_init(void)
     menu_control_handle = osThreadCreate(osThread(control_thr), NULL);
     
     // Обновление меню
-    osThreadDef(menu_up_thr, vUpdate, osPriorityNormal, 0, 2*configMINIMAL_STACK_SIZE);
+    osThreadDef(menu_up_thr, vUpdate, osPriorityNormal, 0, 4*configMINIMAL_STACK_SIZE);
     menu_update_handle = osThreadCreate(osThread(menu_up_thr), NULL);
     
     // Начальный экран
@@ -102,7 +102,7 @@ static void vUpdate(void const *params)
     {
         osDelay(MON_DELAY);
         
-#if 0        
+#if 1        
         // Имитация изменения счетчиков для теста
         inc_raw_counters();
 #endif        

+ 115 - 4
desk/modules/menu/menu_items.cpp

@@ -6,15 +6,29 @@
 #include "config.h"
 #include "settings.h"
 #include "uart_bridge.h"
+#include "oled_common.h"
 #include <string.h>
 #include <stdio.h>
 
+extern "C" {
+#include "OLED_SSD1327.h"
+#include "GFX_SSD1327.h"
+#include "fonts.h"
+}
+
 #define DBG if(1)
 
 extern bool update_flag;
 
-#ifdef KEYBOARD_MENU
+#ifdef SCREEN_MENU
+#define SCREEN_BUF_LEN     30
+char screen_str_buf[SCREEN_BUF_LEN];
+
+static void screen_draw_main(uint8_t sel);
+static void screen_draw_settings(uint8_t sel);
+#endif
 
+#ifdef KEYBOARD_MENU
 #define CLI_BUF_LEN     30
 char cli_str_buf[CLI_BUF_LEN];
 
@@ -74,6 +88,10 @@ void draw_main(uint8_t sel)
 {
     update_flag = true;
                
+#ifdef SCREEN_MENU    
+    screen_draw_main(sel);
+#endif    
+    
 #ifdef KEYBOARD_MENU    
     cli_draw_main(sel);
 #endif    
@@ -84,6 +102,10 @@ void draw_settings(uint8_t sel)
 {
     update_flag = false;
     
+#ifdef SCREEN_MENU    
+    screen_draw_settings(sel);
+#endif    
+    
 #ifdef KEYBOARD_MENU    
     cli_draw_settings(sel);
 #endif    
@@ -131,6 +153,98 @@ void change_revers(bool dir)
         settings.revers = true;
 }
 
+// -------------------------------------------------------------------------- //
+// Экранное меню OLDED.
+
+#ifdef SCREEN_MENU
+
+// Отрисовка главного экрана
+static void screen_draw_main(uint8_t sel)
+{
+    uint32_t raw_forw_turns, raw_back_turns, dir;
+    
+    get_raw_params(&raw_forw_turns, &raw_back_turns, &dir);
+    
+    SSD1327_Clear(BLACK);
+    
+    // Основнаая рамка
+    GFX_DrawRectangle(1, 1, 126, 125, 15);
+    
+    GFX_SetFont(font_8x5);
+    GFX_SetFontSize(2);
+    
+    memset(screen_str_buf, 0, SCREEN_BUF_LEN);
+    sprintf(screen_str_buf, "F: %u", raw_forw_turns);
+    GFX_DrawString(8, 20, (char*)screen_str_buf, 15, 0);
+
+    memset(screen_str_buf, 0, SCREEN_BUF_LEN);
+    sprintf(screen_str_buf, "B: %u", raw_back_turns);
+    GFX_DrawString(8, 40, (char*)screen_str_buf, 15, 0);
+    
+    memset(screen_str_buf, 0, SCREEN_BUF_LEN);
+    sprintf(screen_str_buf, "T: %u", 0);
+    GFX_DrawString(8, 60, (char*)screen_str_buf, 15, 0);
+    
+    memset(screen_str_buf, 0, SCREEN_BUF_LEN);
+    if (dir == 1)
+        sprintf(screen_str_buf, "Move fwd");
+    else
+        sprintf(screen_str_buf, "Move back");
+    GFX_DrawString(8, 80, (char*)screen_str_buf, 15, 0);
+        
+    SSD1327_Display();
+}
+
+// Отрисовка экрана настроек
+static void screen_draw_settings(uint8_t sel)
+{
+    bool select;
+    
+    SSD1327_Clear(BLACK);
+    
+    //GFX_DrawRectangle(1, 1, 126, 125, 15);
+    
+    
+    //GFX_DrawRoundRectangle(1, 1, 126, 125, 3, 15);
+    
+    select = sel == MCELL_K1 ? true : false;
+    //cli_print_int_param((char*)"F 1:   ", settings.factor_1, select);
+    memset(screen_str_buf, 0, SCREEN_BUF_LEN);
+    sprintf(screen_str_buf, "F 1: %u", settings.factor_1);
+    //GFX_DrawString(8, 20, (char*)screen_str_buf, 15, 0);
+            
+    if (select)
+        oled_draw_rec(3, 5, 123, 22, 15);
+    
+    select = sel == MCELL_K2 ? true : false;
+    //cli_print_int_param((char*)"F 1:   ", settings.factor_1, select);
+    memset(screen_str_buf, 0, SCREEN_BUF_LEN);
+    sprintf(screen_str_buf, "F 2: %u", settings.factor_2);
+    //GFX_DrawString(8, 40, (char*)screen_str_buf, 15, 0);
+    
+    
+    SSD1327_Display();
+/*    
+    select = sel == MCELL_K1 ? true : false;
+    cli_print_int_param((char*)"Factor 1:   ", settings.factor_1, select);
+    
+    select = sel == MCELL_K2 ? true : false;
+    cli_print_int_param((char*)"Factor 2:   ", settings.factor_2, select);
+    
+    select = sel == MCELL_REV ? true : false;
+    if (settings.revers == true)
+        cli_print_str_param((char*)"Revers:     ", (char*)"yes", select);
+    else
+        cli_print_str_param((char*)"Revers:     ", (char*)"no", select);
+    
+    select = sel == MCELL_RES ? true : false;
+    cli_print_str_param((char*)"Reset counters", (char*)"", select);
+    
+    select = sel == MCELL_SAVE ? true : false;
+    cli_print_str_param((char*)"Save settings", (char*)"", select);
+*/
+}
+#endif
 // -------------------------------------------------------------------------- //
 // Консольное меню. Вспомогательные функции.
 #ifdef KEYBOARD_MENU
@@ -158,9 +272,6 @@ static void cli_draw_settings(uint8_t sel)
     DBG printf("\033c");
     DBG printf("~~~ SETTINGS SCREEN ~~~\r\n\n");
     
-    if (sel == MCELL_K1) {
-    }
-    
     select = sel == MCELL_K1 ? true : false;
     cli_print_int_param((char*)"Factor 1:   ", settings.factor_1, select);
     

+ 38 - 28
desk/modules/ssd_1327/oled_common.cpp

@@ -26,29 +26,38 @@ void init_oled(void)
     
     SSD1327_Clear(BLACK);
 
+/*
+    
+    SSD1327_DrawPixel(20, 20, 15);
+    SSD1327_DrawPixel(21, 20, 15);
+    SSD1327_DrawPixel(22, 20, 15);
+    
+    SSD1327_DrawPixel(20, 21, 15);
+    SSD1327_DrawPixel(20, 22, 15);
+    
+    SSD1327_DrawPixel(22, 21, 15);
+*/    
+    
+    
     //GFX_Image(15, 0, (uint8_t*)logo_grayscale, 96, 96);
-        
+            
     SSD1327_Display();
     
-    test_oled();
+    
+    
+    //while (1) {} 
 }
 
-
 //
 void test_oled(void)
 {
-    //SSD1327_DrawPixel(int16_t x, int16_t y, uint8_t Color);
-  
 #if 0  
-    for (int i = 0; i < 16; i++)
-    {
+    for (int i = 0; i < 16; i++) {
         SSD1327_DrawPixel(10, 20 + i, i);
     }
   
     SSD1327_DrawPixel(20, 20, 15);
-    
     SSD1327_DrawPixel(30, 20, 15);
-    
     SSD1327_DrawPixel(40, 20, 5);
 #endif    
     //void GFX_DrawLine(int x_start, int y_start, int x_end, int y_end, uint8_t color);
@@ -65,10 +74,18 @@ void test_oled(void)
     GFX_DrawLine(0, 127, 127, 127, 15);
     
     GFX_SetFont(font_8x5);
+    
+    GFX_SetFontSize(1);
+    GFX_DrawString(4, 10, (char*)"BbAa12345", 15, 0);
+    
     GFX_SetFontSize(2);
+    GFX_DrawString(4, 30, (char*)"BbAa12345", 15, 0);
+    
+    GFX_SetFontSize(3);
+    GFX_DrawString(4, 60, (char*)"BbAa12345", 15, 0);
     
     //GFX_DrawChar(50, 50, 'F', 15, 0);
-    GFX_DrawString(10, 100, "Hello!!!", 15, 0);
+    //GFX_DrawString(10, 100, "Hello!!!", 15, 0);
     
     
 #if 0    
@@ -83,6 +100,17 @@ void test_oled(void)
     
 }
 
+// oled_draw_rec(3, 5, 123, 22, 15);
+void oled_draw_rec(int x_start, int y_start, int x_end, int y_end, uint8_t color)
+{
+    for (int i = 0; i < y_end; i++) {
+        GFX_DrawLine(x_start, y_start + i, x_end, y_start + i, color);
+    }
+    //GFX_DrawLine(x_start, y_start, x_end, y_start, color);
+    GFX_DrawLine(x_start, y_end, x_end, y_end, color);
+    //GFX_DrawLine(x_start, y_start, x_start, y_end, color);
+    //GFX_DrawLine(x_end, y_start, x_end, y_end, color);
+}
 
 //
 void init_gpio_oled(void)
@@ -97,24 +125,6 @@ void init_gpio_oled(void)
     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
     
     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
-    
-#if 0    
-    /*Configure GPIO pin Output Level */
-    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);
-    
-    /*Configure GPIO pin : PC13 */
-    GPIO_InitStruct.Pin = GPIO_PIN_13;
-    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
-    GPIO_InitStruct.Pull = GPIO_NOPULL;
-    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
-    
-    /*Configure GPIO pin : PC6 */
-    GPIO_InitStruct.Pin = GPIO_PIN_6;
-    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-    GPIO_InitStruct.Pull = GPIO_NOPULL;
-    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
-#endif    
 }
 
 

+ 3 - 0
desk/modules/ssd_1327/oled_common.h

@@ -8,6 +8,9 @@ void init_oled(void);
 //
 void test_oled(void);
 
+//
+void oled_draw_rec(int x_start, int y_start, int x_end, int y_end, uint8_t color);
+
 //
 void init_gpio_oled(void);
 

BIN
output/desk.bin


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 6 - 3
project/ewarm/settings/tuber.wsdt


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio