Как заставить модуль I2C (для 1602 и 2004) работать с ЖК-дисплеем 1601 на Arduino Micro

Я новичок в Arduino и хочу собрать коробку с кнопками. Когда я покупал детали, я не следил за характеристиками модуля I2C. Когда я попытался напечатать что-нибудь на ЖК-дисплее, ничего не произошло (в ретроспективе это логично). Я бы не хотел покупать новый ЖК-дисплей.

Как заставить ЖК-дисплей работать с модулем I2c?

ЖК-экран — http://cdn-reichelt.de/documents/datenblatt/A500/DEM16101SYH.pdf

Модуль I2C — http://mantech.co.za/datasheets/products/lcd2004-i2c .pdf

подключено правильно (VCC к 5 В, GND к GND, SDA к SDA и SCL к SCL)

Я использовал код "Hello World" Пример, включенный в библиотеку LiquidCrystal_I2C, но с некоторыми изменениями:

//YWROBOT
//Совместимость с Arduino IDE 1.0
// Версия библиотеки: 1.1
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,1);  //вместо LiquidCrystal_I2C lcd(0x27,20,4);

void setup()
{
  lcd.init();                      // инициализируем ЖК-дисплей
  lcd.init();
  // Вывести сообщение на ЖК-дисплей.
  lcd.backlight();
  lcd.setCursor(3,0);
  lcd.print("Hello, world!");
  lcd.setCursor(2,0); // вместо lcd.setCursor(2,1);
  lcd.print("Ywrobot Arduino!");
   lcd.setCursor(0,0); //вместо lcd.setCursor(0,2);
  lcd.print("Arduino LCM IIC 2004");
   lcd.setCursor(2,0); //вместо lcd.setCursor(2,3);
  lcd.print("Power By Ec-yuan!");
}


void loop()
{
}

, 👍0

Обсуждение

Привет @Chritzeltopf, добро пожаловать в Stack Overflow. Если вы отредактируете свой вопрос, включив в него код, который вы пробовали, какой тип ЖК-дисплея вы подключаете и как вы его подключили, кто-то может вам помочь. В противном случае мы знаем о том, что вы делаете, еще меньше, чем вы сами., @romkey

Извините :(, я думал, что предоставленной информации будет достаточно для вопроса. Добавил информацию :), @Chritzeltopf

Да, это одна линия. Это проблема, @Chritzeltopf

какие соединения вы сделали? ... модуль I2C передает 8 бит данных на ЖК-модуль ... сигналы E, R/S и RE на ЖК-дисплей должны генерироваться Arduino, @jsotola

@VE7JRO ничего не происходит, @Chritzeltopf

@jsotola, что именно ты хочешь знать? Я действительно не понимаю?, @Chritzeltopf

Как насчет этой библиотеки, просто чтобы проверить, сможете ли вы заставить ее работать с простым скетчем? https://github.com/AlexMartin17/Arduino-LCD-библиотека-16x1, @VE7JRO

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

@Gil Мне нужны подтягивающие резисторы на выводах SDA и SCL, чтобы использовать модуль I2C? Скетч сканирования I2C, который я использовал, не работал (адрес не был напечатан в серийном номере), поэтому я предполагаю, что модуль I2C не связывался с ЖК-дисплеем?, @Chritzeltopf

Я думаю, мы только что нашли вашу проблему. Это случается часто, я вижу это несколько раз в неделю. Продолжайте хорошую работу., @Gil


1 ответ


1

Добро пожаловать, Критцелопф! Да, по определению I2C требуются подтягивающие резисторы. Ваша ссылка на драйвер показывает, что они не включены, и нет схемы, указывающей на обратное. Шина I2C управляется полупроводниковыми устройствами с открытым коллектором/стоком. Эта конфигурация потянет линию на низкий уровень, но не будет подавать в нее какой-либо ток, за исключением, возможно, некоторой утечки. Когда выходы устройства I2C отключены, шина подтягивается к высокому уровню или переводится в рецессивное состояние с помощью подтягивающих резисторов. Когда одно или несколько устройств включаются, шина теперь находится в доминирующем состоянии или на низком уровне. Эта конфигурация позволяет включать и выключать что угодно, не повреждая другие устройства на шине. Мне нравится, когда подтягивание составляет 4,7 К для 5 В и около 3,3 К для 3 В 3 В.

Некоторые модули поставляются с подтяжками, которые постоянно подключены, другие выбираются с помощью перемычек и т. д. Это НЕ A0 - A? перемычки, которые являются линиями выбора адреса. Я всегда проверяю модули, чтобы определить, включены ли подтягивания, и настраиваю другие сопротивления, чтобы получить соответствующее значение, иногда даже удаляя их.

,

Так что я должен попробовать еще раз с "pinMode(2, INPUT_PULLUP)"; pinMode(3, INPUT_PULLUP) ;, @Chritzeltopf

Библиотека, которую я использую, не позволяет этого, поскольку она программирует их так, как хочет. Он не сообщает, он просто делает. Самый безопасный и, скорее всего, работающий — это использовать рекомендуемые внешние резисторы. Как только вы заработаете, попробуйте свою идею подтягивания. Помните, что они находятся где-то в диапазоне от 30 до 50 тыс., @Gil