Кирилица на дисплее WEH000802
|
Володимир |
Дата: Пн, 02.12.2013, 22:51 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
92
Замечания:
±
На сайте с 22.04.2010
Статус:
Offline
|
Подскажите как включить кириллицу на дисплее WEH000802, точнее сказать как командами протона заставить дисплей использовать вторую страницу набора символов. Даташит http://www.datasheet4u.com/datashe....df.html на этот дисплей пишет что в дисплее зашито 4-ре набора символов, каждый из которих находится на своей странице, по умолчанию используется нулевая, а кириллица находится во второй.
|
|
|
|
|
anatol |
Дата: Пн, 02.12.2013, 23:44 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
624
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
На дисплей надо выдать команду при установках. Sets interface data length (DL). Sets number of display lines (N). Sets Character Font (F). Sets Font Table (FT) Это там же где идет очистка экрана и т.д. Подсказать напрямую нет желания. Больше пользы будет если разберетесь. Да и кусок кода по инициализации дисплея и режиму работы привели бы.
|
|
|
|
|
Володимир |
Дата: Вт, 03.12.2013, 20:49 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
92
Замечания:
±
На сайте с 22.04.2010
Статус:
Offline
|
Цитата anatol (  ) Это там же где идет очистка экрана и т.д.Подсказать напрямую нет желания. Больше пользы будет если разберетесь. Да и кусок кода по инициализации дисплея и режиму работы привели бы. Инициализация.
Declare LCD_Type = 0 Declare LCD_DTPin PORTA.0 Declare LCD_RSPin PORTA.5 Declare LCD_ENPin PORTA.4 Declare LCD_Interface 4 Declare LCD_Lines 2 Declare LCD_CommandUs 2000 Declare LCD_DataUs 50
DelayMS 600
далее с помощю комады Print вывожу данные на экран.
Вопрос в том как командами протона вставить команду Sets Font Table (FT)
Прибор прекрасно работает на дисплее WH0802A, друг у себя хочет поставить олед дисплей, а результат такой как на фотке.
|
|
|
|
|
anatol |
Дата: Вт, 03.12.2013, 22:36 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
624
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
Определяет ТИП подключенного дисплея Declare LCD_Type = 0 или ALPHA равно стандартный алфавитно-цифровой ЖКИ с контроллером Hitachi 44780 Код Declare LCD_DTPin PORTA.0 Declare LCD_RSPin PORTA.5 Declare LCD_ENPin PORTA.4 Declare LCD_Interface 4 определяют куда подключен дисплей, т.е. пины и указывают на 4-х проводный дата интерфейс. Кстати у вас ЛСД подключен по умолчанию к порту "В", а к какой половине посмотрите по схеме. Код Declare LCD_Lines 2 Declare LCD_CommandUs 2000 Declare LCD_DataUs 50 Дисплей двухстрочный, между командами 2 милисекунды, между битами 50 микросек.
Больше у вас ничего не вижу, а есть еще команды управления типа Print $FE, 128 - курсор в первую позицию первую строку. по аналогии из доки на ваш дисплей на стр 28 в пункте 10. Instruction Table в графе Function Set (инструкции) собираем байт =2А (описан на 41,42 стр. доки на дисплей). Так вот FE = команда и устанавливает пины RS R/WB в состояние 00, затем команда. Итак Print $FE, 2А перед выводом инфы должны победить.А для этого надо читать доку.
Кстати у вас в библиотеках есть файл Hitachi.inc - он на С, но понять можно = файл компилятора для работы с этими дисплеями. Его тоже можно корректировать при необходимости. Если интересен виндовый поиск поможет найти.
Сообщение отредактировал
anatol - Вт, 03.12.2013, 22:41
|
|
|
|
|
Володимир |
Дата: Чт, 12.12.2013, 17:45 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
92
Замечания:
±
На сайте с 22.04.2010
Статус:
Offline
|
Цитата anatol (  ) Кстати у вас ЛСД подключен по умолчанию к порту "В", а к какой половине посмотрите по схеме. LCD подключон не по умолчанию, а к порту А, Declare LCD_DTPin PORTA.0
Кстати, команда Print $FE, 2А помогла, за что большое спасибо. Сейчас код виглядит так:
Declare LCD_Type = 0 Declare LCD_DTPin PORTA.0 Declare LCD_RSPin PORTA.5 Declare LCD_ENPin PORTA.4 Declare LCD_Interface 4 Declare LCD_Lines 2 Declare LCD_CommandUs 2000 Declare LCD_DataUs 50
DelayMS 600 Print $FE, 2А
|
|
|
|
|
vladh |
Дата: Пн, 13.01.2014, 16:46 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
321
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Что то я так и не понял, как переключать страницы кодировок в OLED дисплеях типа вышеприведенного. Разжуйте пжст.
|
|
|
|
|
anatol |
Дата: Пн, 13.01.2014, 19:06 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
624
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
vladh, "типа" не проходит. может быть другой драйвер дисплея. В даташит однако.
|
|
|
|
|
vladh |
Дата: Вт, 14.01.2014, 16:11 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
321
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата anatol (  ) vladh, "типа" не проходит. Вчера так и не удалось дописать сообщение. Сайт валял дурака, поэтому отправил в "личку".
Добавлено (14.01.2014, 09:39) --------------------------------------------- Доброе утро, Анатолий. Я опять что-то не "догоняю". В файле помощи об этой команде сказано, что она должна выглядеть следующим образом Print Item, {Item...}. Здесь слово Print, как Вы говорите, команда-признак работы с ЖКИ. Идущий за этим словом параметр Item может быть константой, переменной, выражением, модификатором, илисписком строковых переменных. На мой взгляд это как-то размыто. Но далее есть список и описание используемых модификаторов (AT ypos (1 to n),xpos(1to n), BIN{1..32}...), который достаточно четко описывает выполняемые функции. Если же не был использован ни один из приведенных модификаторов, то формат команды должен быть следующим: PRINT $FE , N. В такой записи это будет означать, что в контроллер ЖКИ будет послан код - N. Список и значения этих кодов приведены в таблице: 1 - Очистить экран 2 - Вернутся «домой» (идти на первую строку) $0C - Отключить курсор $0E - Курсор в виде подчеркивания $0F - Мерцающий курсор $10 - Переместить курсор на одну позицию влево $14 - Переместить курсор на одну позицию вправо $C0 - Переместить курсор к началу второй строки $94 - Переместить курсор к началу третьей строки $D4 - Переместить курсор к началу четвертой строки Но я нигде в этой таблице не нахожу перехода на другую страницу знакогенератора ЖКИ?Добавлено (14.01.2014, 16:11) --------------------------------------------- Да, вот попробовал ввести строку Print $FE, $2А и действительно произошло переключение. Стала выводится кириллица. Но откуда взялась $2А не пойму?
Сообщение отредактировал
vladh - Вт, 14.01.2014, 09:43
|
|
|
|
|
anatol |
Дата: Вт, 14.01.2014, 19:50 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
624
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
В сообщении 1 этой темы есть ссылка на даташиты, откуда я по адресу http://www.datasheet4u.com/download.php?id=746251 скачал PDF файл. В нем на страницах 24-27 приведены кодовые таблицы, в частности англо-русска на стр. 26. Вверху таблиц написано ENGLISH_RUSSIAN CHARACTER FONT TABLE(FT[1:0]=10) (выделил и подчекнул я). Где FT = FONT TABLE (по русски страница шрифтов), а [1:0]=10 - значения нулевого и первого разряда вданных команды (настройки дисплея). На стр. 28 приведена таблица инструкций 10. Instruction Table Я выделил строку нужной инструкции. Остальное набирается исходя сколько строк у дисплея (Sets number of display lines (N)), сколько разрядов (4 или 8) соединено по шине данных (Sets interface data length (DL)), какое знакоместо у шрифта (Sets Character Font (F)). 0 - 0 - 1- DL- N - F - FT1 - FT0 ___Это байт инструкции 0 0 1 0 1 0 1 0 ___ значение = 2А что говорит на стр 36 и стр 42 14. F=Character Pattern Mode - F="1": 5 x 10 dots - F="0": 5 x 8 dots (пять на восемь точек) 15. N=Number of Lines Displayed - N="1": 2 -Line Display (двухстрочный дисплей) DL: INTERFACE DATA LENGTH CONTROL BIT This is used to set the interface data length. When DL is set to "1", the data is sent or received in 8-bit length via the DB0 to DB7 (for an 8-Bit Data Transfer). When DL is set to "0", the data is sent or received in 4-bit length via DB4 to DB7 (for a 4-Bit Data Transfer). When the 4-bit data length is selected, the data must be sent or received twice. (четырех битная шина данных передачи)
Какой у тебя дисплей не знаю, так как молчишь как партизан. Разберешься с этим и свой поймешь.
Сообщение отредактировал
anatol - Вт, 14.01.2014, 19:53
|
|
|
|
|
vladh |
Дата: Ср, 15.01.2014, 09:35 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
321
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Спасибо, anatol за достаточно подробный ответ. Я думаю, что он очень пригодится для многих кто будет осваивать OLED дисплеи. Индикатор у меня другой - WEH002004, но по сути одно и тоже. Почему то я считал, что эти управляющие коды прописаны только в ПРОТОНЕ, а оказывается эти коды нужно брать из заложенных в индикатор. В общем еще раз огромное спасибо.
|
|
|
|
|
555serg |
Дата: Пн, 09.05.2016, 11:28 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
68
Замечания:
±
На сайте с 12.12.2011
Статус:
Offline
|
Доброго дня участникам форума. Так же как и у автора темы возникла необходимость выводить русский текст на OLED индикатор WEH001602A. Сделал все как рекомендовали выше, вставил команду PRINT $FE, 2A. Русский текст печатается неправильно ( крокозябрами ). Попробовал вывести надпись на русском с помощью надстройки ProtonHeaderMaker, ( команду PRINT $FE, 2A - оставил ), так же получились крокозябры, хотя английские буквы выводятся правильно. Кто может натолкнуть на правильную мысль? Заранее спасибо. Всех с прошедшим Днем Радио. И с наступившем Днем Победы!
Сообщение отредактировал
555serg - Пн, 09.05.2016, 18:09
|
|
|
|
|
xvovanx |
Дата: Вт, 10.05.2016, 00:09 | Сообщение # 12 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
437
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата 555serg (  ) Попробовал вывести надпись на русском ... команду PRINT $FE, 2A - оставил ... получились крокозябры.... Кто может натолкнуть на правильную мысль? 1.проверьте по даташиту-есть ли русская кирилица в вашем дисплее. 2.проверьте по даташиту-номер таблицы с нужной вам кирилицей и исходные данные дисплея. Быть может писать надо будет в Вашем случае уже не 2A, а совсем другое значение по методике, что "разжевал" уважаемый Anatol
Сообщение отредактировал
xvovanx - Вт, 10.05.2016, 00:16
|
|
|
|
|
555serg |
Дата: Вт, 10.05.2016, 17:45 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
68
Замечания:
±
На сайте с 12.12.2011
Статус:
Offline
|
Спасибо Вова , если я не ошибаюсь, что откликнулись помочь. Бегло проверил даташиты на мой WEH001602A, и на авторский WEH000802 индикаторы. Это индикаторы одной линейки, и система команд у них одинаковая, единственные отличия, - конструктивные. Выбор страницы нужного набора шрифтов для моего индикатора совпадает с авторским значением 2A. Дальнейшее разбирательство перешло к самой программе, в результате была обнаружена синтаксическая ошибка, - куда уж без них.))) Перед шестнадцатеричным значением бинарного слова установки не было признака подтверждения того что для протона мы предоставляем число в шестнадцатеричном формате. Переписал правильно - $2A, все заработало. -------------------------------------------------------------------------------------------------------------------------------------- Попутно возник вопрос, если кто в курсе - просветите. Так как в своей программе собираюсь использовать прерывания, то очень хотелось бы знать, какое время будет занимать вывод на индикатор одной строки на 16 знакомест. Тактовая частота 4 МГц, четырех битный интерфейс, Declare LCD_CommandUs 2000, Declare LCD_DataUs 50. И как на будущее прикинуть, хоть примерно, время вывода на индикатор полностью всех знакомест 2Х16 ? Заранее спасибо.
Сообщение отредактировал
555serg - Вт, 10.05.2016, 19:35
|
|
|
|
|
mikhail09p |
Дата: Вт, 10.05.2016, 21:29 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
530
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
В Протеусе посмотрите время вывода. Точно определите. И вопрос - почему в связи с прерываниями Вас интересует вопрос продолжительности вывода информации на индикатор? Меня это ни разу не волновало в конструкциях с отсчётом времени и индикаторами любыми...
Сообщение отредактировал
mikhail09p - Вт, 10.05.2016, 21:33
|
|
|
|
|
555serg |
Дата: Ср, 11.05.2016, 00:35 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
68
Замечания:
±
На сайте с 12.12.2011
Статус:
Offline
|
Mikhail09p, все очень просто. Допустим, мне нужно будет привязаться к часам реального времени, и я конечно же временные интервалы буду отсчитывать по одному из таймеров через прерывание. Возможна ситуация когда микроконтроллер, занят отправкой информации на OLED дисплей, он еще не закончил, а прерывание наступило и откладывается. Таких отложенных ( просроченных ) прерываний за секунду или минуту может накопиться не мало, и о точности часов уже не может быть и речи. Конечно можно использовать специально предназначенную для таких целей какую нибудь микросхему по типу DSхххх со своим часовым кварцем, но грамотно написанная прога должна справляться с такими задачами сама. Это все го лишь пример. Реально я собираюсь применять динамическую индикацию, и анти дребезговую подпрограмму опроса кнопок. И мне необходимо знать наихудший сценарий, т.е. наибольшее время затрачиваемое контроллером на работу по выводу индикации. Протеусом к сожалению не пользуюсь - не нравиться синтетика, хотя вот жалею.))) Все свои конструкции собираю в железе, и уже на нем идет отладка и подгонка. Может быть вам не составит труда забить простейшую прогу в Протеус по выводу двух строк на 16 знакомест, и сможете увидеть время занимаемое этим процессом? Буду Вам очень признателен, заранее спасибо.) Если нужно, такую мини прогу выложу здесь, но уверен что Вы с этим легко справитесь.
Сообщение отредактировал
555serg - Ср, 11.05.2016, 00:45
|
|
|
|