Как уменьшить контраст на oled-дисплее?

Тема в разделе "Arduino & Shields", создана пользователем Mars, 28 окт 2020.

  1. Mars

    Mars Нуб

    Приветствую всех!
    Купил недавно на замену LCD-дисплею 20*4, новый Oled-дисплей 20*4 (такой - https://a.aliexpress.com/_9gfr0v)
    Разница конечно небо и земля... )
    Только вот с ним перестал работать фотоРезистор, который убавлял яркость дисплея ночью. Да и не только он, но даже по времени (ночью, во время сна) перестала убавлять яркость нового дисплея.
    Подключен по i2c.
    Потом понял, что у Oled нет яркости, а только контраст (но всё равно ярко освещает комнату, в темноте). Да и библиотека нужна другая, к данному дисплею.
    И вот не сможет ли кто подсказать каков должен быть кусок скетча именно для регулировки контраста на данных дисплеях. И какую лучше использовать библиотеку для Oled..?
     
    Последнее редактирование: 28 окт 2020
  2. parovoZZ

    parovoZZ Гуру

    если это SSD что-то там, то яркость у них меняется очень не сильно.
    Но со временем это пройдёт. Года через 2-3 яркость снизится сама))
     
    issaom нравится это.
  3. Mars

    Mars Нуб

    Вроде Гуру, а совета в помощь никакого...

    В Ютюбе видел, как снижали контрас, нормально так. Четкость не снижалась, а засветка снижалась сильно.
    Только скетча не оставил он...
     
  4. issaom

    issaom Гуру

    Чтобы дать совет - нужно чтобы был такой дисплей в наличии... я например не думаю что его вообще имеет смысл покупать....
    У меня есть OLED на ssd1309 разница на глаз конечно заметна, но на мой взгляд для работы в темноте не достаточна. Может с Oled-дисплей 20*4 будет лучше - хотя покупать текстовый дисплей Oled это какое-то извращение....(за такую цену можно 128*64 с диагональю 2'42 купить) На счет четкости вообще не понял - если обычный светодиод будет светить с меньшей яркостью (а OLED это по сути матрица из светодиодов) - он, что менее четко будет выглядеть ? И что такое засветка ? Что такое контрастность? В любом случае по видео с Ютуба Вы это не оцените - зависит от настроек и типа камеры Ютубера в реальности снижение яркости будет выглядеть совсем по другому - тем более в полной темноте.
     
    parovoZZ нравится это.
  5. parovoZZ

    parovoZZ Гуру

    Так пишут в даташитах на дешманские одноцветные OLED. По факту это, конечно же, яркость.
     
  6. Asper Daffy

    Asper Daffy Иксперд

    Там есть регистр контрастности. По умолчанию 0x80 (средняя) можете программно хоть до нуля опустить. В даташите про это всё прописано. Читали? Что-то не так срабатывает? Тогда код нужен.
     
  7. parovoZZ

    parovoZZ Гуру

    Кстати, на SSD1306 можно выключить емкостной умножитель. Тогда яркость у него будет такая, что хоть глаз коли. Команда 0x8D.
     
  8. Asper Daffy

    Asper Daffy Иксперд

    Паравоз, здесь не SSD1306, ну ты хоть бы посмотрел что там за контроллер, что ж ты в каждую бочку затычкой-то ...
     
    Andrey12 нравится это.
  9. parovoZZ

    parovoZZ Гуру

    ТС не написал.
    А по факту там что-то из семейства SSD + кодогенератор под одной кляксой.
     
  10. b707

    b707 Гуру

    по ссылке на Али указана модель дисплея - LEC2041. а по ней в гугле легко находится даташит с командами
     
  11. Asper Daffy

    Asper Daffy Иксперд

    Кто здесь гуру? Ты или ТС? US2011 там!
     
  12. Mars

    Mars Нуб

    Вот скетч, на котором стоял LCD-дисплей. На этом дисплее затухание яркости работало отлично, и по внешнему освещению, и по времени суток. Данный код находится в разделе "void checkBrightness() {..."
     
  13. Asper Daffy

    Asper Daffy Иксперд

    Я тебя спросил, ты читал даташит именно своего дисплея? Всё по нему сделал? Так давай скетч этого дисплея, а не другого.

    Ну, а если не читал даташит, то ... что тут скажешь, сам себе злобный буратино.
     
  14. Mars

    Mars Нуб

    Не помещается весь код.
    Превышение 10000 символов в сообщении.

    Вот отдельный код из скетча, который и отвечал за уменьшение яркости и по внешнему освещению, и по времени суток.
    Код (C++):
    void checkBrightness() {
      if (!light_min && (analogRead(PHOTO) < BRIGHT_THRESHOLD)) {
        if (!light_tim) {
          timing = millis();
          light_tim = true;
        }
        light_min = true;
      }
      if (light_min && (analogRead(PHOTO) > BRIGHT_THRESHOLD)) {
        if (!light_tim) {
          timing = millis();
          light_tim = true;
        }
        light_min = false;
      }
      if (light_tim)
        if (millis() - timing > PERIOD_TIME) {
          light_tim = false;
          if ((hm(hrs, mins) >= hm(23, 20) || hm(hrs, mins) <= hm(7, 30)) && light_min) { // по времени и если темно, то яркость-
            analogWrite(BACKLIGHT, LCD_BRIGHT_MIN);

    #if (LED_MODE == 0)
            LED_ON = (LED_BRIGHT_MIN);
    #else
            LED_ON = (255 - LED_BRIGHT_MIN);
    #endif

          } else
            analogWrite(BACKLIGHT, LCD_BRIGHT_MAX);
        }
    }
     
  15. Mars

    Mars Нуб

    Сам-то я не силён в ардуино.
    Часы собрал по проекту https://alexgyver.ru/meteoclock/
     
  16. Mars

    Mars Нуб

    Вот по этому и спрашиваю у вас совета, как и что изменить в данном скетче, чтоб подогнать его под OLED.
    Сменить\добавить библиотеку под олед, наверно точно ?
     
  17. Mars

    Mars Нуб

    Щит нашёл и почитал.
    Там говорится, что возможно менять контраст данного дисплея, снижая напряжение от 5в до мин. 3.3в
    По контакту VDD (тот же VCC на плате i2c). Он подключен напрямую к пину 5в. А как снижать вольтаж-то, на этом пине на ардуиноНано?
     
  18. parovoZZ

    parovoZZ Гуру

    Тебе @NikitOS хрустальный шар подогнал?
    И кстати, что это ещё за дерьмо?
     
  19. parovoZZ

    parovoZZ Гуру

    Никак. У древних AVR, на которых собраны эти ардуины, нет внутри ЦАП. Можно снизить ШИМ-ом, но есть два НО:
    1. Не понятно, как к ШИМ-у отнесётся дисплей.
    2. Породит новый виток вопросов, т.к. может полностью сломать работу так называемого СКЕТЧа (говнокода в переводе))))
     
  20. Mars

    Mars Нуб

    Вот полный скетч.
     

    Вложения: