Проблемы с lcd экраном 16x2 i2c

teslaboy47
Offline
Зарегистрирован: 19.11.2015

Здравствуйте! проблемы с модулем lcd1602 i2c.

Дисплей общяется с arduino по i2c соеденению, всё в принципи работает, но при выводе текста на дисплей с помощью функции lcd.print("Hello, world");  Отображается только первый символ, а всё остальное куда то пропадает(

Подскажите пожалуйста что делать я уже и библиотеки менял хоть убей всё равно выводит токо 1 букву и больше ничего(((

bwn
Offline
Зарегистрирован: 25.08.2014

Давите его Киса, давите.

teslaboy47
Offline
Зарегистрирован: 19.11.2015

Я не понял вашего сорказма. Дисплей рабочий и надавливать негде не надо а вот с отображением что то не то если например начать запись с 3 позиции на строке то всёравно он выводит только первую букву а остальные кудато пропадают(

bwn
Offline
Зарегистрирован: 25.08.2014

Если он рабочий, то должен выводить как затевалось. Вот и пробегитесь по контактам, в том числе которые внутри (надавливание по периметру наиболее простой способ). И первый символ выводит ярко или еле видно?
Есть ли возможность включить без I2C?
Если есть возможность, сбросьте фотки как подключено и что получается.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Схема подключения секретна!
Скетч тоже секретный!

Думайте мужики, как я соединил, что я там напрограммировал и в чём у меня может быть проблема, думайте!

teslaboy47
Offline
Зарегистрирован: 19.11.2015

Дисплей работает и выводит символ на каждой строке на каждом вертекальном расположение курсора, но он выводит только один символ вне зависимоти от того где установлен курсор lcd.print("Hello world");

выводит только один символ, только H и больше ничего(

Повторяюсь дисплей исправен и выводит все сстрочки все столбики работают, но выводит только один символ(

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так и я ж про то говорю.

Вот, знаете, я вчера скетч написал, и он неправильно работает. Скетч я Вам не покажу (вдруг украдёте), но Вы напрягитесь и посоветуйте в какую сторону мне копать!

Вы видите идиотичность постановки вопроса? У Вас ровно также!

teslaboy47
Offline
Зарегистрирован: 19.11.2015
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x3F,16,2);
 
void setup()
{
  lcd.init();                   
 
  // Print a message to the LCD.
  lcd.backlight();
  lcd.print("Hello, world!");
}
 
void loop()
{
}

​Это стандартный скетч он работает но не доконца  lcd.print("Hello, world!"); выводит только одну букву и больше ничего!

beve
Offline
Зарегистрирован: 15.07.2015

Посмотрите на описание функций из библиотеки lcd, возможно вместо lcd.init(); нужно использовать вызов: lcd.begin();

JasKo
Offline
Зарегистрирован: 21.11.2015

Такая же беда с 1602 HD44780.

Подключение по I2C скетч "Hello world" выводит только первую букву.

Подключение по стандартной шине работает в цело нормально, но эпизодически при долгой работе буквы превращаются в краозябру. и помогает только кнопка ресет на ардуине.

bwn
Offline
Зарегистрирован: 25.08.2014

Буквы в кракозябрах это другая история, ищите помеху по питанию девайса.

JasKo
Offline
Зарегистрирован: 21.11.2015

Перепробовал несколько библиотек, не помогло. С какимито выводит тоько первую, с другими вообще ни чего не выводит.

Написал свою подпрогамму для посимвольного вывода из символьного массива. Выводит всю надпись.

Не ужели ни кто более с таким дефектом не встречался?

 

Radjah
Offline
Зарегистрирован: 06.08.2014

Пользуюсь такой либой. Работает исправно и с китайскими и с отечественными дисплеями.

JasKo
Offline
Зарегистрирован: 21.11.2015

Спасибо, попробую!

 

JasKo
Offline
Зарегистрирован: 21.11.2015

Radjah, попробовал эту библиотеку - эфект точно такой же, выводит первый символ, остальные пропадают.

Такое впечатление, что пересылка строки происходит быстрее, чем I2C способен принять.

Radjah
Offline
Зарегистрирован: 06.08.2014

Или дисплей иницилазируется неправильно, или китайцы в пайке напортачили.

У меня вот такая заготовка для работы с дисплеем.

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

// Порты LCD
#define LCD_I2C_ADDR    0x27 // Define I2C Address where the PCF8574T is
#define BACKLIGHT     3
#define LCD_EN  2
#define LCD_RW  1
#define LCD_RS  0
#define LCD_D4  4
#define LCD_D5  5
#define LCD_D6  6
#define LCD_D7  7

LiquidCrystal_I2C       lcd(LCD_I2C_ADDR,LCD_EN,LCD_RW,LCD_RS,LCD_D4,LCD_D5,LCD_D6,LCD_D7);

void setup() {
// ...
  lcd.begin(20,4);
  lcd.setBacklightPin(BACKLIGHT,POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.clear();
// ...
}

Меняется только адрес и размер дисплея.

dominionish
Offline
Зарегистрирован: 25.11.2015

Дисплей и пайка здесь ни при чем. Все делл в версии IDE(то есть проги Arduino, на которой пишется скетч). Дагнный баг наблюдается на версии 1.6.6 (http://arduino.ru/forum/apparatnye-voprosy/lcd-1602-i-konverter-i2c) На версиях ниже все норм. Поэтому желательно работать на версии IDE 1.6.5

Radjah
Offline
Зарегистрирован: 06.08.2014

А я говорю, что ты вруша. Вот только что скачал 1.6.6 и LiquidCrystal 1.2.1. Собрал скетч для дисплея на i2c и залил. Всё нормально отображается.

dominionish
Offline
Зарегистрирован: 25.11.2015

Ты ссылку смотрел, которую я кинул? Если у тебя работает, значит отлично, тебе повезло. Я же писал пользователю JasKo, у которого с этим проблемы. Я тоже столкнулся с этой проблемой. Перепробовал все библиотеки, разные скетчи и ничего не помогало. Помог откат на предыдущую версию. Это мой практический опыт, не понимаю при чем здесь твоё детское "вруша" Возможно есть еще какие то более глубокие причины. Если ты их знаешь и понял причину текущей проблемы, дак поделись. А то что у тебя заработало никого не интересует

Radjah
Offline
Зарегистрирован: 06.08.2014

Я написал выше. Для скорбных на голову повторяю:

Либо неисправен дисплей, либо сопли в подключении.

Если и так не убедил, то распишу.

IDE брал с сайта arduino.cc Бибилиотеку версии 1.2.1 для дисплея браз здесь.

Дисплей 16x2, плата.

dominionish
Offline
Зарегистрирован: 25.11.2015

Все ясно, спорить с тобой бессмыслено. Короче, для тех, у кого такая проблема, я отписался выше. Если и моя версия не помогла тогда вариант человека, который любит спорить и оскорблять сидя за монитором (Radjah) - ищите сопли или меняйте дисплей. В инете больше не нашел вариантов решения этой проблемы. Если есть еще какие варианты, пишите сюда, будем рады

Radjah
Offline
Зарегистрирован: 06.08.2014

Я не обзываю, а называю.

JasKo
Offline
Зарегистрирован: 21.11.2015

dominionish, спасибо за подсказку!  Действительно замена IDE 1.6.6 на 1.6.5 помогла. Теперь сообщения выводятся полностью.

 

PS: Интересно было бы все таки узнать где проблема в 1.6.6 зарыта.

Radjah
Offline
Зарегистрирован: 06.08.2014

В ДНК у тебя проблема, а не в IDE.

JasKo
Offline
Зарегистрирован: 21.11.2015

Radjah пишет:

...

IDE брал с сайта arduino.cc Бибилиотеку версии 1.2.1 для дисплея браз здесь.

Дисплей 16x2, плата.

 

Попробовал и с этой библиотекой на IDE 1.6.6 - не выводит полностью строку на дисплей через I2C.

На 1.6.5 выводит

билиотека вот эта

name=LiquidCrystal_I2C
version=1.1
author=Marco Schwartz
maintainer=Marco Schwartz <marcolivier.schwartz@gmail.com>
sentence=A library for DFRobot I2C LCD displays.
paragraph=A library for DFRobot I2C LCD displays. It allows to control DFRobot I2C displays with commands similar to the Arduino LiquidCrystal library.
category=Display
url=https://github.com/marcoschwartz/LiquidCrystal_I2C
 

и вот эта Arduino-LiquidCrystal-I2C-library-master

работают !

JasKo
Offline
Зарегистрирован: 21.11.2015

Radjah пишет:

Или дисплей иницилазируется неправильно, или китайцы в пайке напортачили.

У меня вот такая заготовка для работы с дисплеем.

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

// Порты LCD
#define LCD_I2C_ADDR    0x27 // Define I2C Address where the PCF8574T is
#define BACKLIGHT     3
#define LCD_EN  2
#define LCD_RW  1
#define LCD_RS  0
#define LCD_D4  4
#define LCD_D5  5
#define LCD_D6  6
#define LCD_D7  7

LiquidCrystal_I2C       lcd(LCD_I2C_ADDR,LCD_EN,LCD_RW,LCD_RS,LCD_D4,LCD_D5,LCD_D6,LCD_D7);

void setup() {
// ...
  lcd.begin(20,4);
  lcd.setBacklightPin(BACKLIGHT,POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.clear();
// ...
}

Меняется только адрес и размер дисплея.

Твой пример с предложенной тобою библиотекой 1.2.1 работает в версии 1.6.6 (их примеры нет).

Из двух зол выбираю меньше - IDE 1.6.5 и более стандартные библиотеки.

Radjah
Offline
Зарегистрирован: 06.08.2014

Ну и жри говно дальше.

JasKo
Offline
Зарегистрирован: 21.11.2015

Оказывается эту проблему обсуждают покрайней мере еще в одной ветке форума http://arduino.ru/forum/apparatnye-voprosy/lcd-1602-i-konverter-i2c

 

Предложенное там решение http://arduino.ru/forum/apparatnye-voprosy/lcd-1602-i-konverter-i2c#comm... реально работает на IDE 1.6.6 - сам проверил.

inspiritus
Offline
Зарегистрирован: 17.12.2012
makaroff
Offline
Зарегистрирован: 13.06.2014

Библиотеку автор обновил. Теперь работает - проверено в 1.6.7

https://github.com/marcoschwartz/LiquidCrystal_I2C

VladimirB_01
Offline
Зарегистрирован: 09.07.2015

У меня есть скетч, и использованием LiquidCrystal_I2C. Все исправно работало в старой версии компилятора. Я переустановил винду и скачал новую версию. Вот тут начались эти глюки, посимвольно в цикле выводится вся строка, а если пытаешся строковую переменную вывести разом, то выводится только первый символ. Хотя вывести можно в любую точку дисплея

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Стандартный скетч из библиотеки, все работает. Естественно нужно устанавить курсор в нужную позицию!!!

//YWROBOT
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.init();                      // initialize the lcd 
  lcd.init();
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(1,0);
  lcd.print("Hello, world!");
  lcd.setCursor(0,1);
  lcd.print("Ywrobot Arduino!");
}


void loop()
{
}

 

VladimirB_01
Offline
Зарегистрирован: 09.07.2015

Неповериш!!!

Удалил оболочку с библиотеками версии 1.6.7 и нашел в старом диске версию 1.6.5. Установил её и скомпилировал свой скетч и той же библиотекой LiquidCrystal_I2C. Неповериш, но все стало отображаться как надо, точнее как было. Переменная String выводится полностью на экран, а не только первая буква.

Вот отрывой скетча:

      lcd.setCursor(0, 0);   lcd.print("Main:");  
 
В версии 1.6.7, на экране появлялось только буква "М", а в версии 1.6.5. полностью "Main:"
VladimirB_01
Offline
Зарегистрирован: 09.07.2015

Я пробовал обновлять библиотеку, но ни чего не менялось, пока оболочку не откатил назад

bwn
Offline
Зарегистрирован: 25.08.2014

VladimirB_01 пишет:

Я пробовал обновлять библиотеку, но ни чего не менялось, пока оболочку не откатил назад

Была в какой то 1.6.х версии такая дрянь. На форуме просто истерика была на эту тему.

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

На форуме есть вторая ветка этой проблемы - тут

Там я писал что и буржуи обсуждали эту проблему и у них есть решение тут . 

Я так понял надо найти в файле LiquidCrystal_I2C.cpp строки

1 inline size_t LiquidCrystal_I2C::write(uint8_t value) {
2     send(value, Rs);
3     return 0;
4 }

И замениить return 0; на return 1;

Дома было интересно, стояла 1.6.7 не работала, выводила только первый символ на экран, снес, поставил 1.6.5 все заработало.

Все устраивало, наткнулся на обсуждение, решил перейти на 1.6.7  и попробовать исправить библиотеку как написано выше. Сотрю а инсталяцию 1.6.7 я потер. Скачал заново, установил, и бац все работает :-) без каких либо исправлений. Вчера поздно было не стал проверять библиотеку, седня гляну.

ViktorCh
Offline
Зарегистрирован: 27.03.2016

У меня была такая же проблема,  3 раза перепаивал контакты, думал они.  Потом переустанавливал софт, от амперки софт нормально подошел, стали отображаться все буквы, но стал отваливаться GSM.  Решил все  снести и переустановить, в том числе  и драйвера портов.  Помучался но понял что у меня проблема была в кривых драйверах для загрузчика, в моем случае  CH340G. Терерь все нормально и  на 1.6.7 и  1.6.8. У оригинала загрузчик ATMEGA 16U22 ... 

vnalitov
Offline
Зарегистрирован: 23.06.2016

А у меня исправилось кнопкой в меню - исправить кодировку и перезагрузить )

slider
Offline
Зарегистрирован: 17.06.2014

Andrey12 , Благодарю,  то что надо! помогло !

тож lcd i2c 1602 LiquidCrystal_I2C.h пишет только первую букву H

версия 1.6.7 . версию не менял, библиотеку не обновлял,  В файле LiquidCrystal_I2C.cpp было

1 inline size_t LiquidCrystal_I2C::write(uint8_t value) {
2     send(value, Rs);
3 }

помогло добавление  return 1;

1 inline size_t LiquidCrystal_I2C::write(uint8_t value) {
2     send(value, Rs);
3     return 1;
4 }

 

Xakep.rus
Offline
Зарегистрирован: 25.06.2017

Испытал такой-же глюк с I2C переходником..

IDE поменялась с 1.8.2 на 1.8.3

Правка файла LiquidCrystal_I2C.cpp помогла

 

MrFlanker
Offline
Зарегистрирован: 16.01.2018

IDE 1.8.5
Display 20 x 4
LiquidCrystal_I2C lcd(0x3f,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display

Помогло

#define printIIC(args) Wire.write(args)
inline size_t LiquidCrystal_I2C::write(uint8_t value) {
send(value, Rs);
return 1;
}
 
#else
#include "WProgram.h"
 
#define printIIC(args) Wire.send(args)
inline void LiquidCrystal_I2C::write(uint8_t value) {
send(value, Rs);
return 1;
}
 
Tuka_Taraz
Offline
Зарегистрирован: 16.02.2018

Спасибо! У меня тоже самое было и IDE 1.6.5 решила проблемму))

Tuka_Taraz
Offline
Зарегистрирован: 16.02.2018

Спасибо! У меня тоже самое было и IDE 1.6.5 решила проблемму))

Tuka_Taraz
Offline
Зарегистрирован: 16.02.2018

JasKo пишет:

dominionish, спасибо за подсказку!  Действительно замена IDE 1.6.6 на 1.6.5 помогла. Теперь сообщения выводятся полностью.

 

PS: Интересно было бы все таки узнать где проблема в 1.6.6 зарыта.

Все заработало, спасибо!

slav41
Offline
Зарегистрирован: 17.08.2018
а вы пробовали подключать другую библиотеку подключать 
 
Вот библиотека которая помогла мне: https://github.com/marcoschwartz/LiquidCrystal_I2C
leolem
Offline
Зарегистрирован: 22.06.2019
#include <LiquidCrystal_I2C.h> 
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2);
byte smily[8] = {
  B00000,
  B00000,
  B01010,
  B00000,
  B00000,
  B10001,
  B01110,
};
void setup() 
{
  
}
 
void loop()
{
  lcd.init();   
  lcd.home();    
  lcd.backlight();
  lcd.createChar(0, smily); 
  lcd.write((byte)0);
}
Говорит ошибка, а бывает загружается но сам символ не выводит
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

leolem пишет:

Говорит ошибка

1. Где текст (копипаста) сообщения об ошибке?

2. Где правильно вставленный код?

Давайте и то, и другое, тогда сможете рассчитывать на помощь.

b707
Offline
Зарегистрирован: 26.05.2017

leolem - заканчивайте троллингом заниматься, вы это уже спрашиваете в другой ветке - нафига дублировать?

leolem
Offline
Зарегистрирован: 22.06.2019
void setup() 
{
  byte smily[8] = {
  B00000,
  B00000,
  B01010,
  B00000,
  B00000,
  B10001,
  B01110
};
  lcd.init();   
  lcd.home();  
  lcd.backlight();
  lcd.createChar(1, smily); 
  lcd.write((byte)1);
}

 

leolem
Offline
Зарегистрирован: 22.06.2019

OK\

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы не в состоянии вопринять два пункта сразу? Хорошо, давайте по одному

Где текст (копипаста) сообщения об ошибке?