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

LCD 1602


filter91

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

Добрый день, Уважаемые.

Прошу Вас помочь разобраться в ситуации, а именно:

Подключил китайский LCD 1602 (HD44780) к Atmega16. Дисплей всё исправно отображает, но после нескольких часов работы он начинает отображать, простите меня, кракозябры, иероглифы и т.д. Проблема решается перезагрузкой устройства. До вчерашнего дня думал, что это дисплей неисправный.

Собрал совершенно другое устройство на Atmega8 с таким же дисплеем. Всё работает, но опять появилась ситуация как в случае выше - некорректное отображение информации через некоторый период времени. Решается так же перезагрузкой. Хочу добавить, что оба устройства продолжают выполнять свои функции, но корректное отображение пропадает. В проектах использовал библиотеку во вложении. Может быть в неё проблема.

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

lcd_lib.c

lcd_lib.h

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

Сталкивался с подобным. Дисплей ловит посторонние помехи, если шлейф длинный. Устранение - подключать  проводами минимальной длины, и(или) желательно чередовать информационные проводники в шлейфе  земляными.
И ещё проверить, сколько жрёт подсветка. Китайцы любят сделать поярче, аж кристаллы начинают чернеть (обратимо) от перегрева.

"Я не знаю какой там коэффициент, я просто паять умею. "

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

Тоже сталкивался с подобным и согласен с @Dr. West. Решением было обмотать шлейф фольгой (заизолировав ее, разумеется).

Но более правильное решение - время от времени обновлять содержимое экрана.

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

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

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

Это проблема всех дисплеев на этом контроллере. Причина в помехах. Защититься от этого никак. Решения проблемы: создание буфера в ОЗУ, в который мы выводим информацию. И через определенные промежутки времени посимвольно выводить информацию на дисплей из буфера.

Алгоритм модуля дисплея: инициализация дисплея, переменных. Настройка программного таймера. Скажем на 1 мс. Как только время вышло, если новая строка отправка адреса строки. Затем вывод строки. Все это каждые 1 мс. Полное обновление дисплея происходит за (16 * 2) + 2 адреса строк = 34 мс.

Вариант второй. Каждые от 100 мс до 1 секунды выводить нужную информацию на дисплей. Но это тормозит МК на все время вывода информации.

Поэтому решение выбирается из требований к проекту. Реакции системы на события.

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

  • 3 недели спустя...

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

В Monday, October 02, 2017 в 06:00, Dr. West сказал:

И ещё проверить, сколько жрёт подсветка. Китайцы любят сделать поярче, аж кристаллы начинают чернеть (обратимо) от перегрева.

...и если проблема в подсветке, то питать ее не нпрямую от шины питания, а организовать для нее ШИМ - заодно, в устройстве появится функция регулировки яркости подсветки.

 

Ну, а определить, в подсветке ли дело - несложно: нужно погонять устройство без нее, и если глюки прекратятся, то дело в ней.

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

  • 2 года спустя...

@filter91

За библиотеку спасибо! Может подскажете, в чем проблема? Иногда при компиляции вылетает предупреждение

Severity    Code    Description    Project    File    Line
Warning        #warning "F_CPU not defined for <util/delay.h>" [-Wcpp]    DADA_ZHENJA    c:\program files (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h    92
ссылается на строку в delay.h

# warning "F_CPU not defined for <util/delay.h>"

В майне у меня F_CPU прописано 

#define F_CPU 8000000UL

 

Мир не без добрых людей!

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

26 минут назад, gogaze сказал:

В майне у меня F_CPU прописано 

Никогда не следует прописывать эту константу где-либо в файле исходников!

Раз и навсегда запомните: эта константа должна прописываться только в параметрах проекта (если это что-то типа студии) или в виде параметра компилятора -DF_CPU в makefile - и нигде более!!!

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

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

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

параметрах проекта (если это что-то типа студии)

Ну так я про это и говорю. Atmel Studio 7.0 Основной файл main.c  там

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "lcd_lib.h"

И в файле библиотеки lcd_lib.с

#include "lcd_lib.h"
#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>

 

Мир не без добрых людей!

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

6 минут назад, gogaze сказал:

Основной файл main.c

Это основной исходник, а внутри исходников этой константы БЫТЬ НЕ ДОЛЖНО! Не важно, основной исходник, или нет - только в свойствах проекта или в makefile - больше нигде!

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

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

28 минут назад, ARV сказал:

Это основной исходник, а внутри исходников этой константы БЫТЬ НЕ ДОЛЖНО! Не важно, основной исходник, или нет - только в свойствах проекта или в makefile - больше нигде!

В свойствах проекта только микроконтроллер, а частоту мы указываем файле main.c

 

2020-04-27_014529.jpg

Попробовал дописать #define F_CPU 8000000UL в файл библиотеки  lcd_lib.с - сработало! Проблема ушла!

Мир не без добрых людей!

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

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

частоту мы указываем файле main.c

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

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

Иногда при компиляции вылетает предупреждение

Severity    Code    Description    Project    File    Line
Warning        #warning "F_CPU not defined for <util/delay.h>" [-Wcpp]    DADA_ZHENJA    c:\program files (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h    92
ссылается на строку в delay.h

Как от этого изабвиться - я вам сказал. Более того: мой совет гарантирует, что никогда проблем с правильной установкой частоты не будет вообще в любых случаях! 

1 минуту назад, gogaze сказал:

В свойствах проекта только микроконтроллер

Это проблема не моя, а студии - ищите, где можно задать дополнительные опции компилятора для всего проекта, и там вводите -DF_CPU=8000000UL, а из всех файлов исходников убирайте.

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

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

44 минуты назад, ARV сказал:

Это проблема не моя, а студии - ищите, где можно задать дополнительные опции компилятора для всего проекта, и там вводите -DF_CPU=8000000UL, а из всех файлов исходников убирайте.

Зачем что-то искать в настройках студии и лезть в настройки компилятора? Все гораздо проще! Строкой "#define F_CPU 1000000UL" мы объявляем константу, которая говорит компилятору что частота ЦПУ нашего микроконтроллера равна 1000000Гц (1МГц). Данное объявление необходимо для правильной работы некоторых функций, в нашей программе это функция "_delay_ms".

Ну посмотрите хотя бы здесь https://ph0en1x.net/80-simple-program-for-avr-microcontroller-c-language.html

или здесь https://lampcore.ru/справочник/как-написать-код-для-avr-программирован/

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

Мир не без добрых людей!

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

8 минут назад, gogaze сказал:

Ну посмотрите хотя бы здесь

Я никуда смотреть не буду: это вы спрашивали совета, а не я. В отличие от вас я ЗНАЮ, что и как НАДО делать. Но вы можете делать по-своему, разве я вам запрещаю? Уверен, у вас будет много сюрпризов в будущем...

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

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

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

А чего тут не понятного-то? Если в свойствах проекта задать указанную константу, то при компиляции всех исходников она будет существовать, т.е. нужды определять её внутри исходника, нет никакого. 

Более того, определение этой константы внури исходника вредно по причине того, что каждый исходник отдельно может быть выдран из разных проектов, соответственно, может содержать разные значения этой константы. А используется она не только для задержек, но и для расчетов скорости USART, например, для таймеров, для TWI и много чего еще вероятно...

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

И это логично: частота МК - это характеристика всего проекта в целом, а не отдельной его части, где используются какие-то функции...

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

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

Мне простительно. Я когда перешёл на си, начал в AVR-Studio в связке с AVR Toolchain. Позже меня взбесил выхлоп этого компилятора. Вдобавок чересжопная работа с flash и EEPROM. Попробовал IAR, результатом остался доволен, с тех проекты пишу в нем. Так вот. В студии помню предупреждение при компиляции, но плюнул на него. Тем более что перешёл на иар. В иар нет конфликтов. Возможно, где то в настройках есть задание частоты, но у меня все времянки сходятся. А теперь самое главное. В большинстве случаев у меня сторожевой таймер на 16 мс. А в delay нет сброса сторожевого. Поэтому, я использую самописные задержки со сбросом. Но это редко. Так как использую программные таймеры.

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

@demiurg1978 , вы мне напоминаете персонажа из анекдота... помните: "а мне все равно - я в танке"? Я вам говорю о том, как делать правильно, а вы мне говорите, что у вас не используются _delay_ms. И чо? Не путайте теплое с мягким.

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

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

Лично я не знал, что конфликт задания частоты из за настроек. Вы объяснили. Не только мне. Всё. Закрыли тему. Я уточнил, что delay не использую и почему.

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

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

Лично я не знал, что конфликт задания частоты из за настроек

Я же уже написал. Помимо того, что #include <util/delay.h> была в файле main.c, так еще она  была в библиотеке LCD -  lcd_lib.с . Стоило мне дописать #define F_CPU 8000000UL  в  lcd_lib.с - проблема исчезла. Механизм непонятен, но сработало.  

4 часа назад, gogaze сказал:

Строкой "#define F_CPU 1000000UL" мы объявляем константу, которая говорит компилятору что частота ЦПУ нашего микроконтроллера равна 1000000Гц (1МГц). Данное объявление необходимо для правильной работы некоторых функций, в нашей программе это функция "_delay_ms".

А это я не сам придумал. Это из пособия для начинающих.

Мир не без добрых людей!

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

4 часа назад, ARV сказал:

В отличие от вас я ЗНАЮ, что и как НАДО делать.

Интересно, кроме Вас самих еще кто-нибудь так считает? Вообще, вот это зазнайство и самохвальство просто глаза режет!

Мир не без добрых людей!

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

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

Механизм непонятен, но сработало. 

Лично я вам механизм объяснил: надо делать правильно, только и всего. Представьте себе, что в разных файлах окажутся разные значения F_CPU, правда, будет смешно: ошибок нет, варнингов нет, а ничего не работает...

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

Это из пособия для начинающих.

Продолжайте верить надписям на заборах.

5 часов назад, gogaze сказал:

Вообще, вот это зазнайство и самохвальство просто глаза режет!

Ваша упертость "обосрусь не покорюсь" тоже режет глаз. :)

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

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

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

Продолжайте верить надписям на заборах.

Иногда надписи на заборах полезнее рекомендаций типа Ваших. И не надо считать себя умнее тех, кто делает уроки. А 

 

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

"обосрусь не покорюсь"

скорее к Вам относится.

Мир не без добрых людей!

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

25 минут назад, gogaze сказал:

Иногда надписи на заборах полезнее рекомендаций типа Ваших.

Это вряд ли. Хотя для вас - может быть, может быть...

26 минут назад, gogaze сказал:

И не надо считать себя умнее тех, кто делает уроки

Это априори так: учитель умнее ученика. Исключения редки, и данный случай точно не исключение.

Вместо споров лучше бы подумали над моими словами

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

в разных файлах окажутся разные значения F_CPU, правда, будет смешно: ошибок нет, варнингов нет, а ничего не работает...

 

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

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

4 часа назад, ARV сказал:

Вместо споров лучше бы подумали над моими словами

А где Вы спор увидели!? Я какие-то аргументы привожу, ссылки в качестве доказательства. А у Вас только я ЗНАЮ, что и как НАДО делать. В общем, я проблему решил вопреки всем Вашим УМНЫМ советам. В продолжении бесполезного словоблудия не вижу смысла.

Мир не без добрых людей!

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

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

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

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

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

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

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

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

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

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

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