Проблемы с LCD 2004A i2c

Archelon
Offline
Зарегистрирован: 22.03.2018

LCD 2004A i2c неправильно отображает каждый 4 символ. При отображении всех восьмерок каждый 4 символ выводиться 0, а при тображении всех девяток каждый 4 символ выводиться 1.

Адрес PCF8574A 0X3F

Использовал стандартную библиотеку LiquidCrystal_I2C. Пример SerialDispley

 

 

В чем может быть заморочка, куда копать ?

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

Archelon пишет:

LiquidCrystal_I2C. Пример SerialDispley

  1. В библиотеке LiquidCrystal_I2C нет примера SerialDispley
  2. В примере SerialDisplаy, который там есть, нет вывода всех восьмёрок и всех девяток

Поэтому, что и как Вы запускали и какие данные и как вводили - загадка.

Если Вы хотите конкретного разговора, то:

  1. Подготовьте входные данные для примера в любом текстовом редакторе (хоть в "Блокноте")
  2. Запустите пример, скопипастите Ваши данные из редактора в монитор порта
  3. Убедитесь, что проблема есть

Если проблема есть, то:

  1. Скопипастите сюда текст запускаемого пример (только по правилам - с номерами строк)
  2. Скопипастите сюда текст исходных данных из редактора
  3. Напишите какое правило формирования конца строки установлено у Вас в мониторе порта (в левом нижнем углу)

Вот тогда можно будет попытаться Вам помочь.

Archelon
Offline
Зарегистрирован: 22.03.2018

Библиотеку загрузил через Менеджер библиотек.

[code]
/*
 * Displays text sent over the serial port (e.g. from the Serial Monitor) on
 * an attached LCD.
 * DFRobot.com
 *Compatible with the Arduino IDE 1.0
 *Library version:1.1
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

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

void setup()
{
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
  Serial.begin(9600);
}

void loop()
{
  // when characters arrive over the serial port...
  if (Serial.available()) {
    // wait a bit for the entire message to arrive
    delay(100);
    // clear the screen
    lcd.clear();
    // read all the available characters
    while (Serial.available() > 0) {
      // display each character to the LCD
      lcd.write(Serial.read());
    }
  }
}
[/code]

В мониторе порта набрал:88888888888888888888

На дисплее отобразилось:88808880888088808880

Правило формирования конца строки установлено:Нет конца строки.

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

lcd.print ();  

Угадал? Нет?

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

Ну, теперь давайте учиться отделять мух от котлет, т.е. выявлять в чём именно проблема.

Сделайте следующие эксперименты:

1. Вставьте после строки #30 delay(1); Что получается?

2. Вместо строк 23-34 вставьте просто

lcd.clear();
lcd.print("8888888888888888");
delay(500);

Что получается?

 

Archelon
Offline
Зарегистрирован: 22.03.2018

В 1 случае опять каждый 4 символ выводился 0

Во 2 случае вывелась одна 8 в первой строке первым символом.

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

Archelon пишет:

Во 2 случае вывелась одна 8 в первой строке первым символом.

Фига се!

Значит дело в не связано с сериал - про него забыли.

Теперь так. Возьмите проверенную библиотеку.

С ней попробуйте такой пример

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

LiquidCrystal_I2C lcd(0x3F,20,4);

void setup(void) {
	lcd.begin();
	lcd.backlight();
	lcd.clear();
	for (int i = 0; i < 20; i++) {
		lcd.write('8');
		delay(1);
	}
}

void loop(void) {}

Если всё в порядке, то пробуйте примеры из библиотеки или свои примеры, но там надо заменить init на begin.

Archelon
Offline
Зарегистрирован: 22.03.2018

Не помогло. Каждый 4 символ выводиться 0.

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

Так, значит скроее всего одно из трёх:

1. Плохой контакт между сосбтвенно дисплеем и I2C переходником (они же у Вас разделяемые?). Вытащите, посмотрите на контакты, на пайки, если надо подравняйте ножки, порпаяйте, протрите контакты спиртиком, воткните на место, прижмите хорошо. И попробуйте.

2. Битый экран (попробуйте другой)

3. Битый I2C переходник (попробйте другой)

Если что-то битое, внимательно осмотрите устройство, может где непропай - все подозрительные места пропаяйте, может где неочищенный флюс - все подозрительные места прочистите. Кстати, флюс - болезнь многих китайских производителей, сколько раз уж было, что необъяснимые глюки исчезают после промывки платы изопропиловым спиртом (можно и обычным). Берёте старую зубную щётку, окунаете в спирт и фигачите.

Пробуйте, отпишитесь потом, что нашли - интересно.

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

Изопропиловый отличная вещь, но сильнейший аллергетик.
(по всем признакам подмыкает адресная шина на контроллере дисплея (не I2C))

Archelon
Offline
Зарегистрирован: 22.03.2018

Всем спасибо за помощь. Проблема в самом ЖКИ.

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

Ну, собственно про это я Вам вчера и писал.

А что за проблема? Решается пропайкой/промывкой или только утилизацией и покупкой нового?

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

ЕвгенийП пишет:

Ну, собственно про это я Вам вчера и писал.

А что за проблема? Решается пропайкой/промывкой или только утилизацией и покупкой нового?


Да наврядли утилизацией, подмыкает нога D3  на одной из капелек (подтянута к 0)
 

dim21841
Offline
Зарегистрирован: 26.06.2015

всем доброго времени суток.
может кто сталкивался с проблемой:
на экран выводится строка из serial, дли на бывает разная... при превышении 20 знаков переходит с первой (1) не на вторую (2) а сразу на третью (3) затем на вторую (2) а после на четвертую (4).
как выводить последовательно 1,2...4?

sadman41
Offline
Зарегистрирован: 19.10.2016

Неинициализированный экран квадратики тоже через строчку рисует. Это как бы намекает на своебразное мышление конструкторов ))

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

По делу тебе уже намекнули, что "само" не переносится. Программист должен САМ следить за переносом на следующую строку. Можешь заказать такой код в "Ищу исполнителя", ну если ты из каких: "...средства у нас есть, у нас ума нет" (с) Почтальон Печкин. ;))

"Проблема" нигде не обсуждается, поскольку существует только в твоей голове. Собственно обсуждение уже и закончилось, больше писать не о чем. ;))

dim21841
Offline
Зарегистрирован: 26.06.2015

wdrakula пишет:

По делу тебе уже намекнули, что "само" не переносится. Программист должен САМ следить за переносом на следующую строку. Можешь заказать такой код в "Ищу исполнителя", ну если ты из каких: "...средства у нас есть, у нас ума нет" (с) Почтальон Печкин. ;))

"Проблема" нигде не обсуждается, поскольку существует только в твоей голове. Собственно обсуждение уже и закончилось, больше писать не о чем. ;))

я Вас понял. думал что можно по принципу 1602. там переносится само
хорошо. буду допиливать код