Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: terrarus  
Форум Picbasic.ru » Программирование МК » Mikrobasic » Переключение кодовых страниц в ОЛЕД-дисплее
Переключение кодовых страниц в ОЛЕД-дисплее
vladh Дата: Вт, 20.11.2018, 14:33  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 263
Репутация: 8   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Добрый день, уважаемые. У меня имеется OLED дисплей типа WEH002004. В обычном состоянии он нормально выводит латиницу, а для того чтобы он начал выводить кириллицу необходимо перейти на другую кодовую страницу. В Protone это делается так, посылается команда: Print $FE, $2A. все, дальше можно как обычно посылать криллистические тексты соответствующим образом конвертированные. А как послать такую команду в Микробейсике? Может кто знает, подскажите пожалуйста.
ЯНДЕКС Дата: 20.11.2018
ivan_fd Дата: Вт, 20.11.2018, 16:36  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1019
Репутация: 83   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Так попробуйте

Код
Lcd_Cmd(0x2A)


Меня все время преследуют умные мысли...но я быстрее!!!
vladh Дата: Вт, 20.11.2018, 16:55  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 263
Репутация: 8   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ivan_fd ()
Так попробуйте
Попробовал. Не получилось. cry  А вообще, интересно, откуда Вы взяли то, что можно с помощью Lcd_Cmd можно передавать не только предлагаемые компилятором словосочетания? Вроде в хелпе этого нет. Хотя при компиляции программа не ругается.
ivan_fd Дата: Вт, 20.11.2018, 17:48  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1019
Репутация: 83   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Эти словосочетания, есть байтовые константы.
sub procedure Lcd_Cmd(dim out_char as byte)

Так же само в Протоне$FE - мы говорим что нужно передавать команду, а далее саму команду FUNCTION SET INSTRUCTION.
Где первые два бита есть выбор страницы символов
Цитата
FT1, FT0:
FONT TABLE SELECTION
These two bits are used to select one font table ou
t of the three for further process.
When (FT1, FT0) = (0, 0), the ENGLISH_JAPANESE CHARACTER FONT TABLE will be selected.
(FT1, FT0) = (0, 1), the WESTERN EUROPEAN CHARACTER FONT TABLE will be selected.
(FT1, FT0) = (1, 0), the ENGLISH_RUSSIAN CHARACTER FONT TABLE will be selected.
(FT1, FT0) = (1, 1), N/A

Хотя может они и отрубили все кроме ихних команд.
Тогда писать все самому.


Меня все время преследуют умные мысли...но я быстрее!!!
ivan_fd Дата: Вт, 20.11.2018, 17:53  |                                                                                                                Сообщение # 5
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1019
Репутация: 83   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Посмотрите в протеусе, что он шлет. Может тут дело в 4 битном режиме.

Меня все время преследуют умные мысли...но я быстрее!!!
vladh Дата: Ср, 21.11.2018, 09:40  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 263
Репутация: 8   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ivan_fd ()
Так попробуйте
Доброе утро, Иван. Сегодня с утра вновь стал разбираться и выявил следующее. Оказалось, что в живом индикаторе текст располагается справа налево, т.е. если я указываю 1 строка и 5 колонка текст размещается от этой начальной точки влево! Почему? Так вот после этой находки я вновь попробовал ввести Вашу команду, то увидел, что да, появились русские буквы, но справа налево. Вы Иван большая умница. В который раз Вы мне здорово помогаете! Огромное Вам спасибо. 
Но я так и не понял, откуда Вы узнали, что можно вводить не только те команды, которые описаны в ХЕЛПЕ, но и команды, которые обозначаются кодами? И еще. Почему в одной и той же модели в Протеусе если вставить код написанный в протоне и код написанный в микробейсике выводятся (на экран ЖКИ) одинаково, а на реальном индикатоле по разному?
ivan_fd Дата: Ср, 21.11.2018, 10:38  |                                                                                                                Сообщение # 7
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1019
Репутация: 83   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Цитата vladh ()
т.е. если я указываю 1 строка и 5 колонка текст размещается от этой начальной точки влево! Почему?
Тут, я так думаю, что команды MikroBasic заточены именно под HD44780, а в Вашем дисплее другой контроллер. Хотя они очень похожи. Если я правильно понял, сдвиг идет не вперед, а назад. Может посмотреть в сторону регистра ENTRY MODE SET INSTRUCTION бит I/D.
А в Протоне нормально выводит?

Цитата vladh ()
Но я так и не понял, откуда Вы узнали, что можно вводить не только те команды, которые описаны в ХЕЛПЕ, но и команды, которые обозначаются кодами?

Если размышлять логически, то команды LCD MikroBasic (они же константы) прописаны в ихних библиотеках так, например:

_LCD_CLEAR = %00000001
_LCD_RETURN_HOME = %00000010

Так, что нам мешает прописать там свое?

Цитата vladh ()
И еще. Почему в одной и той же модели в Протеусе если вставить код написанный в протоне и код написанный в микробейсике выводятся (на экран ЖКИ) одинаково, а на реальном индикатоле по разному?

А вот это не понял, поподробнее опишите.


Меня все время преследуют умные мысли...но я быстрее!!!
Сообщение отредактировал ivan_fd - Ср, 21.11.2018, 10:40
vladh Дата: Ср, 21.11.2018, 10:51  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 263
Репутация: 8   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ivan_fd ()
А вот это непонял, поподробнее опишите.
Я в Протеусе нарисовал схему, состоящую из МК - 18F4458, ЖКИ - LM044L и клавиатуры - KEYPAD-PHONE. В одном случае я запускаю на симуляцию эту схему указав в свойствах МК файл *.bas созданный в Протоне, в другом случае файл *.cof созданный в МБ. В Протеусе все работает правильно и в первом и во втором случае. В живой схеме я загружаю *hex файлы созданные этими компиляторами. В случае с Протоном все работает как и в Протеусе, в случае МБ тексты пишутся по арабски, т.е. слева направо.
ivan_fd Дата: Ср, 21.11.2018, 11:13  |                                                                                                                Сообщение # 9
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1019
Репутация: 83   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Попробуйте написать такую инициализацию.
Lcd_Init()
потом---
Delay_ms(50)
Lcd_Cmd(0x2A) - Function Set Наши русские символы...
Delay_us(5000)
Lcd_Cmd(0x08) - Display On/Off control - дисплей отключен, курсор отключен, мигание курсора отключено
Lcd_Cmd(0x06) - ENTRY MODE SET INSTRUCTION - увеличиваем счетчик на 1, без сдвига экрана(это тот сдвиг, что вы спрашивали)
Lcd_Cmd(0x17) - CURSOR/DISPLAY SHIFT INSTRUCTION -
Lcd_Cmd(0x01) - CLEAR DISPLAY INSTRUCTION - очищаем дисплей, то же самое, что и Lcd_Cmd(_LCD_CLEAR )
Lcd_Cmd(0x02) - RETURN HOME INSTRUCTION
Lcd_Cmd(0x0C) - Display On/Off control - дисплей включен, курсор отключен, мигание курсора отключено
Delay_us(5000)


Меня все время преследуют умные мысли...но я быстрее!!!
vladh Дата: Ср, 21.11.2018, 11:52  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 263
Репутация: 8   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ivan_fd ()
Попробуйте написать такую инициализацию
Мысли, которые Вас все время преследуют все таки успевают Вас догонять. Молодчина. Случилось. Заработало.
А растолковать попробуете?
1. Зачем задержки? В примерах МБ их почти нет.
2. Для чего в 4 строке отключаете всё?
3. Это что за счетчик?
4. Что это за команда - CURSOR/DISPLAY SHIFT INSTRUCTION?

Добавлено (21.11.2018, 12:31)
---------------------------------------------
Да, и ещё один вопрос: Где Вы взяли коды команд?

ivan_fd Дата: Ср, 21.11.2018, 12:55  |                                                                                                                Сообщение # 11
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1019
Репутация: 83   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

В примерах МБ их нету, потому, что он заточен под контроллер HD44780.
Сначала мы делаем ихнюю инициализацию Lcd_Init() - она инициализирует дисплей под 4-х битный режим, и все, что там нужно.
Далее мы делаем свою, так сказать, до-инициализацию. Там нужны задержки.

Цитата vladh ()
2. Для чего в 4 строке отключаете всё?

Можете убрать, это так на всякий случай, что бы мусор не лез.

Цитата vladh ()
3. Это что за счетчик?

I/D: режим смещения счетчика адреса, 1 - увеличение, 0 - уменьшение.

Цитата vladh ()
4. Что это за команда - CURSOR/DISPLAY SHIFT INSTRUCTION?

Эта инструкция используется для перемещения курсора или экрана.
Биты S/C и R/L.

S/C: 0 - сдвигается курсор. 1 - сдвигается экран.
R/L: направление сдвига. 0 - влево, 1 - вправо.
У нас прописано 01 - то есть курсор сдвигается вправо.

Цитата vladh ()
Да, и ещё один вопрос: Где Вы взяли коды команд?

В даташите на дисплей.


Меня все время преследуют умные мысли...но я быстрее!!!
Сообщение отредактировал ivan_fd - Ср, 21.11.2018, 12:57
vladh Дата: Ср, 21.11.2018, 13:29  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 263
Репутация: 8   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ivan_fd ()
Это что за счетчик?
Иван, я так и не понял, что это за счетчик. А он похоже Важен. Я оставил только три команды. Это загрузка русской страницы, переключение счетчика (0Х06) и выключение курсора (0x0C) и все работает как надо. Кстати, если эту последнюю команду убрать, то всё что надо светится но есть немного шума в виде курсора.

Добавлено (21.11.2018, 13:30)
---------------------------------------------

Цитата ivan_fd ()
В даташите на дисплей.
А я как в том случае "смотришь в книгу - видишь фигу".
ivan_fd Дата: Ср, 21.11.2018, 15:04  |                                                                                                                Сообщение # 13
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1019
Репутация: 83   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Цитата vladh ()
Иван, я так и не понял, что это за счетчик.

Ну как бы это сказать, как я понимаю, может я не правильно выражаюсь. Это не сам счетчик, а режим для смещения адреса счетчика. В даташите на дисплей WEH002004ALPP5N00000.pdf страница 38, регистр ENTRY MODE SET INSTRUCTION
Биты I/D и S. Настраиваются в паре:
I/D: режим смещения счетчика адреса, 1 - увеличение, 0 - уменьшение.
S: флаг сдвига содержимого экрана. 0 - сдвиг экрана не производится. 1 - после записи в DDRAM кода символа экран сдвигается в направлении определенном битом I/D. 1 - сдвигается влево, 0 - вправо.
То есть настраиваем как будут поводить себя указатели на адреса. Например, в нашем случае, с нашими настройками, где I/D равен 1, а S равен 0, сам экран мы не двигаем, а сдвигаем, в сторону увеличения, указатель где выводить следующий символ. Это я так понимаю, может и не прав.


Меня все время преследуют умные мысли...но я быстрее!!!
vladh Дата: Ср, 21.11.2018, 15:23  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 263
Репутация: 8   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ivan_fd ()
Это я так понимаю, может и не прав
Да, я уже тоже где то так подумал. Счетчик, который занимается размещение очередных строковых переменных если их адрес явно не указан. Мне, конечно, в мои 66 лет и без знания ихнего языка тяжело это сообразить. Но хорошо что есть рядом толковые и отзывчивые люди. Спасибо.
Форум Picbasic.ru » Программирование МК » Mikrobasic » Переключение кодовых страниц в ОЛЕД-дисплее
  • Страница 1 из 1
  • 1
Поиск: