реклама на сайте
подробности

 
 
> Помогите разобраться с символьным ЖКИ, HD44780
Pavel V.
сообщение Feb 20 2007, 10:49
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 3-06-06
Пользователь №: 17 742



Уже второй день пытаюсь оживить символьный ЖКИ под IAR. До этого момента использовал CodeVision и встроенную в него библиотеку, которая всегда работала как часы.

С IAR пришлось разбираться второпях, до этого с ним дела не имел.

Нашел кучу исходников библиотек для работы с HD44780, но толком ни одна так и не заработала. Пришлось разбираться самому, в результате чего была создана некая компиляция из кусков разных библиотек.

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

С железом это никак не может быть связано - с CodeVision все работало хорошо.

Много игрался с задержками, думал из-за них, но они как будто не влияют на этот глюк.

К сообщению прицепляю код, помогите, пожалуйста, разобраться! Или, быть может, у кого-то есть готовая библиотека для работы с этими ЖКИ?

Контроллер - ATmega48, частота 1 МГц.

Сообщение отредактировал Pavel V. - Feb 20 2007, 10:52
Прикрепленные файлы
Прикрепленный файл  main.txt ( 303 байт ) Кол-во скачиваний: 105
Прикрепленный файл  lcd.txt ( 4.59 килобайт ) Кол-во скачиваний: 162
 


--------------------
Good News Everyone!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alux
сообщение Jun 11 2008, 16:24
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Нашел классный исходник! Классный - от слова класс. wink.gif
Правда, написан на C++ под GCC. Но при желании, можна подправить под IAR. Сам не пробовал, пока не было необходимости. Но обязательно использую этот исходник в следующем проекте.
Прикрепленные файлы
Прикрепленный файл  LCD_HD44780_C___library.zip ( 19.36 килобайт ) Кол-во скачиваний: 59
 
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 11 2008, 22:35
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(alux @ Jun 11 2008, 19:24) *
Но обязательно использую этот исходник в следующем проекте.
Согласно комментариям в шапках каждого файла этот исходник распространяется под лицензией GPL. Вы готовы раскрыть исходные коды своего следующего проекта?

Кода немного, имеет смысл посмотреть как написан этот исходник (для осваивающих плюсы образец неплохой) и написать самому. По коду (смотрел бегло):
- вместо передачи в LCD::send() признака команда/данные как параметра лучше написать две функции. Причем одна из них может сбрасывать RS и вызывать вторую, а вторая в конце выставлять RS. Таким образом после любой операции с дисплеем RS в единице и при вызове второй функции его принудительно выставлять не нужно. Хороший компилятор может сгенерить из этих двух функций одну с двумя точками входа.
- при загрузке знакосинтезатора нет смысла передавать 8 байтов параметрами, эффективнее передать указатель на массив. Финт: поскольку 3 старших бита не выводятся, можно в старший из них записать единичку, девятым байтом в массив дописать ноль и таким образом превратить массив в С-строку. Потом можно заметить, что загружать можно все символы сразу одной командой (чаще всего требуется один раз при старте загрузить нужное количество символов и в процессе работы они не перегружаются). Потом становится видно, что после посылки команды установки адреса CGRAM дальнейшая загрузка очень похожа на вывод строки. Таким образом вся загрузка вырождается в посылку команды установки CGRAM и вызов функции вывода строки.
- функции, которые вызываются только один раз (конструктор, например) можно сделать встроенными.
- константы, заданные через #define (команды дисплея) можно перенести внутрь класса как static const члены или enum (что логичнее).

В общем критиковать всегда легко smile.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 03:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01354 секунд с 7
ELECTRONIX ©2004-2016