|
Символьные дисплеи для Arduino
Если в Вашем проекте Arduino должна "общаться" с пользователем, то первое, что приходит на ум - ее надо оснастить дисплеем и клавиатурой. Про клавиатуры поговорим в другой статье, а тема данной публикации - символьный дисплей. Почему именно символьный? - Он самый дешевый, самый простой в обращении и его возможностей достаточно для реализации 90% всех проектов.
Символьные дисплеи различаются по количеству строк и количеству символов в строке. Самыми распространенными являются дисплеи 1602 и 2004 - 16 символов/две строки и 20 символов/4 строки соответственно. Подключаются они к Arduino все одинаково при помощи 16 контактов. Два из них - питание, а остальные нужно подключать к пинам Arduino. Это просто ужасное расточительство по отношению к последним! Зато в стандартную поставку Arduino IDE входит библиотека LiquidCrystal, при помощи которой любая задача вывода текста на экран становится тривиальной. Правда стоит оговориться, что тривиальность продолжается ровно до тех пор, пока Вы не захотите вывести на экран русские буквы. Все дело в том, что таблица символов зашивается в сам дисплей производителем, а библиотека передает последнему всего лишь ascii-коды нужных символов. Понятное дело, большинство дисплеев, которые есть на нашем рынке - китайские. Русские символы для них - нонсенс. Но выход есть. Дело в том, что дисплею можно в процессе работы загрузить в его оперативную память несколько пользовательских символов. Хотя стоит признать, что и первых 128-ми символов(а они являются стандартными) с латинским алфавитом и цифрами обычно более чем достаточно. По отношению к задействуемым пинам микроконтроллера тоже есть "лекарство от жадности". И этим лекарством является сдвиговый регистр PCF8574T. Он позволяет подключить наш дисплей по шине I2C с использованием всего двух пинов Arduino. Что это за шина могу предложить почитать здесь. В двух словах - это возможность подключать к микроконтроллеру кучу устройств используя всего два контакта. Ну да от теории к практике...
Дисплей 16х2. Вроде как даже с русскими буквами в прошивке. Аналогичный предыдущему дисплей 20х4. Схему сдвигового регистра сами паять не будем - проще купить готовую у китайцев. А можно купить и уже готовую сборку.
Как подключить:
Купили, подключили... А дальше начинается самое интересное: библиотека LiquidCrystal в ее первозданном виде нам уже не подходит. Не беда - уже много народу прошло этим путем и успело "натоптать дорогу". Качаем библиотеку по ссылке и заменяем ею штатную. Использование библиотеки абсолютно аналогично:
- Необходимо указать адрес дисплея на шине I2C. Чип в этом плане предоставляет достаточно свободы. У него есть три адресных выхода A0, A1, A2. Комбинации замыкания их на землю могут менять адрес на шине. варианты приведены в таблице ниже.
A2 |
A1 |
A0 |
Адрес |
0 |
0 |
0 |
0x20 |
0 |
0 |
1 |
0x21 |
0 |
1 |
0 |
0x22 |
0 |
1 |
1 |
0x23 |
1 |
0 |
0 |
0x24 |
1 |
0 |
1 |
0x25 |
1 |
1 |
0 |
0x26 |
1 |
1 |
1 |
0x27 |
- Определяем схему нашего I2C моста. Практика показывает, что есть два основных варианта:
- #define BACKLIGHT 3
#define EN 2
#define RW 1
#define RS 0
#define D4 4
#define D5 5
#define D6 6
#define D7 7 - #define BACKLIGHT 7
#define LCD_EN 4
#define LCD_RW 5
#define LCD_RS 6
#define LCD_D4 0
#define LCD_D5 1
#define LCD_D6 2
#define LCD_D7 3
- #define BACKLIGHT 3
- Создаем экземпляр класса LiquidCrystal_I2C lcd(LCD_I2C_ADDR,LCD_EN,LCD_RW,LCD_RS,LCD_D4,LCD_D5,LCD_D6,LCD_D7);
4. lcd.begin (20,4); инициализирует дисплей с указанным количеством строк и символов в строке
6. lcd.setBacklightPin(BACKLIGHT,NEGATIVE); инициализация пина подсветки
7. lcd.setBacklight(HIGH); включение подсветки
8. lcd.clear(); очистка экрана
9. lcd.setCursor ( 0, 1 ); позиционирование курсора (столбец, строка)
10. lcd.print("Hello world!"); вывод текста
По материалам rc-master, автор Зайчиков Александр