Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Вывод на LCD

Сообщений 1 страница 14 из 14

1

Здравствуйте!
Может у кого имеется более быстрая реализация вывода на стандартный LCD 16*2?
Т.к. стандартный кусок кода
Lcd temp2 ; Chr(0) ; " "
выполняется порядка 7 msec, что для моей задачи очень долго.
Дисплей сконфигурирован
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2
Спасибо

0

2

Используйте другой алгоритм реализации вывода.
Выводите по остаточному принципу.

0

3

Можно подробней?

0

4

А откуда я знаю какая у вас задача/алгоритм.

0

5

Я имел ввиду что такое понятие остаточный принцип?
Насколько я понял, это использовать вывод только изменяющейся информации, правильно?

0

6

Это значит, что вывод на экран производится в момент, когда МК больше ничем не занят. Аля приоритетность вывода. Есть скажем прерывания выполняющие основные действия и есть экран, куда данные попадают в последний момент, когда МК ничем не занят.
Или у вас экран основная задача для вывода?
Просто многие без опыта делают линейные алгоритмы выполнения программа (как бы без многозадачности).

0

7

Ход мысли понятен. Основные действия это обработка прерывания и математика.
Теперь как отловить что МК ничем не занят и в это время затолкать вывод на LCD?

0

8

Вариантов масса, основной:

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

Тут правда может возникнуть проблема одна, если переменная больше одного байта, т.к. данные могут меняться постоянно и очень быстро, а экран будет не только не успевать эти данные забирать, но и отрисовывать. В первом случае будет выводится/захватываться значения из нескольких частей (например: часть новых данных и тут прилетают новые, всё перемешивается), в этом случае нужно сделать механизм защелкивания, т.е. не делать сразу вывод данных из переменной на экран, а через промежуточную (данные быстрее будет передаваться в промежуточную переменную, чем её обработка на момент вывода на экран). Если проблема будет с вторым вариантом (отрисовка), когда много данных (массив), тут просто надо либо думать как быстро их перебрасывать или вносить флаги триггеров (например: например, зачем выводить на экран те значения, что физически мы их глазом/экраном отобразить не можем).

+1

9

У меня примерно так и реализовано.
Вот основная потеря времени именно в выводе на LCD
Есть желание применить другую библиотеку для вывода на LCD, но с библиотеками пока не сталкивался, надо разобраться.

Имеется основной цикл

Do

Запрос функции математики ~650 us
Вывод на LCD результата математики ~7.5ms
Проверка условия не пора ли нам выходить из цикла ~17us

Loop

Функция математики:
()

Обработка прерывания:
(Сбор данных) ~15us

0

10

LCD экраны все медленные (изначально), хотите быстрее, юзайте OLED и ног меньше используется (что-то более современное), хотя они могут больше потреблять и для систем 24/7 не подходят (пиксели выгорают).
Правда я не понимаю, если вас не устраивает торможение алгоритма на экране, то зачем на нём заострять внимание вообще? Как говорил ранее, стройте алгоритм так, чтобы экран был как вторичное устройство в системе.

+1

11

Geolog написал(а):

Может у кого имеется более быстрая реализация вывода на стандартный LCD 16*2?
Т.к. стандартный кусок кода
Lcd temp2 ; Chr(0) ; " "
выполняется порядка 7 msec, что для моей задачи очень долго.

Может это подойдёт

+3

12

Спасибо Александру за подсказку, применил библиотеку "lcd4busy_anypin.lib"
Эта библиотека работает со стандартной строкой конфигурации Config LCDPIN, но нужно еще добавить описание вывода WR
у меня выглядит так
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.4 , Rs = Portb.5 , Wr = Portb.2

В итоге сократил время вывода инфо на дисплей с 7.5мс до 605 мкс.
Проблема решена.

RDW спасибо за наводку по многозадачности, нашел кое что на эту тему.

0

13

Подскажите пожалуйста, можно ли подключать дисплей к разным портам?
Например так ------  Config Lcdpin = Pin , Rs = Portb.0 , E = Portd.7 , Db4 = Portb.4 , Db5 = Portd.6 , Db6 = Portb.6 , Db7 = Portb.7

0

14

можно

+1