РЕШЕНО U8glib как очистить экран?

Тема в разделе "Arduino & Shields", создана пользователем Rmt44, 13 ноя 2021.

  1. Rmt44

    Rmt44 Нуб

    Код (Javascript):
    #include "U8glib.h"

    //settings
    U8GLIB_ST7920_128X64 u8g(13, 11, 10, U8G_PIN_NONE); //SPI
    #define LINE_MAX 128
    #define ROW_MAX 64
    uint8_t screen[ROW_MAX][LINE_MAX];
    //********

    void draw(void) {
      u8g.setFont(u8g_font_6x10);
      u8g.drawStr( 0, 10, "Hello World!");
      clear_screen();
    }

    void setup(void) {
      if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
        u8g.setColorIndex(255);     // white
      }
      else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
        u8g.setColorIndex(3);         // max intensity
      }
      else if ( u8g.getMode() == U8G_MODE_BW ) {
        u8g.setColorIndex(1);         // pixel on
      }
      else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
        u8g.setHiColorByRGB(255,255,255);
      }
    }
    void clear_screen(void) {
      uint8_t i, j;
      for( i = 0; i < ROW_MAX; i++ )
        for( j = 0; j < LINE_MAX; j++ )
          screen[i][j] = 0;
    }
    void loop(void) {
      u8g.firstPage();
      do {
        draw();
      } while( u8g.nextPage() );
    }
     
    Последнее редактирование: 13 ноя 2021
  2. Un_ka

    Un_ka Гуру

    Это вопрос –
    Ответ.
    С вас измерить время очистки дисплея и сообщить нам.;)
     
  3. parovoZZ

    parovoZZ Гуру

    Я очищаю так:

    Код (C++):
    void SSD1306_gLIB_RAM_clear (void)
    {
        uint8_t buffer[128];
        uint8_t buffer1[6];
        uint8_t a = 128;

        buffer1[0] = SSD1306_CMD_SET_PAGE_ADDRESS;
        buffer1[2] = 0x07;
        buffer1[3] = SSD1306_CMD_SET_COLUMN_ADDRESS;
        buffer1[4] = 0;
        buffer1[5] = 0x7F;  

        while (a)
        {
            a--;

            buffer[a] = 0x00;
        }
       
        a = 8;
       
        while (a)
        {
            a--;
           
            buffer1[1] = a;
           
            SSD1306_SendCommand(6, buffer1);
           
            SSD1306_SendData(128, buffer);
        }      
    }
    и не надо читать до обеда совецких газет.
     
  4. Rmt44

    Rmt44 Нуб

    Всё спасибо работает.
    всё спасибо работает
     
  5. Un_ka

    Un_ka Гуру

    А можно без такого большого массива, если да то как?
    Сколько времени занимает очистка?
     
  6. Rmt44

    Rmt44 Нуб

    2 секунды
     
  7. parovoZZ

    parovoZZ Гуру

    а зачем? Памяти не хватает? Тут всего 128 байт под одну строчку (column) и 6 байт под команду.

    шо, простите????
     
  8. Rmt44

    Rmt44 Нуб

    Простите неправильно засёк время). 5 с половиной секунд
     
  9. parovoZZ

    parovoZZ Гуру

    это очень медленно. SSD1306 у меня полный кадр рисует менее, чем за 100мс на тактовой частоте 4МГц.
     
  10. Rmt44

    Rmt44 Нуб

    Да я знаю) толи дело в дисплеи, а может дело в китайской ардуино
     
  11. Un_ka

    Un_ka Гуру

    Можно код этого действа?
    Тактовая частота МК или шины?
    Без названия2_20211114123434.png
     
    Последнее редактирование: 14 ноя 2021
  12. Rmt44

    Rmt44 Нуб

    Да вот
    Код (Javascript):
    #include <iarduino_RTC.h>
    #include "U8glib.h"

    //settings
    U8GLIB_ST7920_128X64 u8g(13, 11, 10, U8G_PIN_NONE); //SPI
    iarduino_RTC time(RTC_DS1302,6,8,7);
    //********

    void loader(void) {
      time.settime(0, 30, 18, 12, 6, 20, 5);
    }
    void comobi(void){
      u8g.setFont(u8g_font_6x10);
      u8g.drawLine(0, 10, 128, 10);
      Serial.println(time.gettime("H:i:s"));
      u8g.drawStr( 0, 9, time.gettime("H:i:s"));
    }
    void setup(void) {
      if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
        u8g.setColorIndex(255);     // white
      }
      else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
        u8g.setColorIndex(3);         // max intensity
      }
      else if ( u8g.getMode() == U8G_MODE_BW ) {
        u8g.setColorIndex(1);         // pixel on
      }
      else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
        u8g.setHiColorByRGB(255,255,255);
      }

      u8g.firstPage();
      do {
        loader();
      } while( u8g.nextPage() );
      delay(2000);
    }
    void loop(void) {
      u8g.firstPage();
      do {
        comobi();
      } while( u8g.nextPage() );
    }
     
  13. parovoZZ

    parovoZZ Гуру

    И МК и шины. Соотношение 1:1.
     
  14. Rmt44

    Rmt44 Нуб

    Также я решил проблему с оптимизацией, по сути убрав clear_screen() и сделав несколько циклов. Оказалось что после каждого цикла
    Код (Javascript):
    do{
        draw();
    } while( u8g.nextPage());
    автоматически очищается экран, и делает это быстрее. Плюс оказалось что контакт был не плотный и провода ещё чуть-чуть и отвалились бы, теперь всё работает отлично!
     
  15. Un_ka

    Un_ka Гуру

    За какое время?
    А где замер времени? Или вы снаружи с секундомером?