Описание LCD Keypad Shield

LCD Keypad Shield – оригинальный дополнительный модуль, организующий работу с ЖК индикаторами, совместимыми с HD44780 интерфейсом, и пятикнопочной клавиатурой по шине SPI или I2C.

[cryout-multi][cryout-column width=»1/3″]LCDKeypadShield_1_small    [/cryout-column] [cryout-column width=»1/3″]LCDKeypadShield_SPI_1_small[/cryout-column] [cryout-column width=»1/3″]LCD_WH1602B-YYH-CTK_PLS_small [/cryout-column] [/cryout-multi]

Модуль основан на микросхеме MCP23S17 или MCP23017 (16-разрядный расширитель портов ввода/вывода с SPI или I2C интерфейсом, соответственно).

Комплектация

Модуль LCD Keypad Shield поставляется либо в собраном виде (в вариантах для шин SPI или I2C), либо без монтажа штыревых компонентов (также в вариантах для шин SPI или I2C). К модулю прилагается вилка PLS-16.

Технические характеристики

Основные технические характеристики LCD Keypad Shield:

  • интерфейс с ЖК индикатором: HD44780 совместимый, 4-битный, 16-pin;
  • доступные программно выводы интерфейса HD44780: RS, RW, E, DB4-DB7, подсветка;
  • интерфейс с платой Arduino: SPI или I2C (в зависимости от выбранной модификации модуля);
  • 5 кнопок, опрашиваемых программно по шине SPI или I2C, кнопка сброса;
  • разъемы для ЖК индикатора и внешних кнопок позволяют разнести плату Arduino и ЖК индикатор с кнопками;
  • модулю задается трехбитный адрес на шине (с помощью перемычек), что позволяет размещать на одной шине до 8 устройств с аналогичными микросхемами;
  • возможность выбора с помощью перемычки номера соответствующего выхода микроконтроллера Arduino (digital pin 8, 9 или 10) для сигнала CS шины SPI;
  • в модуле применены «проходные» разъемы, позволяющие состыковывать несколько модулей без сдвига относительно платы Arduino;

Подготовка модуля к работе

На выводы модуля могут быть одеты транспортировочные фиксаторы, которые необходимо снять перед началом работы.

Выбор адреса модуля на шине

Модуль основан на микросхеме MCP23S17/MCP23017, для которой необходимо выбрать младшие три бита адреса на шине SPI/I2C. Биты выбираются с помощью перемычек на разъеме Address притягиванием битов 0, 1, 2 к «земле» (Gnd) или +5В (5V).

Адрес каждой микросхемы должен быть уникальным, и на одной шине можно разместить до 8 микросхем.

LCDKeypadShield_Settings_Addresses

Таким образом, возможно, к примеру, подключение к плате Arduino восьми модулей LCD Keypad Shield, или четырех модулей LCD Keypad Shield и двух Expander Shield. Если применять I2C версии модулей, то вся конструкция будет задействовать всего 2 вывода платы Arduino!

При подключении нескольких модулей LCD Keypad Shield сами ЖК-дисплеи могут подключаються, например, с помощью шлейфов от дисковода, и угловых вилок PLS-16R.

При подключении нескольких модулей следует обратить внимание на то, что подсветка потребляет довольно большой ток — порядка 100-150 мА.

LCDKeypadShield_TwoLCD_small

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

Для I2C модификации модуля с помощью перемычек в левой части разъема XS включаются или отключаются резисторы, подтягивающие шину к +5В. Как правило, подтягивающие резисторы должны быть подключены если на шине I2C только одно устройство. Если устройств несколько, то резисторы подключаются только у одного из устройств.

Ниже представлено состояние перемычек при включенных подтягивающих резисторах и при отключенных . Также, для отключения подтягивающих резисторов можно просто снять перемычки.

LCDKeypadShield_Settings_pullup

Выбор номера вывода для управления сигналом CS шины SPI

Для SPI модификации модуля необходимо выбрать вывод микроконтроллера Freeduino/Arduino, используемый в качестве сигнала CS. Обычно используется вывод 10, что соответствует крайнему левому положению перемычки на разъеме CS. Переставляя перемычку на одно из двух других положений, возможен выбор 9 и 8 вывода соответственно.

LCDKeypadShield_Settings_CS

Настройка контрастности дисплея

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

LCDKeypadShield_Settings_Contrast

Библиотека MCP23xxx

Для упрощения работы с этим, и рядом других модулей, разработана библиотека MCP23xxx, предоставляющая простой интерфейс к функционалу микросхем серии MCP23xxx. Библиотека доступна для свободного  скачивания MCP23xxx. Библиотека совместима с ПО Arduino версии 1.0.5 (также предполагается совместимость и с более поздними версиями).

Фактически, это набор из двух библиотек: MCP23xxx и LiquidCrystal_MCP23x17.

В библиотеке MCP23xxx реализованы шаблоны классов, организующие работу с расширителями портов MCP23017, MCP23S17, MCP23008 и MCP23S08. Библиотека LiquidCrystal_MCP23x17 — это модифицированная стандартная библиотека LiquidCrystal, поддерживающая русский язык, и работающая через расширитель портов.

Рассмотрим пример «Hello World» для I2C модификации модуля. В нем показано не только как инициализировать модуль и выводить на него данные, но и приведен пример опроса одной из кнопок.

////Для SPI версии подключаем SPI.h:
//#include <SPI.h>
//Для I2C версии подключаем Wire.h:
#include <Wire.h>
//подключаем библиотеку
#include <MCP23xxx.h>
#include <LiquidCrystal_MCP23x17.h>

////Для SPI версии создаем объект класса CMCP23S17:
//CMCP23S17 MCP;
//Для I2C версии создаем объект класса CMCP23017:
CMCP23017 MCP;

//Объект для ЖК
LiquidCrystal_MCP23x17 lcd;

void setup() {
//  //Для SPI версии конфигурируем шину SPI и объект MCP номером линии CS (10) и адресом (0)
//  SPI.begin();
//  MCP.init(10, 0);
//Для I2C версии конфигурируем шину I2C и объект MCP адресом (0)
Wire.begin();      //TWBR = 12;  // <- так можно сделать 400kHz I2C
MCP.init(0);

//настраиваем объект LCD для работы через указанный объект MCP
lcd.init(MCP);
//…и включаем подсветку
lcd.Backlight(1);

//…остальной код одинаков и для оригинальной LiquidCrystal и для LiquidCrystal_MCP23x17

// настраиваем число столбцов и строк:
lcd.begin(16, 2);
// выводим сообщение.
lcd.print("hello, world!");
// кнопка Enter подключена к 12 выводу микросхемы MCP
MCP.pinMode(12, INPUT);
}

void loop() {
// устанавливем курсор
lcd.setCursor(0, 1);
// выводим время в секундах, начиная со старта:
lcd.print(millis()/1000);
// если нажата кнопка Enter, выводим сообщение
if (MCP.digitalRead(12)==0)
lcd.print(" Enter pressed");
// иначе, выводим пробелы, чтобы стереть сообщение
else
lcd.print("              ");
}

По материалам сайта фридуино.ру

Метки: , , , , , , , , , , , . Закладка Постоянная ссылка.

Комментарии запрещены.