Перейти к содержанию

Подключение LCD(HD44780) к микроконтроллерам AVR


Рекомендуемые сообщения

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

В сети их можно найти кучу. Библиотека для 20х4 та же самая, что для 16х2 и прочих. Просто там диапазон адресов другой. Читайте даташит на дисплей. Я лично пользуюсь своей библиотекой.

lcd_hd44780.c

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

16 часов назад, Sergey-Ufa сказал:

В сети их можно найти кучу. Библиотека для 20х4 та же самая, что для 16х2 и прочих. Просто там диапазон адресов другой. Читайте даташит на дисплей. Я лично пользуюсь своей библиотекой.

lcd_hd44780.c

если можно то немного подробней как и куда ее засунуть

как настроить

как вывести строку

как вывести переменную

если можно то с примерами

Ссылка на комментарий
Поделиться на другие сайты

Подкину еще одну реализацию

Изменено пользователем COKPOWEHEU

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

В 13.10.2017 в 22:36, VK-32 сказал:

если можно то немного подробней как и куда ее засунуть

как настроить

как вывести строку

как вывести переменную

если можно то с примерами

Хоть и не про ту библиотеку, но зато со всеми "как" и "куда": http://www.simple-devices.ru/index.php?option=com_content&view=article&id=128:winavr-lcd-interface&catid=7:soft&Itemid=10

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...
В 13.10.2017 в 07:16, Sergey-Ufa сказал:

В сети их можно найти кучу. Библиотека для 20х4 та же самая, что для 16х2 и прочих. Просто там диапазон адресов другой. Читайте даташит на дисплей. Я лично пользуюсь своей библиотекой.

lcd_hd44780.c

Можно хотя бы одну рабочую сылку библиотеки для LCD(HD44780) 20x4 с 8 bit подключением 

Ссылка на комментарий
Поделиться на другие сайты

13 часа назад, demiurg1978 сказал:

Почему именно 8 бит? 4-битная шина экономичнее по выводам. Я только такой вариант подключения и использую.

Мне экономия места не важна, меня больше интересует скорость вывода информации на дисплей

на atmega 16 там мне места вполне хватает

Ссылка на комментарий
Поделиться на другие сайты

21 час назад, VK-32 сказал:

Можно хотя бы одну рабочую сылку библиотеки для LCD(HD44780) 20x4 с 8 bit подключением

я пользуюсь своей

https://ru.files.fm/u/a2sfccuf#/list/

папка avr_menu

Ссылка на комментарий
Поделиться на другие сайты

В 24.10.2017 в 22:39, technik-1017 сказал:

я пользуюсь своей

https://ru.files.fm/u/a2sfccuf#/list/

папка avr_menu

Большое вам спасибо за библиотеку

А можно как нибудь более подробней    " для LCD(HD44780) 20x4 с 8 bit "

Так как я начинающий и мне не хватает моей оперативки что бы понять как ее настроить.

Заранее спасибо за помощь.

 

Ссылка на комментарий
Поделиться на другие сайты

В 30.10.2017 в 23:54, VK-32 сказал:

А можно как нибудь более подробней    " для LCD(HD44780) 20x4 с 8 bit "

в файле avr_menu1\chip\source\device\lcd\hd44780.h

//#define LCD_MODE_4                                        // 4-битный режим работы
#define LCD_MODE_8                                        // 8-битный режим работы

в файле avr_menu1\chip\source\device\lcd\lcd_hd44780.h

//--- Установка типа индикатора ------------------------------------------------
//#define LCD0801
//#define LCD0802
//#define LCD1201
//#define LCD1202
//#define LCD1601
//#define LCD1602
//#define LCD1604
//#define LCD2002
#define LCD2004
//#define LCD3202
//#define LCD4002

и должно работать, проверьте в протеусе

Ссылка на комментарий
Поделиться на другие сайты

В 24.10.2017 в 20:53, VK-32 сказал:

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

Какой смысл выводить её с мегаскоростью ? Или Вы - суперчеловек, у которого глаз видит 1000000 кадров в секунду и которому важна каждая микросекунда ?
В любом случае, если даже Вы - суперчеловек с реактивной скоростью, дисплей просто напросто не успеет так быстро отобразить данные.

PS: "Большая скорость вывода" - надуманное и глупое требование к своему устройству.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

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

но если портов хватает, то, конешно, нет смысла применять 4-битный вывод.

Алекс, ты не прав.

общее время вывода на дисплей может оказаться критическим.

20х4 - это 80 символов. плюс, как минимум, 4 команды позиционирования на каждую строку. итого, минимум 84байта.

возьмем, грубо, с учетом необходимой паузы, по 40 мкс на байт. итого 3360 мкс минимум. это уже микросекундами и не пахнет...

а если вывод делается по I2C, то на каждый записываемый байт нужно отправить 4 байта в интерфейс. и даже на тактовой 400 кГц время заполнения всего дисплея становится "катастрофически" большим.

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

Cлона даже большим ртом можно съесть только кусочками. Это я к тому, если полное обновление занимает много времени, дробите процесс. Посимвольно (каждые 1 мс), по 5 или 10 символов за определенное время. Скажем, каждые 10 мс.

Изменено пользователем demiurg1978
Ссылка на комментарий
Поделиться на другие сайты

ага, чтобы потом видеть на дисплее медленное посимвольное обновление индикации...

не умное предложение...

как говорил Остап Бендер, частями меня не устраивает, мне нужно всё и сразу...

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

45 минут назад, Starichok сказал:

ага, чтобы потом видеть на дисплее медленное посимвольное обновление индикации...

не умное предложение...

Все зависит от проекта. Требований к быстродействию. Характера выводимой информации. Статика, динамика.

Полное обновление дисплея при посимвольном выводе и 20х4 занимает 84 мс. Если пачками выводить, выйдет быстрее. 

Так как дисплей медленное устройство, тормозить выполнение прграммы на время вывода информации настолько же неумное решение, как использование delay. 

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, demiurg1978 сказал:

Полное обновление дисплея при посимвольном выводе и 20х4 занимает 84 мс

а чего так долго?

как я уже говорил, примерно 40 мкс на байт (символ). итого примерно 40 * 84 = 3360 мкс = 3,36 мс.

у меня торможения нет, даже при применении I2C.

правда, и дисплей у меня всего 16х2.

а программный цикл у меня 10 мс. весь вывод занимает легко меньше 10 мс.

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

Только что, Starichok сказал:

дисплей у меня всего 16х2.

а программный цикл у меня 10 мс. весь вывод занимает легко меньше 10 мс

У меня аналогично - вывод на ЖКИ вообще не заметен внутри 10мс цикла. Но моя либа для работы не ждет впустую, а работает по готовности ЖКИ - пулей летает!

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Starichok сказал:

а чего так долго?

Вы, наверное, неправильно меня поняли. У меня не вывод на дисплей занимает 84 мс, а полное обновление экрана занимает 84 мс. Поясняю. Если мы будем выводить сразу 20x4 символов, это займет очень много времени. И чтобы как delay вывод не занимал процессорное время, я сделал следующим образом. Отвел в ОЗУ буфер размером Max_X * Max_Y. Специальная функция посимвольно, раз в 1 мс выводит по символу. Если новая строка, сначала отправка адреса. Итого: (20x4) + 4 адреса строк = 84 мс.

Вывели адрес или символ, пошли заниматься другими делами.

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

Ссылка на комментарий
Поделиться на другие сайты

7 часов назад, Starichok сказал:

итого 3360 мкс минимум. это уже микросекундами и не пахнет...

время заполнения всего дисплея становится "катастрофически" большим

И что ? В чём я не прав ?
В том, что нет смысла выводить информацию на дисплей с частотой в 300 Кгц (~3000 мкс.) ? Вы - суперчеловек ? И у Вас, плюс ко всему этому, супердисплей ?
Бред не несите.

PS: Как показала практика, оптимальная частота обновления экрана (вывод на него буфера) - 10 Гц (раз в 100 мс). Чаще - просто нет необходимости.

6 часов назад, Starichok сказал:

не умное предложение...

Предложение, кстати, отличное.
Если Вы в своей программе не можете реализовать нормальный алгоритм, позволяющий БЕЗБОЛЕЗНЕННО для всего остального выводить "в фоне" данные на дисплей - Вам ещё рано говорить о глупых предложениях. Также как и о правоте, оставляющих здесь свои сообщения. Подобные высказывания должны быть твёрдыми и чётко обоснованными. И аргументы, типа "У меня в программе раз в 10 миллисекунд, линейно обслуживается куча всего, и если притормозить вывод на дисплей - начинает тормозить вся программа" - не аргумент. Не считайте свой код единственно-верным решением из всех возможных.

Ссылка на комментарий
Поделиться на другие сайты

У меня подход - дробление ВСЕХ долгих процессов. Это сделано из-за привязки к системному тику. Никаких долгих циклов. Итерация основного цикла должна с запасом упаковаться в системный тик. В основном это 1 мс.

Если у меня такой цикл:

   while (1)
   {
      __watchdog_reset ();

      proc_device ();

      kbd_drv ();
      info_service ();
      proc_outputs ();

      Process_Events ();
   }

То он должен выполниться меньше чем за 1 мс. Что бы не было в этих функциях.

proc_device - Алгоритм устройства. В том числе АЦП измерения.

info_service - вывод информации в буфер.

proc_outputs - расширение ввода-вывода. В том числе вывод на дисплей из семисегментных индикаторов.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, demiurg1978 сказал:

Вы, наверное, неправильно меня поняли.
И чтобы как delay вывод не занимал процессорное время, я сделал следующим образом. Отвел в ОЗУ буфер размером Max_X * Max_Y. Специальная функция посимвольно, раз в 1 мс выводит по символу. Если новая строка, сначала отправка адреса. Итого: (20x4) + 4 адреса строк = 84 мс.

Вывели адрес или символ, пошли заниматься другими делами.

Да не понять ещё таких алгоритмов некоторым. Просто в голове уложиться они не могут. Научатся что-то там кодить, выведут на дисплей строчку и бегом на форум - советы раздавать, да рассуждать, кто прав, а кто нет, глупый/неглупый совет, ... :)
Я тоже так делаю. Буфер (причём ещё со стеком), который примерно с частотой в 10 Гц выводится на дисплей, посимвольно. Данные обновляем в самом буфере. Нифига ничего не тормозит, при том, что задержки в дисплейных таймаутах немаленькие. И даже если будет символ выводиться целую миллисекунду, мне будет пофиг. И ничего у меня тормозить не будет.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Alex сказал:

с частотой в 300 Кгц (~3000 мкс.)

бред не несите.

300 кГц - это 3,3 мкс.

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...