КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

FLASH-I2C адаптер для LCD 1601/1602/2004

Общие сведения:

I2C-flash адаптер для LCD дисплеев 1601/1602/2004 - является преобразователем интерфейсов который обеспечивает обмен данными между двумя шинами: параллельной шиной LCD и шиной I2C. Наличие связи между этими шинами позволяет работать с LCD дисплеем по шине I2C.

  • К одной шине LCD можно подключить один LCD дисплей 1601, 1602 или 2004.
  • К одной шине I2C можно подключить более 100 адаптеров. Адрес адаптера на шине I2C (по умолчанию 0x27) назначается программно и хранится в его энергонезависимой памяти.

Адаптер применяется для управления LCD дисплеями 1601, 1602 или 2004 по шине I2C, что экономит количество выводов используемых для подключения дисплея. Вместо 8 выводов к которым можно подключить всего 1 дисплей, используется 2 вывода к которым можно подключить более 100 дисплеев.

Видео:

Спецификация:

  • Напряжение питания: 3,3 В или 5 В (постоянного тока).
  • Потребляемый ток: до 6 мА.
  • Интерфейс: I2C.
  • Скорость шины I2C: 100 кбит/с.
  • Адрес на шине I2C: устанавливается программно (по умолчанию 0x27).
  • Уровень логической 1 на линиях шины I2C: 3,3 В (толерантны к 5 В).
  • Рабочая температура: от -20 до +70 °С.
  • Габариты: 41,91 х 17,15 мм (1650 x 675 mil).
  • Вес: 6 г.

Подключение:

По умолчанию все модули FLASH-I2C имеют установленный адрес 0х09.

Но данный модуль имеет предустановленный адрес 0x27.

— При подключении 2 и более FLASH-I2C модулей к шине необходимо в обязательном порядке предварительно изменить адрес каждого модуля, после чего уже подключать их к шине.

Более подробно о том, как это сделать, а так же о многом другом, что касается работы FLASH-I2C модулей, вы можете прочесть в этой статье.

В верхней части платы расположена колодка шины LCD для подключения дисплея.

  • GND - общий вывод питания.
  • Vcc - вывод питания LCD дисплея 3,3 или 5 В (выбирается перемычками на плате).
  • VO - (Voltage cOntrast) контрастность экрана.
  • RS - (Register Select) линия выбора регистра команд / данных.
  • RW - (Read/Write) линия выбора направления передачи.
  • E - (Enable) линия тактирования по спаду.
  • D0-D7 - (Data) линии данных (адаптер использует только D4-D7).
  • A - (Anode) положительный вывод питания подсветки LCD дисплея.
  • K - (Cathode) отрицательный вывод питания подсветки LCD дисплея.

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

  • SCL - вход/выход линии тактирования шины I2C.
  • SDA - вход/выход линии данных шины I2C.
  • Vcc - вход питания 3,3 или 5 В.
  • GND - общий вывод питания.

По центру платы расположены две перемычки выбора питания LCD дисплея.

  • 5V - установка данной перемычки соединит вывод Vcc шины LCD с выводом Vcc шины I2C.
  • 3V3 - установка данной перемычки подключит вывод Vcc шины LCD к стабилизатору +3,3 В.
  • Не устанавливайте обе перемычки одновременно, это может повредить адаптер и дисплей.

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

LCD Дисплей 1601, 1602 или 2004 подключается к колодке LCD адаптера. Распиновка колодки адаптера совпадает с распиновкой колодки дисплея. После подключения дисплея к адаптеру нужно настроить контрастность экрана.

Для настройки контрастности экрана установите переключатель режима работы адаптера в положение «ADR» и подайте питание на шину I2C. Плавно поворачивайте отвёрткой крестовину подстроечного резистора (рядом с которым присутствует надпись «КОНТРАСТ») до появления на экране текста с указанием адреса и яркости. После настройки контрастности экрана установите переключатель режима работы адаптера в положение «ON».

Питание:

Входное напряжение питания адаптера зависит от напряжения питания LCD дисплея.

  • Если к адаптеру подключён дисплей требующий питания 5В, то на выводы Vcc и GND колодки I2C подается напряжение 5В постоянного тока, а на плате адаптера замыкается перемычка «5V».
  • Если к адаптеру подключён дисплей требующий питания 3,3В, то на выводы Vcc и GND колодки I2C подается напряжение 3,3В или 5В постоянного тока (поддерживаются оба напряжения), а на плате адаптера замыкается перемычка «3V3».

Подробнее о модуле:

Адаптер построен на базе микроконтроллера STM32F030F4, снабжен собственным стабилизатором напряжения, резистором настройки контрастности дисплея и переключателем режима работы: «ON» и «ADR».

  • Если переключатель установлен в положение «ON», то адаптер находится в основном режиме работы, при котором осуществляется обмен данными между шинами LCD и I2C, что позволяет работать с LCD дисплеем по шине I2C. Работа с LCD дисплеем выполняется так же, как и при использовании конвертера на базе чипа PCF8574, что делает адаптер полностью совместимым с библиотеками разработанными для I2C LCD дисплеев 1601, 1602 и 2004.
  • Если переключатель установлен в положение «ADR», то адаптер работает в режиме адресного доступа к своим регистрам, что позволяет управлять настройками адаптера. В этом режиме нельзя работать с LCD дисплеем, на его экране будет отображаться информация о текущем адресе адаптера на шине I2C и о установленной яркости подсветки дисплея в %. Доступ к регистрам адаптера осуществляется по шине I2C.

Адаптер позволяет настроить такие параметры как:

  • Адрес адаптера на шине I2C. При изменении адреса, можно указать, что новый адрес должен сохраниться в flash память модуля, а значит адрес сохранится и после отключения питания.
  • Яркость свечения подсветки дисплея. Значение яркости от 0 до 100% автоматически сохраняется в flash память модуля (сохранится после отключения и включения питания).
  • Подтяжка линий шины I2C (по умолчанию включена). В случае наличия на шине I2C большого количества модулей с подтяжкой линий SDA и SCL, отключение подтяжки некоторых модулей может существенно улучшить связь с микроконтроллером.

Для настройки параметров адаптера не требуются библиотеки.

Для работы с LCD дисплеями 1601, 1602 и 2004 по шине I2C предлагаем воспользоваться библиотекой LiquidCrystal_I2C_V112.

Подробнее про установку библиотеки читайте в нашей инструкции.

Примеры:

Вывод данных на LCD дисплей:

Для работы с LCD дисплеем нужно установить переключатель работы адаптера в положение «ON» (режим работы с дисплеем). Работа с дисплеем осуществляется так же как и при использовании конвертера на базе чипа PCF8574.

Вывод текста на дисплей:

#include <Wire.h>                     //  Подключаем библиотеку для работы с шиной I2C
#include <LiquidCrystal_I2C.h>        //  Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x27,16,2);     //  Объявляем  объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
                                      //
void setup(){                         //
    lcd.init();                       //  Инициируем работу с LCD дисплеем
    lcd.backlight();                  //  Включаем подсветку LCD дисплея
    lcd.setCursor(0, 0);              //  Устанавливаем курсор в позицию (0 столбец, 0 строка)
    lcd.print("LCD");                 //  Выводим текст "LCD", начиная с установленной позиции курсора
    lcd.setCursor(0, 1);              //  Устанавливаем курсор в позицию (0 столбец, 1 строка)
    lcd.print("www.iarduino.ru");     //  Выводим текст "www.iarduino.ru", начиная с установленной позиции курсора
}                                     //
                                      //
void loop(){}                         //

Данный пример выводит на дисплей текст «LCD» и «www.iarduino.ru».

Обратите внимание на параметры указанные при объявлении объекта lcd(0x27,16,2); в 3 строке скетча.

  • Первый параметр 0x27 указывает адрес дисплея на шине I2C. Это значение можно увидеть установив переключатель режима работы адаптера в положение «ADR» (не забудьте вернуть переключатель в положение «ON» для работы с дисплеем).
  • Второй параметр 16 указывает количество столбцов на экране дисплея (значение 16 для 1602 и 1601, а значение 20 для 2004).
  • Третий параметр 2 указывает количество строк на экране дисплея (значение 1 для 1601, 2 для 1602 и 4 для 2004).

Другие примеры вывода данных на LCD дисплей:

Для работы с LCD дисплеем нужно установить переключатель работы адаптера в положение «ON» (режим работы с дисплеем). Так как работа с дисплеем осуществляется так же как и при использовании конвертера на базе чипа PCF8574, то все примеры приведённые на странице Wiki - Работа с символьными ЖК дисплеями 1602,2004 I2C, можно использовать без изменений скетча, нужно только изменить адрес 0x27 на адрес Вашего дисплея, если вы меняли его адрес.

Изменение яркости подсветки экрана:

Яркость подсветки является настройкой адаптера, а значит для её установки необходимо установить переключатель режима работы адаптера в положение «ARD», при этом на экране появится текст информирующий о текущем адресе на шине I2C и яркости подсветки в %.

#include <Wire.h>                     // Подключаем библиотеку Wire для работы с шиной I2C.
int VAL_LIGHT = 50;                   // Определяем значение устанавливаемой яркости в % (0-100).
int ADDRESS   = 0x27;                 // Определяем адрес адаптера на шине I2C.
                                      //
void setup(){                         //
//  Инициируем работу c шиной I2C:    //
    Wire.setClock(100000L);           // Устанавливаем скорость передачи данных по шине I2C.
    Wire.begin();                     // Инициируем работу c шиной I2C в качестве мастера.
//  Устанавливаем яркость:            //
    Wire.beginTransmission(ADDRESS);  // Инициируем передачу данных по шине I2C к устройству с адресом ADDRESS и битом RW=0 (запись). При этом сама передача не начнётся.
    Wire.write(0x10);                 // Функция write() помещает значение своего аргумента в буфер для передачи. В данном случае это номер регистра REG_LIGHT = 0x10.
    Wire.write(VAL_LIGHT);            // Функция write() помещает значение своего аргумента в буфер для передачи. В данном случае это значение яркости.
    Wire.endTransmission();           // Выполняем инициированную ранее передачу данных.
}                                     //
                                      //
void loop(){}                         //
  • Во второй строке скетча (вместо значения 50) нужно указать требуемую яркость подсветки экрана дисплея в процентах от 0 (нет) до 100 (максимальная яркость).
  • В третьей строке скетча (вместо значения 0x27) нужно указать текущий адрес адаптера на шине I2C (он отображается на экране дисплея).

Скетч сохраняет яркость в flash памяти адаптера, это значит что дисплей будет работать с указанной яркостью даже после отключения и подачи питания, до тех пор пока не будет установлена новая яркость. После применения новой яркости её значение отобразится на экране.

После сохранения требуемой яркости подсветки не забудьте вернуть переключатель в положение «ON» для перевода адаптера в режим работы с LCD дисплеем.

Изменение адреса адаптера на шине I2C:

Адрес адаптера является настройкой адаптера, а значит для его установки необходимо установить переключатель режима работы адаптера в положение «ARD», при этом на экране появится текст информирующий о текущем адресе на шине I2C и яркости подсветки в %.

Адаптер позволяет менять свой адрес на шине I2C как временно, так и постоянно.

  • Временный адрес становится адресом адаптера, но не сохраняется в его flash памяти, а значит после отключения питания, у адаптера будет восстановлен прежний адрес.
  • Постоянный адрес становится адресом адаптера который сохранится в его flash памяти, а значит постоянный адрес сохранится и после отключения питания.
#include <Wire.h>                     // Подключаем библиотеку Wire для работы с шиной I2C.
int ADDR_NOW = 0x27;                  // Определяем текущий адрес адаптера на шине I2C.
int ADDR_NEW = 0x3F;                  // Определяем новый   адрес адаптера на шине I2C.
int SAVE_ADR = true;                  // Определяем как установить новый адрес: true - постоянно, false - временно.
                                      //
void setup(){                         //
    byte i;                           // Объявляем переменную для чтения/записи данных в регистры модуля.
//  Инициируем работу c шиной I2C:    //
    Wire.setClock(100000L);           // Устанавливаем скорость передачи данных по шине I2C.
    Wire.begin();                     // Инициируем работу c шиной I2C в качестве мастера.
//  Читаем биты состояния модуля:     //
    Wire.beginTransmission(ADDR_NOW); // Инициируем передачу данных по шине I2C к устройству с адресом ADDR_NOW и битом RW=0 (запись). При этом сама передача не начнётся.
    Wire.write(0x01);                 // Функция write() помещает значение своего аргумента в буфер для передачи. В данном случае это номер регистра REG_BITS_0.
    Wire.endTransmission(false);      // Выполняем инициированную ранее передачу данных (параметр false указывает что состояние STOP устанавливать не требуется).
    Wire.requestFrom(ADDR_NOW, 1);    // Читаем из модуля с адресом ADDR_NOW, 1 байт данных в буфер библиотеки Wire.
    while(Wire.available())           // Проверяем наличие данных в буфере библиотеки Wire. Используя цикл while мы гарантируем полную очистку буфера в следующей строке.
    i=Wire.read();                    // Читаем из буфера библиотеки Wire 1 байт в переменную i.
//  Определяем как установить адрес:  //
    if(SAVE_ADR){i|=2;}else{i&=~2;}   // Устанавливаем или сбрасываем (зависит от флага SAVE_ADR) бит SAVE_ADR_EN в байте переменной i.
    Wire.beginTransmission(ADDR_NOW); // Инициируем передачу данных по шине I2C к устройству с адресом ADDR_NOW и битом RW=0 (запись). При этом сама передача не начнётся.
    Wire.write(0x01);                 // Функция write() помещает значение своего аргумента в буфер для передачи. В данном случае это номер регистра REG_BITS_0.
    Wire.write(i);                    // Функция write() помещает значение своего аргумента в буфер для передачи. В данном случае это значение переменной i.
    Wire.endTransmission();           // Выполняем инициированную ранее передачу данных.
    delay(1);                         // Устанавливаем задержку в 1 мс.
//  Устанавливаем новый адрес:        //
    i=(ADDR_NEW<<1)|(SAVE_ADR?1:0);   // Помещаем новый адрес ADDR_NEW в переменную i, сдвигаем адрес на 1 бит влево и добавляем младший равный состоянию флага SAVE_ADR.
    Wire.beginTransmission(ADDR_NOW); // Инициируем передачу данных по шине I2C к устройству с адресом ADDR_NOW и битом RW=0 (запись). При этом сама передача не начнётся.
    Wire.write(0x06);                 // Функция write() помещает значение своего аргумента в буфер для передачи. В данном случае это номер регистра REG_ADDRESS.
    Wire.write(i);                    // Функция write() помещает значение своего аргумента в буфер для передачи. В данном случае это значение переменной i.
    Wire.endTransmission();           // Выполняем инициированную ранее передачу данных.
    delay(SAVE_ADR?30:1);             // Устанавливаем задержку в 30 мс или 1 мс, зависит от состояния флага SAVE_ADR.
}                                     //
                                      //
void loop(){}                         //

В данном примере адаптеру можно присвоить как временный, так и постоянный адрес на шине I2C.

  • Во второй строке скетча (вместо значения 0x27) нужно указать текущий адрес адаптера на шине I2C (он отображается на экране дисплея).
  • В третьей строке скетча (вместо значения 0x3F) нужно указать новый адрес адаптера на шине I2C (допускаются значения: 0x07 < адрес < 0x7F).
  • В четвертой строке скетча нужно определить, как будет установлен новый адрес адаптера на шине I2C: true - постоянно, false - временно.

Если установлен постоянный адрес, то он появится на экране дисплея, если установлен временный адрес, то на экране дисплея отобразятся два адреса, сначала временный (текущий адрес адаптера), а потом постоянный (адрес который восстановится после отключения питания).

После установки адреса адаптера на шине I2C не забудьте вернуть переключатель в положение «ON» для перевода адаптера в режим работы с LCD дисплеем.

Смена и сортировка адресов на шине I2C:

Изменить адрес любого I2C модуля серии «Flash» можно аппаратно, используя установщик адресов FLASH-I2C. Это модуль подключаемый к шине I2C, на плате которого размещён дисплей и кнопки управления, при помощи которых можно узнать количество любых устройств на шине I2C, и менять адреса модулей Flash-I2C не отключая их от шины, что значительно сократит время сборки ваших проектов. Модуль оснащён разъемом USB через который можно запитать как сам модуль, так и шину I2C, или можно запитать шину I2C без использования разъема USB на плате модуля. Установщик адресов пригодиться в проектах с большим количеством модулей Flash-I2C.

Изменить адрес любого I2C модуля серии «Flash» можно программно, о том как это сделать рассказано в статье Wiki - Программная установка адресов модулей FLASH-I2C. В этой статье рассмотрены примеры с использованием библиотеки iarduino_I2C_Address, которая позволяет получать адреса любых устройств на шине I2C, менять адреса модулей Flash-I2C не отключая их от шины, получать название, номер модели, версию прошивки модулей Flash-I2C, а главное - автоматически сортировать адреса модулей Flash-I2C даже если на шине есть устройства с одинаковыми адресами.

Обращаем внимание, что используя описанные в данном разделе аппаратную или программную реализацию смены и сортировки адреса, переключатель режима работы адаптера должен находиться в положении «ARD», при этом на экране появится текст информирующий о текущем адресе на шине I2C и яркости подсветки в %.

Управление внутренней подтяжкой линий шины I2C:

Внутренняя подтяжка линий шины I2C является настройкой адаптера, а значит для управления ей необходимо установить переключатель режима работы адаптера в положение «ARD», при этом на экране появится текст информирующий о текущем адресе на шине I2C и яркости подсветки в %.

#include <Wire.h>                     // Подключаем библиотеку Wire для работы с шиной I2C.
int Pull_UP = true;                   // Определяем наличие внутренней подтяжки линий I2C: true/false.
int ADDRESS = 0x27;                   // Определяем текущий адрес адаптера на шине I2C.
                                      //
void setup(){                         //
    byte i;                           // Объявляем переменную для чтения/записи данных в регистры модуля.
//  Инициируем работу c шиной I2C:    //
    Wire.setClock(100000L);           // Устанавливаем скорость передачи данных по шине I2C.
    Wire.begin();                     // Инициируем работу c шиной I2C в качестве мастера.
//  Читаем биты состояния модуля:     //
    Wire.beginTransmission(ADDRESS);  // Инициируем передачу данных по шине I2C к устройству с адресом ADDRESS и битом RW=0 (запись). При этом сама передача не начнётся.
    Wire.write(0x01);                 // Функция write() помещает значение своего аргумента в буфер для передачи. В данном случае это номер регистра REG_BITS_0.
    Wire.endTransmission(false);      // Выполняем инициированную ранее передачу данных (параметр false указывает что состояние STOP устанавливать не требуется).
    Wire.requestFrom(ADDRESS, 1);     // Читаем из модуля с адресом ADDRESS, 1 байт данных в буфер библиотеки Wire.
    while(Wire.available())           // Проверяем наличие данных в буфере библиотеки Wire. Используя цикл while мы гарантируем полную очистку буфера в следующей строке.
    i=Wire.read();                    // Читаем из буфера библиотеки Wire 1 байт в переменную i.
//  Управляем подтяжкой линий I2C:    //
    if(Pull_UP){i|=4;}else{i&=~4;}    // Устанавливаем или сбрасываем (зависит от флага Pull_UP) бит SET_I2C_UP в байте переменной i.
    Wire.beginTransmission(ADDRESS);  // Инициируем передачу данных по шине I2C к устройству с адресом ADDRESS и битом RW=0 (запись). При этом сама передача не начнётся.
    Wire.write(0x01);                 // Функция write() помещает значение своего аргумента в буфер для передачи. В данном случае это номер регистра REG_BITS_0.
    Wire.write(i);                    // Функция write() помещает значение своего аргумента в буфер для передачи. В данном случае это значение переменной i.
    Wire.endTransmission();           // Выполняем инициированную ранее передачу данных.
    delay(1);                         // Устанавливаем задержку в 1 мс.
}                                     //
                                      //
void loop(){}                         //

В данном примере можно управлять внутренней подтяжкой линий шины I2C до уровня 3,3 В. На линии I2C допускается устанавливать внешние подтягивающие резисторы и иные модули с подтяжкой до уровня 3,3 В и выше, вне зависимости от состояния внутренней подтяжки адаптера.

Во второй строке скетча нужно определить состояние внутренней подтяжки линий шины I2C: true - включить, false - отключить.

В третьей строке скетча (вместо значения 0x27) нужно указать текущий адрес адаптера на шине I2C (он отображается на экране дисплея).

После настройки подтяжек линий шины I2C не забудьте вернуть переключатель в положение «ON» для перевода адаптера в режим работы с LCD дисплеем.

Изменение яркости подсветки в основном режиме работы:

Модуль позволяет изменить яркость подсветки дисплея, оставляя переключатель работы адаптера в положение «ON» (режим работы с дисплеем). 

#include <Wire.h>                      //  Подключаем библиотеку для работы с шиной I2C
#include <LiquidCrystal_I2C.h>         //  Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x27,16,2);      //  Объявляем  объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
                                       //
void setup(){                          //
    lcd.init();                        //  Инициируем работу с LCD дисплеем
    lcd.backlight();                   //  Включаем подсветку LCD дисплея
}                                      //
                                       //
void loop(){                           //
    lcd.setCursor(0, 0);               //  Устанавливаем курсор в позицию (0 столбец, 0 строка)
    lcd.print("LCD");                  //  Выводим текст "LCD", начиная с установленной позиции курсора
    lcd.print("\x0F-100%"); delay(50); //  Установить яркость в 100 % (максимум)
    lcd.print("\x0F-75%" ); delay(50); //  Установить яркость в  75 %
    lcd.print("\x0F-50%" ); delay(50); //  Установить яркость в  50 %
    lcd.print("\x0F-25%" ); delay(50); //  Установить яркость в  25 %
    lcd.print("\x0F-10%" ); delay(50); //  Установить яркость в  10 %
    lcd.print("\x0F-5%"  ); delay(50); //  Установить яркость в   5 %
    lcd.print("\x0F-0%"  ); delay(50); //  Установить яркость в   0 % (минимум)
    lcd.print("\x0F-5%"  ); delay(50); //  Установить яркость в   5 %
    lcd.print("\x0F-10%" ); delay(50); //  Установить яркость в  10 %
    lcd.print("\x0F-25%" ); delay(50); //  Установить яркость в  25 %
    lcd.print("\x0F-50%" ); delay(50); //  Установить яркость в  50 %
    lcd.print("\x0F-75%" ); delay(50); //  Установить яркость в  75 %
    lcd.setCursor(0, 1);               //  Устанавливаем курсор в позицию (0 столбец, 1 строка)
    lcd.print("www.iarduino.ru");      //  Выводим текст "www.iarduino.ru", начиная с установленной позиции курсора
}                                      //

Данный пример выводит на дисплей текст «LCD», потом устанавливает разные значения яркости и выводит текст «www.iarduino.ru».

  • Строка установки яркости имеет вид \x0F-100% где вместо 100 указывается число от 0 до 100.
  • Строка установки яркости не выводится на экран, а только меняет яркость.
  • Яркость заданная строкой не сохраняется в энергонезависимую память адаптера.
  • Строку установки яркости можно вывести частями или наоборот, соединить со строкой вывода текста, например, если на дисплей отправить строку Hello W\x0F-50%orld то на дисплее появится надпись Hello World, а яркость подсветки изменится на 50%.
  • Первый символ строки указан в 16-тиричном формате \x0F(о том как указывать символы их кодами, рассказано на странице Wiki - Работа с символьными ЖК дисплеями), это спецсимвол указывающий адаптеру на начало строки с параметрами яркости. Данный символ можно изменить на любой другой, отправив строку \x0F>S, где вместо символа S указываете любой новый символ.

Ссылки:




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями