Текстовый экран 8×2: инструкция по подключению и примеры использования

Оглавление

1Описание FC-113 преобразователя последовательного интерфейса в параллельный

  • Модуль FC-113 сделан на базе микросхемы PCF8574T, которая представляет собой 8-битный сдвиговый регистр – «расширитель» входов-выходов для последовательной шины I2C. На рисунке микросхема обозначена DD1.
  • R1 – подстроечный резистор для регулировки контрастности ЖК дисплея.
  • Джампер J1 используется для включения подсветки дисплея.
  • Выводы 1…16 служат для подключения модуля к выводам LCD дисплея.
  • Контактные площадки А1…А3 нужны для изменения адреса I2C устройства. Запаивая соответствующие перемычки, можно менять адрес устройства. В таблице приведено соответствие адресов и перемычек: «0» соответствует разрыву цепи, «1» – установленной перемычке. По умолчанию все 3 перемычки разомкнуты и адрес устройства 0x27.

I2C модуль FC-113 для подключения ЖК экрана

Шаг 2. LCD-дисплей 1602 для Ардуино

Дисплеи 1602 имеют два различных исполнения:

  • жёлтая подсветка с чёрными буквами
  • либо (это бывает гораздо чаще) синяя подсветка с белыми.

Размерность дисплеев на HD44780 контроллере бывает самой разной, а управляются они одинаково. Наиболее распространённые из размерностей – 16 на 02 (то есть по 16 символов в двух строках) или 20 на 04. Сами же символы имеют разрешение в 5 на 8 точек.

Большая часть дисплеев не поддерживает кириллицу (за исключением дисплеев CTK-маркировки). Но такая проблема частично решаема, и далее статья подробно рассказывает, как это сделать.

На дисплее есть 16-PIN разъём для подключения. Выводы имеют маркировку с тыльной стороны платы, она следующая:

  • 1 (VSS) – питание на минус для контроллера.
  • 2 (VDD) – питание на плюс для контроллера.
  • 3 (VO) – настройки управления контрастом.
  • 4 (RS) – выбор для регистра.
  • 5 (R/W) – чтение и запись, в частности, запись при соединении с землёй.
  • 6 (E) – активация (enable).
  • 7–10 (DB0-DB3) – младшие биты от восьмибитного интерфейса.
  • 11–14 (DB4-DB7) – старшие биты от интерфейса
  • 15 (A) – положительный анод на питание подсветки.
  • 16 (K) – отрицательный катод на питание подсветки.

OLED I2C 128 x 64 px – схема подключения к Arduino

В небольших устройствах тоже бывает нужно вывести какую-либо полезную информацию, сохраняя компактные габариты.

Обычные экраны, вроде Nokia 3310, не обеспечивают достаточного разрешения, к тому же их не видно в темноте.

В различных плеерах, электронных сигаретах и прочем давно уже используют компактные OLED-дисплеи с большим для их габаритов разрешением – так чем наши проекты хуже?

Важным плюсом OLED-экранов является работа без подсветки – каждый пиксель – сам себе подсветка. За счёт такой системы, экран потребляет крайне мало тока (фактически, его можно запитать от пина Arduino). Есть и один минус – при постоянном использовании отдельные пиксели начинают выгорать и терять яркость, но до наступления этого состояния вы успеете отладить и вывести всё, что только можно.

Дисплей подключается по высокоскоростному интерфейсу I2C (относительно высокоскоростному – до 400Кбод) и использует всего 2 сигнальных провода. Это ещё один неоспоримый плюс! Несмотря на то, что интерфейс последовательный, да ещё и данные в обе стороны идут по одной линии, на рядовой Arduino можно достичь порядка 15-20fps, чего более чем достаточно для проектов.

Стоит заметить, что дисплей монохромный – цветные картинки на него не выведешь, а для текста или графика хватит и двух цветов.

Всего у дисплея 4 пина – VCC, GND, SDA, SCL. VCC и GND подключаются к VCC и GND Arduino соответственно (чтобы перестраховаться, лучше питать дисплей от пина 3.3В – не на всех модулях стоят понижающие преобразователи), а линии данных находятся у каждой версии Arduino на разных пинах. У Uno (Nano, Pro Mini и других платах на ATMega328/168) SDA – A4, SCL – A5. У Mega – SDA – 20, SCL – 21.

На платах 3 ревизии контакты интерфейса выведены перед 13 пином на гребёнке и подписаны соответственно.

Для экрана написано множество библиотек, его поддерживает в том числе и универсальная U8g2.
Для управления дисплеем нам потребуются две библиотеки:

1) Adafruit_GFX_Library — мы её уже ставили, когда подключали Nokia 5110

2) Adafruit_SSD1306 — библиотека для управления именно OLED дисплеями

Устанавливаем обе библиотеки в Arduino IDE, и пробуем вывести наш любимый «Hello world!»:

Схема подключения OLED 128 x 64 к Arduino #include «SPI.h»
#include «Wire.h»
#include «Adafruit_GFX.h»
#include «Adafruit_SSD1306.h»
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13

Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

void setup() {
// инициализация и очистка дисплея
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.display();

delay(1000);
display.setTextSize(1); // установка размера шрифта
display.setTextColor(WHITE); // установка цвета текста
display.setCursor(0,0); // установка курсора

display.println(«Hello, world!»);
display.display();
}

void loop() {
}

#include «Adafruit_GFX.h»#include «Adafruit_SSD1306.h»Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);// инициализация и очистка дисплеяdisplay.begin(SSD1306_SWITCHCAPVCC);display.setTextSize(1); // установка размера шрифтаdisplay.setTextColor(WHITE); // установка цвета текстаdisplay.setCursor(0,0); // установка курсораdisplay.println(«Hello, world!»);

Ответить

Как усилить выходной сигнал?

Выход TL494CN является довольно слаботочным, а вы, конечно же, хотите большей мощности. Таким образом, мы должны добавить несколько мощных транзисторов. Наиболее просто использовать (и очень легко получить — из старой материнской платы компьютера) n-канальные силовые МОП-транзисторы. Мы должны при этом проинвертировать выход TL494CN, т. к. если мы подключим n-канальный МОП-транзистор к нему, то при отсутствии импульса на выходе микросхемы он будет открытым для протекания постоянного тока. При этом МОП-транзистор может попросту сгореть… Так что достаем универсальный npn-транзистор и подключаем согласно нижеприведенной схеме.

Мощный МОП-транзистор в этой схеме управляется в пассивном режиме. Это не очень хорошо, но для целей тестирования и малой мощности вполне подходит. R1 в схеме является нагрузкой npn-транзистора. Выберите его в соответствии с максимально допустимым током его коллектора. R2 представляет собой нагрузку нашего силового каскада. В следующих экспериментах он будет заменен трансформатором.

Если мы теперь посмотрим осциллографом сигнал на выводе 6 микросхемы, то увидите «пилу». На № 8 (К1) можно по-прежнему видеть прямоугольные импульсы, а на стоке МОП-транзистора такие же по форме импульсы, но большей величины.

Практика

Теперь мы переходим к интересным вещам. Давайте проверим ЖК-дисплей. Сначала подключим контакты 5В и GND от Arduino Uno к шинам электропитания макетной платы. Затем  подключим  LCD 1602.  Данный LCD имеет две отдельные линии питания:

  1. Контакт 1 и контакт 2 для питания самого LCD 1602
  2. Контакт 15 и контакт 16 для подсветки LCD 1602

Подсоедините контакты 1 и 16 LCD на минус питания, а контакты 2 и 15 к + 5В.

Далее необходимо подключить контакт 3, который отвечает за контрастность и яркость дисплея. Для точной настройки контрастности необходимо подключить крайние выводы потенциометра сопротивлением 10 кОм к 5В и GND, а  центральный контакт (бегунок) потенциометра к контакту 3 на LCD дисплея.

Регулировка контрастности ЖК-дисплея с помощью потенциометра

Теперь включите Arduino и вы увидите подсветку. Поворачивая ручку потенциометра, вы должны заметить появление первой линии прямоугольников. Если это произойдет, поздравляем! Ваш ЖК-дисплей работает правильно.

Проблемы подключения LCD1602 к Arduino по I2C

Если после загрузки скетча у вас не появилось никакой надписи на дисплее, попробуйте выполнить следующие действия:

  1. Можно регулировать контрастность индикатора потенциометром. Часто символы просто не видны из-за режима контрастности и подсветки.
  2. Проверьте правильность подключения контактов, подключено ли питание подсветки. Если вы использовали отдельный I2C переходник, то проверьте еще раз качество пайки контактов.
  3. Проверьте правильность I2C адреса. Попробуйте сперва поменять в скетче адрес устройства с 0x20 до 0x27 для PCF8574 или с 0x38 до 0x3F для PCF8574A. Если и это не помогло, можете запустить скетч I2C сканера, который просматривает все подключенные устройства и определяет их адрес методом перебора. Для изменения адресации необходимо установить джамперы в нужное положение, тем самым притянуть выводы A0, A1, A2 к положительному либо отрицательному потенциалу. На плате положения промаркированы.
  4. Если экран все еще останется нерабочим, попробуйте подключить LCD обычным образом.

Конвертирование изображения в шестнадцатеричный код

Для того, чтобы иметь возможность отображения изображения на графическом ЖК дисплее необходимо знать шестнадцатеричный код (HEX code) данного изображения. Далее мы рассмотрим несколько шагов чтобы выполнить подобное конвертирование. Но перед этим удостоверьтесь в том, что размер вашего изображения не превышает 128х64.

Шаг 1. Уменьшите размер вашего изображения до 128х64 или менее. Это можно сделать в любом графическом редакторе, например, MS paint.

Шаг 2. Сохраните изображение в формате bmp (“image_name.bmp”).

Шаг 3. Конвертирование полученного изображения в шестнадцатеричный код. Для этого можно использовать, к примеру, редактор GIMP 2. На следующем рисунке показан пример открытия изображения в данном редакторе.

Шаг 4. После открытия изображения (в формате bmp) в редакторе GIMP 2 сохраните его в формате “.xbm” (X BitMap) (см. рисунок ниже). После этого откройте полученный файл в любом текстовом редакторе, например, Notepad, и вы получите шестнадцатеричный код изображения.

Сначала выберите опцию «Export as» в редакторе.

Затем выберите формат, показанный на следующем рисунке, и нажмите кнопку Export.

После этого экспортирования вы получите файл в формате “.xbm”. Откройте его с помощью Notepad (или любого другого аналогичного редактора) и вы получите шестнадцатеричный код изображения как показано на следующем рисунке.

Контакты и схема подключения LCD 1602 к Arduino

Контакты на этом дисплее пронумерованы от 1 до 16. Нанесены они на задней части платы. Как именно они подключаются к Arduino, показано в таблице ниже.

Табл. 1. Подключение контактов LCD 1620 к Arduino

Подключение 1602 к ArduinoЕсли дисплей 1602 питается от Arduino через 5-ти вольтовой USB-кабель и соответствующий пин, для контакта контраста дисплея (3-й коннектор – Contrast) можно использовать номинал 2 кОм. Для Back LED+ контакта можно использовать резистор на 100 Ом. Можно использовать и переменный резистор – потенциометр для настройки контраста вручную.

На основании таблицы 1 и схемы, приведенной ниже, подключите ваш жидкокристаллический дисплей к Arduino. Для подключения вам понадобится набор проводников. Желательно использовать разноцветные проводники, чтобы не запутаться.

Табл. 2. Предпочтительные цвета проводников

Схема подключения LCD дисплея 1602 к Arduino:

Описание методов библиотеки LiquidCrystal I2C

LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t)

Конструктор для создания экземпляра класса, первый параметр это I2C адрес устройства, второй — число символов, третий — число строк.

LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows);

1 LiquidCrystal_I2C(uint8_tlcd_Addr,uint8_tlcd_cols,uint8_tlcd_rows);

init()

Инициализация ЖК-дисплея.

void init();

1 voidinit();

backlight()

Включение подсветки дисплея.

void backlight();

1 voidbacklight();

setCursor(uint8_t, uint8_t)

Установка позиции курсора.

void setCursor(uint8_t, uint8_t);

1 voidsetCursor(uint8_t,uint8_t);

clear()

Возвращает курсор в начало экрана.

void clear();

1 voidclear();

home()

Возвращает курсор в начало экрана и удаляет все, что было на экране до этого.

void home();

1 voidhome();

write(uint8_t)

Позволяет вывести одиночный символ на экран.

#if defined(ARDUINO) && ARDUINO >= 100
virtual size_t write(uint8_t);
#else
virtual void write(uint8_t);
#endif

1
2
3
4
5

#if defined(ARDUINO) && ARDUINO >= 100

virtualsize_twrite(uint8_t);

#else

virtualvoidwrite(uint8_t);

#endif

cursor()

Показывает курсор на экране.

void cursor();

1 voidcursor();

noCursor()

Скрывает курсор на экране.

void noCursor();

1 voidnoCursor();

blink()

Курсор мигает (если до этого было включено его отображение).

void blink();

1 voidblink();

noBlink()

Курсор не мигает (если до этого было включено его отображение).

void noBlink();

1 voidnoBlink();

display()

Позволяет включить дисплей.

void display();

1 voiddisplay();

noDisplay()

Позволяет отключить дисплей.

void noDisplay();

1 voidnoDisplay();

scrollDisplayLeft()

Прокручивает экран на один знак влево.

void scrollDisplayLeft();

1 voidscrollDisplayLeft();

scrollDisplayRight()

Прокручивает экран на один знак вправо.

void scrollDisplayRight();

1 voidscrollDisplayRight();

autoscroll()

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

void autoscroll();

1 voidautoscroll();

noAutoscroll()

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

void noAutoscroll();

1 voidnoAutoscroll();

leftToRight()

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

void leftToRight();

1 voidleftToRight();

rightToLeft()

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

void rightToLeft();

1 voidrightToLeft();

createChar(uint8_t, uint8_t[])

Создает символ. Первый параметр — это номер (код) символа от 0 до 7, а второй — массив 8 битовых масок для создания черных и белых точек.

void createChar(uint8_t, uint8_t[]);

1 voidcreateChar(uint8_t,uint8_t);

Как подключить LCD дисплей 1602 к Arduino

При сборке своего металлоискателя у меня на руках оказался LCD дисплей 1602, построенный на контроллера HD44780. Решил не упустить возможность и подключить его к своему китайскому аналогу Arduino UNO.

Вот такой дисплей 1602 будем сегодня подключать к Arduino.

Купить подобный экран можно за $1.25.

Цифры «1602» говорят о том, что дисплей состоит из 2-х строк, по 16 символов. Это довольно распространённый экран, с применением которого народ конструирует часы, тестеры и прочие гаджеты. Дисплей бывает с зелёной и голубой подсветкой.

  • К дисплею я припаял гребёнку контактов, что бы можно было легко подключать провода.

Подключать дисплей 1602 к Arduino будем через 4-битный вариант параллельного интерфейса. Существует вариант и 8-битного интерфейса,  но при нём задействуется больше проводов, а выигрыша в этом мы не увидим.

Кроме дисплея  и Arduino, нам понадобятся провода и переменный резистор на 10кОм. Резистор подойдёт любой марки, лишь бы был необходимого номинала.

Питание на дисплей подаётся  через 1-й (VSS) и 2-й (VDD) выводы. К выводам 15 (А) и 16 (K) — подаётся питание на подсветку дисплея.

Поскольку для питания и подсветки используется одно напряжение +5В, запитаем их от пинов Arduino «5V» и «GND».

Главное не перепутать полярность, иначе можно спалить электронику дисплея.

3-й вывод (V0) подключаем к ножке переменного резистора, им будем управлять контрастностью дисплея. Резистор можно не использовать, а вывод «V0» подключить к GND. В таком случае контрастность будет максимальной и не будет возможности её плавной регулировки.

5-й вывод (RW) используется для чтения с дисплея либо для записи в него. Поскольку мы будем только писать в дисплей, соединим этот вывод с землёй (GND).

Выводы:  4-й (RS), 6-й (E), 11-й (D4), 12-й (D5), 13-й (D6), 14-й ( D7) подключаем к цифровым пинам Arduino. Не обязательно использовать пины те же что и у меня, можно подключить к любым цифровым, главное затем правильно их выставить в скетче.

  1. Моя подключённая Ардуина, осталось соединить её с компьютером через USB и залить скетч.
  2. В примете будем использовать скетч из стандартного набора.
  • В Arduino IDE выбираем «Файл» — «Образцы» — «LiquidCrystal» — «HelloWorld».
  • Давайте посмотрим на код скетча.

В строке «LiquidCrystal lcd», в скобках, выставлены цифровые пины, которые задействованы на Arduino. Пины выставляются в такой последовательности: RS, E, DB4, DB5, DB6, DB7. Если вы задействовали другие цифровые пины, при подключении дисплея, впишите их в нужной последовательности в скобках.

В строке «lcd.print(«hello, world!»);» выводится приветствие на дисплей, по-умолчанию это надпись «hello, world!», её можно поменять на любую свою, пишем на латинице.

Загружаем скетч в Arduino и вот результат. Вместо «hello, world!» я вписал свой сайт. Строкой ниже, таймер производит отсчёт времени.

TL494CN: схема функциональная

Итак, задачей данной микросхемы является широтно-импульсная модуляция (ШИМ, или англ. Pulse Width Modulated (PWM)) импульсов напряжения, вырабатываемых внутри как регулируемых, так и нерегулируемых ИБП. В блоках питания первого типа диапазон длительности импульсов, как правило, достигает максимально возможной величины (~ 48% для каждого выхода в двухтактных схемах, широко используемых для питания автомобильных аудиоусилителей).

Микросхема TL494CN имеет в общей сложности 6 выводов для выходных сигналов, 4 из них (1, 2, 15, 16) являются входами внутренних усилителей ошибки, используемых для защиты ИБП от токовых и потенциальных перегрузок

Контакт № 4 – это вход сигнала от 0 до 3 В для регулировки скважности выходных прямоугольных импульсов, а № 3 является выходом компаратора и может быть использован несколькими способами. Еще 4 (номера 8, 9, 10, 11) представляют собой свободные коллекторы и эмиттеры транзисторов с предельно допустимым током нагрузки 250 мА (в длительном режиме не более 200 мА)

Они могут соединяться попарно (9 с 10, а 8 с 11) для управления мощными полевыми транзисторами (MOSFET-транзисторов) с предельно допустимым током 500 мА (не более 400 мА в длительном режиме).

Каково же внутренне устройство TL494CN? Схема ее показана на рисунке ниже.

Микросхема имеет встроенный источник опорного напряжения (ИОН) +5 В (№ 14). Он обычно используется в качестве эталонного напряжения (с точностью ± 1%), подаваемого на входы схем, потребляющих не более 10 мА, например, на вывод 13 выбора одно- или двухтактного режима работы микросхемы: при наличии на нем +5 В выбирается второй режим, при наличии на нем минуса напряжения питания – первый.

Для настройки частоты генератора пилообразного напряжения (ГПН) используют конденсатор и резистор, подключаемые к контактам 5 и 6 соответственно. И, конечно, микросхема имеет выводы для подключения плюса и минуса источника питания (номера 12 и 7 соответственно) в диапазоне от 7 до 42 В.

Из схемы видно, что имеется еще ряд внутренних устройств в TL494CN. Описание на русском языке их функционального назначения будет дано ниже по ходу изложения материала.

5Создание собственных символов для ЖК дисплея

Немного подробнее рассмотрим вопрос создания собственных символов для ЖК экранов. Каждый символ на экране состоит из 35-ти точек: 5 в ширину и 7 в высоту (+1 резервная строка для подчёркивания). В строке 6 приведённого скетча мы задаём массив из 7-ми чисел: {0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0}. Преобразуем 16-ричные числа в бинарные: {00000, 01010, 11111, 11111, 01110, 00100, 00000}. Эти числа – не что иное, как битовые маски для каждой из 7-ми строк символа, где «0» обозначают светлую точку, а «1» – тёмную. Например, символ сердца, заданный в виде битовой маски, будет выглядеть на экране так, как показано на рисунке.

Создание собственного символа для LCD экрана

Элементы платы

Дисплей

Дисплей MT-16S2H-I умеет отображать все строчные и прописные буквы латиницы и кириллицы, а также типографские символы. Для любителей экзотики есть возможность создавать собственные иконки.

Экран выполнен на жидкокристаллической матрице, которая отображает 2 строки по 16 символов. Каждый символ состоит из отдельного знакоместа 5×8 пикселей.

Контроллер дисплея

Матрица индикатора подключена к встроенному чипу КБ1013ВГ6 с драйвером расширителя портов, которые выполняют роль посредника между экраном и микроконтроллером.

Контроллер КБ1013ВГ6 аналогичен популярным чипам зарубежных производителей HD44780 и KS0066, что означает совместимость со всеми программными библиотеками.

I²C-расширитель

Для экономии пинов микроконтроллера на плате дисплея также распаян дополнительный преобразователь интерфейсов INF8574A: микросхема позволит общаться экрану и управляющей плате по двум проводам через интерфейс I²C.

Контакты подключения

На плате дисплея выведено 18 контактов для подведения питания и взаимодействия с управляющей электроникой.

Вывод Обозначение Описание
1 GND Общий вывод (земля)
2 VCC Напряжение питания (5 В)
3 VO Управление контрастностью
4 RS Выбор регистра
5 R/W Выбор режима записи или чтения
6 E Разрешение обращений к индикатору (а также строб данных)
7 DB0 Шина данных (8-ми битный режим)(младший бит в 8-ми битном режиме)
8 DB1 Шина данных (8-ми битный режим)
9 DB2 Шина данных (8-ми битный режим)
10 DB3 Шина данных (8-ми битный режим)
11 DB4 Шина данных (8-ми и 4-х битные режимы)(младший бит в 4-х битном режиме)
12 DB5 Шина данных (8-ми и 4-х битные режимы)
13 DB6 Шина данных (8-ми и 4-х битные режимы)
14 DB7 Шина данных (8-ми и 4-х битные режимы)
15 LED+ Питания подсветки (+)
16 LED– Питания подсветки (–)
17 SDA Последовательная шина данных
18 SCL Последовательная линия тактированния

Обратите внимания, что физические контакты подсветки экрана и , также интерфейс шины I²C и расположены не в порядком соотношении с другими пинами экрана.

Питание

Экран совместим со всеми контроллерами с логическим напряжением от 3,3 до 5 вольт. Но для питания самого индикатора (пин VCC) необходимо строго 5 вольт

Если в вашем проекте нет линии 5 вольт, обратите внимание на дисплей текстовый экран 16×2 / I²C / 3,3 В.

Интерфейс передачи данных

Дисплей может работать в трёх режимах:

  • 8-битный режим — в нём используются и младшие и старшие биты (-)
  • 4-битный режим — в нём используются только младшие биты (-)
  • I²C режим — данные передаются по протоколу I²C/TWI. Адрес дисплея .

Использовать восьмибитный и четырёхбитный режим в данном дисплее не целесообразно. Ведь главное достоинство этой модели именно возможность подключения через I²C.
Если всё-таки есть необходимость использовать 4-битный или 8-битный режим, читайте документацию на текстовый экран 16×2.

Объединение питания

Для подключения питания к дисплею необходимо пять контактов:

Вывод Обозначение Описание
1 GND Общий вывод (земля)
2 VCC Напряжение питания (5 В)
3 VO Управление контрастностью
15 LED+ Питания подсветки (+)
16 LED– Питания подсветки (–)

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

Мы взяли этот шаг на себя и спаяли перемычки самостоятельно.

Выбор адреса

Используя шину можно подключить несколько дисплеев одновременно, при этом количество занятых пинов останется прежним.

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

Капнув припоем на контактные площадки, мы получим один из семи дополнительных адресов:

  • нет припоя, соответственно нет электрического контакта.
  • есть припой, соответственно есть электрический контакт.
J2 J1 J0 Адрес
L L L 0x38
L L H 0x39
L H L 0x3A
L H H 0x3B
H L L 0x3C
H L H 0x3D
H H L 0x3E
H H H 0x3F

Подключение двух дисплеев по I2C

По умолчанию у всех дисплеев 1602 с модулем I2C адрес — «0x27», но можно изменить адрес текстового экрана и узнать его через сканер iic шины. Таким образом, если у вас есть необходимость подключить к одному микроконтроллеру несколько дисплеев 1602, то следует изменить адреса устройств, что бы не было совпадений. Давайте рассмотрим, каким образом изменить IIC адрес жидкокристаллического дисплея.

Текстовый дисплей 16×2 с модулем I2C

Если перевернуть дисплей и посмотреть на IIC модуль (смотри фото выше), то там можно заметить контакты, обозначенные, как «A0»,  «A1» и «A2». Если по умолчанию LCD имеет адрес «0x27» на шине IIC, то замкнув перемычку «A0», адрес дисплея сменится на «0x26». Таким образом, к одной шине можно подключить несколько дисплеев, не забыв указать их адреса в скетче — смотри следующий пример кода.

Скетч. Подключение нескольких LCD 1602 к шине i2c

Подключение к Ардуино двух дисплеев 16×2 по I2C

Перед загрузкой следующего скетча, сначала соберите схему с двумя дисплеями и просканируйте шину IIC. Это необходимо сделать, чтобы убедится в том, что плата Arduino «видит» оба устройства на шине. А также перепроверить правильность адресов. После этого можно загружать следующий код, который позволит управлять сразу двумя дисплеями с модулями IIC от одного микроконтроллера Arduino Uno.

#include <Wire.h> // библиотека для шины I2C 
#include <LiquidCrystal_I2C.h> // библиотека для 16x2 I2C

LiquidCrystal_I2C LCD1(0x27, 16, 2); // присваиваем имя первому дисплею
LiquidCrystal_I2C LCD2(0x26, 16, 2); // присваиваем имя второму дисплею

void setup() {
   LCD1.init(); // инициализация первого дисплея
   LCD2.init(); // инициализация второго дисплея
   LCD1.backlight(); // включение подсветки
   LCD2.backlight(); // включение подсветки
}

void loop() {
   // прокручиваем надпись на первом дисплее
   LCD1.setCursor(1, 0);
   LCD1.print("I LOVE ARDUINO");
   LCD1.scrollDisplayLeft();
   // прокручиваем надпись на втором дисплее
   LCD2.setCursor(1, 0);
   LCD2.print("HELLO WORLD");
   LCD2.scrollDisplayRight();
  
   delay(300);
}

3Библиотека для работы по протоколу I2C

Теперь нужна библиотека для работы с LCD по интерфейсу I2C. Можно воспользоваться, например, (ссылка в строке «Download Sample code and library»).
Библиотека для работы по протоколу I2C

Скачанный архив LiquidCrystal_I2Cv1-1.rar разархивируем в папку \libraries\, которая находится в директории Arduino IDE.

Библиотека поддерживает набор стандартных функций для LCD экранов:

Функция Назначение
LiquidCrystal() создаёт переменную типа LiquidCrystal и принимает параметры подключения дисплея (номера выводов);
begin() инициализация LCD дисплея, задание параметров (кол-во строк и символов);
clear() очистка экрана и возврат курсора в начальную позицию;
home() возврат курсора в начальную позицию;
setCursor() установка курсора на заданную позицию;
write() выводит символ на ЖК экран;
print() выводит текст на ЖК экран;
cursor() показывает курсор, т.е. подчёркивание под местом следующего символа;
noCursor() прячет курсор;
blink() мигание курсора;
noBlink() отмена мигания;
noDisplay() выключение дисплея с сохранением всей отображаемой информации;
display() включение дисплея с сохранением всей отображаемой информации;
scrollDisplayLeft() прокрутка содержимого дисплея на 1 позицию влево;
scrollDisplayRight() прокрутка содержимого дисплея на 1 позицию вправо;
autoscroll() включение автопрокрутки;
noAutoscroll() выключение автопрокрутки;
leftToRight() задаёт направление текста слева направо;
rightToLeft() направление текста справа налево;
createChar() создаёт пользовательский символ для LCD-экрана.

Предельные параметры

Как и у любой другой микросхемы, у TL494CN описание в обязательном порядке должно содержать перечень предельно допустимых эксплуатационных характеристик. Дадим их на основании данных Motorola, Inc:

  1. Напряжение питания: 42 В.
  2. Напряжение на коллекторе выходного транзистора: 42 В.
  3. Ток коллектора выходного транзистора: 500 мА.
  4. Диапазон входного напряжения усилителя: от — 0,3 В до +42 В.
  5. Рассеиваемая мощность (при t< 45 °C): 1000 мВт.
  6. Диапазон температур хранения: от -55 до +125 °С.
  7. Диапазон рабочих температур окружающей среды: от 0 до +70 °С.

Следует отметить, что параметр 7 для микросхемы TL494IN несколько шире: от –25 до +85 °С.

Функции выводов выходных сигналов

Выше они же были перечислены для TL494CN. Описание на русском языке их функционального назначения будет ниже приведено с подробными пояснениями.

Вывод 8

На этой микросхеме есть 2 npn-транзистора, которые являются ее выходными ключами. Этот вывод – коллектор транзистора 1, как правило, подключенный к источнику постоянного напряжения (12 В). Тем не менее в схемах некоторых устройств он используется в качестве выхода, и можно увидеть на нем меандр (как и на № 11).

Вывод 9

Это эмиттер транзистора 1. Он управляет мощным транзистором ИБП (полевым в большинстве случаев) в двухтактной схеме либо напрямую, либо через промежуточный транзистор.

Вывод 10

Это эмиттер транзистора 2. В однотактном режиме работы сигнал на нем такой же, как и на № 9. В двухтактном режиме сигналы на №№ 9 и 10 противофазны, т. е. когда на одном высокий уровень сигнала, то на другом он низкий, и наоборот. В большинстве устройств сигналы с эмиттеров выходных транзисторных ключей рассматриваемой микросхемы управляют мощными полевыми транзисторами, приводимыми в состояние ВКЛЮЧЕНО, когда напряжение на выводах 9 и 10 высокое (выше ~ 3,5 В, но он никак не относится к уровню 3,3 В на №№ 3 и 4).

Вывод 11

Это коллектор транзистора 2, как правило, подключенный к источнику постоянного напряжения (+12 В).

Примечание: В устройствах на TL494CN схема включения ее может содержать в качестве выходов ШИМ-контроллера как коллекторы, таки эмиттеры транзисторов 1 и 2, хотя второй вариант встречается чаще. Есть, однако, варианты, когда именно контакты 8 и 11 являются выходами. Если вы найдете небольшой трансформатор в цепи между микросхемой и полевыми транзисторами, выходной сигнал, скорее всего, берется именно с них (с коллекторов).

Вывод 14

Это выход ИОН, также описанный выше.

Функции выводов входных сигналов

Как и любое другое электронное устройство. рассматриваемая микросхема имеет свои входы и выходы. Мы начнем с первых. Выше уже было дан перечень этих выводов TL494CN. Описание на русском языке их функционального назначения будет далее приведено с подробными пояснениями.

Вывод 1

Это положительный (неинвертирующий) вход усилителя сигнала ошибки 1. Если напряжение на нем ниже, чем напряжение на выводе 2, выход усилителя ошибки 1 будет иметь низкий уровень. Если же оно будет выше, чем на контакте 2, сигнал усилителя ошибки 1 станет высоким. Выход усилителя по существу, повторяет положительный вход с использованием вывода 2 в качестве эталона. Функции усилителей ошибки будут более подробно описаны ниже.

Вывод 2

Это отрицательное (инвертирующий) вход усилителя сигнала ошибки 1. Если этот вывод выше, чем на выводе 1, выход усилителя ошибки 1 будет низким. Если же напряжение на этом выводе ниже, чем напряжение на выводе 1, выход усилителя будет высоким.

Вывод 15

Он работает точно так же, как и № 2. Зачастую второй усилитель ошибки не используется в TL494CN. Схема включения ее в этом случае содержит вывод 15 просто подключенный к 14-му (опорное напряжение +5 В).

Вывод 16

Он работает так же, как и № 1. Его обычно присоединяют к общему № 7, когда второй усилитель ошибки не используется. С выводом 15, подключенным к +5 В и № 16, подключенным к общему, выход второго усилителя низкий и поэтому не имеет никакого влияния на работу микросхемы.

Вывод 3

Этот контакт и каждый внутренний усилитель TL494CN связаны между собой через диоды. Если сигнал на выходе какого-либо из них меняется с низкого на высокий уровень, то на № 3 он также переходит в высокий

Когда сигнал на этом выводе превышает 3,3 В, выходные импульсы выключаются (нулевая скважность). Когда напряжение на нем близко к 0 В, длительность импульса максимальна

В промежутке между 0 и 3,3 В, длительность импульса составляет от 50% до 0% (для каждого из выходов ШИМ-контроллера — на выводах 9 и 10 в большинстве устройств).

Если необходимо, контакт 3 может быть использован в качестве входного сигнала или может быть использован для обеспечения демпфирования скорости изменения ширины импульсов. Если напряжение на нем высокое (> ~ 3,5 В), нет никакого способа для запуска ИБП на ШИМ-контроллере (импульсы от него будут отсутствовать).

Вывод 4

Он управляет диапазоном скважности выходных импульсов (англ. Dead-Time Control)

Если напряжение на нем близко к 0 В, микросхема будет в состоянии выдавать как минимально возможную, так и максимальную ширину импульса (что задается другими входными сигналами). Если на этот вывод подается напряжение около 1,5 В, ширина выходного импульса будет ограничена до 50% от его максимальной ширины (или ~ 25% рабочего цикла для двухтактного режима ШИМ-контроллера). Если напряжение на нем высокое (> ~ 3,5 В), нет никакого способа для запуска ИБП на TL494CN. Схема включения ее зачастую содержит № 4, подключенный напрямую к земле.

Важно запомнить! Сигнал на выводах 3 и 4 должен быть ниже ~ 3,3 В. А что будет, если он близок, например, к + 5 В? Как тогда поведет себя TL494CN? Схема преобразователя напряжения на ней не будет вырабатывать импульсы, т.е

не будет выходного напряжения от ИБП.

Вывод 5

Служит для присоединения времязадающего конденсатора Ct, причем второй его контакт присоединяется к земле. Значения емкости обычно от 0,01 μF до 0,1 μF. Изменения величины этого компонента ведут к изменению частоты ГПН и выходных импульсов ШИМ-контроллера. Как правило здесь используются конденсаторы высокого качества с очень низким температурным коэффициентом (с очень небольшим изменением емкости с изменением температуры).

Вывод 6

Для подключения врямязадающего резистора Rt, причем второй его контакт присоединяется к земле. Величины Rt и Ct определяют частоту ГПН.

f = 1,1 : (Rt х Ct).

Вывод 7

Он присоединяется к общему проводу схемы устройства на ШИМ-контроллере.

Вывод 12

Он замаркирован литерами VCC. К нему присоединяется «плюс» источника питания TL494CN. Схема включения ее обычно содержит № 12, соединенный с коммутатором источника питания. Многие ИБП используют этот вывод, чтобы включать питание (и сам ИБП) и выключать его. Если на нем имеется +12 В и № 7 заземлен, ГПН и ИОН микросхемы будут работать.

Вывод 13

Это вход режима работы. Его функционирование было описано выше.

4Скетч для вывода текста на LCD экран по шине I2C

#include <Wire.h>  // подключаем библиотеку Wire
#include <LiquidCrystal_I2C.h>  // подключаем библиотеку ЖКИ

#define printByte(args) write(args); //

uint8_t heart = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0}; // битовая маска символа «сердце»

LiquidCrystal_I2C lcd(0x27, 16, 2); // Задаём адрес 0x27 для LCD дисплея 16x2

void setup() {
  lcd.init();  // инициализация ЖК дисплея
  lcd.backlight();  // включение подсветки дисплея
  lcd.createChar(3, heart);  // создаём символ «сердце» в 3 ячейке памяти
  lcd.home();  // ставим курсор в левый верхний угол, в позицию (0,0)
  
  lcd.print("Hello SolTau.ru!");  // печатаем строку текста
  lcd.setCursor(0, 1);  // перевод курсора на строку 2, символ 1
  lcd.print(" i ");  // печатаем сообщение на строке 2
  lcd.printByte(3); // печатаем символ «сердце», находящийся в 3-ей ячейке
  lcd.print(" Arduino ");
}

void loop() { // мигание последнего символа
  lcd.setCursor(13, 1);   // перевод курсора на строку 2, символ 1
  lcd.print("\t");
  delay(500);             
  lcd.setCursor(13, 1);   // перевод курсора на строку 2, символ 1
  lcd.print(" ");
  delay(500);
}

Кстати, символы, записанные командой lcd.createChar();, остаются в памяти дисплея даже после выключения питания, т.к. записываются в ПЗУ дисплея 1602.