Странно работает lcd-i2c-экран (16х2)?

noname1234
Offline
Зарегистрирован: 03.05.2016

Привет, друзья, я что-то делаю не так или у меня правда битый экран? 

Выражается проблема в том, что если я что-то пытаюсь что-то выдать (или туда просто что-то попадает) в 16-ую ячейку первой или второй строки, то весь экран начинает отображать так, как будто по нему стукнули чем-то (т. е. точки в случайном порядке местами начинают иметь случайную яркость).

1for (int i = 0; i < 15; i++) {
2  lcd.setCursor(i, 0);
3  lcd.print("1");
4  lcd.setCursor(i, 1);
5  lcd.print("1");
6  delay(200);}

Всё идеально заполняется. Но, если поменять в цикле i<16, то при заполнении 16-ого символа начинается глюк.

Аналогично, если просто выдать 

1lcd.setCursor(0, 1);
2lcd.print("              1"); // тут 15 пробелов

такая же хрень с "битыми" пикселяеми.

На фото: 15 символов с обычной яркостью, 15 символов с выкрученной яркостью, 16 символов с обычной яркостью и с выкрученной (в 1 и 3 случае яркость одна и та же).

Что не так? :з

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

Предлагаю пересчитать по пальцам с нуля до шестнадцати. Если просветления не наступит - можно выложить то же обувью в коридоре...

dhog1
Offline
Зарегистрирован: 01.03.2016

2 Andrey_Y_Ostan

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

2 noname1234

Ситуация необычная (для меня) и объяснения не имеет. Как "святую воду" посоветовал бы разобраться с питанием LCD.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

noname1234 пишет:

Привет, друзья, я что-то делаю не так или у меня правда битый экран? 

Выражается проблема в том, что если я что-то пытаюсь что-то выдать (или туда просто что-то попадает) в 16-ую ячейку первой или второй строки, то весь экран начинает отображать так, как будто по нему стукнули чем-то (т. е. точки в случайном порядке местами начинают иметь случайную яркость).

1for (int i = 0; i < 15; i++) {
2  lcd.setCursor(i, 0);
3  lcd.print("1");
4  lcd.setCursor(i, 1);
5  lcd.print("1");
6  delay(200);}

Всё идеально заполняется. Но, если поменять в цикле i<16, то при заполнении 16-ого символа начинается глюк.


Поскольку нумерация знакомест начтнается с 0, то знакоместо с номером 16 будет 17-м по счету, т.е. выходящем за пределы экрана. Такого варианта контроллер дисплея себе представить не может и его начинает глючить.

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

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

Скорее всего какой-то глюк библиотеки или аппаратный косяк. Больше склонен к первому, потому как ковырял LiquidCrystal_I2C детально. Убожество, хотя сама поделка написана относительно грамотно.

Тут ещё есть момент: код и фото - не соответствуют друг другу. В коде выводится только символ "1", а на экране видим нечто иное .. но, если судить по описанию дефекта во второй части (строка с пробелами), то косяк явно аппаратный.

Предлагаю дождаться сообщения, где автор приведет его куски в однозначное соответствие.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

1lcd.setCursor(0, 0);
2lcd.print("GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG");
3delay(2000);}

 

noname1234
Offline
Зарегистрирован: 03.05.2016

Собрал все ботинки в доме, выложил в ряд сорок ботинок. Обошёл соседские дома, под недоумлённые взгляды соседей одолжил ещё сорок ботинок. Выложил всё в коридоре в два ряда и начал считать. Пинаю один ряд — всё чётко сдвигается. Пинаю второй ряд — всё чётко сдвигается. setShoe(16, 1) чётко располагает мой сланец в 16-ой позиции. Вовремя остановился, т. к. при сдвиге ботинок безвозвратно терялся, теперь придётся объяснять соседям, почему я возращаю только один ботинок из пары. Пытался сделать всё тоже самое с дисплеем — при выкладке шестнадцатого ботинка остальные начинали вонять и выглядили очень поношенными.

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

 

Arhat109-2 пишет:
код и фото - не соответствуют друг другу.

Верно, на фото выводилось "1234567890123456". О "               1" я написал просто как о демонстрации того, что глюк проявлялся только при занятии 16-го знакоместа.