Не работает lcd 1602a i2c просто горит

19dx.ru — R0WBH

Личный блог Гладышева Дмитрия

Почему квадраты на дисплее 1602

В группах ВК по тематике Arduino часто встречаю вопросы о дисплеях 1602 (и подобных), построенных на контроллере HD44780. Один из них — почему на дисплее отображаются квадраты вместо того, что запрограммировано в скетче. И чтобы не повторять каждый раз всё это в комментариях, я решил написать эту статейку.

HD44780 (а также совместимый с ним KS0066) — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев с параллельным 4- или 8-битным интерфейсом. Разработан фирмой Hitachi. Управляющий интерфейс и протокол являются де-факто стандартом для такого типа дисплеев. Эти контроллеры были фактически монополистами на рынке в 90-е годы.

На базе этого контроллера выпускалось огромное количество моделей с различным конструктивом и разрешением, начиная с 8×1 (восемь символов в одной строке), и заканчивая 40×4 (содержащих два независимых управляющих чипа). Часто встречаются 16×2 и 20×4, а также некоторые другие.

Квадраты это не неисправность дисплея, а вполне адекватная его реакция на отсутствие инициализации. Своеобразный self-test. Отсутствовать инициализация может по нескольким причинам. Но для начала надо вспомнить, какие типы подключения бывают у дисплеев этого формфактора.

Вариант 1: подключение к микроконтроллеру по интерфейсу HD44780

В этом случае между дисплеем и МК идёт шина из, как минимум, шести проводов (не считая питания):

Код для Arduino в этом случае выглядит примерно так:

Причины отображения квадратов:

  1. Плохой контакт или неправильное подключение проводов (не те пины или перепутан порядок);
  2. Неправильно указаны номера пинов в коде
    LiquidCrystal lcd(12, 10, 5, 4, 3, 2);

Исправление ошибки сводится к проверке качества пайки контактов, а также соответствия пинов в коде.

Вариант 2: подключение к микроконтроллеру по интерфейсу I2C

Здесь используется всего два пина для подключения. И эти пины жёстко фиксированы:

  • Arduino Uno, Arduino Ethernet — A4 (SDA), A5 (SCL)
  • Arduino Mega2560 — 20 (SDA), 21 (SCL)
  • Arduino Leonardo — 2 (SDA), 3 (SCL)
  • Arduino Due — 20 (SDA), 21 (SCL)

На самом же дисплее уже впаян конвертор с I2C на HD44780, который по сути представляет из себя обычный I2C-расширитель на базе чипа PCF8574. Особенность шины в том, что по двум проводам можно параллельно подключить множество различных устройств. Каждое устройство имеет уникальный (в пределах одной шины) адрес, который либо жёстко установлен производителем, либо может менять в определённых пределах с помощью перемычек или джамперов:

Адрес для PCF8574 можно посмотреть по таблице:

Вход Адрес на шине I2C
A2 A1 A0 DEC HEX
0 0 0 32 0x20
0 0 1 33 0x21
0 1 0 34 0x22
0 1 1 35 0x23
1 0 0 36 0x24
1 0 1 37 0x25
1 1 0 38 0x26
1 1 1 39 0x27

Есть ещё PCF8574A. Для них адресация немного другая:

Вход Адрес на шине I2C
A2 A1 A0 DEC HEX
0 0 0 56 0x38
0 0 1 57 0x39
0 1 0 58 0x3A
0 1 1 59 0x3B
1 0 0 60 0x3C
1 0 1 61 0x3D
1 1 0 62 0x3E
1 1 1 63 0x3F

Код при подключении по I2C обычно выглядит примерно так:

Но есть ещё одна версия библиотеки, в которой указывается не только адрес дисплея, но и порядок подключения контактов дисплея к контактам чипа PCF8574. Тогда код выглядит так:

Обратите внимание на отличия в объявлении объекта дисплея и инициализации. И всё было бы хорошо, но разные дисплеи иногда имеют разный порядок подключения контактов между собственно самим дисплеем и чипом PCF8574. Я лично встречал два варианта. Первый указан в коде выше. Второй способ объявления выглядит так:

Соответственно возможны следующие причины появления квадратов:

  1. Плохой контакт или неправильное подключение проводов (перепутаны местами SDA и SCL);
  2. Неправильно указано соответствие пинов дисплея и I2C чипа в коде
    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  3. Неправильно указан адрес дисплея.

Порядок поиска неисправности в данном случае такой:

  1. Проверить правильность подключения SDA и SCL;
  2. Запустить сканер шины I2C: I2C scanner (1.02 KB);
  3. Если сканер выдал информацию об адресе устройства, то сверяем его с тем, который указан в скетче. Если сканер «молчит», то возвращаемся к первому пункту или делаем вывод о неисправности I2C модуля на дисплее;
  4. Пробуем менять в коде комбинации пинов (соответствия дисплей — I2C). Два варианта я привёл выше. Есть ли ещё другие — не знаю.

Иногда встречаются советы покрутить контрастность. На самом деле это не поможет, так как если вы видите отчётливо верхние квадраты, но не видите нижние (как на фото в статье) — значит контрастность УЖЕ настроена нормально.

Источник

Arduino.ru

Дисплей LCD 1602 не показывает «Hello World»

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

Подскажите пожалуйста:
Почему LCD 1602 не показывает буквы.
Только линия прямоугольников.

Подключаю к Arduini UNO
Версия Arduinoid 1.8.7

Версия библиотекиLiquidCristall 1.0.7 пробовал на 1.0.4

Соединение как в примере:
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

Соединения проверил 100 раз.

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

Контраст пробовал регулировать?

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

Это же не I2C подключение, на самом дисплее крутилок нет.

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

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

Соединения проверил 100 раз.

Это вы небось проверяли те ли контакты соединяете. А вот как соединяете.

Ставлю на хреновый контакт этих тоненьких тыкалок в макетке! В правом нижнем углу рыжий с чёрным аж вылезают.

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

Это же не I2C подключение, на самом дисплее крутилок нет.

На дисплее нет, а на макетке у него есть

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

5 нога на земле сидит?
Данные слева-направо справа-налево не перепутаны?
https://voltiq.ru/lcd-1602-and-arduino/

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

Такое ощущение, что где то плохой контакт.
Контакты прозвонил тестером. Норма.
Один раз, ковыряясь в проводах, на экране высветилось две строки:
в первой пару непонятных символов,
во второй число типа 68,234683143846843 и число жило,

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

Источник

Arduino.ru

не работает дисплей 1602 I2C

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

Здравствуйте! Приобрёл arduino Uno от robotdyn, разбираюсь, пытаюсь вот подключить дисплей по i2c, но перечитав кучу манов и посмотрев видео, так и не смог к сожалению преодолеть проблему:

На дисплее не отображается какой-либо текст, только горят квадраты и всё, контрастность влияет только собственно на яркость квадратов.

Адрес дисплея 0x38 (узнал i2c сканером)

модуль i2c для дисплея PCA8574AD

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

почему выдает два адреса а не один?

I2C Scanner
Scanning.
I2C device found at address 0x38 !
I2C device found at address 0x7C !
done

для интереса подцепил часы, опять 2 адреса выдает

I2C device found at address 0x50 !
I2C device found at address 0x68 !

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

У часов есть микросхема памяти наплате? Это она 0х50. У меня дисплеи откликаются на 0х27 и 0х3F в зависимости от запаяных перемычек на платах i2c.

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

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

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

Ни разу не встечал два адреса. У меня их был десяток. И платы i2c есть без дисплеев. http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit#comment-40761
Почитайте здесь. Долго обсуждали.

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

Nik182, спасибо вам за помощь! уже было начал дело разбирать, собирался покупать другой i2c to LCD, но решил 2-й раз пропаять, и заработало))

Как говорится, Электроника — наука о контактах

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

сфотографируйте I2C плату с двух сторон. Если хорошо получится то можно будет рассмотреть перемычки адреса.

По умолчанию должно быть 3F на вашем контроллере, если перемычки не запаяны.

И покажите скетч I2C сканера. Может там что не так. Не должно два адреса определяться.

пока писал, проблемма исчезла. ну и слава Б..гу!

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

К сожалению плату не сфоткаю, уже припаял.. но адресация видна, если не замкнуты то 0x38 (это от роботдина версия)

пробовал замыкать — ардуина ребутится. то ли я не так делаю, то ли косяк где..Но впринципе все равно работает. Единственное расстроился — дисплей русские символы не поддерживает, выход есть если только подставлять , но нативной поддержки нет. Есть ли выход? или заказывать дисплей от амперки?

Код сканера i2c, кстати даже когда все заработало все равно 2 адреса находит 0_о

Источник

Arduino.ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// Print a message to the LCD.
lcd.backlight();
lcd.print(«Hello, world!»);
>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Читайте также:  Не работают каналы спутникового
Оцените статью