LCD 1602 и собственные символы

Вопросы от новичков
Ответить
mrAlexx
Рядовой
Сообщения: 16
Зарегистрирован: 03.01.2021{, 00:56}
Репутация: 0
Имя: Алексей

LCD 1602 и собственные символы

#1

Сообщение mrAlexx » 07.02.2021{, 22:29}

Добрый день, братья по FLProg.
Вновь вынужден обратиться за помощью к Вам.
Выл у меня проект, написанный на IDE, который сносно работал на шилде с LCD 1602 и пятью кнопками.
Естественно шилд китайский и русских букв не имеет в знакогенераторе.
Но я вышел из положения классическим способом:
1) Использовал библиотеку LiquidCrystal.h
2) Формировал все нужные в проекте символы в виде битовых образов, например так

byte up[8] = { // ↑
0b00100,
0b01110,
0b11111,
0b00100,
0b00100,
0b00100,
0b00100,
0b00000
};

3) в нужные момент подгружал необходимые символы в 8 программируемых ячеек дисплея, так
lcd.createChar(1, up);

4) выводил так
DisplayText (0, 0, "\1");

Из-за того, что в контроллере закончилась память проект был отложен. Сейчас я его решил переписать на FLProg и существенно переработать, но не пойму как решить это проблему с дисплеем.
Штатный блок меню вполне очевидно отображает зюзики, а те 3 пользовательских блока, которые я нашел мне кажутся какими-то костылями. Хотя русские буквы отображают исправно. )
Теперь собственно вопрос: Каким образом мне осуществить то, что я написал выше - в меню сформировать битовый образ символа и загрузить его в знакогенератор (причем под словом "символ" я понимаю не только букву, а любой значек) . Причем это необходимо делать динамически в зависимости от текущего пункта меню и текста на дисплее?

Ткните носом, куда копать.

Кстати по какой-то непонятной причине несмотря на то, что этот дисплей имеет 8 программируемых ячеек (по даташиту), но попытка использования восьмой вызывает сбой всего индикатора. Китайцы, блин. )

В идеале хорошо б доработать штатный блок меню, чтоб в правой части настроек меню (там где формируется текст строки меню) ниже сделать 8 окошек для ввода битовых образов (в любой системе счисления), а в самой строке писать управляющие коды типа \1

mrAlexx
Рядовой
Сообщения: 16
Зарегистрирован: 03.01.2021{, 00:56}
Репутация: 0
Имя: Алексей

LCD 1602 и собственные символы

#2

Сообщение mrAlexx » 08.02.2021{, 12:35}

Что-то не удалось с ходу найти блоки от Drunde. Не поделитесь ссылочкой?

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

LCD 1602 и собственные символы

#3

Сообщение Dryundel » 08.02.2021{, 12:45}


Gruni
Рядовой
Сообщения: 8
Зарегистрирован: 31.01.2021{, 11:26}
Репутация: 0
Имя: Дима

LCD 1602 и собственные символы

#4

Сообщение Gruni » 08.02.2021{, 13:14}

Этот блок работает с русскоязычными дисплеями?

mrAlexx
Рядовой
Сообщения: 16
Зарегистрирован: 03.01.2021{, 00:56}
Репутация: 0
Имя: Алексей

LCD 1602 и собственные символы

#5

Сообщение mrAlexx » 11.02.2021{, 09:38}

Отличный набор блоков. Спасибо за подсказку. Внедрил в меню погресс-бар - смотрится симпатично. )
Но вопрос остается открытым: как загрузить битовый образ и вывести СВОЙ СОБСТВЕННЫЙ символ ( не русскую букву, в значок стрелки, вентилятора и т.д.). Если возможно, то с простецким примером.

mrAlexx
Рядовой
Сообщения: 16
Зарегистрирован: 03.01.2021{, 00:56}
Репутация: 0
Имя: Алексей

LCD 1602 и собственные символы

#6

Сообщение mrAlexx » 11.02.2021{, 16:46}

Огромное спасибо! То что нужно. :smile9:
Ничего не мешает использовать этот блок вместе с блоками от Drunde, всего лишь нужно подправить вызов функции с _lcd1 на _rusLCD1.

И как вы это нашли этот блок? :smile427: Я тоже пользовался поиском, но ничего путного не нашел. :smile453:

mrAlexx
Рядовой
Сообщения: 16
Зарегистрирован: 03.01.2021{, 00:56}
Репутация: 0
Имя: Алексей

LCD 1602 и собственные символы

#7

Сообщение mrAlexx » 11.02.2021{, 20:59}

Пожалуй соглашусь с Вами. Но мы же сами пишем программу и видим происходит наложение или нет (например в меню) если получается "бяка", то можно использовать всегда другую ячейку под свой символ. Я на вскидку попробовал подгрузить пару своих символов и они не испортили русификацию Drundel. Возможно просто повезло, не буду спорить (хотя там и русские буквы были и прогресс-бар, т.е. уже использовалось несколько ячеек). Но идея обратиться к Drundel - просто великолепная! Потому что это сделало бы его великолепные блоки еще круче!

mrAlexx
Рядовой
Сообщения: 16
Зарегистрирован: 03.01.2021{, 00:56}
Репутация: 0
Имя: Алексей

LCD 1602 и собственные символы

#8

Сообщение mrAlexx » 11.02.2021{, 22:56}

Спасибо за совет. Именно так я и делаю (пришел к этому экспериментальным путем, когда еще первую прошивку в IDE писал).
А сейчас столкнулся с новой проблемой: есть ли способ вынуть значения всех переменных меню (если стоит галка сохранять в EEPROM, то они туда куда-то должны сохраняться) до входя в меню? Переменная получает свое значение только после захода в соответствующий пункт меню (вероятно при заходе читается из EEPROM). Например я управляю подсветкой дисплея через меню и по умолчанию яркость при старте программы получается 0, дисплей темный. И только когда я прокручу вслепую до пункта меню, где задана яркость, дисплей зажигается и больше не гаснет. Как решить эту проблему - не могу понять. Причем если переменной яркости присвоить какое-то значение в самом начале - дисплей будет гореть с этой яркостью, а при заходе в пункт меню яркость будет установлена согласно значения из меню. Такой вариант больше на костыль похож и мне не нравится.

PS:Если пользоваться блоком "Чтение из EEPROM" то он пустой - там нет переменных.

mrAlexx
Рядовой
Сообщения: 16
Зарегистрирован: 03.01.2021{, 00:56}
Репутация: 0
Имя: Алексей

LCD 1602 и собственные символы

#9

Сообщение mrAlexx » 13.02.2021{, 16:48}

Да, именно так: значение берется из "Значение пункта меню", но оно там появляется там только после того как этот пункт станет активным, а до этого момента там 0. Именно в этом загвоздка.

Вопрос не по теме: руки дошли до встраивания в проект часов на DS1302, но возникла проблема - не могу задействовать хардовые пины I2C. (20 и 21 на Меге). В своем прежнем проекте использовал программный I2C и все отлично работало. Как выйти из этого положения?
Сразу скажу, что часа 3 рыл форум и не нарыл ничего толкового по этому вопросу. Так что просьба сильно не пинать.)))

mrAlexx
Рядовой
Сообщения: 16
Зарегистрирован: 03.01.2021{, 00:56}
Репутация: 0
Имя: Алексей

LCD 1602 и собственные символы

#10

Сообщение mrAlexx » 14.02.2021{, 18:35}

Короче решил эту проблему "в лоб": поскольку я не знаю куда сохраняет блок меню значения переменных (точнее знаю, т.к. могу посмотреть в коде, но 1) не факт что при следующей компиляции они будет теми же, 2) нет возможности ими управлять через блоки чтения/записи EEPROM), то я просто записал значения с выхода меню в свои переменные EEPROM и читаю их при старте. Конечно дурь полная и бездарный расход ячеек, но их у меня задействовано не много, так что терпимо.

Ответить

Вернуться в «Начинающим»