I2C интерфейс на lcd2004A

volhin
Offline
Зарегистрирован: 17.02.2016

Всем привет!

Имеется в наличии Ардуино Нано , с подключенным lcd2004A через интерфейс I2C (чип 8574), аппратное прерывание для инициализации дисплея 0х27(определен сканером как 39 десятичное прерывание или 0х27), дисплей работает. При загрузке скетча выводятся только первые символы каждой из 4х строк, причем позиция символа на каждой строке соответствует программному коду. Аналогичные скетчи для других библиотек, в том числе для lcd 1602 работают одинаково. Кто подскажет что может быть. 

LiquidCrystal_I2C lcd(0x27,20,4);  // 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(3,0);
  lcd.print("Hello, world!");
  lcd.setCursor(2,1);
  lcd.print("Ywrobot Arduino!");
   lcd.setCursor(0,2);
  lcd.print("Arduino LCM IIC 2004");
   lcd.setCursor(2,3);
  lcd.print("Power By Ec-yuan!");
}
 
 
void loop()
{
}
 
 
Тарас Петрович
Offline
Зарегистрирован: 21.11.2015

Подтягивающие резисторы?

volhin
Offline
Зарегистрирован: 17.02.2016

Пробовал на обе линии.

 

Тарас Петрович
Offline
Зарегистрирован: 21.11.2015

Тогда методом исключения. Подключить дисплей к ардуине традиционным  способом, проверить. Дальше смотреть библиотеку, питание, общую землю системы, номинал подтяжки, вдруг скорость высока? Например, у меня такой же дисплей (только без айтуси) меняет местами 2-ю и третью строки....

volhin
Offline
Зарегистрирован: 17.02.2016

Предется пробовать, хотя на распаянном интефейсе провода выводить геморно.

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

я не вникал в суть проблемы, но на форуме это уже примерно пятая тема с отображением одного символа библиотекой LiquidCrystal_I2C

подозреваю, что или библиотека старая или версия Дуино ИДЕ новая - потому как раньше такой проблемы на форуме не наблюдалось.

*пробуй версию arduino-1.6.5-r5 или младше. 

Weeres
Offline
Зарегистрирован: 17.02.2016

Была такая проблема с дисплеем 1602 с i2c переходником, использовал библиотеку "new liquidcrystal" и помогло. Подробнее напишу как доберусь до компа.

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

Клапауций 322 пишет:

я не вникал в суть проблемы, но на форуме это уже примерно пятая тема с отображением одного символа библиотекой LiquidCrystal_I2C

*пробуй версию arduino-1.6.5-r5 или младше. 

Ты прав, такая беда после перехода на версию Arduino 1.6.6 и выше. Выводит только первый символ с в строке. Советовали обновить библиотеку LiquidCrystal_I2C. Обновил, но лыжи все равно не поехали. Вернулся на версию 1.6.5 все нормально заработало.

Хотя на форме гдето встречал народ который обновил в Arduino 1.6.7 LiquidCrystal_I2C и все заработало.

К стати вот тут есть решение. 

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

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

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

Приду домой попробую, а то времени разбираться не було, просто откатился с 1.6.7 на 1.6.5

volhin
Offline
Зарегистрирован: 17.02.2016

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

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
 
uint8_t bell[8]  = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4};
uint8_t note[8]  = {0x2,0x3,0x2,0xe,0x1e,0xc,0x0};
uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0};
uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0};
uint8_t duck[8]  = {0x0,0xc,0x1d,0xf,0xf,0x6,0x0};
uint8_t check[8] = {0x0,0x1,0x3,0x16,0x1c,0x8,0x0};
uint8_t cross[8] = {0x0,0x1b,0xe,0x4,0xe,0x1b,0x0};
uint8_t retarrow[8] = { 0x1,0x1,0x5,0x9,0x1f,0x8,0x4};
  
LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x20 for a 16 chars and 2 line display
 
void setup()
{
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
  
  lcd.createChar(0, bell);
  lcd.createChar(1, note);
  lcd.createChar(2, clock);
  lcd.createChar(3, heart);
  lcd.createChar(4, duck);
  lcd.createChar(5, check);
  lcd.createChar(6, cross);
  lcd.createChar(7, retarrow);
  lcd.home();
  
  lcd.print("Hello world...");
  lcd.setCursor(0, 1);
  lcd.print(" i ");
  lcd.write(3);
  lcd.print(" arduinos!");
  delay(5000);
  displayKeyCodes();
  
}
 
// display all keycodes
void displayKeyCodes(void) {
  uint8_t i = 0;
  while (1) {
    lcd.clear();
    lcd.print("Codes 0x"); lcd.print(i, HEX);
    lcd.print("-0x"); lcd.print(i+16, HEX);
    lcd.setCursor(0, 1);
    for (int j=0; j<16; j++) {
      lcd.write(i+j);
    }
    i+=16;
    
    delay(4000);
  }
}
 
void loop()
{
 
}
 
volhin
Offline
Зарегистрирован: 17.02.2016

Спасибо!Andrey12,

действительно проблема оказалась в програмном коде, поменял 0 на 1 и скетчи пошли 

и в 1 версии библиотеки и во второй.Версия IDE осталась прежней 1.6.7