1

Тема: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Пример работает под управлением системного ПО версии 1.46 (см.вложения) и иллюстрирует использование контроллера CANNY 7 для вывода информации на жидкокристаллический четырехстрочный символьный (20 символов в строке) дисплей I2C LCD2004 по цифровой 2х-проводной последовательной шине данных I2C.
Выполняя данную диаграмму контроллер выступает в качестве ведущего устройства (MASTER), формируя пакеты команд и данных для дисплея (SLAVE) и отправляя их в шину I2C.
При запуске, контроллер выполняет инициализацию дисплея, отправляя ему команды конфигурирования, после чего приступает к выводу информации в указанную точку экрана I2C LCD2004.
В процессе выполнения диаграммы примера, на дисплей, по середине верхней строки, будет выводиться фраза “Hello, world!”

Архив с кратким описанием и исходными файлами проекта: http://forum.canny.ru/files/lcd_i2c_demo.zip

Схема подключения:
http://forum.canny.ru/files/lcd_i2c_demo.png

Функциональная диаграмма:
http://forum.canny.ru/files/lcd_i2c_demo_cfd.png

Работа дисплея I2C LCD2004 в процессе выполнения диаграммы:
http://forum.canny.ru/files/lcd_i2c_demo_in_work.jpg

Файл системного ПО для работы с примером во вложении.


Пример вывода информации на экран с помощью контроллеров CANNY5 nano: http://forum.canny.ru/viewtopic.php?id=163

UPD 28.04.2015: Добавлена ссылка на аналогичный пример для CANNY5 nano.

UPD 31.10.2016: Добавлена диаграмма, актуализированная для CannyLab версии 1.24.

Вложений в сообщении

Иконка вложения c7v001046.ccx 163.24 кб, скачивался 504 раз, последний раз 2015-04-23 

Иконка вложения lcd_i2c_demo_v124.cfd 7.55 кб, скачивался 700 раз, последний раз 2016-10-31 

2

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Добрый день подскажите какими bin кодами формировать буквы на кирилице

3

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

В интернете можно найти несколько ссылок на документацию аналогичных дисплеев.
Ссылки на описания LCD2004 и их аналогов, встречаются даже описания устройств с встроенным русским шрифтом:
http://www.dibis.nl/pdf/Disvue_DVC2004A0YL2N.pdf
http://z.compel.ru/item-pdf/29b7c02d663 … ygh-ct.pdf
У производителя полного описания я не нашел.
В любом случае можно изменить знакогенератор - создать пользовательские символы, но сами мы этим не занимались.

Ссылка на описание микросхемы (HD44780), на которой сделаны эти дисплеи:
http://compblog.vlukyanov.com/wp-conten … asheet.pdf

4 (07-11-2016 12:55:54 отредактировано alex_engine)

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Подскажите, плиз
Я правильно понял, для того, чтобы выводить на экран какие либо значения мне нужно сформировать в бинарном виде выводимые символы согласно таблиц из описаний экрана?
К примеру - для вывода на экран результата счетчика, мне нужно задать посылки для цифр, а потом назначить их отправку согласно результатам счета?
Может существует какой-то макрос, который позволяет транслировать символы сразу на экран?
Мне нужно при выполнении диаграммы знать что содержится в ячейках энергонезависимой памяти и значения промежуточных участков диаграммы. Это будут числа.
Что за последовательности в блоках "побитовое И" и "побитовое ИЛИ"?

Спасибо

П.С значение 23 на участке диаграммы где формируется сигнал "init" чем обусловлено?
П.П.С что за посылки на входах коммутаторов, что формируют "init data"? Это нужно для готовности работы экрана и от содержимого посылок с символами никак не зависит?

5

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

alex_engine пишет:

...чтобы выводить на экран какие либо значения мне нужно сформировать в бинарном виде выводимые символы согласно таблиц из описаний экрана?...

В общем случае да. Однако коды символов из таблиц экрана в общем случае, совпадают с ASCII-кодами тех же символов и для вывода символов на экран можно задавать их с помощью символьного формата данных CannyLab.

alex_engine пишет:

...К примеру - для вывода на экран результата счетчика, мне нужно задать посылки для цифр, а потом назначить их отправку согласно результатам счета?
Может существует какой-то макрос, который позволяет транслировать символы сразу на экран?
Мне нужно при выполнении диаграммы знать что содержится в ячейках энергонезависимой памяти и значения промежуточных участков диаграммы. Это будут числа...

Исходя из сказанного выше, можно конвертировать нужные значения в символьный формат, используя функциональный блок "Число в строку (ITOA)", и отправлять их на дисплей.
К сожалению, специальных макросов или драйвера данного дисплея для контроллеров CANNY, облегчающего работу с ним, на данный момент нет. Особенности дисплея таковы, что работать с ним приходится с помощью команд низкого уровня. Мы попробуем доработать диаграмму примера для упрощения работы с дисплеем.

alex_engine пишет:

...Что за последовательности в блоках "побитовое И" и "побитовое ИЛИ"?...

Для работы с дисплеем используется 4х битная система кодирования. За одну посылку отправляется 4 бита команды или символа с добавлением служебных бит. С учетом упомянутых выше особенностей дисплея (управление командами низкого уровня), для отправки 4х бит данных требуется 2 посылки с разными комбинациями служебных бит.
Побитовые И позволяют выделять части значений (кодов символов, счетчика), а Побитовые ИЛИ добавляют служебные биты.

alex_engine пишет:

...П.С значение 23 на участке диаграммы где формируется сигнал "init" чем обусловлено?
П.П.С что за посылки на входах коммутаторов, что формируют "init data"? Это нужно для готовности работы экрана и от содержимого посылок с символами никак не зависит?

Больше 23 - всего для инициализации дисплея, задания его конфигурации и режимов работы, в данном примере требуется передача 12 команд, с использованием 24х посылок "init data". Инициализация дисплея выполняется один раз и в дальнейшем, при выводе информации, не повторяется и от содержимого посылок с символами не зависит.

Вложений в сообщении

lcd_i2c_1.png, 17.91 кб, 329 x 204
lcd_i2c_1.png 17.91 кб, скачивался 588 раз, последний раз 2016-11-08 

lcd_i2c_2.png, 20.17 кб, 381 x 294
lcd_i2c_2.png 20.17 кб, скачивался 629 раз, последний раз 2016-11-08 

6

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Пробую подключить вот такой экран
http://zelectro.cc/LCD_Keypad_shield

питание подал прямо с платы отладки - экран светится, все ок.

https://habrastorage.org/getpro/habr/comment_images/60f/eca/248/60feca248305058a22364888294a5117.png
Провода сигнальные подключил по этой схеме, на плате с экраном а4 и а5.
Не работает sad

Может быть нужно еще что-то из аппаратной части? Модуль еще нужен для I2C?
http://www.sainsmart.com/media/catalog/product/1/_/1_11_10.jpg такой?

7

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Сам по себе ЖК модуль LCD 2004 интерфейса I2C не имеет. В нашем примере используется именно комплект I2C LCD 2004 (жк модуль с дополнительной платой I2C - как на фотографии).
Шилд, по Вашей ссылке, предназначен для Ардуино (управляется Ардуино) и использует 4 битный режим управления дисплеем. О наличии у него интерфейса I2C ничего не сказано. Приведенная схема подключения I2C расширителя портов PCF8574 к LCD не имеет отношения к шилду. Контакты A4 и A5 шилда не то же самое, что контакты ардуино A4, A5.
Приведите схему подключения Вашего шидла к CANNY7.

8 (15-11-2016 22:06:23 отредактировано alex_engine)

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Отложил в сторону ардуиновский шилд, и (как думал) пошел простым путем.
Купил экран и плату (PCF8574T) к нему. Спаял, подключил - тишина. Просто синий экран.
Начал разбираться - экран оказался не 2004, а 1602.
Сложно диаграмму под такой экран переделать?
https://www.openhacks.com/uploadsproduc … 1602a1.pdf

Вот даташит. Надо только адрес поменять или все глобальнее?

Спасибо

Полистал интернет, пробовал менять адреса: 0х20, 0х27, 0х3F. Тишина sad

9

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Если подключение PCF8574 к LCD соответствует приведенной выше схеме (на контактах А0, А1, А2 PCF8574 потенциал GND), то можно попробовать использовать адрес 0х40.
На дисплее 1602 можно попробовать текущую диаграмму, установив правильный адрес I2C, подход к выводу не меняется, адрес начала первой строки такой же (0х00), длины строки (16 символов) хватит для вывода текста "Hello, world!" начиная, как установлено в текущей диаграмме, с 4го знакоместа.
ВНИМАНИЕ! Напряжение питания и допускаемое напряжение на портах микросхемы PCF8574 составляет 5В! При подключении шины I2C контроллера CANNY7 к PCF8574 необходимо организовать подтяжку линий SDA и SCL к напряжению +5В резисторами 4,7кОм.
В использованном нами расширителе портов эти подтяжки уже есть, в Вашем случае их нужно установить дополнительно.

10 (16-11-2016 11:53:06 отредактировано alex_engine)

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Денис, спасибо за ответ
У меня на плате PCF8574T
http://zelectro.cc/Content/Uploads/116/Files/Z-PCF8574T_I2C_mod-address.jpg
Наверное нужно пробовать адреса 0х20? Или все же 0х40?

Главное, что принципиальных отличий в экранах нет.

На плате между питанием и линиями 4.7кОм прозванивается. Стало быть дело не в этом sad

11

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Попробуйте 0х40. Особенность нашего регистра. Это то же что 0х20<<1, т.к. адрес PCF8574 начинает задаваться с бита 1 (а еще есть бит 0 - R/W).
Но подтяжка линий SDA и SCL к 5В нужна все равно.

12

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Спасибо

Посадил а0, а1, а2 на массу, взял адрес 0х40 - завелось.
от наличия-отсутствия резисторов по 4.7кОм ничего не меняется. Похоже, на плате они уже есть.

Если экранчик отключить от кэнни а потом снова включить - отображается хаотичный набор знаков, до перевключения питания 12 вольт - я так понял, это сбивается инициализация?

Дальше, для использования 1602 мне нужно что-то поправлять в диаграмме, в части где инициализация? Или просто организовывать вывод символов с учетом меньшего "разрешения"?

13

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Да после отключения питания от дисплея сбрасывается его настройка. При включении, дисплей находится в 8-битном режиме обмена данными и требует повторной инициализации.
Диаграмму в части инициализации менять не требуется. Можете попробовать подставить нужные данные в коммутатор блок №17, начиная с входа 1, вместо "Hello, world!", используя конвертеры ITOA.
Немного доработанный пример во вложении. Он для LCD 2004 - вывод данных (4 изменяющихся значения) в 4 строки. Добавлены краткие пояснения. Однако боюсь что разобраться в ней будет довольно сложно, но адаптировать под нужный дисплей вполне возможно. Главное там показано, как выполнить преобразование данных и передать их на вывод.

Вложений в сообщении

20161116_144345.jpg, 267.94 кб, 800 x 600
20161116_144345.jpg 267.94 кб, скачивался 661 раз, последний раз 2016-11-16 

Иконка вложения lcd_i2c_demo_v125.cfd 22.71 кб, скачивался 708 раз, последний раз 2016-11-16 

14

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

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

15 (17-11-2016 13:22:02 отредактировано alex_engine)

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

И снова здравствуйте.
Пробую заполнить всю строку экрана 1602 символами. На диаграмме "хелло ворд", поменял на входах коммутатора знаки на нужные мне, ясное дело, выводятся не все.
В связи с этим куча вопросов.
http://i.piccy.info/i9/5c370241a6996cba87eaccc84693ba97/1479368241/132277/1087899/lcd_800.jpghttp://i.piccy.info/a3/2016-11-17-07-37/i9-10529190/800x500-r/i.gif

1. counter - этот счетчик не влияет на вывод и расположение символов? Он организован точно также, как и на диаграмме 2004 из последнего примера.
2 Как можно доработать диаграмму "хелло ворд", чтобы выводить все 16 символов в каждой строке?
3. побитовое И значений счетчика с числом 111000 и последующий сдвиг вправо на 3. Зачем это и почему нельзя сразу сделать побитовое И с 000111?

Спасибо

П.С получилось засветить две строки путем переделки второй диаграммы.

16

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

1. counter - определяет последовательность отправляемых дисплею команд, т.о. и последовательность вывода символов - если они выводятся один за другим, то будут располагаться в соседних ячейках экрана. За расположение символов на экране отвечают специальные команды - установки адреса ячейки экрана дисплея (это то что на входе 0 коммутатора №17 - "addrs").
В последнем примере счетчик counter сбрасывается после вывода пары символов на входе 11 коммутатора. В нем сеть от блока 13 названа "output char" и участвует в задании условия для обнуления счетчика (блоки №№92,93,2,5,6 последнего примера), после чего цикл вывода символов повторяется.
2. В принципе можно, но для этого понадобится помудрить с коммутаторами, или использовать подход из последнего примера, отдельно сформировать постоянную часть выводимую на дисплей (пояснения и подписи, z.B. Val1:,..., usw), а необходимые данные (data1,...) выводить в нужные координаты экрана, либо определиться сколько символов данных действительно требуется выводить в каждую строку, возможно это будет меньше 16 и тогда можно будет обойтись одним основным коммутатором (нужно смотреть конкретно). В любом случае универсальный вариант для таких дисплеев сделать довольно сложно. Оптимальный подход - это как в последнем примере. Главное правильно указать адрес ячейки экрана.
3. Вывод одного символа выполняется за 4 прохода: 2 тетрады (2 х 4 бита), по 2 раза на каждую (стробирование). Счетчик используется для отправки каждой посылки и увеличивает свое значение после каждой отправки. Т.о. всего на отправку 2 символов (1го 16-битного регистра - значения на входе коммутатора №17) требуется 8 циклов. Побитовое И в сочетании со сдвигом позволяют увеличивать значение индекса коммутатора на единицу 1 раз в восемь циклов отправки данных дисплею, обеспечивая переход к следующей паре символов.

17

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

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

18

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Одновременно на 1 (!!!) шину I2C можно подключить более 100 устройств (классическая адресация включает 7-битное адресное пространство с 16 зарезервированными адресами, т.е. разработчикам доступно до 112 свободных адресов для подключения периферии на одну шину).
На 1 шину вполне можно подключить 2 дисплея, задав им различные адреса, с помощью специальных резисторов (см. сообщение 10 данной темы) и обращаться к ним изменяя адрес устройства в соответствующем регистре драйвера I2C.
Технически возможно подключить один CANNY7 к нескольким шинам I2C (до 5 шт), используя по 2 отдельных канала на каждую шину. При таком подходе нужно будет, при обращении к другой шине, деактивировать драйвер, изменить каналы контроллера, использующиеся для подключения к шине и снова активировать драйвер. Очевидно, что диаграмма несколько усложнится. Дисплеи имеют сою память и будут продолжать отображение полученных данных даже после отключения контроллера от шины, при условии сохранения питания на дисплее.
Мы сами не пробовали (просто не ставилось такой задачи) организовывать одновременное подключение нескольких дисплеев к CANNY7.

19 (01-12-2016 15:09:41 отредактировано alex_engine)

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Чуть изменил диаграмму из примера.
Теперь у меня две строки с меткой и данными дважды в строке.
Пытался самостоятельно также заполнить оставшиеся строки, чтобы иметь еще пару строк в таком же формате, да не хватает понимания sad

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

Вложений в сообщении

Иконка вложения 2004.cfd 22.71 кб, скачивался 607 раз, последний раз 2016-12-01 

20

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

alex_engine пишет:

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

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

Вложений в сообщении

Иконка вложения 2004_ext.cfd 37.42 кб, скачивался 682 раз, последний раз 2016-12-01 

21 (02-12-2016 14:35:22 отредактировано alex_engine)

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Спасибо, то, что надо.
Еще вопрос.
Длинна (в данный момент 5 знаков) "слова" как-то регулируется? Если не нужно такое длинное сообщение, можно сделать, к примеру, два знака на подпись, три знака на данные? Тогда в строке по три поля вывода можно получить.
Спасибо

22

Re: Работа CANNY7 с жидкокристаллическим дисплеем I2C LCD2004

Можно устанавливать нужную длину "слова".
В исходном примере длина строки больше.
В последующих примерах применен подход с выводом данных в нужные координаты экрана: часть  информации выводится 1 раз и отображается постоянно (подписи), а часть постоянно обновляется (данные). Если изменить этот подход и обновлять весь экран, то можно формировать строки целиком (подписи и данные) и выводить их построчно, указывая только одну координату (первого символа в строке). Диаграмма изменится и, возможно, немного упростится. Тогда в строку из 20 символов уместится 3 блока (3х(2 символа подписи + 3 символа данных + разделитель)).
Главное правильно сформировать данные для вывода.