Как подружить stm и spi_oled дисплей

Тема в разделе "Микроконтроллеры AVR", создана пользователем itsterit, 29 дек 2020.

  1. parovoZZ

    parovoZZ Гуру

    Это электромусор. Нормальное явление для памяти типа SDRAM, так как она не имеет цепей сброса.
     
  2. itsterit

    itsterit Нерд

  3. parovoZZ

    parovoZZ Гуру

    Срисовал шрифт под названием Pecita. Начертание убойное, правда где-то Ё при конвертации похерил. Или её не было вовсе.
    IMG_0841[1].jpg
    Надо токмо крепко подумать, как шрифты грамотно заюзать. А то сейчас всего 7 разных букв + не хитрая картинка, а мусора во флеш аж на 4 кило налезло. Выцепить тупо кириллицу конвертер не может, а вручную лопатить - ну его в пень)))

    Работа с кириллицей - целая головная боль. Редактор хочется иметь с UTF-8, а в этой таблице кириллица 2-х байтная(( А если редактор переводить в Win-1251, то на гите русские комментарии в крякозябрах((
     
  4. itsterit

    itsterit Нерд

    плюнул я на эти библиотеки Васей Пупкиных, решил подпихать u8g2, но эта тематика на отдельную ветку форума(чтобы не засорять все всем и сразу).

    ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО ВСЕМ!!;)
     
  5. parovoZZ

    parovoZZ Гуру

    решил я, что для статических строк нет абсолютно никакого смысла грузить все символы шрифта (включая неиспользуемый ангельские), а грузить надо только те символы, которые действительно нужны. Получается два варианта: либо формировать массив символов, но тогда индекс каждого символа придётся очень хитро вычислять через case (а на препроцессоре как это сделать???) и надеяться, что очень умный компилятор сделает это статически, а во FRAM загрузит только адреса. Ну и строки буду выглядеть читабельно и привычно: 'М', 'А" и т.д.
    Второй вариант тупо в лоб: вместо символов писать названия переменных, содержащие в своём названии индекс символа из ASCII таблицы. Тогда это будет выглядеть так:
    Код (C++):
    SSD1306_gLIB_DrawChar(0, 0, (&Cyrillic_Pixel_0xcc), 15);     // М

            SSD1306_gLIB_DrawChar(14, 0, (&Cyrillic_Pixel_0xc0), 15);     // А
    Брррррррр.....
    Но зато во FRAM программа занимает буквально точечку байт:
    Код (Text):
    676 bytes of CODE  memory
    160 bytes of DATA  memory (+ 22 absolute )
    545 bytes of CONST memory
    Не совсем разобрался, почему у "программистов" возникает проблема с кириллицей?
    IMG_0853[1].jpg
    Шрифт зовётся Cyrillic Pixel-7
    Про Ё не забыл, но на таком размере язык у неё отвалилсо...

    Надо какой-то проект намутить с этим экранчеГОМ. Вот только чи шо...
     
    itsterit нравится это.
  6. itsterit

    itsterit Нерд

    ЧАСЫ ⌚, я вот думаю из своего наручные часы собрать, с будильником, таймером и прочим, т.к мне часто такого функционала не хватает, а телефон- неудобно. Как бы - да, можно купить, но я нихатю, к тому же это первый проект на стм.
     
  7. parovoZZ

    parovoZZ Гуру

    Да часы я и так куплю. Надо что-то, что купить невозможно или дорого.
     
  8. Un_ka

    Un_ka Гуру

    Если количество используемых символов в строках ограничено и строки определены и не будут меняться, то второй способ более целесообразен.
    А если объявить функцию типа:

    Код (C++):
    SSD1306_gLIB_DrawString(char *c_1=NULL,char *c_2=NULL,char *c_3=NULL....

    ){

    }
    Если входящие переменные отличны от NULL вызывать
    SSD1306_gLIB_DrawChar
    Да и назвать их по-человечески:
    _A,_M...
    Получится как с 4-digit 7-segment
    Код (C++):
    drawStr(&_H,&_E,&_Y);
     
    Это лишь предложение, могу ошибаться на каждом этапе данного рассуждения.
     
    parovoZZ нравится это.
  9. parovoZZ

    parovoZZ Гуру

    Нарыл в закромах BME280 и решил его испробовать на вкус. Как говорится, проект на два вечера.
    И вот что мне показало сиё чудо.
    Давление
    IMG_1142.JPG
    Температура
    IMG_1136.JPG
    Влажность
    IMG_1140.JPG

    Шрифт Pecita. Высоту подбирал по "красоте". Конвертер LCD Image Converter. Бесплатный и самый лучший!
    Арифметика исключительно целочисленная. Точка конкатенируется уже в строку, т.к. количество знаков после запятой известно.
    В памяти всё это заняло
    1244 байт ОЗУ из-за видеобуфера, без которого никак. + 160 байт откушал стек.
    1262 байта - это шрифты во FRAM + настройки дисплея.
    Преобразование числа в строку по 5-ой методике, изложенной здесь
    http://we.easyelectronics.ru/blog/Soft/2400.html
    Хотя надо попробовать через умножение, т.к. есть умножитель и он должен работать быстрее, чем безумное количество сдвигов.
     
    Последнее редактирование: 4 ноя 2021
    b707 и Un_ka нравится это.
  10. Un_ka

    Un_ka Гуру

    Попробуйте molot.
     
  11. parovoZZ

    parovoZZ Гуру

    Намутим немного design

    IMG_1147[1].jpg

    Для инверсии цвета достаточно в экранный буфер записать подложку 0xFF (сплошная заливка), а все картинки сверху сложить с ним по исключающему или. Тогда произойдёт автоматическая инверсия.
     
    Un_ka нравится это.
  12. parovoZZ

    parovoZZ Гуру

    чем-то напоминает эпоху конструктивизма.