Переключение кодовых страниц в ОЛЕД-дисплее
|
|
vladh |
Дата: Вт, 20.11.2018, 14:33 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Добрый день, уважаемые. У меня имеется OLED дисплей типа WEH002004. В обычном состоянии он нормально выводит латиницу, а для того чтобы он начал выводить кириллицу необходимо перейти на другую кодовую страницу. В Protone это делается так, посылается команда: Print $FE, $2A. все, дальше можно как обычно посылать криллистические тексты соответствующим образом конвертированные. А как послать такую команду в Микробейсике? Может кто знает, подскажите пожалуйста.
|
|
|
|
ivan_fd |
Дата: Вт, 20.11.2018, 16:36 | Сообщение # 2 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
891
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Так попробуйте
|
|
|
|
vladh |
Дата: Вт, 20.11.2018, 16:55 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата ivan_fd (  ) Так попробуйте Попробовал. Не получилось. А вообще, интересно, откуда Вы взяли то, что можно с помощью Lcd_Cmd можно передавать не только предлагаемые компилятором словосочетания? Вроде в хелпе этого нет. Хотя при компиляции программа не ругается.
|
|
|
|
ivan_fd |
Дата: Вт, 20.11.2018, 17:48 | Сообщение # 4 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
891
Замечания:
±
На сайте с 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 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
891
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Посмотрите в протеусе, что он шлет. Может тут дело в 4 битном режиме.
|
|
|
|
vladh |
Дата: Ср, 21.11.2018, 09:40 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата ivan_fd (  ) Так попробуйте Доброе утро, Иван. Сегодня с утра вновь стал разбираться и выявил следующее. Оказалось, что в живом индикаторе текст располагается справа налево, т.е. если я указываю 1 строка и 5 колонка текст размещается от этой начальной точки влево! Почему? Так вот после этой находки я вновь попробовал ввести Вашу команду, то увидел, что да, появились русские буквы, но справа налево. Вы Иван большая умница. В который раз Вы мне здорово помогаете! Огромное Вам спасибо. Но я так и не понял, откуда Вы узнали, что можно вводить не только те команды, которые описаны в ХЕЛПЕ, но и команды, которые обозначаются кодами? И еще. Почему в одной и той же модели в Протеусе если вставить код написанный в протоне и код написанный в микробейсике выводятся (на экран ЖКИ) одинаково, а на реальном индикатоле по разному?
|
|
|
|
ivan_fd |
Дата: Ср, 21.11.2018, 10:38 | Сообщение # 7 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
891
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата ivan_fd (  ) А вот это непонял, поподробнее опишите. Я в Протеусе нарисовал схему, состоящую из МК - 18F4458, ЖКИ - LM044L и клавиатуры - KEYPAD-PHONE. В одном случае я запускаю на симуляцию эту схему указав в свойствах МК файл *.bas созданный в Протоне, в другом случае файл *.cof созданный в МБ. В Протеусе все работает правильно и в первом и во втором случае. В живой схеме я загружаю *hex файлы созданные этими компиляторами. В случае с Протоном все работает как и в Протеусе, в случае МБ тексты пишутся по арабски, т.е. слева направо.
|
|
|
|
ivan_fd |
Дата: Ср, 21.11.2018, 11:13 | Сообщение # 9 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
891
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 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 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
891
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата ivan_fd (  ) Это что за счетчик? Иван, я так и не понял, что это за счетчик. А он похоже Важен. Я оставил только три команды. Это загрузка русской страницы, переключение счетчика (0Х06) и выключение курсора (0x0C) и все работает как надо. Кстати, если эту последнюю команду убрать, то всё что надо светится но есть немного шума в виде курсора.Добавлено (21.11.2018, 13:30) ---------------------------------------------
Цитата ivan_fd (  ) В даташите на дисплей. А я как в том случае "смотришь в книгу - видишь фигу".
|
|
|
|
ivan_fd |
Дата: Ср, 21.11.2018, 15:04 | Сообщение # 13 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
891
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата ivan_fd (  ) Это я так понимаю, может и не прав Да, я уже тоже где то так подумал. Счетчик, который занимается размещение очередных строковых переменных если их адрес явно не указан. Мне, конечно, в мои 66 лет и без знания ихнего языка тяжело это сообразить. Но хорошо что есть рядом толковые и отзывчивые люди. Спасибо.
|
|
|
|