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

 
 
 
Reply to this topicStart new topic
POLL
сообщение Dec 15 2011, 12:33
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 300
Регистрация: 11-06-11
Пользователь №: 65 640



Добрый день!

Подскажите, пожалуйста, простой пример кода на Си по работе с текстовым экраном 16*2, в 4bit режиме.

Соединения:
DB4 -> PORTB0
DB5 -> PORTB1
DB6 -> PORTB2
DB7 -> PORTB3

RS -> PORTB4
R/W -> PORTB5

Enable -> PORTD7


Перерыл в сети кучу примеров - ну все с ошибками в коде, у кого #define F_CPU не прописан, у кого синтаксические ошибки...
Делаю все в AVR Studio. Собственно, для OLED индикатора WEH001602 пишу инициализацию, пока ни в какую, то вроде зафурычит, а потом хоп и погаснет или выведет не на той строке или ни в том месте или закарючки пойдут...

Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 15 2011, 14:16
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



В CvAVR есть встроенная библиотека. Работает. Пользовался лично.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Dec 15 2011, 17:22
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Вот тут http://www.cqham.ru/forum/showthread.php?t=9688 лежит проект, в котором я победил проблемы WEH02002. Файл HD44780.C
НА мой взгляд, проблема вот в чём:
При подключени по 4-м битам надо обеспечить корректное переключение в 4 бита и после включения питания (легко) и после ресета процессора (делается трюком из трёх команд, которые переводят в 8 бит, потом обратно в 4).
Так вот - этот трюк с WEH* (с его контроллером) не проходит, так как в ранее игнорировавшихся битах младшего байта команды теперь другая информация. Как я с этим разобрался - смотрите в исходник. Коротко - по 4-х битному интерфейсу устанавливаю позицию курсора, а потом считываю её (ненулевая и с разными старшим/младшим нибблами). Если считалось - индикатор в 4-х битном режиме и ничего делать не надо. Если не считалось - инициализируем.
Правда, есть ещё состояния, когда процессор сбросили в момент чтения первого из двух нибблов статуса - но это я не проверял (да и иделаьнее решить ключём в питании индикатора).
Или перейти на SPI интерфейс - с WEH это можно сделать.
http://www.cqham.ru/forum/showthread.php?t=18954

Сообщение отредактировал Genadi Zawidowski - Dec 15 2011, 17:32
Go to the top of the page
 
+Quote Post
POLL
сообщение Dec 15 2011, 19:50
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 300
Регистрация: 11-06-11
Пользователь №: 65 640



Цитата(Genadi Zawidowski @ Dec 15 2011, 21:22) *
Вот тут http://www.cqham.ru/forum/showthread.php?t=9688 лежит проект, в котором я победил проблемы WEH02002. Файл HD44780.C
НА мой взгляд, проблема вот в чём...



У этих дисплеев на контроллере WS0010 немного другая инициализация в 4битном режиме.
Цитата
Repeated procedures for an 4-bit bus interface
Noise causing transfer mismatch between the four upper and lower bits can be corrected by a reset triggered by consecutively writing a ”0000” instruction five times. The next transfer starts from the lower four bits and then first instruction ”Function set” can be executed normally.
Please insert the synchronization function in the head of procedures. The repeated procedures are show as follows


Т.е. после включения питания нужно выждать 500ms и затем послать 5 раз ”0000” и уже затем делать ”Function Set” ...
Об этом написано в самом конце даташита на WS0010

Сообщение отредактировал POLL - Dec 15 2011, 19:52
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Dec 15 2011, 20:30
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



А даташит я не дочитал до конца... не подумал, что после уже одного приведённого примера инициализации дисплея (тоже, начинающегося с pwer-on) будет ещё один... альтернативный.
Что делать, если дисплей уже включался, а процессор пересбросился?
команда 0x00... интересно, что будет, если дисплей, находящийся в 4 битном режиме получает команду всю из нулей? Вроде недокументировано...
POOL, Вам помог этот последний пункт даташита?

Сообщение отредактировал Genadi Zawidowski - Dec 15 2011, 20:32
Go to the top of the page
 
+Quote Post
POLL
сообщение Dec 16 2011, 08:11
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 300
Регистрация: 11-06-11
Пользователь №: 65 640



Цитата(Genadi Zawidowski @ Dec 16 2011, 00:30) *
POOL, Вам помог этот последний пункт даташита?


Пока не могу сказать, я еще не написал программку.
Но могу сказать, что по быстрому в либе LiquidCrystal правил начало инициализации c 0x03 на 0x00 - дисплей включился и заработал.
Другое дело что со временем проявлялись различные глюки. Вот и пробую с нуля написать примитивный пример без наворотов и посмотреть что выйдет.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Dec 16 2011, 14:10
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Мне хотелось универсальный код получить, чтобы и классические HD44780 работали и на OLED контроллере. Как мне кажется, получилось.
Как будете тестировать, проверьте пожалуйста работоспособность при сбросе процессора без выключения питания индикатора.
Вы просто так уверенно посоветовли, я подумал что уже проверили. И конечно, не сильно надеюсь, но если проверите - с перезапуском после незавершённых циклов обмена (один полубайт считан и один полубайт передан).
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Dec 16 2011, 15:21
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Он у Вас случаем не из этих партий

http://electronix.ru/forum/index.php?showt...592&hl=OLED


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
bolden
сообщение Dec 18 2011, 14:59
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 26-12-10
Из: Санкт-Петербург
Пользователь №: 61 884



Взято отсюда : http://www.gaw.ru/html.cgi/txt/lcd/chips/hd44780/start.htm

"Несколько слов о процессе инициализации ЖКИ-модуля. Производитель контроллера рекомендует выполнять следующую последовательность действий для инициализации. Выдержать паузу не менее 15 мс между установлением рабочего напряжения питания (> 4,5 В) и выполнением каких-либо операций с контроллером. Первой операцией выполнить команду, выбирающую разрядность шины (это должна быть команда $30 независимо от того, какой разрядности интерфейс вы собираетесь использовать в дальнейшем), причем перед выполнением этой операции не проверять значение флага BF. Далее опять выдержать паузу не менее 4,1 мс и повторить команду выбора разрядности шины, причем перед подачей команды вновь не производить проверку флага BF. Следующим шагом необходимо вновь выдержать паузу, на этот раз 100 мкс, и в третий раз повторить команду установления разрядности шины, вновь без проверки BF. Эти три операции являются инициализирующими и призваны вывести контроллер в исходный режим работы (то есть перевести в режим работы с 8-ми разрядной шиной) из любого состояния. Следом за ними нормальным порядком (без выдерживания пауз, но с проверкой флага BF) выполняется инициализация режимов работы с выдачей инициализирующей последовательности, аналогичной указанной в таблице 7 (содержащей в том числе команду выбора необходимой разрядности шины).

Необходимо помнить, что когда Вы объявляете режим работы с 4-х разрядной шиной, то есть выдаете команду $20, то делаете это обычно из 8-ми разрядного режима, который устанавливается автоматически после подачи напряжения питания, а значит вы не сможете адекватно объявить необходимое значение флагов N и F, располагающихся в младшей тетраде команды установки разрядности шины. Поэтому команду необходимо повторить в уже установившемся 4-х разрядном режиме путем последовательной передачи двух тетрад, то есть для 4-х разрядного режима образом"

Алгоритм спользовал как для 16x4 так и для 20x4, проблем не было


Чуть не забыл иногда были глюки, но помогла установка небольших задержек между переключением RW, и E сигнала и DATA сигналов.
Go to the top of the page
 
+Quote Post
POLL
сообщение Dec 18 2011, 21:46
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 300
Регистрация: 11-06-11
Пользователь №: 65 640



Цитата(bolden @ Dec 18 2011, 18:59) *


Ок, спасибо за ссылку, почитаю, глядишь чего не упускаю из виду.
Go to the top of the page
 
+Quote Post
SeregaB
сообщение Jun 27 2012, 05:44
Сообщение #11


Участник
*

Группа: Свой
Сообщений: 55
Регистрация: 6-04-06
Из: Москва, Зеленоград
Пользователь №: 15 863



Цитата(Genadi Zawidowski @ Dec 16 2011, 18:10) *
Как будете тестировать, проверьте пожалуйста работоспособность при сбросе процессора без выключения питания индикатора.
Вы просто так уверенно посоветовли, я подумал что уже проверили. И конечно, не сильно надеюсь, но если проверите - с перезапуском после незавершённых циклов обмена (один полубайт считан и один полубайт передан).

Проверил инициализацию пятью нулевыми командами впереди (индикатор WEH000802, 4-х бит режим).
При сбросе без выключения питания - работает нормально.
Перезапуск после незавершенных циклов обмена - работает нормально.
Небольшой отчетик - здесь.

Цитата(bolden @ Dec 18 2011, 18:59) *
Взято отсюда : http://www.gaw.ru/html.cgi/txt/lcd/chips/hd44780/start.htm

Алгоритм спользовал как для 16x4 так и для 20x4, проблем не было


Абсолютно бесполезная ссылка для контроллера WS0010 в 4-х битном режиме (индикаторы WEH00xxxx).
Правильно делать как написал POLL здесь.
Go to the top of the page
 
+Quote Post

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

 


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


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