lcd 1602 и конвертер i2c

iLoveJava
Offline
Зарегистрирован: 04.09.2015

Добрый день, нужен совет. Столкнулся с проблемой подключения конвертера i2c to LCD1602 (такой http://ru.aliexpress.com/store/product/IIC-I2C-interface-LCD1602-adapter...)  к lcd 1602, а в частности, дисплей с данным модулем выводит только ПЕРВЫЙ символ  из всей строки. Дисплей до этого был подключен напрямую к ардуине и все было ок, адрес для данного конвертера выставил  0x27, пробовал другой дисплей, перепробовал кучу библиотек - реакция одна, выводит только первый символ. Подскажите пожалуйста куда копать

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); 
void setup()
{
lcd.init(); 
lcd.backlight();
lcd.print(  "test"  );
}
void loop()
{
}

напишет на экране только "t"

iLoveJava
Offline
Зарегистрирован: 04.09.2015

Собрал скетч на win машине(ноут супруги), и проблема ушла !!! Когда скетч собираю на любимом ubuntu, тогда lcd выводит только один символ. Странно, использую одну библиотеку ... может кто-то сталкивался с подобной проблемой... 

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

iLoveJava пишет:

Собрал скетч на win машине(ноут супруги), и проблема ушла !!! Когда скетч собираю на любимом ubuntu, тогда lcd выводит только один символ. Странно, использую одну библиотеку ... может кто-то сталкивался с подобной проблемой... 

Сохраните скетчи до заливки в ардуину и сравните хотя бы их md5sum. Версии IDE под win и под linux - одинаковые?

iLoveJava
Offline
Зарегистрирован: 04.09.2015

Вы были правы. Версия ide в linux 1.6.6 , в win 1.6.4, разница между хексами в 4 байта. 

Клапауций 001
Offline
Зарегистрирован: 05.09.2015

iLoveJava пишет:

Вы были правы. Версия ide в linux 1.6.6 , в win 1.6.4, разница между хексами в 4 байта. 

и, какова ценность этого знания?

iLoveJava
Offline
Зарегистрирован: 04.09.2015

никакого... 

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Клапауций 001 пишет:
и, какова ценность этого знания?

Мы убедились в том, что в ардуину заливаются разные программы.

To:TS По-хорошему, надо синхронизировать версии IDE и версии библиотек LiquidCrystal_i2c - они тоже бывают разные...

http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit - вот здесь еще можно почитать...

iLoveJava
Offline
Зарегистрирован: 04.09.2015

Да, надо воспользоваться одинаковыми версиями .... Спасибо за ссылку.

123ksn
Offline
Зарегистрирован: 24.11.2014

Здравствуйте. Пару месяцев назад приобрел LCD1602 с i2c. На сайте был указан адрес 27. В реале оказался 3F.

СергейНСК
Offline
Зарегистрирован: 22.11.2014

Тоже наткнулся на это. В виндовой версии 1.6.6 перепробовал больше десятка библиотек. Эффект одинаков. На экране только первый символ. В 1.0.5 и 1.6.4 всё нормально.

Wisemann
Offline
Зарегистрирован: 02.12.2015

Этот баг, у меня, проявился только на версии 1.6.6. Проблема в возвращаемом значении функции print.write(). Исправленную библиотеку можно скачать здесь https://github.com/marcoschwartz/LiquidCrystal_I2C

123ksn
Offline
Зарегистрирован: 24.11.2014

СергейНСК пишет:

Тоже наткнулся на это. 

<span style="font-size:14.4px;font-weight:bold;line-height:12px;">Wisemann</span> пишет:

Этот баг

Мужики, так как ваши посты идут под моим,

<span style="font-size:14.4px;line-height:12px;"><b>123ksn</b></span> пишет:

На сайте был указан адрес 27. В реале оказался 3F.

то хотелось бы знать, что вы имеете ввиду под местоимением  "это"?

Wisemann
Offline
Зарегистрирован: 02.12.2015

iLoveJava пишет:

Добрый день, нужен совет. Столкнулся с проблемой подключения конвертера i2c to LCD1602 (такой http://ru.aliexpress.com/store/product/IIC-I2C-interface-LCD1602-adapter...)  к lcd 1602, а в частности, дисплей с данным модулем выводит только ПЕРВЫЙ символ  из всей строки. Дисплей до этого был подключен напрямую к ардуине и все было ок, адрес для данного конвертера выставил  0x27, пробовал другой дисплей, перепробовал кучу библиотек - реакция одна, выводит только первый символ. Подскажите пожалуйста куда копать

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); 
void setup()
{
lcd.init(); 
lcd.backlight();
lcd.print(  "test"  );
}
void loop()
{
}

напишет на экране только "t"

Под багом подразумевался вывод на lcd первого символа строки, а не строки целиком через библиотеку LiquidCrystal_I2C

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

Wisemann пишет:

Этот баг, у меня, проявился только на версии 1.6.6. Проблема в возвращаемом значении функции print.write(). Исправленную библиотеку можно скачать здесь https://github.com/marcoschwartz/LiquidCrystal_I2C

Проверил, реально помогло.

Maverik
Offline
Зарегистрирован: 12.09.2012

Вообще нужно быть аккуратнее с перепрыгиванием с одной arduino ide на другую.  

Я себе настроил 1.5.8,  добавил в boards.txt все нужные МК,  оптибуты и всё такое и жизнь прекрасна. 

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

Однажды у меня МК прошился только в оболчке версии 1.0.1, другие отказались.  Так и не понял что это было, но на всякий случай её оставил на память))

123ksn
Offline
Зарегистрирован: 24.11.2014

Maverik пишет:

Вообще нужно быть аккуратнее с перепрыгиванием с одной arduino ide на другую.  

Я себе настроил 1.5.8,  добавил в boards.txt все нужные МК,  оптибуты и всё такое и жизнь прекрасна. 

С одной стороны полностью согласен, что не следует бездумно менять версии IDE. Работает - не трогай. Но с другой стороны аргументация "все нужные МК", "и всё такое" не вызывает доверия к "проповеднику".

orl
Offline
Зарегистрирован: 20.11.2015

Добрый день! Столкнулся с той же проблемой.

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

В библиотеке:

#if defined(ARDUINO) && ARDUINO >= 100

#include "Arduino.h"

#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);
}

#endif

Добавляем в наш тестовый пример #define ARDUINO 100, и текст начинает выводиться как надо:

#define ARDUINO 100

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

LiquidCrystal_I2C lcd(0x27,16,2);
 
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.print("Hellow World");
}
 
void loop()
{
}

 

123ksn
Offline
Зарегистрирован: 24.11.2014

orl пишет:

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

Большое СПАСИБО!!! 

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

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

https://github.com/marcoschwartz/LiquidCrystal_I2C

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

iLoveJava пишет:

Добрый день, нужен совет. Столкнулся с проблемой подключения конвертера i2c to LCD1602 (такой http://ru.aliexpress.com/store/product/IIC-I2C-interface-LCD1602-adapter...)  к lcd 1602, а в частности, дисплей с данным модулем выводит только ПЕРВЫЙ символ  из всей строки. Дисплей до этого был подключен напрямую к ардуине и все было ок, адрес для данного конвертера выставил  0x27, пробовал другой дисплей, перепробовал кучу библиотек - реакция одна, выводит только первый символ. Подскажите пожалуйста куда копать

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); 
void setup()
{
lcd.init(); 
lcd.backlight();
lcd.print(  "test"  );
}
void loop()
{
}

напишет на экране только "t"

Спасибо помогло! Что только не перепробовал!

ihtiandr9
Offline
Зарегистрирован: 20.04.2018

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

nik182
Offline
Зарегистрирован: 04.05.2015

Наверно потому что ног почти не занимает, а те что занимает может делить ещё с кучей устройств?

ihtiandr9
Offline
Зарегистрирован: 20.04.2018

НАНУ тоже можно подключить к шине  и она дешевле

Нуидела
Offline
Зарегистрирован: 31.01.2017

Здравствуйте, подтвердите пожалуйста утверждение, что НАНА дешевле конвертора для 1602 ссылочкой.

ihtiandr9
Offline
Зарегистрирован: 20.04.2018

Нуидела пишет:

Здравствуйте, подтвердите пожалуйста утверждение, что НАНА дешевле конвертора для 1602 ссылочкой.

Вы с какой моделью сравниваете? 

ihtiandr9
Offline
Зарегистрирован: 20.04.2018

я сравниваю не адаптер к конкретному дисплею а полновесные расширители 

https://ru.aliexpress.com/item/PCF8575-IO-Expander-Module-I2C-To-16IO-Mo...

с НАНОЙ: 

https://ru.aliexpress.com/item/1-Nano-3-0-Arduino-Nano-CH340-usb/3283236...

Нуидела
Offline
Зарегистрирован: 31.01.2017

я сравнивал с конвертером из заголовка темы
(правда теме уже много лет :) )
цена на тот конвертер примерно 50 рублей на сегодняшний день.

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

Ну так полновесный расширитель, это PCF8574 в SOP16 + 1конденсатор + 5 резисторов и 1 транзистор = 18р+1р+1р+1р = 21р.
Голая атмега в 32 ногом корпусе ~ 100р.
Всего в пять раз дешевле. 
Ну а если хватает пинов, то расширитель никто ставить и не будет.

ihtiandr9
Offline
Зарегистрирован: 20.04.2018

bwn пишет:

Ну так полновесный расширитель, это PCF8574 в SOP16 + 1конденсатор + 5 резисторов и 1 транзистор = 18р+1р+1р+1р = 21р.
Голая атмега в 32 ногом корпусе ~ 100р.
Всего в пять раз дешевле. 
Ну а если хватает пинов, то расширитель никто ставить и не будет.

 можете ссылочку на это добро дать?

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

Издеваетесь? PCF-ка на али, так и набирать, а конденсаторы-резисторы с доноров дома. Номиналы - 3к3-10к для I2C, 220ом на затвор полевика, 10к между затвором и GND. И Ом 10-50 последовательно с цепью подсветки. Конденсатор - >5мкФ по питанию PCF-ки.
Я кондеры-резисторы сотнями покупаю, цены оттуда.

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

bwn пишет:

Издеваетесь? PCF-ка на али, так и набирать, а конденсаторы-резисторы с доноров дома. Номиналы - 3к3-10к для I2C, 220ом на затвор полевика, 10к между затвором и GND. И Ом 10-50 последовательно с цепью подсветки. Конденсатор - >5мкФ по питанию PCF-ки.
Я кондеры-резисторы сотнями покупаю, цены оттуда.

Ну -ну , товарисч, полегче. Видели у него номер в конце-9? Клапауций тоже когда-то был однозначным. А стал...

Вопрос к Тс - а где предидущие восемь ихтиандров?

ihtiandr9
Offline
Зарегистрирован: 20.04.2018

 ))) 9 это 2009 год. уже тогда мой ник был занят

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

1. Расширитель PCF8574 - 8-и битный и да, стоит значительно дешевле: отдельная мелкосхема ~ 15-20руб/шт. и собственно расширитель ~ 65руб.шт., а Вы привели ссыль на 16-и битный расширитель портов, да ещё и готовую плату. Впрочем, PCF8575 тоже стоит под сотку.

2. Расширитель используют для увеличения количества управляемых устройств при одном программном коде в одном камне. Вторую нанку, можно конечно же подцепить к первой по I2C тоже, но писать придется уже две программы и во взаимодествии друг с другом при резделенных ресурсах (данные программ у каждой свои). В этом есть свои плюсы и минусы для тех или иных применений.

3. Это сейчас просто дешевые варианты попропали, видимо в связи с нововведениями по доставкам, таможням и налогам. В прошлом году брал такие же расширители на 8 ног по 24-40руб, а на 16 по 80-100. Нанки так и вообще брал по 60 или около того рублев. Ещё успел закупиться ШИМ-расширителями на 16 портов по 12 бит. и тоже рублей по 110.

Ну вот так как-то.

Romariote
Offline
Зарегистрирован: 06.11.2018

Регулируемый Подсветка из Интерфейс модуль IIC I2C twispi модуль Serial совета Порты и разъёмы для 1602 ЖК-дисплей Дисплей для Arduino UNO
https://s.click.aliexpress.com/e/byJ6leC1 38 рублей,Карл!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Romariote пишет:
Регулируемый Подсветка из Интерфейс модуль IIC I2C twispi модуль Serial совета Порты и разъёмы для 1602 ЖК-дисплей Дисплей для Arduino UNO https://s.click.aliexpress.com/e/byJ6leC1 38 рублей,Карл!

это дорого.  В прошлом году 24р был с бесплатной доставкой.  Это же только модуль интерфейса, без самого экрана

Pasharon
Offline
Зарегистрирован: 06.12.2016

Pasharon пишет:

 

У всех  у кого проблемы с высвечиванием только первых символов :

Среда Arduino IDE выше 1.6.5 некорректно работает с библиотекой LiquidCrystal_I2C и всеми её клонами.
Потому что среда стала проверять наличие возврата функций, а библиотека корявая. И требуется в LiquidCrystal_I2C.cpp, у метода inline size_t LiquidCrystal_I2C::write(uint8_t value) прописать возврат результата return 1;

Чтобы метод из этого:
inline size_t LiquidCrystal_I2C::write(uint8_t value) {
send(value, Rs);

}

превратился в этот:
inline size_t LiquidCrystal_I2C::write(uint8_t value) {
send(value, Rs);
return 1;
}

И тогда будет вам счастье...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

подпишусь