6 сообщений в этой теме

filter91    0

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

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

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

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

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

lcd_lib.c

lcd_lib.h

Поделиться сообщением


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

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Dr. West    1 606

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    248

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
demiurg1978    19

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Prozac    6
В Monday, October 02, 2017 в 06:00, Dr. West сказал:

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

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

 

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

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас