Блок для дисплея на чипе HD44780

Блок с изменением строк и столбцов по входам

Создаем свой блок. Вопросы, помощь знатоков.
Ответить
notfun
Рядовой
Сообщения: 6
Зарегистрирован: 28.07.2020{, 21:38}
Репутация: 0
Имя: Nik

Блок для дисплея на чипе HD44780

#1

Сообщение notfun » 28.07.2020{, 21:54}

Добрый день, форумчане!
Очень часто в своих проектах приходиться выводить информацию на дисплеи, он есть в стандартных блоках. Для изменения адреса, строки и столбца нужно входить в сам блок и проводить редактирование в нем. Очень хочется делать это с помощью переменных и вносить изменение в ходе проекта с помощью входов на это блок, то есть в проекте 1 блок для дисплея и в зависимости от требований и блока выбора sel я мог бы перемещаться по строкам и столбцам. Такой блок я написал, но есть проблема при обращении к нему он не затирает старые символы, что были записаны ранее. Может кто помочь "допилить" или указать на ошибку?
Вложения
DISP_lite_(CODE).ubi
(45.77 КБ) 54 скачивания

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

Блок для дисплея на чипе HD44780

#2

Сообщение Labu559 » 28.07.2020{, 22:25}

notfun писал(а):
28.07.2020{, 21:54}
есть проблема при обращении к нему он не затирает старые символы
Если только проблема в очистке, то

Код: Выделить всё

if (En) {
			lcd.clear(); 				// Очистка дисплея 
			--Stroka;
			--Stolbec;
			lcd.setCursor(Stolbec, Stroka);            	// Установка курсора в начало первой строки
			lcd.print(D);      				// Набор текста на первой строке
 			} 

notfun
Рядовой
Сообщения: 6
Зарегистрирован: 28.07.2020{, 21:38}
Репутация: 0
Имя: Nik

Блок для дисплея на чипе HD44780

#3

Сообщение notfun » 28.07.2020{, 23:12}

я так пробовал, не работает, так как при 1 на входе En - в каждом цикле программы будет происходить очистка дисплея. По логике, нужно очистить при каждом новом обращении. Возможно добавить вход "Clr" и перед ним детектор изменения числа

notfun
Рядовой
Сообщения: 6
Зарегистрирован: 28.07.2020{, 21:38}
Репутация: 0
Имя: Nik

Блок для дисплея на чипе HD44780

#4

Сообщение notfun » 28.07.2020{, 23:26}

Вроде получилось, спасибо. добавил вход Clr, и условие при 1 на вход очистит дисплей, буду использовать в связке с rtrig и входом En
Вложения
DISP_lite_v2_(CODE).ubi
(57.21 КБ) 58 скачиваний

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

Блок для дисплея на чипе HD44780

#5

Сообщение Labu559 » 28.07.2020{, 23:28}

notfun писал(а):
28.07.2020{, 23:12}
так как при 1 на входе En - в каждом цикле программы будет происходить очистка дисплея
А для чего, тогда по Вашему вход Еn, что-бы блок бомбил в каждом цикле при статичных данных? Ставьте детектор изменения данных на вход Еn- это и есть его основное назначение. Очистка дисплея необходима если предыдущие данные длиннее текущих, её менее ресурсозатратно сделать всякий раз при смене данных, чем анализировать эти данные.

notfun
Рядовой
Сообщения: 6
Зарегистрирован: 28.07.2020{, 21:38}
Репутация: 0
Имя: Nik

Блок для дисплея на чипе HD44780

#6

Сообщение notfun » 28.07.2020{, 23:29}

av писал(а):
28.07.2020{, 23:23}
notfun, а почему вы не используете хоть на каждый символ строк по блоку ? Понимаю что блоков будет куча и не красиво, но новый добавленный блок не займет слишком много памяти (допустим выводите слово из пяти символов одним блоком или пять символов пятью блоками разница будет небольшой). Единственная проблема в управлении этими блоками когда на какой блок нужно подать сигнал на вывод на дисплей или отключить вывод на дисплей.
Например я хочу вводить номер телефона в епром используя дисплей и енкодер. Получается на каждый символ мне придется ставить свой дисплей с фиксированной строкой и столбцом. А могу использовать счетчик для перемещения по строке, значение с счетчика прицепить к входу блока дисплея "stolbec" и крутя энкодер двигаться по номеру для редактирования нужного числа

Отправлено спустя 4 минуты 22 секунды:
Labu559 писал(а):
28.07.2020{, 23:28}
notfun писал(а):
28.07.2020{, 23:12}
так как при 1 на входе En - в каждом цикле программы будет происходить очистка дисплея
А для чего, тогда по Вашему вход Еn, что-бы блок бомбил в каждом цикле при статичных данных? Ставьте детектор изменения данных на вход Еn- это и есть его основное назначение. Очистка дисплея необходима если предыдущие данные длиннее текущих, её менее ресурсозатратно сделать всякий раз при смене данных, чем анализировать эти данные.
Я пробовал добавить как Вы написали, наблюдал мерцание дисплея, для себя сделал вывод, что очистка в каждом цикле

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 452
Откуда: Шатура
Имя: Энвер

Блок для дисплея на чипе HD44780

#7

Сообщение ecoins » 28.07.2020{, 23:42}

У стандартного блока есть совокупность достоинств, но есть и недостатки:
1. Он "тормозит" работу основной программы. Порой существенно.
2. Он работает со строковыми переменными - это и память, и время, и сложность формирования поля при изменении параметров.
3.
notfun писал(а):
28.07.2020{, 21:54}
Для изменения адреса, строки и столбца нужно входить в сам блок и проводить редактирование в нем. Очень хочется делать это с помощью переменных и вносить изменение в ходе проекта с помощью входов на это блок, то есть в проекте 1 блок для дисплея и в зависимости от требований и блока выбора sel я мог бы перемещаться по строкам и столбцам. Такой блок я написал, но есть проблема при обращении к нему он не затирает старые символы, что были записаны ранее. Может кто помочь "допилить" или указать на ошибку?
-----------------------
В основном эти проблемы решены блоками и библиотекой ecoins. Поддерживает русификацию для дисплеев с прошитой кириллицей.
Но там иные походы работы по сравнению со стандартным блоком.

notfun
Рядовой
Сообщения: 6
Зарегистрирован: 28.07.2020{, 21:38}
Репутация: 0
Имя: Nik

Блок для дисплея на чипе HD44780

#8

Сообщение notfun » 28.07.2020{, 23:49}

ecoins писал(а):
28.07.2020{, 23:42}
В основном эти проблемы решены блоками и библиотекой ecoins. Поддерживает русификацию для дисплеев с прошитой кириллицей.
Но там иные походы работы по сравнению со стандартным блоком.
Спасибо, посмотрю в этом направлении
av писал(а):
28.07.2020{, 23:42}
Сделайте в коде по условию "if" сравнение старого значения на входе и нового, а так же сравнение старых координат с новыми и если они не равны очищайте командой очистки и выводите новое значение или старое значение но по новым координатам.
Буду экспериментировать, спасибо за совет. Но в случае с номером телефона затрется все, кроме текущей выводимой позиции. Пока использую вход En с rtrig для первоначальной очистки.

notfun
Рядовой
Сообщения: 6
Зарегистрирован: 28.07.2020{, 21:38}
Репутация: 0
Имя: Nik

Блок для дисплея на чипе HD44780

#9

Сообщение notfun » 29.07.2020{, 00:23}

av писал(а):
29.07.2020{, 00:03}
Если да, тогда следующий вопрос как вы раскладываете строку для последующего ее изменения ?
Прямо сейчас думаю над этим вопросом, в мыслях после достижения определенной ячейки будет сообщение о сохранении номера, если подтверждаю, то собранная из строки UlongInt запишу в епром, если нет счетчик возвращается в 1 ячейку с номером

Ответить

Вернуться в «Разработка пользовательских блоков»