Jump to content
filter91

LCD 1602

Recommended Posts

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

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

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

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

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

lcd_lib.c

lcd_lib.h

Share this post


Link to post
Share on other sites

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


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

Share this post


Link to post
Share on other sites

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

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


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

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

Share this post


Link to post
Share on other sites

Импульсный источник питания - расчет за 10 минут в eDesignSuite

Как ориентироваться в огромном количестве существующих вариантов, чтобы выбрать наиболее подходящий для конкретного случая. «Ручной» перебор всех вариантов может оказаться весьма трудоемким процессом, а полученный результат – далеко не оптимальным. Специализированное программное обеспечение, позволяет уменьшить количество рутинных операций при проектировании.

Подробнее

                     

Как упростить выбор ИП для промышленного применения?

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

Подробнее

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

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

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

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

Share this post


Link to post
Share on other sites
                     

Преимущества новых высоковольтных SOI-драйверов Infineon

При производстве драйверов силовых транзисторов компания Infineon использует различные технологии: JI, SOI, CT. Драйверы, выполненные с применением технологии SOI, имеют целый ряд преимуществ по сравнению с классическими JI-драйверами. В статье рассматриваются эти преимущества на примере новых семейств драйверов 650 В 2ED210x и 2ED218x.

Подробнее

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

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

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

 

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

Share this post


Link to post
Share on other sites

@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

 

Share this post


Link to post
Share on other sites
26 минут назад, gogaze сказал:

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

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

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


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

Share this post


Link to post
Share on other sites
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>

 

Share this post


Link to post
Share on other sites
6 минут назад, gogaze сказал:

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

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


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

Share this post


Link to post
Share on other sites
28 минут назад, ARV сказал:

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

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

 

2020-04-27_014529.jpg

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

Share this post


Link to post
Share on other sites
Только что, 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, а из всех файлов исходников убирайте.


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

Share this post


Link to post
Share on other sites
Posted (edited)
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-программирован/

Edited by gogaze
Добавление информации

Share this post


Link to post
Share on other sites
Posted (edited)
8 минут назад, gogaze сказал:

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

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

Edited by ARV

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

Share this post


Link to post
Share on other sites

ARV, вы меня извините, но если вы что то твёрдо утверждаете, то объясните. Например, я впервые слышу. И мне интересно.

Share this post


Link to post
Share on other sites

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

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

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

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


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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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


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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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".

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

Share this post


Link to post
Share on other sites
4 часа назад, ARV сказал:

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

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

Share this post


Link to post
Share on other sites
6 часов назад, gogaze сказал:

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

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

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

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

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

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

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

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


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

Share this post


Link to post
Share on other sites
1 час назад, ARV сказал:

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

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

 

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

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

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

Share this post


Link to post
Share on other sites
25 минут назад, gogaze сказал:

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

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

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

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

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

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

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

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

 


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

Share this post


Link to post
Share on other sites
4 часа назад, ARV сказал:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Поясню, что описал ”сектанскую” схему отжима имущества.    Вы знаете, что согласно конституции СССР гражданами СССР являются граждане союзных республик в составе СССР? Изначально человек является гражданином союзной республики, а гражданином СССР уже по факту нахождения республики в составе союза.  Знаете, что кроме конституции СССР есть конституция РСФСР?
    • Всем привет. Прошу помочь определить название разъёма, дабы найти его и купить. Разъем резьбовой, внутри 3 пина и центрующий "бугорок". Используется для подключения кнопки к лазерному прицелу от ЗенитКо (производитель молчит как партизан). Внешний диаметр трубки - 4,87мм (может немного врать штанген, но вряд ли размерность будет сильно отличаться). Вставляется все это дело в разъём с внешним диаметром 6,08мм с 4-мя дырками (1 не используется). Перерыл весь интернет, но по запросу "3 pin screw connector" находятся только большие разъемы вроде тех что ставят на металлоискатели.
    • Наверное, не асм, а листинг кода. Стать лучше должен машинный код, а не "писанина" на той или другой платформе.
    • @Гость дмитрий , да. Сфоткай, плиз, все платы (желательно с хорошим разрешением)
    • Стало ещё грустней... гость, ничего непонятно СОВСЕМ.
    • Пол витка можно намотать на Ш-эшке, но магнитный поток все равно замкнется до целого.   Чет дофига, на моем экспериментальном торе на 2 порядка меньше. Ну и можно оценить надёжность 0,0000012*200*200/2=0,024J,  0,024*25000=600W , это мощность рассеиваемая в эвеленче ключей, помимо статики
    • Народ, то есть это ни кого не смущает да? Или что я не понимаю? Начал рисовать плату а тут такая хрень, номера хаотически от болды? и у всех работает?
×
×
  • Create New...