баги lcd2004 по i2c

Тема в разделе "Arduino & Shields", создана пользователем SSnick, 14 сен 2014.

  1. SSnick

    SSnick Гик

    Здравствуйте.
    Имею дисплей lcd2004 (без кнопок), до сего времени использовался и нареканий к нему не имел, но появилась необходимость уменьшить кол-во используемых пинов с ардуино и я припаял i2c модуль.
    Разумеется требуется другая библиотека и другой код скетча, в поисках чего я провел последние полдня и перепробовал массу вариантов, но ничего рабочего не нашел.
    Результаты:
    Дисплей мигает или не горит, отображаются кракозябры а ля китайских иероглифов или вообще ничего не отображается.
    Пожалуйста, придайте ускорение в необходимом направлении решения этой проблемы или поделитесь рабочими кодами библиотеки и скетча. Спасибо
    ардуино 1.0.5
     
    Последнее редактирование: 14 сен 2014
  2. SSnick

    SSnick Гик

    Спасибо конечно... но мне нужна информация по дисплею 2004... а то, что вы дали - для 1602.
    Испробовал все примеры из данной вами папки, результат = ничего не меняется.
    Адрес моего i2c модуля 0x27, а не как у Вас в примерах 0x20... меняю на 0x27 - экран тухнет и больше ничего не происходит...
    Библиотеки ваши тоже для 1602?
     
  3. что мешает написать LiquidCrystal_I2C lcd(0x27, 20, 4); ? :confused:
     
    SSnick нравится это.
  4. SSnick

    SSnick Гик

    =) Ничего не мешает, я так и и делал. Результат = ничего не меняется. Экран вспыхивает на долю секунды и гаснет. На экране вот такое.
    [​IMG]
     
  5. это значит что экран не инициализирован..
    запусти i2c сканер и поглиди какой адрес у модуля на шине.
     
  6. SSnick

    SSnick Гик

    запускал... я же говорю адрес 0x27
    где и что еще можно посмотреть чтобы разобраться в ситуации?
     
    Последнее редактирование: 14 сен 2014
  7. vvr

    vvr Инженерище

    Сканером проверить адрес модуля и подбирать библу с которой будет работать, все через это прошли
     
  8. экран работает со стандартной библиотекой LiquidCrystal подключенный напрямую?, без i2c модуля.
     
  9. SSnick

    SSnick Гик

    да
     
  10. тогда скорее всего неправильный i2c модуль, с неверной разводкой.. и придется или пинать китайцы чтобы он сказал с какой библиотекой это чудо работает или перебирать библиотеки.
     
    SSnick нравится это.
  11. SSnick

    SSnick Гик

    Нашел! Всем спасибо за ответы! Все заработало!
     

    Вложения:

    Salk и Пушной звер нравится это.
  12. SSnick

    SSnick Гик

    А какого плана порты на ардуино подходят для работы такого модуля? а то везде. где я встречал, цепляют SDA и SCL к A4 и A5... на цифровые их не повесить?
     
  13. vvr

    vvr Инженерище

    На уно и нано А4 и А5
    леонардо 2 и 3
    на меге 20 и 21
    по другому никак
     
    SSnick нравится это.
  14. SSnick

    SSnick Гик

    Спасибо большое!
     
  15. SSnick

    SSnick Гик

    Не стал создать новой темы и написал в существующую.

    Дисплей 2004 подключен через шину i2c, такого при подключении напрямую не было.
    Меня не устраивает то, что при обновлении данных на экране нижняя часть его же на долю секунды гаснет, чем ближе строка к нижней части экрана тем сильнее это выражено. Это заметно даже при обновлении экрана 1 раз в 5 секунд. А при посылке данных без задержек получается вот такая порнография на дисплеи - тут практически совсем нечитаемы 2-3 строки



    Скажите, пожалуйста, от чего такое может быть?
     
  16. vvr

    vvr Инженерище

    Может у кого то есть телепатические возможности чтоб увидеть ваш код :D
     
  17. SSnick

    SSnick Гик

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

    Код (Text):
    #include <LiquidCrystal_I2C.h>
    #include <Wire.h>

    LiquidCrystal_I2C lcd(0x27,20,4);

    void setup()
      {
        lcd.init();                    
        lcd.backlight();
      }

    void loop()
      {
            lcd.clear();
            lcd.setCursor(0, 0);
            lcd.print("Soil Humid = ");
            lcd.print(analogRead(A6));
            lcd.setCursor(0, 1);
            lcd.print("Air Humid = ");
            lcd.setCursor(0, 2);
            lcd.print("Water Temp = ");
            lcd.setCursor(0, 3);
            lcd.print("Air Temp = ");
          //delay (5000);
      }
     
     
  18. vvr

    vvr Инженерище

    Очистку экрана поставь в сетап. В лупе дисплей будет мерцать из-за постоянной очистки.
     
    SSnick нравится это.
  19. Viacon

    Viacon Нуб

    Здравствуйте, получил ранее LCD 2004 - не проверял, сегодня получил I2C модуль, припаял. В этих скетчах показывает только первые символы в каждой строке:
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27, 20, 4); // Для экрана 20х4 (четырехстрочный)
    //LiquidCrystal_I2C lcd(0x27, 16, 2); // Для экрана 16х2 (двухстрочный)

    void setup()
    {
    lcd.begin();
    lcd.setCursor(0, 0); // 1 строка
    lcd.print("LCD I2C Test - 20x4");
    lcd.setCursor(0, 1); // 2 строка
    lcd.print("01234567899876543210");
    lcd.setCursor(0, 2); // 3 строка
    lcd.print("01234567899876543210");
    lcd.setCursor(0, 3); // 4 строка
    lcd.print("CHINGACHGOOK.NET");
    }

    void loop()
    {

    }
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27, 20, 4); // Для экрана 20х4 (четырехстрочный)
    //LiquidCrystal_I2C lcd(0x27, 16, 2); // Для экрана 16х2 (двухстрочный)

    void setup()
    {
    lcd.begin();
    lcd.setCursor(0, 0); // 1 строка
    lcd.print("LCD I2C Test - 20x4");
    lcd.setCursor(0, 1); // 2 строка
    lcd.print("01234567899876543210");
    lcd.setCursor(0, 2); // 3 строка
    lcd.print("01234567899876543210");
    lcd.setCursor(0, 3); // 4 строка
    lcd.print("CHINGACHGOOK.NET");
    }

    void loop()
    {

    }
    Куда далее копать?