Easyelectronics.ru

Электроника для всех
Текущее время: 22 сен 2018, 16:22

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 19 ] 
Автор Сообщение
 Заголовок сообщения: Lcd hd44780 работа без задержек
СообщениеДобавлено: 08 июн 2018, 08:52 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 605
Привет.
Не нашел ни где кода работы с Lcd без задержек, везде используют задержки при инициализации и выводе текста.
Не вижу смысла изобретать самому велосипед. Тем более где гарантия, что у меня велосипед получится лучше.
Может, кто подскажет, где можно посмотреть код реализации работы с lcd дисплеем без задержек, например по прерыванию таймера?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 08 июн 2018, 12:05 
Старожил

Зарегистрирован: 04 окт 2012, 00:23
Сообщения: 2514
Откуда: Москва
https://google.gik-team.com/?q=%D0%97%D ... 1%80%D0%B5


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 08 июн 2018, 12:13 
Старожил

Зарегистрирован: 15 янв 2018, 18:52
Сообщения: 668
тс вроде конкретику спрашивает, а вы ему гугл предложили с левым запросом. сами по нему хоть пробовали перейти?)

по сабжу. вы точно все библы смотрели? просто я когда юзал Lcd на hd44780. замечал, что эти задержки только при инициализации дисплея реализованы. что не критично
а в коде вывод можно сделать, паразитируя на таймерах и не использую delay вообще


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 08 июн 2018, 12:18 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4818
(Долгую) задержку не обязательно делать в виде тупейшего Delay_ms(10).
В программе всегда есть фоновый процесс, которому мало что есть делать. Поставьте вывод на дисплей туда, а вместо Delay сделайте проверку того, сколько времени прошло. Если не прошло, то выйти.
Т.е. алгоритм вывода будет следующим:
[если нет ничего на вывод, или есть на вывод, но не прошло время - идти дальше. Иначе - вывести следующий байт на дисплей]
Альтернатива - повесить этот вывод на обработчик таймера 10мс(?) и в нем выводить побайтно за тик. Времена получатся автоматически.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 08 июн 2018, 12:28 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2676
Там беда в том, что задержки микросекундные, миллисекунды только на очистке и еще какой-то штуке при инициализации. Пока будем переключаться больше потеряем чем выиграем. Для себя также обновление экрана запихнул в таск с низким приоритетом, чтобы не сказывалось на общей работоспособности, всё обновление экрана не более нескольких мс, при использовании "видеобуфера", который целиком загоняется в экран без установки координат знакоместа.
Прикладываю простенькую библиотечку выдранную из какого-то проекта, она оптимизирована для F1 на 72МГц используется только старшие биты без чтения RW пина.
Вложение:
GUI.zip [6.08 Кб]
Скачиваний: 8


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 08 июн 2018, 12:32 
Старожил

Зарегистрирован: 04 окт 2012, 00:23
Сообщения: 2514
Откуда: Москва
Цитата:
тс вроде конкретику спрашивает, а вы ему гугл предложили с левым запросом. сами по нему хоть пробовали перейти?)
Я то ходил , а Вы
Протокол LCD предусматривает сигнал ЗАНЯТ


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 08 июн 2018, 12:55 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4818
hd44780 позволяет обходиться без операции "чтение", чем многие и пользуются.
Я бы не полагался на сигнал Busy - он выдается далеко не сразу. Если выдать байт, а потом (сразу) считать статус, то Busy вполне может еще не установиться. Т.е. Всё Равно придется ставить задержку перед считыванием статуса. Причина банальнейшая - там тормозной процессор.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 08 июн 2018, 13:00 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 641
Hold писал(а):
Прикладываю простенькую библиотечку выдранную из какого-то проекта, она оптимизирована для F1 на 72МГц используется только старшие биты без чтения RW пина.
Вложение:
GUI.zip

Эта либа заточена под конкретный мк работающий на конкретной частоте с конкретным экраном питающимся конкретным напряжением, а компилировать ее нужно конкретным компилятором с конкретными ключами, причем несоблюдение любого из этих факторов может привести ее в нерабочее состояние. У тебя там в паузе на цикле даже volatile нет, значит с оптимизацией не будет и самой паузы, а раз код компилировался без оптимизации, значит и в других местах, где у тебя задержки на __NOP(), их запросто может не хватить. Если уж писать такой блокирующий код, то крайне рекомендую опрашивать сигнал Busy, даже не смотря на то, что некоторые рекомендуют этого не делать :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 08 июн 2018, 13:08 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2676
Так я и написал, что либа простенькая, написана по быстрому, некогда мне было писать монстра под все виды МК и компиляторов, главное же суть уловить или подглядеть чего. Да, оптимизацию я обычно не использую, только там где это прям критично-критично.
Код то блокирующий, только вот операционка вытесняющая. Все кому нужно, с удовольствием прервут этот низкоприоритетный таск, сделают своё дело, и вернут управление отрисовке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 08 июн 2018, 13:21 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 605
Вот тоже не нашел информации. Какое минимальное время должно быть, между передачей символов на дисплей?
Пример сформировали строку "АБСД" послали букву 'А' через какое время можно слать букву 'Б'?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 08 июн 2018, 13:22 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 641
Hold писал(а):
Так я и написал, что либа простенькая, написана по быстрому, некогда мне было писать монстра под все виды МК и компиляторов, главное же суть уловить или подглядеть чего. Да, оптимизацию я обычно не использую, только там где это прям критично-критично.

Простенькая либа все-таки совсем не одно и то же, что и с большой вероятностью не работающая либа, а об этом никто не предупреждал :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 08 июн 2018, 13:30 
Старожил

Зарегистрирован: 15 янв 2018, 18:52
Сообщения: 668
Цитата:
Я то ходил , а Вы

техническому человеку не уметь в поисковые запросы в 2018... фейлите вы, а стыдно мне. без всякой иронии говорю :(
вот ваш поисковый запрос и его результат. он вообще никак не соотв. вопросу тс...
Show

Цитата:
Протокол LCD предусматривает сигнал ЗАНЯТ

а какое это отношение имеет к delay? можно же реализовать задержку на таймере и пусть себе будет Busy...
вопрос же был: как избавиться от delay в либе...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 08 июн 2018, 16:22 
Старожил

Зарегистрирован: 04 окт 2012, 00:23
Сообщения: 2514
Откуда: Москва
mazahakka v2.0 писал(а):
а какое это отношение имеет к delay? можно же реализовать задержку на таймере и пусть себе будет Busy...
вопрос же был: как избавиться от delay в либе...

Где здесь слово "либа" и "функция delay" ? Может ТС на ASM пишет?

Цитата:
Не нашел ни где кода работы с Lcd без задержек, везде используют задержки при инициализации и выводе текста.
Не вижу смысла изобретать самому велосипед. Тем более где гарантия, что у меня велосипед получится лучше.
Может, кто подскажет, где можно посмотреть код реализации работы с lcd дисплеем без задержек, например по прерыванию таймера?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 08 июн 2018, 17:13 
Старожил

Зарегистрирован: 15 янв 2018, 18:52
Сообщения: 668
Цитата:
Может ТС на ASM пишет?

сомневаюсь. но кроме тс на это никто не ответит. а уверен, что он про delay, т.к. уже видел похожие вопросы на другом ресурсе


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 09 июн 2018, 22:32 
Старожил
Аватара пользователя

Зарегистрирован: 06 авг 2014, 22:46
Сообщения: 297
zhilenkov писал(а):
Вот тоже не нашел информации. Какое минимальное время должно быть, между передачей символов на дисплей?
Пример сформировали строку "АБСД" послали букву 'А' через какое время можно слать букву 'Б'?

Это описано в ДШ к дисплею. Раздел с таблицей инструкций.
Строку в дисплей Вы шлете командой Write Data to RAM, соответственно смотрите сколько времени она выполняется (43мкс).
При работе с этим дисплеем вам Однозначно придется формировать задержки, вопрос в том как лучше это делать.
Самый простой, но ресурсоемкий способ это задержка всей программы циклом с подсчетом тиков или ожидания флага таймера. То есть на это время проц
впустую работает считая тики (ожидая таймера).
А дальше куча других способов, во например как писали выше повесить работу с дисплеем в отдельную низкоприроретеную задачу. Внутри задачи ждать флага таймера считающего эти задержки.
О вот кстати хорошая тема: http://easyelectronics.ru/prostoj-progr ... matov.html
Я лично все хочу найти мега дешевый контроллер и на его базе сделать переходник от основного девайса к дисплею
и организовать простенький интерфейс позволяющий использовать аппаратные ресурсы и соответственно прерывания.
Но все никак не займусь))))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 13 июн 2018, 16:20 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 605
Есть идее как упростить код?
Вывод данных на LCD 4 строчки 20 символов.
Основная проблема которая мне не нравится - это вывод. А именно, данные выводятся:
Hello world 121
Hello world 123
Hello world 122
Hello world 124
что не удобно при написании вывода строк.
Show


В прерывании: частота прерывания 1 мС.
Код:
void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */
  if(len != 0){
  len = len - 1;
  LCD_Data(text[Cnt_len++]);
  }
  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  HAL_SYSTICK_IRQHandler();
  /* USER CODE BEGIN SysTick_IRQn 1 */

  /* USER CODE END SysTick_IRQn 1 */
}


Передача данных на LCD
Show

Передача команды на LCD:
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 13 июн 2018, 17:20 
Заглядывает иногда

Зарегистрирован: 03 июл 2012, 19:16
Сообщения: 111
И где же при этом уровне абстракции от железа задаются адреса строк?
Допустим, LCD имеет адреса строк:
0x80...0x8F
0xC0...0xCF
0x90...0x9F
0xD0...0xDF
Т.к. ваша программа пишет данные по порядку, то она меняет строки 2 и 3 местами, ведь очевидно что 0х90 запишутся раньше чем 0хС0.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 13 июн 2018, 17:33 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 605
Это понимаю.
Вопрос как это можно оптимизировать и исправить в коде.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Lcd hd44780 работа без задержек
СообщениеДобавлено: 13 июн 2018, 18:35 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:19
Сообщения: 6213
Откуда: Из тех... Из бывших...
Выводить в заданную позицию.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB